webui: fix bugs. adjust api model.

This commit is contained in:
EstrellaXD
2023-08-22 16:28:30 +08:00
parent e2afb5cb63
commit da937d46f6
15 changed files with 73 additions and 83 deletions

View File

@@ -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:

View File

@@ -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,
},
)

View File

@@ -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 添加失败。",
)

View File

@@ -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;
},
};

View File

@@ -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
);

View File

@@ -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
);

View File

@@ -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;
},
};

View File

@@ -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;
},
};

View File

@@ -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!;
},

View File

@@ -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>

View File

@@ -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);
}
});

View File

@@ -38,7 +38,7 @@
"parser": "Parser",
"placeholder_link": "Please enter the RSS link",
"placeholder_name": "Optional",
"analyse": "Analyse"
"button": "Add"
}
},
"homepage": {

View File

@@ -38,7 +38,7 @@
"parser": "解析器",
"placeholder_link": "请输入 RSS 链接",
"placeholder_name": "可选",
"analyse": "分析"
"button": "添加"
}
},
"homepage": {

View File

@@ -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);
}

View File

@@ -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;
}