indexstore/AppIndicators/Router.py

189 lines
6.8 KiB
Python
Raw Normal View History

2022-11-08 23:48:57 +08:00
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from sqlalchemy.exc import IntegrityError
2022-11-20 17:23:28 +08:00
from . import Crud, Schemas
2022-11-08 23:48:57 +08:00
from Utils.AccessControl.AccessUtil import rbac
2022-11-20 17:23:28 +08:00
from Utils.DataBase.SqlAlchemyUtils import get_db
2022-11-08 23:48:57 +08:00
router = APIRouter(
prefix="/api/index_store",
dependencies=[Depends(rbac)]
)
# 新建指标
@router.post("/create", summary='新建指标', tags=["指标"], response_model=Schemas.CreateIndicatorResBody)
2022-11-20 23:20:27 +08:00
def func(schema: Schemas.CreateIndicatorReqBody, db: Session = Depends(get_db)):
2022-11-08 23:48:57 +08:00
index_obj = Crud.get_indicator_by_ename(db, ename=schema.ename)
if index_obj:
raise HTTPException(status_code=202, detail="Indicator Already Registered")
category_obj = Crud.get_category_by_id(db=db, category_id=schema.category_id)
if not category_obj:
2022-11-10 01:05:35 +08:00
raise HTTPException(status_code=404, detail="Category Not Found")
2022-11-08 23:48:57 +08:00
index_obj = Crud.create_indicator(db=db, schema=schema)
parameters_item = schema.parameters
for parameter in parameters_item:
Crud.create_parameter(db=db, schema=parameter, _iid=index_obj.iid)
return {"iid": index_obj.iid}
# 删除指标
@router.post("/delete/{iid}", summary='删除指标', tags=["指标"])
2022-11-20 23:20:27 +08:00
def func(iid: str, db: Session = Depends(get_db)):
2022-11-08 23:48:57 +08:00
index_obj = Crud.get_indicator_by_iid(db=db, iid=iid)
if not index_obj:
2022-11-10 01:05:35 +08:00
raise HTTPException(status_code=404, detail="Indicator Not Existed")
2022-11-08 23:48:57 +08:00
Crud.delete_indicator(db=db, iid=iid)
return {"info": "Success"}
# 编辑指标
@router.post("/edit/{iid}", summary='编辑指标', tags=["指标"])
2022-11-20 23:20:27 +08:00
def func(iid: str, schema: Schemas.EditIndicatorReqBody, db: Session = Depends(get_db)):
2022-11-08 23:48:57 +08:00
index_obj = Crud.get_indicator_by_iid(db=db, iid=iid)
if not index_obj:
2022-11-10 01:05:35 +08:00
raise HTTPException(status_code=404, detail="Indicator Not Found")
2022-11-08 23:48:57 +08:00
category_obj = Crud.get_category_by_id(db=db, category_id=schema.category_id)
if not category_obj:
2022-11-10 01:05:35 +08:00
raise HTTPException(status_code=404, detail="Category Not Found")
2022-11-08 23:48:57 +08:00
Crud.edit_indicator(db=db, schema=schema, iid=iid)
return {"info": "Success"}
# 查看指标
2022-11-10 01:42:40 +08:00
@router.get("/view/{iid}", summary='查看指标', tags=["指标"], response_model=Schemas.ViewIndicatorResBody)
2022-11-20 23:20:27 +08:00
def func(iid: str, db: Session = Depends(get_db)):
2022-11-08 23:48:57 +08:00
index_obj = Crud.get_indicator_by_iid(db, iid=iid)
if index_obj is None:
2022-11-10 01:05:35 +08:00
raise HTTPException(status_code=404, detail="Indicator Not Found")
2022-11-08 23:48:57 +08:00
return index_obj.to_dict()
2022-11-20 23:45:23 +08:00
@router.get("/view_by_ename/{ename}", summary='查看指标', tags=["指标"])
2022-11-20 23:20:27 +08:00
def func(ename: str, db: Session = Depends(get_db)):
index_obj = Crud.get_indicator_by_ename(db, ename=ename)
if index_obj is None:
raise HTTPException(status_code=404, detail="Indicator Not Found")
return {"id": index_obj.ename, "name": index_obj.cname}
2022-11-08 23:48:57 +08:00
# 查询指标描述
@router.post("/describe/{iid}", summary='查看指标描述', tags=["指标"], response_model=Schemas.IndicatorDescribeResBody)
2022-11-20 23:20:27 +08:00
def func(iid: str, db: Session = Depends(get_db)):
2022-11-08 23:48:57 +08:00
index_obj = Crud.get_indicator_by_iid(db, iid=iid)
if not index_obj:
2022-11-10 01:05:35 +08:00
raise HTTPException(status_code=404, detail="Indicator Not Found")
2022-11-08 23:48:57 +08:00
return index_obj.to_dict()
# 查询指标
2022-11-10 01:42:40 +08:00
@router.post("/search", summary='查询指标', tags=["指标"], response_model=Schemas.SearchIndicatorResBody)
2022-11-20 23:20:27 +08:00
def func(schema: Schemas.SearchIndicatorReqBody, db: Session = Depends(get_db)):
2022-11-08 23:48:57 +08:00
indicators, total = Crud.search_indicators(db, schema=schema)
2022-11-10 01:42:40 +08:00
items = [Schemas.ViewIndicatorResBody(**indicator.to_dict()).dict() for indicator in indicators]
return {"items": items, "total": total}
2022-11-08 23:48:57 +08:00
2022-11-10 01:42:40 +08:00
@router.post("/register", summary='注册指标', tags=["指标"])
2022-11-20 23:20:27 +08:00
def func(schema: Schemas.RegisterIndicatorReqBody, db: Session = Depends(get_db)):
2022-11-09 00:52:24 +08:00
index_obj = Crud.get_indicator_by_ename(db, ename=schema.ename)
if index_obj:
raise HTTPException(status_code=202, detail="Indicator Already Registered")
category_obj = Crud.get_category_by_name(db=db, title=schema.category)
if not category_obj:
2022-11-10 01:05:35 +08:00
raise HTTPException(status_code=404, detail="Category Not Found")
2022-11-09 00:52:24 +08:00
real_schema = schema.dict()
real_schema.pop("category")
real_schema.update({"category_id": category_obj.id})
real_schema = Schemas.CreateIndicatorReqBody(**real_schema)
index_obj = Crud.create_indicator(db=db, schema=real_schema)
parameters_item = schema.parameters
for parameter in parameters_item:
Crud.create_parameter(db=db, schema=parameter, _iid=index_obj.iid)
2022-11-10 01:42:40 +08:00
return {"info": "Success"}
2022-11-09 00:52:24 +08:00
2022-11-08 23:48:57 +08:00
# 新建参数
@router.post("/param/create/{iid}", summary='新建参数', tags=["指标参数"])
2022-11-20 23:20:27 +08:00
def func(iid: str, body: Schemas.EditParamReqBody, db: Session = Depends(get_db)):
2022-11-08 23:48:57 +08:00
index_obj = Crud.get_indicator_by_iid(db=db, iid=iid)
if not index_obj:
2022-11-10 01:05:35 +08:00
raise HTTPException(status_code=404, detail="Indicator Not Found")
2022-11-08 23:48:57 +08:00
Crud.create_parameter(db=db, schema=body, _iid=iid)
return {"info": "Success"}
@router.post("/param/edit/{pid}", summary='编辑参数', tags=["指标参数"])
2022-11-20 23:20:27 +08:00
def func(pid: str, schema: Schemas.EditParamReqBody, db: Session = Depends(get_db)):
2022-11-08 23:48:57 +08:00
data = Crud.get_parameter_by_pid(db=db, pid=pid)
if not data:
2022-11-10 01:05:35 +08:00
raise HTTPException(status_code=404, detail="Parameter Not Existed")
2022-11-08 23:48:57 +08:00
Crud.edit_parameter(db=db, pid=pid, schema=schema)
return {"info": "Success"}
# 删除参数
@router.post("/param/delete/{pid}", summary='删除参数', tags=["指标参数"])
2022-11-20 23:20:27 +08:00
def func(pid: str, db: Session = Depends(get_db)):
2022-11-08 23:48:57 +08:00
data = Crud.get_parameter_by_pid(db=db, pid=pid)
if not data:
2022-11-10 01:05:35 +08:00
raise HTTPException(status_code=404, detail="Parameter Not Existed")
2022-11-08 23:48:57 +08:00
Crud.delete_parameter(db=db, pid=pid)
return {"info": "Success"}
@router.post("/category/create", summary="新建分类", tags=["指标分类"])
2022-11-20 23:20:27 +08:00
def func(schema: Schemas.CreateCategoryReqBody, db: Session = Depends(get_db)):
2022-11-08 23:48:57 +08:00
data = Crud.get_category_by_name(db=db, title=schema.title)
if data:
raise HTTPException(status_code=202, detail="Category Already Existed")
Crud.create_category(db=db, schema=schema)
return {"info": "Success"}
@router.post("/category/delete", summary="删除分类", tags=["指标分类"])
2022-11-20 23:20:27 +08:00
def func(schema: Schemas.DeleteCategoryReqBody, db: Session = Depends(get_db)):
2022-11-08 23:48:57 +08:00
data = Crud.get_category_by_id(db=db, category_id=schema.category_id)
if not data:
2022-11-10 01:05:35 +08:00
raise HTTPException(status_code=404, detail="Category Not Found")
2022-11-08 23:48:57 +08:00
try:
Crud.delete_category(db=db, category_id=schema.category_id)
except IntegrityError:
2022-11-10 01:05:35 +08:00
raise HTTPException(status_code=202, detail="Category Is Being Used")
2022-11-08 23:48:57 +08:00
return {"info": "Success"}
@router.post("/category/list", summary="分类列表", tags=["指标分类"])
2022-11-20 23:20:27 +08:00
def func(db: Session = Depends(get_db)):
2022-11-08 23:48:57 +08:00
category_objs = Crud.list_category(db=db)
return [obj.to_kv() for obj in category_objs]