From 014ec92ff9402c4c3ac0ba4d8faf6af7ad3121c1 Mon Sep 17 00:00:00 2001 From: felinae98 <731499577@qq.com> Date: Wed, 10 Aug 2022 21:24:58 +0800 Subject: [PATCH] update --- admin-frontend/src/app/store.ts | 4 +++- .../features/weightConfig/WeightManager.tsx | 23 +++++++++++++++++-- .../weightConfig/weightConfigSlice.ts | 14 +++++++++-- admin-frontend/src/utils/type.ts | 12 ++++++++++ .../nonebot_bison/admin_page/__init__.py | 6 ++--- src/plugins/nonebot_bison/config/db.py | 3 +-- src/plugins/nonebot_bison/config/db_config.py | 6 ++++- src/plugins/nonebot_bison/config/db_model.py | 4 +--- src/plugins/nonebot_bison/types.py | 15 ++++++------ 9 files changed, 65 insertions(+), 22 deletions(-) diff --git a/admin-frontend/src/app/store.ts b/admin-frontend/src/app/store.ts index b6cdd82..94a3072 100644 --- a/admin-frontend/src/app/store.ts +++ b/admin-frontend/src/app/store.ts @@ -11,7 +11,9 @@ export const store = configureStore({ [subscribeApi.reducerPath]: subscribeApi.reducer, [weightApi.reducerPath]: weightApi.reducer, }, - middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(subscribeApi.middleware), + middleware: (getDefaultMiddleware) => getDefaultMiddleware() + .concat(subscribeApi.middleware) + .concat(weightApi.middleware), }); export type AppDispatch = typeof store.dispatch; diff --git a/admin-frontend/src/features/weightConfig/WeightManager.tsx b/admin-frontend/src/features/weightConfig/WeightManager.tsx index 5235013..9f4a8b3 100644 --- a/admin-frontend/src/features/weightConfig/WeightManager.tsx +++ b/admin-frontend/src/features/weightConfig/WeightManager.tsx @@ -1,9 +1,28 @@ import React from 'react'; -import { useGetWeightQuery } from './weightConfigSlice'; +import { WeightConfig } from '../../utils/type'; +import { useGetWeightQuery, useUpdateWeightMutation } from './weightConfigSlice'; export default function WeightManager() { const { data: weight } = useGetWeightQuery(); + const [updateWeight] = useUpdateWeightMutation(); + + const doUpdate = () => { + const weightConfig: WeightConfig = { + default: 20, + time_config: [ + { + start_time: '01:00', + end_time: '02:00', + weight: 50, + }, + ], + }; + updateWeight({ weight: weightConfig, platform_name: 'weibo', target: '' }); + }; return ( -
{weight && JSON.stringify(weight)}
+ <> +
{weight && JSON.stringify(weight)}
+ + ); } diff --git a/admin-frontend/src/features/weightConfig/weightConfigSlice.ts b/admin-frontend/src/features/weightConfig/weightConfigSlice.ts index ddef69d..93b1867 100644 --- a/admin-frontend/src/features/weightConfig/weightConfigSlice.ts +++ b/admin-frontend/src/features/weightConfig/weightConfigSlice.ts @@ -1,4 +1,5 @@ import { createApi } from '@reduxjs/toolkit/query/react'; +import { PlatformWeightConfigResp, StatusResp } from '../../utils/type'; import baseQueryWithAuth from '../auth/authQuery'; export const weightApi = createApi({ @@ -6,13 +7,22 @@ export const weightApi = createApi({ baseQuery: baseQueryWithAuth, tagTypes: ['Weight'], endpoints: (builder) => ({ - getWeight: builder.query({ + getWeight: builder.query({ query: () => '/weight', providesTags: ['Weight'], }), + updateWeight: builder.mutation>({ + query: ({ platform_name: platformName, target, weight }) => ({ + method: 'PUT', + url: `/weight?platform_name=${platformName}&target=${target}`, + body: weight, + }), + invalidatesTags: ['Weight'], + }), }), }); export const { - useGetWeightQuery, + useGetWeightQuery, useUpdateWeightMutation, } = weightApi; diff --git a/admin-frontend/src/utils/type.ts b/admin-frontend/src/utils/type.ts index 000fb5c..8b2ea60 100644 --- a/admin-frontend/src/utils/type.ts +++ b/admin-frontend/src/utils/type.ts @@ -58,3 +58,15 @@ export interface TimeWeightConfig { end_time: string; weight: number; } + +export interface WeightConfig { + default: number; + time_config: TimeWeightConfig[]; +} + +export interface PlatformWeightConfigResp { + target: string; + target_name: string; + platform_name: string; + weight: WeightConfig; +} diff --git a/src/plugins/nonebot_bison/admin_page/__init__.py b/src/plugins/nonebot_bison/admin_page/__init__.py index 2995c54..8087ff5 100644 --- a/src/plugins/nonebot_bison/admin_page/__init__.py +++ b/src/plugins/nonebot_bison/admin_page/__init__.py @@ -136,9 +136,9 @@ def register_router_fastapi(driver: Driver, socketio): async def _get_weight_config(): return await get_weight_config() - @app.patch(WEIGHT_URL, dependencies=[Depends(check_is_superuser)]) - async def _update_weight_config(platformName: str, target: str, req: WeightConfig): - return await update_weigth_config(platformName, target, req) + @app.put(WEIGHT_URL, dependencies=[Depends(check_is_superuser)]) + async def _update_weight_config(platform_name: str, target: str, req: WeightConfig): + return await update_weigth_config(platform_name, target, req) app.mount(URL_BASE, SinglePageApplication(directory=static_path), name="bison") diff --git a/src/plugins/nonebot_bison/config/db.py b/src/plugins/nonebot_bison/config/db.py index 8e151c6..73f7a46 100644 --- a/src/plugins/nonebot_bison/config/db.py +++ b/src/plugins/nonebot_bison/config/db.py @@ -1,11 +1,10 @@ from pathlib import Path -import nonebot from alembic.config import Config from alembic.runtime.environment import EnvironmentContext from alembic.script.base import ScriptDirectory from nonebot.log import logger -from nonebot_plugin_datastore import PluginData, create_session, db +from nonebot_plugin_datastore import PluginData, db from nonebot_plugin_datastore.db import get_engine from sqlalchemy.engine.base import Connection from sqlalchemy.ext.asyncio.session import AsyncSession diff --git a/src/plugins/nonebot_bison/config/db_config.py b/src/plugins/nonebot_bison/config/db_config.py index 7a771b1..90efcc7 100644 --- a/src/plugins/nonebot_bison/config/db_config.py +++ b/src/plugins/nonebot_bison/config/db_config.py @@ -195,7 +195,10 @@ class DBConfig: raise NoSuchTargetException() target_id = targetObj.id targetObj.default_schedule_weight = conf.default - delete(ScheduleTimeWeight).where(ScheduleTimeWeight.target_id == target_id) + delete_statement = delete(ScheduleTimeWeight).where( + ScheduleTimeWeight.target_id == target_id + ) + await sess.execute(delete_statement) for time_conf in conf.time_config: new_conf = ScheduleTimeWeight( start_time=time_conf.start_time, @@ -271,6 +274,7 @@ class DBConfig: res[platform_name][target.target] = PlatformWeightConfigResp( target=T_Target(target.target), target_name=target.target_name, + platform_name=platform_name, weight=WeightConfig( default=target.default_schedule_weight, time_config=[] ), diff --git a/src/plugins/nonebot_bison/config/db_model.py b/src/plugins/nonebot_bison/config/db_model.py index 17a122c..5918162 100644 --- a/src/plugins/nonebot_bison/config/db_model.py +++ b/src/plugins/nonebot_bison/config/db_model.py @@ -1,9 +1,7 @@ -from datetime import datetime - from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relationship from sqlalchemy.sql.schema import Column, ForeignKey, UniqueConstraint -from sqlalchemy.sql.sqltypes import JSON, DateTime, Integer, String, Time +from sqlalchemy.sql.sqltypes import JSON, Integer, String, Time Base = declarative_base() diff --git a/src/plugins/nonebot_bison/types.py b/src/plugins/nonebot_bison/types.py index d827809..b4df92d 100644 --- a/src/plugins/nonebot_bison/types.py +++ b/src/plugins/nonebot_bison/types.py @@ -1,6 +1,8 @@ from dataclasses import dataclass from datetime import time -from typing import Any, Callable, Literal, NamedTuple, NewType +from typing import Any, Literal, NamedTuple, NewType + +from pydantic import BaseModel RawPost = NewType("RawPost", Any) Target = NewType("Target", str) @@ -27,22 +29,19 @@ class UserSubInfo(NamedTuple): tags: list[Tag] -@dataclass -class TimeWeightConfig: +class TimeWeightConfig(BaseModel): start_time: time end_time: time weight: int -@dataclass -class WeightConfig: - +class WeightConfig(BaseModel): default: int time_config: list[TimeWeightConfig] -@dataclass -class PlatformWeightConfigResp: +class PlatformWeightConfigResp(BaseModel): target: Target target_name: str + platform_name: str weight: WeightConfig