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