# _*_ coding : UTF-8 _*_ # @Time : 2025/02/12 16:58 # @UpdateTime : 2025/02/12 16:58 # @Author : sonder # @File : config.py # @Software : PyCharm # @Comment : 本程序 from typing import Optional from fastapi import APIRouter, Depends, Path, Request, Query from fastapi.responses import JSONResponse from annotation.auth import Auth from annotation.log import Log from config.constant import BusinessType from config.get_redis import Redis from controller.login import LoginController from models import Config from schemas.common import BaseResponse, DeleteListParams from schemas.config import AddConfigParams, GetConfigInfoResponse, GetConfigListResponse from utils.response import Response configApi = APIRouter( prefix="/config", dependencies=[Depends(LoginController.get_current_user)], ) @configApi.post("/add", response_class=JSONResponse, response_model=BaseResponse, summary="新增配置") @Log(title="新增配置", business_type=BusinessType.INSERT) @Auth(permission_list=["config:btn:add"]) async def add_config(request: Request, params: AddConfigParams): if await Config.get_or_none(name=params.name, key=params.key, del_flag=1): return Response.error(msg="配置已存在") config = await Config.create( name=params.name, key=params.key, value=params.value, remark=params.remark, type=params.type, ) if config: await Redis.init_system_config(request.app) return Response.success(msg="新增成功") else: return Response.error(msg="新增失败") @configApi.delete("/delete/{id}", response_class=JSONResponse, response_model=BaseResponse, summary="删除配置") @configApi.post("/delete/{id}", response_class=JSONResponse, response_model=BaseResponse, summary="删除配置") @Log(title="删除配置", business_type=BusinessType.DELETE) @Auth(permission_list=["config:btn:delete"]) async def delete_config(request: Request, id: str = Path(description="配置ID")): if config := await Config.get_or_none(id=id, del_flag=1): config.del_flag = 0 await config.save() await Redis.init_system_config(request.app) return Response.success(msg="删除成功") else: return Response.error(msg="配置不存在") @configApi.delete("/deleteList", response_class=JSONResponse, response_model=BaseResponse, summary="批量删除配置") @configApi.post("/deleteList", response_class=JSONResponse, response_model=BaseResponse, summary="批量删除配置") @Log(title="批量删除配置", business_type=BusinessType.DELETE) @Auth(permission_list=["config:btn:delete"]) async def delete_config_list(request: Request, params: DeleteListParams): for id in set(params.ids): if config := await Config.get_or_none(id=id, del_flag=1): config.del_flag = 0 await config.save() await Redis.init_system_config(request.app) return Response.success(msg="删除成功") @configApi.put("/update/{id}", response_class=JSONResponse, response_model=BaseResponse, summary="修改配置") @configApi.post("/update/{id}", response_class=JSONResponse, response_model=BaseResponse, summary="修改配置") @Log(title="修改配置", business_type=BusinessType.UPDATE) @Auth(permission_list=["config:btn:update"]) async def update_config(request: Request, params: AddConfigParams, id: str = Path(description="配置ID")): if config := await Config.get_or_none(id=id, del_flag=1): config.name = params.name config.key = params.key config.value = params.value config.remark = params.remark config.type = params.type await config.save() await Redis.init_system_config(request.app) return Response.success(msg="修改成功") else: return Response.error(msg="配置不存在") @configApi.get("/info/{id}", response_class=JSONResponse, response_model=GetConfigInfoResponse, summary="获取配置信息") @Log(title="获取配置信息", business_type=BusinessType.SELECT) @Auth(permission_list=["config:btn:info"]) async def get_config_info(request: Request, id: str = Path(description="配置ID")): if config := await Config.get_or_none(id=id, del_flag=1): data = { "id": config.id, "name": config.name, "key": config.key, "value": config.value, "remark": config.remark, "type": config.type, "create_time": config.create_time, "create_by": config.create_by, "update_time": config.update_time, "update_by": config.update_by, } return Response.success(data=data) else: return Response.error(msg="配置不存在") @configApi.get("/list", response_class=JSONResponse, response_model=GetConfigListResponse, summary="获取配置列表") @Log(title="获取配置列表", business_type=BusinessType.SELECT) @Auth(permission_list=["config:btn:list"]) async def get_config_list(request: Request, page: int = Query(default=1, description="当前页码"), pageSize: int = Query(default=10, description="每页数量"), key: Optional[str] = Query(default=None, description="配置键名"), name: Optional[str] = Query(default=None, description="配置名称"), type: Optional[str] = Query(default=None, description="系统内置"), ): filterArgs = { f'{k}__contains': v for k, v in { 'name': name, 'key': key, 'type': type, }.items() if v } total = await Config.filter(**filterArgs, del_flag=1).count() data = await Config.filter(**filterArgs, del_flag=1).offset((page - 1) * pageSize).limit(pageSize).values( id="id", name="name", key="key", value="value", remark="remark", type="type", create_time="create_time", create_by="create_by", update_time="update_time", update_by="update_by", ) return Response.success(data={ "total": total, "result": data, "page": page, "pageSize": pageSize, })