mirror of
https://github.com/EstrellaXD/Auto_Bangumi.git
synced 2026-04-02 10:10:32 +08:00
webui: fix bugs. adjust api model.
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
)
|
||||
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,
|
||||
},
|
||||
)
|
||||
@@ -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 添加失败。",
|
||||
)
|
||||
|
||||
@@ -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<BangumiRule[]>('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<BangumiRule>(
|
||||
`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;
|
||||
},
|
||||
};
|
||||
|
||||
@@ -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<ApiResponse>(
|
||||
const { data } = await axios.patch<ApiSuccess>(
|
||||
'api/v1/config/update',
|
||||
newConfig
|
||||
);
|
||||
|
||||
@@ -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<ApiSuccess>(
|
||||
'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<ApiSuccess>(
|
||||
'api/v1/download/subscribe',
|
||||
bangumiData
|
||||
);
|
||||
|
||||
@@ -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<ApiResponse>('api/v1/log/clear');
|
||||
const { data } = await axios.get<ApiSuccess>('api/v1/log/clear');
|
||||
return data;
|
||||
},
|
||||
};
|
||||
|
||||
@@ -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<ApiSuccess>('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<ApiSuccess>('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<ApiSuccess>('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<ApiSuccess>('api/v1/shutdown');
|
||||
return data;
|
||||
},
|
||||
};
|
||||
|
||||
@@ -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<ApiResponse>('api/v1/rss/add', rss);
|
||||
const { data } = await axios.post<ApiSuccess>('api/v1/rss/add', rss);
|
||||
return data;
|
||||
},
|
||||
|
||||
async delete(rss_id: number) {
|
||||
const { data } = await axios.delete<ApiResponse>(`api/v1/rss/delete/${rss_id}`);
|
||||
const { data } = await axios.delete<ApiSuccess>(`api/v1/rss/delete/${rss_id}`);
|
||||
return data!;
|
||||
},
|
||||
|
||||
async update(rss_id: number, rss: RSS) {
|
||||
const { data } = await axios.patch<ApiResponse>(`api/v1/rss/update/${rss_id}`, rss);
|
||||
const { data } = await axios.patch<ApiSuccess>(`api/v1/rss/update/${rss_id}`, rss);
|
||||
return data!;
|
||||
},
|
||||
|
||||
async refreshAll() {
|
||||
const { data } = await axios.get<ApiResponse>('api/v1/rss/refresh/all');
|
||||
const { data } = await axios.get<ApiSuccess>('api/v1/rss/refresh/all');
|
||||
return data!;
|
||||
},
|
||||
|
||||
async refresh(rss_id: number) {
|
||||
const { data } = await axios.get<ApiResponse>(`api/v1/rss/refresh/${rss_id}`);
|
||||
const { data } = await axios.get<ApiSuccess>(`api/v1/rss/refresh/${rss_id}`);
|
||||
return data!;
|
||||
},
|
||||
|
||||
|
||||
@@ -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') }}</ab-button
|
||||
>{{ $t('topbar.add.button') }}</ab-button
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
"parser": "Parser",
|
||||
"placeholder_link": "Please enter the RSS link",
|
||||
"placeholder_name": "Optional",
|
||||
"analyse": "Analyse"
|
||||
"button": "Add"
|
||||
}
|
||||
},
|
||||
"homepage": {
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
"parser": "解析器",
|
||||
"placeholder_link": "请输入 RSS 链接",
|
||||
"placeholder_name": "可选",
|
||||
"analyse": "分析"
|
||||
"button": "添加"
|
||||
}
|
||||
},
|
||||
"homepage": {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user