diff --git a/backend/src/module/api/bangumi.py b/backend/src/module/api/bangumi.py index 45a7fe47..df18c687 100644 --- a/backend/src/module/api/bangumi.py +++ b/backend/src/module/api/bangumi.py @@ -10,6 +10,12 @@ from module.security.api import get_current_user, UNAUTHORIZED router = APIRouter(prefix="/bangumi", tags=["bangumi"]) +def str_to_list(data: Bangumi): + data.filter = data.filter.split(",") + data.rss_link = data.rss_link.split(",") + return data + + @router.get("/get/all", response_model=list[Bangumi]) async def get_all_data(current_user=Depends(get_current_user)): if not current_user: diff --git a/backend/src/module/api/response.py b/backend/src/module/api/response.py index 5e090e52..332d91ee 100644 --- a/backend/src/module/api/response.py +++ b/backend/src/module/api/response.py @@ -5,21 +5,11 @@ from module.models.response import ResponseModel def u_response(response_model: ResponseModel): - if response_model.status: - return JSONResponse( - status_code=response_model.status_code, - content={ - "status": response_model.status, - "msg_en": response_model.msg_en, - "msg_zh": response_model.msg_zh, - }, - ) - else: - raise HTTPException( - status_code=response_model.status_code, - detail={ - "status": response_model.status, - "msg_en": response_model.msg_en, - "msg_zh": response_model.msg_zh, - }, - ) \ No newline at end of file + return JSONResponse( + status_code=response_model.status_code, + content={ + "status": response_model.status, + "msg_en": response_model.msg_en, + "msg_zh": response_model.msg_zh, + }, + ) \ No newline at end of file diff --git a/backend/src/module/rss/engine.py b/backend/src/module/rss/engine.py index 621f3eba..45cf9658 100644 --- a/backend/src/module/rss/engine.py +++ b/backend/src/module/rss/engine.py @@ -47,7 +47,7 @@ class RSSEngine(Database): else: return ResponseModel( status=False, - status_code=400, + status_code=406, msg_en="RSS added failed.", msg_zh="RSS 添加失败。", ) diff --git a/webui/src/api/bangumi.ts b/webui/src/api/bangumi.ts index 56945a4d..e4e99a3d 100644 --- a/webui/src/api/bangumi.ts +++ b/webui/src/api/bangumi.ts @@ -1,5 +1,7 @@ import type { BangumiRule, BangumiUpdate } from '#/bangumi'; -import type { ApiResponse } from '#/api'; +import type { ApiSuccess } from '#/api'; +import {forEach} from "lodash"; + export const apiBangumi = { /** @@ -8,7 +10,10 @@ export const apiBangumi = { */ async getAll() { const { data } = await axios.get('api/v1/bangumi/get/all'); - + forEach(data, (item) => { + item.rss_link = item.rss_link.split(','); + item.filter = item.filter.split(','); + }); return data; }, @@ -21,7 +26,8 @@ export const apiBangumi = { const { data } = await axios.get( `api/v1/bangumi/get/${bangumiId}` ); - + data.rss_link = data.rss_link.split(','); + data.filter = data.filter.split(','); return data; }, @@ -33,8 +39,9 @@ export const apiBangumi = { */ async updateRule(bangumiId: number, bangumiRule: BangumiRule) { const rule = omit(bangumiRule, ['id']); - - const { data } = await axios.patch< ApiResponse >( + rule.rss_link = rule.rss_link.join(','); + rule.filter = rule.filter.join(','); + const { data } = await axios.patch< ApiSuccess >( `api/v1/bangumi/update/${bangumiId}`, rule ); @@ -58,7 +65,7 @@ export const apiBangumi = { ids = bangumiId; } - const { data } = await axios.delete< ApiResponse >(url, { + const { data } = await axios.delete< ApiSuccess >(url, { data: ids, params: { file, @@ -84,7 +91,7 @@ export const apiBangumi = { ids = bangumiId; } - const { data } = await axios.delete< ApiResponse >(url, { + const { data } = await axios.delete< ApiSuccess >(url, { data: ids, params: { file, @@ -98,7 +105,7 @@ export const apiBangumi = { * @param bangumiId - 需要启用的 bangumi 的 id */ async enableRule(bangumiId: number) { - const { data } = await axios.get< ApiResponse >( + const { data } = await axios.get< ApiSuccess >( `api/v1/bangumi/enable/${bangumiId}` ); return data; @@ -108,7 +115,7 @@ export const apiBangumi = { * 重置所有 bangumi 数据 */ async resetAll() { - const { data } = await axios.get< ApiResponse >('api/v1/bangumi/resetAll'); + const { data } = await axios.get< ApiSuccess >('api/v1/bangumi/resetAll'); return data; }, }; diff --git a/webui/src/api/config.ts b/webui/src/api/config.ts index da5530bc..4fa5d6b1 100644 --- a/webui/src/api/config.ts +++ b/webui/src/api/config.ts @@ -1,5 +1,5 @@ import type { Config } from '#/config'; -import type { ApiResponse } from '#/api'; +import type { ApiSuccess } from '#/api'; export const apiConfig = { /** @@ -15,7 +15,7 @@ export const apiConfig = { * @param newConfig - 需要更新的 config */ async updateConfig(newConfig: Config) { - const { data } = await axios.patch( + const { data } = await axios.patch( 'api/v1/config/update', newConfig ); diff --git a/webui/src/api/download.ts b/webui/src/api/download.ts index ea0e0a95..2aec1206 100644 --- a/webui/src/api/download.ts +++ b/webui/src/api/download.ts @@ -1,9 +1,5 @@ import type { BangumiRule } from '#/bangumi'; -import type { ApiResponse } from '#/api'; - -interface Status { - status: 'Success'; -} +import type { ApiSuccess } from '#/api'; export const apiDownload = { /** @@ -31,7 +27,7 @@ export const apiDownload = { * @param bangumiData - Bangumi 数据 */ async collection(bangumiData: BangumiRule) { - const { data } = await axios.post< ApiResponse >( + const { data } = await axios.post( 'api/v1/download/collection', bangumiData ); @@ -43,7 +39,7 @@ export const apiDownload = { * @param bangumiData - Bangumi 数据 */ async subscribe(bangumiData: BangumiRule) { - const { data } = await axios.post< ApiResponse >( + const { data } = await axios.post( 'api/v1/download/subscribe', bangumiData ); diff --git a/webui/src/api/log.ts b/webui/src/api/log.ts index faa3ce2c..b7492153 100644 --- a/webui/src/api/log.ts +++ b/webui/src/api/log.ts @@ -1,4 +1,4 @@ -import type { ApiResponse } from "#/api"; +import type { ApiSuccess } from "#/api"; export const apiLog = { async getLog() { @@ -7,7 +7,7 @@ export const apiLog = { }, async clearLog() { - const { data } = await axios.get('api/v1/log/clear'); + const { data } = await axios.get('api/v1/log/clear'); return data; }, }; diff --git a/webui/src/api/program.ts b/webui/src/api/program.ts index bcde388e..d8ce5f0b 100644 --- a/webui/src/api/program.ts +++ b/webui/src/api/program.ts @@ -1,4 +1,4 @@ -import type { ApiResponse } from "#/api"; +import type { ApiSuccess } from "#/api"; export const apiProgram = { @@ -6,7 +6,7 @@ export const apiProgram = { * 重启 */ async restart() { - const { data } = await axios.get< ApiResponse >('api/v1/restart'); + const { data } = await axios.get('api/v1/restart'); return data; }, @@ -14,7 +14,7 @@ export const apiProgram = { * 启动 */ async start() { - const { data } = await axios.get< ApiResponse >('api/v1/start'); + const { data } = await axios.get('api/v1/start'); return data; }, @@ -22,7 +22,7 @@ export const apiProgram = { * 停止 */ async stop() { - const { data } = await axios.get< ApiResponse >('api/v1/stop'); + const { data } = await axios.get('api/v1/stop'); return data; }, @@ -41,7 +41,7 @@ export const apiProgram = { * 终止 */ async shutdown() { - const { data } = await axios.get< ApiResponse >('api/v1/shutdown'); + const { data } = await axios.get('api/v1/shutdown'); return data; }, }; diff --git a/webui/src/api/rss.ts b/webui/src/api/rss.ts index 976240d0..b196cc1c 100644 --- a/webui/src/api/rss.ts +++ b/webui/src/api/rss.ts @@ -1,6 +1,6 @@ import type { RSS } from '#/rss'; import type { Torrent } from '#/torrent'; -import type { ApiResponse } from '#/api'; +import type { ApiSuccess } from '#/api'; export const apiRSS = { async get() { @@ -9,27 +9,27 @@ export const apiRSS = { }, async add(rss: RSS) { - const { data } = await axios.post('api/v1/rss/add', rss); + const { data } = await axios.post('api/v1/rss/add', rss); return data; }, async delete(rss_id: number) { - const { data } = await axios.delete(`api/v1/rss/delete/${rss_id}`); + const { data } = await axios.delete(`api/v1/rss/delete/${rss_id}`); return data!; }, async update(rss_id: number, rss: RSS) { - const { data } = await axios.patch(`api/v1/rss/update/${rss_id}`, rss); + const { data } = await axios.patch(`api/v1/rss/update/${rss_id}`, rss); return data!; }, async refreshAll() { - const { data } = await axios.get('api/v1/rss/refresh/all'); + const { data } = await axios.get('api/v1/rss/refresh/all'); return data!; }, async refresh(rss_id: number) { - const { data } = await axios.get(`api/v1/rss/refresh/${rss_id}`); + const { data } = await axios.get(`api/v1/rss/refresh/${rss_id}`); return data!; }, diff --git a/webui/src/components/ab-add-bangumi.vue b/webui/src/components/ab-add-bangumi.vue index 174905db..7c6668c8 100644 --- a/webui/src/components/ab-add-bangumi.vue +++ b/webui/src/components/ab-add-bangumi.vue @@ -5,6 +5,7 @@ import type { RSS } from '#/rss'; import { rssTemplate } from '#/rss'; import { ruleTemplate } from '#/bangumi'; import { registerSW } from 'virtual:pwa-register'; +import type { ApiError } from "#/api"; /** v-model show */ const show = defineModel('show', { default: false }); @@ -44,19 +45,14 @@ async function addRss() { const data = await apiRSS.add(rss.value); analysis.loading = false; analysis.next = true; - if (data.status) { - message.success(data.msg_en); - show.value = false; - console.log('rss', data); - } else { - message.error(data.msg_en); - } - // TODO 这部分 WebUI 无法判断 406 错误无法跳出信息。 - // RSS API 添加正常。后端正常。 + message.success(data.msg_en); + show.value = false; + console.log('rss', data); } catch (error) { - const err = error as { status: string }; - message.error(err.status); - console.log('error', err); + const err = error as ApiError; + message.error(err.msg_en); + console.log('error', err.msg_en); + analysis.loading = false; } } else { try { @@ -68,9 +64,9 @@ async function addRss() { analysis.next = true; console.log('rule', data); } catch (error) { - const err = error as { status: string }; - message.error(err.status); - console.log('error', err); + const err = error as ApiError; + message.error(err.msg_en); + console.log('error', err.msg_en); } } } @@ -154,7 +150,7 @@ async function subscribe() { size="small" :loading="analysis.loading" @click="addRss" - >{{ $t('topbar.add.analyse') }}{{ $t('topbar.add.button') }} diff --git a/webui/src/hooks/useAuth.ts b/webui/src/hooks/useAuth.ts index a08a6a7d..e932872c 100644 --- a/webui/src/hooks/useAuth.ts +++ b/webui/src/hooks/useAuth.ts @@ -49,7 +49,7 @@ export const useAuth = createSharedComposable(() => { if (error.status === 404) { message.error('请更新AutoBangumi!'); } else { - message.error(error.detail); + message.error(error.msg_zh); } }); diff --git a/webui/src/i18n/en.json b/webui/src/i18n/en.json index dce909e6..25e8e31a 100644 --- a/webui/src/i18n/en.json +++ b/webui/src/i18n/en.json @@ -38,7 +38,7 @@ "parser": "Parser", "placeholder_link": "Please enter the RSS link", "placeholder_name": "Optional", - "analyse": "Analyse" + "button": "Add" } }, "homepage": { diff --git a/webui/src/i18n/zh-CN.json b/webui/src/i18n/zh-CN.json index 6ce6ff24..b6e9cf29 100644 --- a/webui/src/i18n/zh-CN.json +++ b/webui/src/i18n/zh-CN.json @@ -38,7 +38,7 @@ "parser": "解析器", "placeholder_link": "请输入 RSS 链接", "placeholder_name": "可选", - "analyse": "分析" + "button": "添加" } }, "homepage": { diff --git a/webui/src/utils/axios.ts b/webui/src/utils/axios.ts index b82641b4..02a08602 100644 --- a/webui/src/utils/axios.ts +++ b/webui/src/utils/axios.ts @@ -1,5 +1,5 @@ import Axios from 'axios'; -import type { ApiError } from '#/api'; +import type { ApiError } from "#/api"; export const axios = Axios.create(); @@ -19,13 +19,13 @@ axios.interceptors.response.use( }, (err) => { const status = err.response.status as ApiError['status']; - const detail = (err.response.data.detail ?? '') as ApiError['detail']; - const msg = (err.response.data.msg ?? '') as ApiError['msg']; + const msg_en = (err.response.data.msg_en ?? '') as ApiError['msg_en']; + const msg_zh = (err.response.data.msg_zh ?? '') as ApiError['msg_zh']; const error = { status, - detail, - msg, + msg_en, + msg_zh, }; const message = useMessage(); @@ -38,11 +38,11 @@ axios.interceptors.response.use( /** 执行失败 */ if (error.status === 406) { - message.error(error.msg); + message.error(error.msg_zh); } if (error.status === 500) { - const msg = error.detail ? error.detail : 'Request Error!'; + const msg = (err.response.data.msg_en ?? '') as ApiError['msg_en'] message.error(msg); } diff --git a/webui/types/api.ts b/webui/types/api.ts index 1ea2ebe6..3d0bde9b 100644 --- a/webui/types/api.ts +++ b/webui/types/api.ts @@ -14,16 +14,11 @@ export type StatusCode = 401 | 404 | 406 | 500; export interface ApiError { status: StatusCode; - detail: ApiErrorMessage; - msg: string; + msg_en: string; + msg_zh: string; } export interface ApiSuccess { - msg: string; -} - -export interface ApiResponse { - status: boolean; msg_en: string; msg_zh: string; } \ No newline at end of file