Commit 8b0030b8 authored by 林洋洋's avatar 林洋洋

字典表添加 接口路由地址修改

parent 7d2c55f2
# #!/usr/bin/python
# # -*- coding: utf-8 -*-
# # @version : 1.0
# # @Create Time : 2021/10/18 22:18
# # @File : crud.py
# # @IDE : PyCharm
# # @desc : 数据库 增删改查操作
#
# import json
# import os
# from enum import Enum
# from typing import Any
# from redis.asyncio import Redis
# from fastapi.encoders import jsonable_encoder
# from motor.motor_asyncio import AsyncIOMotorDatabase
# from sqlalchemy import select, update
# from sqlalchemy.ext.asyncio import AsyncSession
# from sqlalchemy.orm import joinedload
# from dbgpt.app.apps.config.settings import STATIC_ROOT, SUBSCRIBE
# from dbgpt.app.apps.core.database import redis_getter
# from dbgpt.app.apps.utils.file.file_manage import FileManage
# from . import models, schemas
# from dbgpt.app.apps.core.crud import DalBase
# from dbgpt.app.apps.core.exception import CustomException
# from dbgpt.app.apps.utils import status
# from fastapi import Request
#
#
# class DictTypeDal(DalBase):
#
# def __init__(self, db: AsyncSession):
# super(DictTypeDal, self).__init__()
# self.db = db
# self.model = models.VadminDictType
# self.schema = schemas.DictTypeSimpleOut
#
# async def get_dicts_details(self, dict_types: list[str]) -> dict:
# """
# 获取多个字典类型下的字典元素列表
# """
# data = {}
# options = [joinedload(self.model.details)]
# objs = await DictTypeDal(self.db).get_datas(
# limit=0,
# v_return_objs=True,
# v_options=options,
# dict_type=("in", dict_types)
# )
# for obj in objs:
# if not obj:
# data[obj.dict_type] = []
# continue
# else:
# data[obj.dict_type] = [schemas.DictDetailsSimpleOut.model_validate(i).model_dump() for i in obj.details]
# return data
#
# async def get_select_datas(self) -> list:
# """获取选择数据,全部数据"""
# sql = select(self.model)
# queryset = await self.db.execute(sql)
# return [schemas.DictTypeOptionsOut.model_validate(i).model_dump() for i in queryset.scalars().all()]
#
#
# class DictDetailsDal(DalBase):
#
# def __init__(self, db: AsyncSession):
# super(DictDetailsDal, self).__init__()
# self.db = db
# self.model = models.VadminDictDetails
# self.schema = schemas.DictDetailsSimpleOut
#
#
# class SettingsDal(DalBase):
#
# def __init__(self, db: AsyncSession):
# super(SettingsDal, self).__init__()
# self.db = db
# self.model = models.VadminSystemSettings
# self.schema = schemas.SettingsSimpleOut
#
# async def get_tab_values(self, tab_id: int) -> dict:
# """
# 获取系统配置标签下的信息
# """
# datas = await self.get_datas(limit=0, tab_id=tab_id, v_return_objs=True)
# result = {}
# for data in datas:
# if not data.disabled:
# result[data.config_key] = data.config_value
# return result
#
# async def update_datas(self, datas: dict, request: Request) -> None:
# """
# 更新系统配置信息
#
# 更新ico图标步骤:先将文件上传到本地,然后点击提交后,获取到文件地址,将上传的新文件覆盖原有文件
# 原因:ico图标的路径是在前端的index.html中固定的,所以目前只能改变图片,不改变路径
# """
# for key, value in datas.items():
# if key == "web_ico":
# continue
# elif key == "web_ico_local_path":
# if not value:
# continue
# ico = await self.get_data(config_key="web_ico", tab_id=1)
# web_ico = datas.get("web_ico")
# if ico.config_value == web_ico:
# continue
# # 将上传的ico路径替换到static/system/favicon.ico文件
# await FileManage.async_copy_file(value, os.path.join(STATIC_ROOT, "system/favicon.ico"))
# sql = update(self.model).where(self.model.config_key == "web_ico").values(config_value=web_ico)
# await self.db.execute(sql)
# else:
# sql = update(self.model).where(self.model.config_key == str(key)).values(config_value=value)
# await self.db.execute(sql)
# if "wx_server_app_id" in datas :
# rd = redis_getter(request)
# await rd.client().set("wx_server", json.dumps(datas))
# elif "sms_access_key" in datas :
# rd = redis_getter(request)
# await rd.client().set('aliyun_sms', json.dumps(datas))
#
# async def get_base_config(self) -> dict:
# """
# 获取系统基本信息
# """
# ignore_configs = ["wx_server_app_id", "wx_server_app_secret"]
# datas = await self.get_datas(limit=0, tab_id=("in", ["1", "9"]), disabled=False, v_return_objs=True)
# result = {}
# for config in datas:
# if config.config_key not in ignore_configs:
# result[config.config_key] = config.config_value
# return result
#
#
# class SettingsTabDal(DalBase):
#
# def __init__(self, db: AsyncSession):
# super(SettingsTabDal, self).__init__(db, models.VadminSystemSettingsTab, schemas.SettingsTabSimpleOut)
#
# async def get_classify_tab_values(self, classify: list[str], hidden: bool | None = False) -> dict:
# """
# 获取系统配置分类下的标签信息
# """
# model = models.VadminSystemSettingsTab
# options = [joinedload(model.settings)]
# datas = await self.get_datas(
# limit=0,
# v_options=options,
# classify=("in", classify),
# disabled=False,
# v_return_objs=True,
# hidden=hidden
# )
# return self.__generate_values(datas)
#
# async def get_tab_name_values(self, tab_names: list[str], hidden: bool | None = False) -> dict:
# """
# 获取系统配置标签下的标签信息
# """
# model = models.VadminSystemSettingsTab
# options = [joinedload(model.settings)]
# datas = await self.get_datas(
# limit=0,
# v_options=options,
# tab_name=("in", tab_names),
# disabled=False,
# v_return_objs=True,
# hidden=hidden
# )
# return self.__generate_values(datas)
#
# @classmethod
# def __generate_values(cls, datas: list[models.VadminSystemSettingsTab]) -> dict:
# """
# 生成字典值
# """
# return {
# tab.tab_name: {
# item.config_key: item.config_value
# for item in tab.settings
# if not item.disabled
# }
# for tab in datas
# }
#!/usr/bin/python
# -*- coding: utf-8 -*-
# @version : 1.0
# @Create Time : 2021/10/18 22:18
# @File : crud.py
# @IDE : PyCharm
# @desc : 数据库 增删改查操作
import json
import os
from enum import Enum
from typing import Any
from redis.asyncio import Redis
from fastapi.encoders import jsonable_encoder
from motor.motor_asyncio import AsyncIOMotorDatabase
from sqlalchemy import select, update
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm import joinedload
from dbgpt.app.apps.config.settings import STATIC_ROOT, SUBSCRIBE
from dbgpt.app.apps.core.database import redis_getter
from dbgpt.app.apps.utils.file.file_manage import FileManage
from . import models, schemas
from dbgpt.app.apps.core.crud import DalBase
from dbgpt.app.apps.core.exception import CustomException
from dbgpt.app.apps.utils import status
from fastapi import Request
class DictTypeDal(DalBase):
def __init__(self, db: AsyncSession):
super(DictTypeDal, self).__init__()
self.db = db
self.model = models.VadminDictType
self.schema = schemas.DictTypeSimpleOut
async def get_dicts_details(self, dict_types: list[str]) -> dict:
"""
获取多个字典类型下的字典元素列表
"""
data = {}
options = [joinedload(self.model.details)]
objs = await DictTypeDal(self.db).get_datas(
limit=0,
v_return_objs=True,
v_options=options,
dict_type=("in", dict_types)
)
for obj in objs:
if not obj:
data[obj.dict_type] = []
continue
else:
data[obj.dict_type] = [schemas.DictDetailsSimpleOut.model_validate(i).model_dump() for i in obj.details]
return data
async def get_select_datas(self) -> list:
"""获取选择数据,全部数据"""
sql = select(self.model)
queryset = await self.db.execute(sql)
return [schemas.DictTypeOptionsOut.model_validate(i).model_dump() for i in queryset.scalars().all()]
class DictDetailsDal(DalBase):
def __init__(self, db: AsyncSession):
super(DictDetailsDal, self).__init__()
self.db = db
self.model = models.VadminDictDetails
self.schema = schemas.DictDetailsSimpleOut
class SettingsDal(DalBase):
def __init__(self, db: AsyncSession):
super(SettingsDal, self).__init__()
self.db = db
self.model = models.VadminSystemSettings
self.schema = schemas.SettingsSimpleOut
async def get_tab_values(self, tab_id: int) -> dict:
"""
获取系统配置标签下的信息
"""
datas = await self.get_datas(limit=0, tab_id=tab_id, v_return_objs=True)
result = {}
for data in datas:
if not data.disabled:
result[data.config_key] = data.config_value
return result
async def update_datas(self, datas: dict, request: Request) -> None:
"""
更新系统配置信息
更新ico图标步骤:先将文件上传到本地,然后点击提交后,获取到文件地址,将上传的新文件覆盖原有文件
原因:ico图标的路径是在前端的index.html中固定的,所以目前只能改变图片,不改变路径
"""
for key, value in datas.items():
if key == "web_ico":
continue
elif key == "web_ico_local_path":
if not value:
continue
ico = await self.get_data(config_key="web_ico", tab_id=1)
web_ico = datas.get("web_ico")
if ico.config_value == web_ico:
continue
# 将上传的ico路径替换到static/system/favicon.ico文件
await FileManage.async_copy_file(value, os.path.join(STATIC_ROOT, "system/favicon.ico"))
sql = update(self.model).where(self.model.config_key == "web_ico").values(config_value=web_ico)
await self.db.execute(sql)
else:
sql = update(self.model).where(self.model.config_key == str(key)).values(config_value=value)
await self.db.execute(sql)
if "wx_server_app_id" in datas :
rd = redis_getter(request)
await rd.client().set("wx_server", json.dumps(datas))
elif "sms_access_key" in datas :
rd = redis_getter(request)
await rd.client().set('aliyun_sms', json.dumps(datas))
async def get_base_config(self) -> dict:
"""
获取系统基本信息
"""
ignore_configs = ["wx_server_app_id", "wx_server_app_secret"]
datas = await self.get_datas(limit=0, tab_id=("in", ["1", "9"]), disabled=False, v_return_objs=True)
result = {}
for config in datas:
if config.config_key not in ignore_configs:
result[config.config_key] = config.config_value
return result
class SettingsTabDal(DalBase):
def __init__(self, db: AsyncSession):
super(SettingsTabDal, self).__init__(db, models.VadminSystemSettingsTab, schemas.SettingsTabSimpleOut)
async def get_classify_tab_values(self, classify: list[str], hidden: bool | None = False) -> dict:
"""
获取系统配置分类下的标签信息
"""
model = models.VadminSystemSettingsTab
options = [joinedload(model.settings)]
datas = await self.get_datas(
limit=0,
v_options=options,
classify=("in", classify),
disabled=False,
v_return_objs=True,
hidden=hidden
)
return self.__generate_values(datas)
async def get_tab_name_values(self, tab_names: list[str], hidden: bool | None = False) -> dict:
"""
获取系统配置标签下的标签信息
"""
model = models.VadminSystemSettingsTab
options = [joinedload(model.settings)]
datas = await self.get_datas(
limit=0,
v_options=options,
tab_name=("in", tab_names),
disabled=False,
v_return_objs=True,
hidden=hidden
)
return self.__generate_values(datas)
@classmethod
def __generate_values(cls, datas: list[models.VadminSystemSettingsTab]) -> dict:
"""
生成字典值
"""
return {
tab.tab_name: {
item.config_key: item.config_value
for item in tab.settings
if not item.disabled
}
for tab in datas
}
#
#
# class TaskDal(MongoManage):
......
# # -*- coding: utf-8 -*-
# # @version : 1.0
# # @Create Time : 2021/10/24 16:44
# # @File : views.py
# # @IDE : PyCharm
# # @desc : 主要接口文件
#
# from redis.asyncio import Redis
# from fastapi import APIRouter, Depends, Body, UploadFile, Form, Request
# from motor.motor_asyncio import AsyncIOMotorDatabase
# from sqlalchemy.ext.asyncio import AsyncSession
# -*- coding: utf-8 -*-
# @version : 1.0
# @Create Time : 2021/10/24 16:44
# @File : views.py
# @IDE : PyCharm
# @desc : 主要接口文件
from redis.asyncio import Redis
from fastapi import APIRouter, Depends, Body, UploadFile, Form, Request
from motor.motor_asyncio import AsyncIOMotorDatabase
from sqlalchemy.ext.asyncio import AsyncSession
# from application.settings import ALIYUN_OSS
# from dbgpt.app.apps.core.database import db_getter, redis_getter, mongo_getter
from dbgpt.app.apps.core.database import db_getter, redis_getter
# from dbgpt.app.apps.utils.file.aliyun_oss import AliyunOSS, BucketConf
# from dbgpt.app.apps.utils.file.file_manage import FileManage
# from dbgpt.app.apps.utils.response import SuccessResponse, ErrorResponse
from dbgpt.app.apps.utils.file.file_manage import FileManage
from dbgpt.app.apps.utils.response import SuccessResponse, ErrorResponse
# from dbgpt.app.apps.utils.sms.code import CodeSMS
# from . import schemas, crud
# from dbgpt.app.apps.core.dependencies import IdList
# from dbgpt.app.apps.apps.vadmin.auth.utils.current import AllUserAuth, FullAdminAuth, OpenAuth
# from dbgpt.app.apps.apps.vadmin.auth.utils.validation.auth import Auth
# from .params import DictTypeParams, DictDetailParams, TaskParams
# from dbgpt.app.apps.apps.vadmin.auth import crud as vadmin_auth_crud
# from .params.task import TaskRecordParams
#
# app = APIRouter()
#
#
# ###########################################################
# # 字典类型管理
# ###########################################################
# @app.get("/dict/types", summary="获取字典类型列表")
# async def get_dict_types(p: DictTypeParams = Depends(), auth: Auth = Depends(AllUserAuth())):
# datas, count = await crud.DictTypeDal(auth.db).get_datas(**p.dict(), v_return_count=True)
# return SuccessResponse(datas, count=count)
#
#
# @app.post("/dict/types", summary="创建字典类型")
# async def create_dict_types(data: schemas.DictType, auth: Auth = Depends(AllUserAuth())):
# return SuccessResponse(await crud.DictTypeDal(auth.db).create_data(data=data))
#
#
# @app.delete("/dict/types", summary="批量删除字典类型")
# async def delete_dict_types(ids: IdList = Depends(), auth: Auth = Depends(AllUserAuth())):
# await crud.DictTypeDal(auth.db).delete_datas(ids=ids.ids)
# return SuccessResponse("删除成功")
#
#
# @app.post("/dict/types/details", summary="获取多个字典类型下的字典元素列表")
# async def post_dicts_details(
# auth: Auth = Depends(AllUserAuth()),
# dict_types: list[str] = Body(None, title="字典元素列表", description="查询字典元素列表")
# ):
# datas = await crud.DictTypeDal(auth.db).get_dicts_details(dict_types)
# return SuccessResponse(datas)
#
#
# @app.get("/dict/types/options", summary="获取字典类型选择项")
# async def get_dicts_options(auth: Auth = Depends(AllUserAuth())):
# return SuccessResponse(await crud.DictTypeDal(auth.db).get_select_datas())
#
#
# @app.put("/dict/types/{data_id}", summary="更新字典类型")
# async def put_dict_types(data_id: int, data: schemas.DictType, auth: Auth = Depends(AllUserAuth())):
# return SuccessResponse(await crud.DictTypeDal(auth.db).put_data(data_id, data))
#
#
# @app.get("/dict/types/{data_id}", summary="获取字典类型详细")
# async def get_dict_type(data_id: int, auth: Auth = Depends(AllUserAuth())):
# schema = schemas.DictTypeSimpleOut
# return SuccessResponse(await crud.DictTypeDal(auth.db).get_data(data_id, v_schema=schema))
#
#
# ###########################################################
# # 字典元素管理
# ###########################################################
# @app.post("/dict/details", summary="创建字典元素")
# async def create_dict_details(data: schemas.DictDetails, auth: Auth = Depends(AllUserAuth())):
# return SuccessResponse(await crud.DictDetailsDal(auth.db).create_data(data=data))
#
#
# @app.get("/dict/details", summary="获取单个字典类型下的字典元素列表,分页")
# async def get_dict_details(params: DictDetailParams = Depends(), auth: Auth = Depends(AllUserAuth())):
# datas, count = await crud.DictDetailsDal(auth.db).get_datas(**params.dict(), v_return_count=True)
# return SuccessResponse(datas, count=count)
#
#
# @app.delete("/dict/details", summary="批量删除字典元素", description="硬删除")
# async def delete_dict_details(ids: IdList = Depends(), auth: Auth = Depends(AllUserAuth())):
# await crud.DictDetailsDal(auth.db).delete_datas(ids.ids, v_soft=False)
# return SuccessResponse("删除成功")
#
#
# @app.put("/dict/details/{data_id}", summary="更新字典元素")
# async def put_dict_details(data_id: int, data: schemas.DictDetails, auth: Auth = Depends(AllUserAuth())):
# return SuccessResponse(await crud.DictDetailsDal(auth.db).put_data(data_id, data))
#
#
# @app.get("/dict/details/{data_id}", summary="获取字典元素详情")
# async def get_dict_detail(data_id: int, auth: Auth = Depends(AllUserAuth())):
# schema = schemas.DictDetailsSimpleOut
# return SuccessResponse(await crud.DictDetailsDal(auth.db).get_data(data_id, v_schema=schema))
#
#
from . import schemas, crud
from dbgpt.app.apps.core.dependencies import IdList
from dbgpt.app.apps.vadmin.auth.utils.current import AllUserAuth, FullAdminAuth, OpenAuth
from dbgpt.app.apps.vadmin.auth.utils.validation.auth import Auth
from .params import DictTypeParams, DictDetailParams, TaskParams
from dbgpt.app.apps.vadmin.auth import crud as vadmin_auth_crud
from .params.task import TaskRecordParams
router = APIRouter()
###########################################################
# 字典类型管理
###########################################################
@router.get("/dict/types", summary="获取字典类型列表")
async def get_dict_types(p: DictTypeParams = Depends(), auth: Auth = Depends(AllUserAuth())):
datas, count = await crud.DictTypeDal(auth.db).get_datas(**p.dict(), v_return_count=True)
return SuccessResponse(datas, count=count)
@router.post("/dict/types", summary="创建字典类型")
async def create_dict_types(data: schemas.DictType, auth: Auth = Depends(AllUserAuth())):
return SuccessResponse(await crud.DictTypeDal(auth.db).create_data(data=data))
@router.delete("/dict/types", summary="批量删除字典类型")
async def delete_dict_types(ids: IdList = Depends(), auth: Auth = Depends(AllUserAuth())):
await crud.DictTypeDal(auth.db).delete_datas(ids=ids.ids)
return SuccessResponse("删除成功")
@router.post("/dict/types/details", summary="获取多个字典类型下的字典元素列表")
async def post_dicts_details(
auth: Auth = Depends(AllUserAuth()),
dict_types: list[str] = Body(None, title="字典元素列表", description="查询字典元素列表")
):
datas = await crud.DictTypeDal(auth.db).get_dicts_details(dict_types)
return SuccessResponse(datas)
@router.get("/dict/types/options", summary="获取字典类型选择项")
async def get_dicts_options(auth: Auth = Depends(AllUserAuth())):
return SuccessResponse(await crud.DictTypeDal(auth.db).get_select_datas())
@router.put("/dict/types/{data_id}", summary="更新字典类型")
async def put_dict_types(data_id: int, data: schemas.DictType, auth: Auth = Depends(AllUserAuth())):
return SuccessResponse(await crud.DictTypeDal(auth.db).put_data(data_id, data))
@router.get("/dict/types/{data_id}", summary="获取字典类型详细")
async def get_dict_type(data_id: int, auth: Auth = Depends(AllUserAuth())):
schema = schemas.DictTypeSimpleOut
return SuccessResponse(await crud.DictTypeDal(auth.db).get_data(data_id, v_schema=schema))
###########################################################
# 字典元素管理
###########################################################
@router.post("/dict/details", summary="创建字典元素")
async def create_dict_details(data: schemas.DictDetails, auth: Auth = Depends(AllUserAuth())):
return SuccessResponse(await crud.DictDetailsDal(auth.db).create_data(data=data))
@router.get("/dict/details", summary="获取单个字典类型下的字典元素列表,分页")
async def get_dict_details(params: DictDetailParams = Depends(), auth: Auth = Depends(AllUserAuth())):
datas, count = await crud.DictDetailsDal(auth.db).get_datas(**params.dict(), v_return_count=True)
return SuccessResponse(datas, count=count)
@router.delete("/dict/details", summary="批量删除字典元素", description="硬删除")
async def delete_dict_details(ids: IdList = Depends(), auth: Auth = Depends(AllUserAuth())):
await crud.DictDetailsDal(auth.db).delete_datas(ids.ids, v_soft=False)
return SuccessResponse("删除成功")
@router.put("/dict/details/{data_id}", summary="更新字典元素")
async def put_dict_details(data_id: int, data: schemas.DictDetails, auth: Auth = Depends(AllUserAuth())):
return SuccessResponse(await crud.DictDetailsDal(auth.db).put_data(data_id, data))
@router.get("/dict/details/{data_id}", summary="获取字典元素详情")
async def get_dict_detail(data_id: int, auth: Auth = Depends(AllUserAuth())):
schema = schemas.DictDetailsSimpleOut
return SuccessResponse(await crud.DictDetailsDal(auth.db).get_data(data_id, v_schema=schema))
# ###########################################################
# # 文件上传管理
# ###########################################################
# @app.post("/upload/image/to/oss", summary="上传图片到阿里云OSS")
# @router.post("/upload/image/to/oss", summary="上传图片到阿里云OSS")
# async def upload_image_to_oss(file: UploadFile, path: str = Form(...)):
# result = await AliyunOSS(BucketConf(**ALIYUN_OSS)).upload_image(path, file)
# return SuccessResponse(result)
#
#
# @app.post("/upload/video/to/oss", summary="上传视频到阿里云OSS")
# async def upload_video_to_oss(file: UploadFile, path: str = Form(...)):
# result = await AliyunOSS(BucketConf(**ALIYUN_OSS)).upload_video(path, file)
# return SuccessResponse(result)
#
#
# @app.post("/upload/file/to/oss", summary="上传文件到阿里云OSS")
# async def upload_file_to_oss(file: UploadFile, path: str = Form(...)):
# result = await AliyunOSS(BucketConf(**ALIYUN_OSS)).upload_file(path, file)
# return SuccessResponse(result)
#
#
# @app.post("/upload/image/to/local", summary="上传图片到本地")
# async def upload_image_to_local(file: UploadFile, path: str = Form(...)):
# manage = FileManage(file, path)
# path = await manage.save_image_local()
# return SuccessResponse(path)
#
#
# ###########################################################
# # 短信服务管理
# ###########################################################
# @app.post("/sms/send", summary="发送短信验证码(阿里云服务)")
@router.post("/upload/video/to/oss", summary="上传视频到阿里云OSS")
async def upload_video_to_oss(file: UploadFile, path: str = Form(...)):
result = await AliyunOSS(BucketConf(**ALIYUN_OSS)).upload_video(path, file)
return SuccessResponse(result)
@router.post("/upload/file/to/oss", summary="上传文件到阿里云OSS")
async def upload_file_to_oss(file: UploadFile, path: str = Form(...)):
result = await AliyunOSS(BucketConf(**ALIYUN_OSS)).upload_file(path, file)
return SuccessResponse(result)
@router.post("/upload/image/to/local", summary="上传图片到本地")
async def upload_image_to_local(file: UploadFile, path: str = Form(...)):
manage = FileManage(file, path)
path = await manage.save_image_local()
return SuccessResponse(path)
###########################################################
# 短信服务管理
###########################################################
# @router.post("/sms/send", summary="发送短信验证码(阿里云服务)")
# async def sms_send(telephone: str, rd: Redis = Depends(redis_getter), auth: Auth = Depends(OpenAuth())):
# user = await vadmin_auth_crud.UserDal(auth.db).get_data(telephone=telephone, v_return_none=True)
# if not user:
# return ErrorResponse("手机号不存在!")
# sms = CodeSMS(telephone, rd)
# return SuccessResponse(await sms.main_async())
#
#
# ###########################################################
# # 系统配置管理
# ###########################################################
# @app.post("/settings/tabs", summary="获取系统配置标签列表")
# async def get_settings_tabs(classifys: list[str] = Body(...), auth: Auth = Depends(FullAdminAuth())):
# return SuccessResponse(await crud.SettingsTabDal(auth.db).get_datas(limit=0, classify=("in", classifys)))
#
#
# @app.get("/settings/tabs/values", summary="获取系统配置标签下的信息")
# async def get_settings_tabs_values(tab_id: int, auth: Auth = Depends(FullAdminAuth())):
# return SuccessResponse(await crud.SettingsDal(auth.db).get_tab_values(tab_id=tab_id))
#
#
# @app.put("/settings/tabs/values", summary="更新系统配置信息")
# async def put_settings_tabs_values(
# request: Request,
# datas: dict = Body(...),
# auth: Auth = Depends(FullAdminAuth())
# ):
# return SuccessResponse(await crud.SettingsDal(auth.db).update_datas(datas, request))
#
#
# @app.get("/settings/base/config", summary="获取系统基础配置", description="每次进入系统中时使用")
# async def get_setting_base_config(db: AsyncSession = Depends(db_getter)):
# return SuccessResponse(await crud.SettingsDal(db).get_base_config())
#
#
# @app.get("/settings/privacy", summary="获取隐私协议")
# async def get_settings_privacy(auth: Auth = Depends(OpenAuth())):
# return SuccessResponse((await crud.SettingsDal(auth.db).get_data(config_key="web_privacy")).config_value)
#
#
# @app.get("/settings/agreement", summary="获取用户协议")
# async def get_settings_agreement(auth: Auth = Depends(OpenAuth())):
# return SuccessResponse((await crud.SettingsDal(auth.db).get_data(config_key="web_agreement")).config_value)
#
###########################################################
# 系统配置管理
###########################################################
@router.post("/settings/tabs", summary="获取系统配置标签列表")
async def get_settings_tabs(classifys: list[str] = Body(...), auth: Auth = Depends(FullAdminAuth())):
return SuccessResponse(await crud.SettingsTabDal(auth.db).get_datas(limit=0, classify=("in", classifys)))
@router.get("/settings/tabs/values", summary="获取系统配置标签下的信息")
async def get_settings_tabs_values(tab_id: int, auth: Auth = Depends(FullAdminAuth())):
return SuccessResponse(await crud.SettingsDal(auth.db).get_tab_values(tab_id=tab_id))
@router.put("/settings/tabs/values", summary="更新系统配置信息")
async def put_settings_tabs_values(
request: Request,
datas: dict = Body(...),
auth: Auth = Depends(FullAdminAuth())
):
return SuccessResponse(await crud.SettingsDal(auth.db).update_datas(datas, request))
@router.get("/settings/base/config", summary="获取系统基础配置", description="每次进入系统中时使用")
async def get_setting_base_config(db: AsyncSession = Depends(db_getter)):
return SuccessResponse(await crud.SettingsDal(db).get_base_config())
@router.get("/settings/privacy", summary="获取隐私协议")
async def get_settings_privacy(auth: Auth = Depends(OpenAuth())):
return SuccessResponse((await crud.SettingsDal(auth.db).get_data(config_key="web_privacy")).config_value)
@router.get("/settings/agreement", summary="获取用户协议")
async def get_settings_agreement(auth: Auth = Depends(OpenAuth())):
return SuccessResponse((await crud.SettingsDal(auth.db).get_data(config_key="web_agreement")).config_value)
#
# ###########################################################
# # 定时任务管理
# ###########################################################
# @app.get("/tasks", summary="获取定时任务列表")
# @router.get("/tasks", summary="获取定时任务列表")
# async def get_tasks(
# p: TaskParams = Depends(),
# db: AsyncIOMotorDatabase = Depends(mongo_getter),
......@@ -190,9 +190,9 @@
# ):
# datas, count = await crud.TaskDal(db).get_tasks(**p.dict())
# return SuccessResponse(datas, count=count)
#
#
# @app.post("/tasks", summary="添加定时任务")
# @router.post("/tasks", summary="添加定时任务")
# async def post_tasks(
# data: schemas.Task,
# db: AsyncIOMotorDatabase = Depends(mongo_getter),
......@@ -200,9 +200,9 @@
# auth: Auth = Depends(AllUserAuth())
# ):
# return SuccessResponse(await crud.TaskDal(db).create_task(rd, data))
#
#
# @app.put("/tasks", summary="更新定时任务")
# @router.put("/tasks", summary="更新定时任务")
# async def put_tasks(
# _id: str,
# data: schemas.Task,
......@@ -213,7 +213,7 @@
# return SuccessResponse(await crud.TaskDal(db).put_task(rd, _id, data))
#
#
# @app.delete("/tasks", summary="删除单个定时任务")
# @router.delete("/tasks", summary="删除单个定时任务")
# async def delete_task(
# _id: str,
# db: AsyncIOMotorDatabase = Depends(mongo_getter),
......@@ -222,7 +222,7 @@
# return SuccessResponse(await crud.TaskDal(db).delete_task(_id))
#
#
# @app.get("/task", summary="获取定时任务详情")
# @router.get("/task", summary="获取定时任务详情")
# async def get_task(
# _id: str,
# db: AsyncIOMotorDatabase = Depends(mongo_getter),
......@@ -231,7 +231,7 @@
# return SuccessResponse(await crud.TaskDal(db).get_task(_id, v_schema=schemas.TaskSimpleOut))
#
#
# @app.post("/task", summary="执行一次定时任务")
# @router.post("/task", summary="执行一次定时任务")
# async def run_once_task(
# _id: str,
# db: AsyncIOMotorDatabase = Depends(mongo_getter),
......@@ -244,7 +244,7 @@
# ###########################################################
# # 定时任务分组管理
# ###########################################################
# @app.get("/task/group/options", summary="获取定时任务分组选择项列表")
# @router.get("/task/group/options", summary="获取定时任务分组选择项列表")
# async def get_task_group_options(db: AsyncIOMotorDatabase = Depends(mongo_getter), auth: Auth = Depends(AllUserAuth())):
# return SuccessResponse(await crud.TaskGroupDal(db).get_datas(limit=0))
#
......@@ -252,7 +252,7 @@
# ###########################################################
# # 定时任务调度日志
# ###########################################################
# @app.get("/task/records", summary="获取定时任务调度日志列表")
# @router.get("/task/records", summary="获取定时任务调度日志列表")
# async def get_task_records(
# p: TaskRecordParams = Depends(),
# db: AsyncIOMotorDatabase = Depends(mongo_getter),
......
......@@ -40,7 +40,7 @@ import jwt
router = APIRouter()
@router.post("/v2/login", summary="API 手机号密码登录", description="Swagger API 文档登录认证")
@router.post("/api/login", summary="API 手机号密码登录", description="Swagger API 文档登录认证")
async def api_login_for_access_token(
request: Request,
data: OAuth2PasswordRequestForm = Depends(),
......@@ -63,14 +63,52 @@ async def api_login_for_access_token(
# await VadminLoginRecord.create_login_record(db, record, True, request, resp)
return resp
@router.post("/login", summary="手机号密码登录", description="员工登录通道,限制最多输错次数,达到最大值后将is_active=False")
async def login_for_access_token(
request: Request,
data: LoginForm,
manage: LoginManage = Depends(),
db: AsyncSession = Depends(db_getter)
):
try:
if data.method == "0":
result = await manage.password_login(data, db, request)
# elif data.method == "1":
# result = await manage.sms_login(data, db, request)
else:
raise ValueError("无效参数")
if not result.status:
raise ValueError(result.msg)
access_token = LoginManage.create_token(
{"sub": result.user.telephone, "is_refresh": False, "password": result.user.password}
)
expires = timedelta(minutes=settings.REFRESH_TOKEN_EXPIRE_MINUTES)
refresh_token = LoginManage.create_token(
payload={"sub": result.user.telephone, "is_refresh": True, "password": result.user.password},
expires=expires
)
resp = {
"access_token": access_token,
"refresh_token": refresh_token,
"token_type": "bearer",
"is_reset_password": result.user.is_reset_password,
"is_wx_server_openid": result.user.is_wx_server_openid
}
# await VadminLoginRecord.create_login_record(db, data, True, request, resp)
return SuccessResponse(resp)
except ValueError as e:
# await VadminLoginRecord.create_login_record(db, data, False, request, {"message": str(e)})
return ErrorResponse(msg=str(e))
@router.get("/v2/getMenuList", summary="获取当前用户菜单树")
@router.get("/getMenuList", summary="获取当前用户菜单树")
async def get_menu_list(auth: Auth = Depends(FullAdminAuth())):
return SuccessResponse(await MenuDal(auth.db).get_routers(auth.user))
@router.post("/v2/token/refresh", summary="刷新Token")
@router.post("/token/refresh", summary="刷新Token")
async def token_refresh(refresh: str = Body(..., title="刷新Token")):
error_code = status.HTTP_401_UNAUTHORIZED
try:
......
......@@ -23,7 +23,7 @@ router = APIRouter()
###########################################################
# 接口测试
###########################################################
@router.get("/v2/test", summary="接口测试")
@router.get("/test", summary="接口测试")
async def test(auth: Auth = Depends(OpenAuth())):
return SuccessResponse(await crud.TestDal(auth.db).relationship_where_operations_has())
......@@ -31,7 +31,7 @@ async def test(auth: Auth = Depends(OpenAuth())):
###########################################################
# 用户管理
###########################################################
@router.get("/v2/users", summary="获取用户列表")
@router.get("/users", summary="获取用户列表")
async def get_users(
params: UserParams = Depends(),
auth: Auth = Depends(FullAdminAuth(permissions=["auth.user.list"]))
......@@ -48,12 +48,12 @@ async def get_users(
return SuccessResponse(datas, count=count)
@router.post("/v2/users", summary="创建用户")
@router.post("/users", summary="创建用户")
async def create_user(data: schemas.UserIn, auth: Auth = Depends(FullAdminAuth(permissions=["auth.user.create"]))):
return SuccessResponse(await crud.UserDal(auth.db).create_data(data=data))
@router.delete("/v2/users", summary="批量删除用户", description="软删除,删除后清空所关联的角色")
@router.delete("/users", summary="批量删除用户", description="软删除,删除后清空所关联的角色")
async def delete_users(ids: IdList = Depends(), auth: Auth = Depends(FullAdminAuth(permissions=["auth.user.delete"]))):
if auth.user.id in ids.ids:
return ErrorResponse("不能删除当前登录用户")
......@@ -63,7 +63,7 @@ async def delete_users(ids: IdList = Depends(), auth: Auth = Depends(FullAdminAu
return SuccessResponse("删除成功")
@router.put("/v2/users/{data_id}", summary="更新用户信息")
@router.put("/users/{data_id}", summary="更新用户信息")
async def put_user(
data_id: int,
data: schemas.UserUpdate,
......@@ -72,7 +72,7 @@ async def put_user(
return SuccessResponse(await crud.UserDal(auth.db).put_data(data_id, data))
@router.get("/v2/users/{data_id}", summary="获取用户信息")
@router.get("/users/{data_id}", summary="获取用户信息")
async def get_user(
data_id: int,
auth: Auth = Depends(FullAdminAuth(permissions=["auth.user.view", "auth.user.update"]))
......@@ -83,29 +83,29 @@ async def get_user(
return SuccessResponse(await crud.UserDal(auth.db).get_data(data_id, v_options=options, v_schema=schema))
@router.post("/v2/user/current/reset/password", summary="重置当前用户密码")
@router.post("/user/current/reset/password", summary="重置当前用户密码")
async def user_current_reset_password(data: schemas.ResetPwd, auth: Auth = Depends(AllUserAuth())):
return SuccessResponse(await crud.UserDal(auth.db).reset_current_password(auth.user, data))
@router.post("/v2/user/current/update/info", summary="更新当前用户基本信息")
@router.post("/user/current/update/info", summary="更新当前用户基本信息")
async def post_user_current_update_info(data: schemas.UserUpdateBaseInfo, auth: Auth = Depends(AllUserAuth())):
return SuccessResponse(await crud.UserDal(auth.db).update_current_info(auth.user, data))
@router.post("/v2/user/current/update/avatar", summary="更新当前用户头像")
@router.post("/user/current/update/avatar", summary="更新当前用户头像")
async def post_user_current_update_avatar(file: UploadFile, auth: Auth = Depends(AllUserAuth())):
return SuccessResponse(await crud.UserDal(auth.db).update_current_avatar(auth.user, file))
@router.get("/v2/user/admin/current/info", summary="获取当前管理员信息")
@router.get("/user/admin/current/info", summary="获取当前管理员信息")
async def get_user_admin_current_info(auth: Auth = Depends(FullAdminAuth())):
result = schemas.UserOut.model_validate(auth.user).model_dump()
result["permissions"] = list(FullAdminAuth.get_user_permissions(auth.user))
return SuccessResponse(result)
@router.post("/v2/user/export/query/list/to/excel", summary="导出用户查询列表为excel")
@router.post("/user/export/query/list/to/excel", summary="导出用户查询列表为excel")
async def post_user_export_query_list(
header: list = Body(..., title="表头与对应字段"),
params: UserParams = Depends(),
......@@ -114,17 +114,17 @@ async def post_user_export_query_list(
return SuccessResponse(await crud.UserDal(auth.db).export_query_list(header, params))
@router.get("/v2/user/download/import/template", summary="下载最新批量导入用户模板")
@router.get("/user/download/import/template", summary="下载最新批量导入用户模板")
async def get_user_download_new_import_template(auth: Auth = Depends(AllUserAuth())):
return SuccessResponse(await crud.UserDal(auth.db).download_import_template())
@router.post("/v2/import/users", summary="批量导入用户")
@router.post("/import/users", summary="批量导入用户")
async def post_import_users(file: UploadFile, auth: Auth = Depends(FullAdminAuth(permissions=["auth.user.import"]))):
return SuccessResponse(await crud.UserDal(auth.db).import_users(file))
@router.post("/v2/users/init/password/send/sms", summary="初始化所选用户密码并发送通知短信")
@router.post("/users/init/password/send/sms", summary="初始化所选用户密码并发送通知短信")
async def post_users_init_password(
request: Request,
ids: IdList = Depends(),
......@@ -134,7 +134,7 @@ async def post_users_init_password(
return SuccessResponse(await crud.UserDal(auth.db).init_password_send_sms(ids.ids, rd))
@router.post("/v2/users/init/password/send/email", summary="初始化所选用户密码并发送通知邮件")
@router.post("/users/init/password/send/email", summary="初始化所选用户密码并发送通知邮件")
async def post_users_init_password_send_email(
request: Request,
ids: IdList = Depends(),
......@@ -144,7 +144,7 @@ async def post_users_init_password_send_email(
return SuccessResponse(await crud.UserDal(auth.db).init_password_send_email(ids.ids, rd))
@router.put("/v2/users/wx/server/openid", summary="更新当前用户服务端微信平台openid")
@router.put("/users/wx/server/openid", summary="更新当前用户服务端微信平台openid")
async def put_user_wx_server_openid(code: str, auth: Auth = Depends(AllUserAuth()), rd: Redis = Depends(redis_getter)):
result = await crud.UserDal(auth.db).update_wx_server_openid(code, auth.user, rd)
return SuccessResponse(result)
......@@ -153,7 +153,7 @@ async def put_user_wx_server_openid(code: str, auth: Auth = Depends(AllUserAuth(
###########################################################
# 角色管理
###########################################################
@router.get("/v2/roles", summary="获取角色列表")
@router.get("/roles", summary="获取角色列表")
async def get_roles(
params: RoleParams = Depends(),
auth: Auth = Depends(FullAdminAuth(permissions=["auth.role.list"]))
......@@ -162,12 +162,12 @@ async def get_roles(
return SuccessResponse(datas, count=count)
@router.post("/v2/roles", summary="创建角色信息")
@router.post("/roles", summary="创建角色信息")
async def create_role(role: schemas.RoleIn, auth: Auth = Depends(FullAdminAuth(permissions=["auth.role.create"]))):
return SuccessResponse(await crud.RoleDal(auth.db).create_data(data=role))
@router.delete("/v2/roles", summary="批量删除角色", description="硬删除, 如果存在用户关联则无法删除")
@router.delete("/roles", summary="批量删除角色", description="硬删除, 如果存在用户关联则无法删除")
async def delete_roles(ids: IdList = Depends(), auth: Auth = Depends(FullAdminAuth(permissions=["auth.role.delete"]))):
if 1 in ids.ids:
return ErrorResponse("不能删除管理员角色")
......@@ -175,7 +175,7 @@ async def delete_roles(ids: IdList = Depends(), auth: Auth = Depends(FullAdminAu
return SuccessResponse("删除成功")
@router.put("/v2/roles/{data_id}", summary="更新角色信息")
@router.put("/roles/{data_id}", summary="更新角色信息")
async def put_role(
data_id: int,
data: schemas.RoleIn,
......@@ -186,12 +186,12 @@ async def put_role(
return SuccessResponse(await crud.RoleDal(auth.db).put_data(data_id, data))
@router.get("/v2/roles/options", summary="获取角色选择项")
@router.get("/roles/options", summary="获取角色选择项")
async def get_role_options(auth: Auth = Depends(FullAdminAuth(permissions=["auth.user.create", "auth.user.update"]))):
return SuccessResponse(await crud.RoleDal(auth.db).get_select_datas())
@router.get("/v2/roles/{data_id}", summary="获取角色信息")
@router.get("/roles/{data_id}", summary="获取角色信息")
async def get_role(
data_id: int,
auth: Auth = Depends(FullAdminAuth(permissions=["auth.role.view", "auth.role.update"]))
......@@ -205,39 +205,39 @@ async def get_role(
###########################################################
# 菜单管理
###########################################################
@router.get("/v2/menus", summary="获取菜单列表")
@router.get("/menus", summary="获取菜单列表")
async def get_menus(auth: Auth = Depends(FullAdminAuth(permissions=["auth.menu.list"]))):
datas = await crud.MenuDal(auth.db).get_tree_list(mode=1)
return SuccessResponse(datas)
@router.get("/v2/menus/tree/options", summary="获取菜单树选择项,添加/修改菜单时使用")
@router.get("/menus/tree/options", summary="获取菜单树选择项,添加/修改菜单时使用")
async def get_menus_options(auth: Auth = Depends(FullAdminAuth(permissions=["auth.menu.create", "auth.menu.update"]))):
datas = await crud.MenuDal(auth.db).get_tree_list(mode=2)
return SuccessResponse(datas)
@router.get("/v2/menus/role/tree/options", summary="获取菜单列表树信息,角色权限使用")
@router.get("/menus/role/tree/options", summary="获取菜单列表树信息,角色权限使用")
async def get_menus_treeselect(
auth: Auth = Depends(FullAdminAuth(permissions=["auth.role.create", "auth.role.update"]))
):
return SuccessResponse(await crud.MenuDal(auth.db).get_tree_list(mode=3))
@router.post("/v2/menus", summary="创建菜单信息")
@router.post("/menus", summary="创建菜单信息")
async def create_menu(menu: schemas.Menu, auth: Auth = Depends(FullAdminAuth(permissions=["auth.menu.create"]))):
if menu.parent_id:
menu.alwaysShow = False
return SuccessResponse(await crud.MenuDal(auth.db).create_data(data=menu))
@router.delete("/v2/menus", summary="批量删除菜单", description="硬删除, 如果存在角色关联则无法删除")
@router.delete("/menus", summary="批量删除菜单", description="硬删除, 如果存在角色关联则无法删除")
async def delete_menus(ids: IdList = Depends(), auth: Auth = Depends(FullAdminAuth(permissions=["auth.menu.delete"]))):
await crud.MenuDal(auth.db).delete_datas(ids.ids, v_soft=False)
return SuccessResponse("删除成功")
@router.put("/v2/menus/{data_id}", summary="更新菜单信息")
@router.put("/menus/{data_id}", summary="更新菜单信息")
async def put_menus(
data_id: int,
data: schemas.Menu, auth: Auth = Depends(FullAdminAuth(permissions=["auth.menu.update"]))
......@@ -245,7 +245,7 @@ async def put_menus(
return SuccessResponse(await crud.MenuDal(auth.db).put_data(data_id, data))
@router.get("/v2/menus/{data_id}", summary="获取菜单信息")
@router.get("/menus/{data_id}", summary="获取菜单信息")
async def get_menus(
data_id: int,
auth: Auth = Depends(FullAdminAuth(permissions=["auth.menu.view", "auth.menu.update"]))
......@@ -254,7 +254,7 @@ async def get_menus(
return SuccessResponse(await crud.MenuDal(auth.db).get_data(data_id, v_schema=schema))
@router.get("/v2/role/menus/tree/{role_id}", summary="获取菜单列表树信息以及角色菜单权限ID,角色权限使用")
@router.get("/role/menus/tree/{role_id}", summary="获取菜单列表树信息以及角色菜单权限ID,角色权限使用")
async def get_role_menu_tree(
role_id: int,
auth: Auth = Depends(FullAdminAuth(permissions=["auth.role.create", "auth.role.update"]))
......@@ -267,7 +267,7 @@ async def get_role_menu_tree(
###########################################################
# 部门管理
###########################################################
@router.get("/v2/depts", summary="获取部门列表")
@router.get("/depts", summary="获取部门列表")
async def get_depts(
params: DeptParams = Depends(),
auth: Auth = Depends(FullAdminAuth())
......@@ -276,29 +276,29 @@ async def get_depts(
return SuccessResponse(datas)
@router.get("/v2/dept/tree/options", summary="获取部门树选择项,添加/修改部门时使用")
@router.get("/dept/tree/options", summary="获取部门树选择项,添加/修改部门时使用")
async def get_dept_options(auth: Auth = Depends(FullAdminAuth())):
datas = await crud.DeptDal(auth.db).get_tree_list(mode=2)
return SuccessResponse(datas)
@router.get("/v2/dept/user/tree/options", summary="获取部门树选择项,添加/修改用户时使用")
@router.get("/dept/user/tree/options", summary="获取部门树选择项,添加/修改用户时使用")
async def get_dept_treeselect(auth: Auth = Depends(FullAdminAuth())):
return SuccessResponse(await crud.DeptDal(auth.db).get_tree_list(mode=3))
@router.post("/v2/depts", summary="创建部门信息")
@router.post("/depts", summary="创建部门信息")
async def create_dept(data: schemas.Dept, auth: Auth = Depends(FullAdminAuth())):
return SuccessResponse(await crud.DeptDal(auth.db).create_data(data=data))
@router.delete("/v2/depts", summary="批量删除部门", description="硬删除, 如果存在用户关联则无法删除")
@router.delete("/depts", summary="批量删除部门", description="硬删除, 如果存在用户关联则无法删除")
async def delete_depts(ids: IdList = Depends(), auth: Auth = Depends(FullAdminAuth())):
await crud.DeptDal(auth.db).delete_datas(ids.ids, v_soft=False)
return SuccessResponse("删除成功")
@router.put("/v2/depts/{data_id}", summary="更新部门信息")
@router.put("/depts/{data_id}", summary="更新部门信息")
async def put_dept(
data_id: int,
data: schemas.Dept,
......
......@@ -96,6 +96,7 @@ def mount_routers(app: FastAPI):
from dbgpt.serve.agent.app.endpoints import router as app_v2
from dbgpt.app.apps.vadmin.auth.utils.login import router as login
from dbgpt.app.apps.vadmin.auth.views import router as views
from dbgpt.app.apps.system.views import router as system_views
app.include_router(api_v1, prefix="/api", tags=["Chat"])
app.include_router(api_v2, prefix="/api", tags=["ChatV2"])
......@@ -105,8 +106,9 @@ def mount_routers(app: FastAPI):
app.include_router(gpts_v1, prefix="/api", tags=["GptsApp"])
app.include_router(app_v2, prefix="/api", tags=["App"])
app.include_router(knowledge_router, tags=["Knowledge"])
app.include_router(login, prefix="/api", tags=["System"])
app.include_router(views, prefix="/api", tags=["System"])
app.include_router(login, prefix="/api/v2/auth", tags=["System"])
app.include_router(views, prefix="/api/v2/vadmin/auth", tags=["System"])
app.include_router(system_views, prefix="/api/v2/vadmin/system", tags=["System"])
def mount_static_files(app: FastAPI):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment