mirror of
https://git.mirrors.martin98.com/https://github.com/sub-store-org/Sub-Store.git
synced 2026-04-07 10:53:17 +08:00
refactor: Migrate to API v2
- Added auto schema migration - Refactored /api/subs, /api/collections, /api/artifacts. Now these APIs will return array instead of object. This enables sorting items in the future.
This commit is contained in:
@@ -3,13 +3,15 @@ import {
|
||||
InternalServerError,
|
||||
ResourceNotFoundError,
|
||||
} from './errors';
|
||||
import { SUBS_KEY, COLLECTIONS_KEY } from './constants';
|
||||
import { deleteByName, findByName, updateByName } from '@/utils/database';
|
||||
import { SUBS_KEY, COLLECTIONS_KEY } from '@/constants';
|
||||
import { getFlowHeaders } from '@/utils/flow';
|
||||
import { success, failed } from './response';
|
||||
import $ from '@/core/app';
|
||||
|
||||
if (!$.read(SUBS_KEY)) $.write({}, SUBS_KEY);
|
||||
|
||||
export default function register($app) {
|
||||
if (!$.read(SUBS_KEY)) $.write({}, SUBS_KEY);
|
||||
$app.get('/api/sub/flow/:name', getFlowInfo);
|
||||
|
||||
$app.route('/api/sub/:name')
|
||||
@@ -24,8 +26,8 @@ export default function register($app) {
|
||||
async function getFlowInfo(req, res) {
|
||||
let { name } = req.params;
|
||||
name = decodeURIComponent(name);
|
||||
const sub = $.read(SUBS_KEY)[name];
|
||||
|
||||
const allSubs = $.read(SUBS_KEY);
|
||||
const sub = findByName(allSubs, name);
|
||||
if (!sub) {
|
||||
failed(
|
||||
res,
|
||||
@@ -71,31 +73,26 @@ async function getFlowInfo(req, res) {
|
||||
|
||||
function createSubscription(req, res) {
|
||||
const sub = req.body;
|
||||
const allSubs = $.read(SUBS_KEY);
|
||||
$.info(`正在创建订阅: ${sub.name}`);
|
||||
if (allSubs[sub.name]) {
|
||||
const allSubs = $.read(SUBS_KEY);
|
||||
if (findByName(allSubs, sub.name)) {
|
||||
res.status(500).json({
|
||||
status: 'failed',
|
||||
message: `订阅${sub.name}已存在!`,
|
||||
});
|
||||
}
|
||||
allSubs[sub.name] = sub;
|
||||
allSubs.push(sub);
|
||||
$.write(allSubs, SUBS_KEY);
|
||||
res.status(201).json({
|
||||
status: 'success',
|
||||
data: sub,
|
||||
});
|
||||
success(res, sub, 201);
|
||||
}
|
||||
|
||||
function getSubscription(req, res) {
|
||||
let { name } = req.params;
|
||||
name = decodeURIComponent(name);
|
||||
const sub = $.read(SUBS_KEY)[name];
|
||||
const allSubs = $.read(SUBS_KEY);
|
||||
const sub = findByName(allSubs, name);
|
||||
if (sub) {
|
||||
res.json({
|
||||
status: 'success',
|
||||
data: sub,
|
||||
});
|
||||
success(res, sub);
|
||||
} else {
|
||||
res.status(404).json({
|
||||
status: 'failed',
|
||||
@@ -106,12 +103,13 @@ function getSubscription(req, res) {
|
||||
|
||||
function updateSubscription(req, res) {
|
||||
let { name } = req.params;
|
||||
name = decodeURIComponent(name);
|
||||
name = decodeURIComponent(name); // the original name
|
||||
let sub = req.body;
|
||||
const allSubs = $.read(SUBS_KEY);
|
||||
if (allSubs[name]) {
|
||||
const oldSub = findByName(allSubs, name);
|
||||
if (oldSub) {
|
||||
const newSub = {
|
||||
...allSubs[name],
|
||||
...oldSub,
|
||||
...sub,
|
||||
};
|
||||
$.info(`正在更新订阅: ${name}`);
|
||||
@@ -119,23 +117,16 @@ function updateSubscription(req, res) {
|
||||
if (name !== sub.name) {
|
||||
// we need to find out all collections refer to this name
|
||||
const allCols = $.read(COLLECTIONS_KEY);
|
||||
for (const k of Object.keys(allCols)) {
|
||||
const idx = allCols[k].subscriptions.indexOf(name);
|
||||
for (const collection of allCols) {
|
||||
const idx = collection.subscriptions.indexOf(name);
|
||||
if (idx !== -1) {
|
||||
allCols[k].subscriptions[idx] = sub.name;
|
||||
collection.subscriptions[idx] = sub.name;
|
||||
}
|
||||
}
|
||||
// update subscriptions
|
||||
delete allSubs[name];
|
||||
allSubs[sub.name] = newSub;
|
||||
} else {
|
||||
allSubs[name] = newSub;
|
||||
}
|
||||
updateByName(allSubs, name, newSub);
|
||||
$.write(allSubs, SUBS_KEY);
|
||||
res.json({
|
||||
status: 'success',
|
||||
data: newSub,
|
||||
});
|
||||
success(res, newSub);
|
||||
} else {
|
||||
res.status(500).json({
|
||||
status: 'failed',
|
||||
@@ -150,25 +141,20 @@ function deleteSubscription(req, res) {
|
||||
$.info(`删除订阅:${name}...`);
|
||||
// delete from subscriptions
|
||||
let allSubs = $.read(SUBS_KEY);
|
||||
delete allSubs[name];
|
||||
deleteByName(allSubs, name);
|
||||
$.write(allSubs, SUBS_KEY);
|
||||
// delete from collections
|
||||
let allCols = $.read(COLLECTIONS_KEY);
|
||||
for (const k of Object.keys(allCols)) {
|
||||
allCols[k].subscriptions = allCols[k].subscriptions.filter(
|
||||
const allCols = $.read(COLLECTIONS_KEY);
|
||||
for (const collection of allCols) {
|
||||
collection.subscriptions = collection.subscriptions.filter(
|
||||
(s) => s !== name,
|
||||
);
|
||||
}
|
||||
$.write(allCols, COLLECTIONS_KEY);
|
||||
res.json({
|
||||
status: 'success',
|
||||
});
|
||||
success(res);
|
||||
}
|
||||
|
||||
function getAllSubscriptions(req, res) {
|
||||
const allSubs = $.read(SUBS_KEY);
|
||||
res.json({
|
||||
status: 'success',
|
||||
data: allSubs,
|
||||
});
|
||||
success(res, allSubs);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user