indexstore/AppIndicators/Crud.py

88 lines
2.9 KiB
Python

from fastapi import HTTPException
from sqlalchemy import or_
from sqlalchemy.orm import Session
from . import Models, Schemas
from Utils.UniqueCoder.TimeSerialNumUtils import create_time_serial_num
def get_indicator_by_iid(db: Session, iid: str):
return db.query(Models.Indicator).filter(Models.Indicator.iid == iid).first()
def get_indicator_by_ename(db: Session, ename: str):
return db.query(Models.Indicator).filter(Models.Indicator.ename == ename).first()
def get_indicator_description_by_iid(db: Session, iid: str):
return db.query(Models.Indicator).with_entities(Models.Indicator.description).filter(Models.Indicator.iid == iid).first()
def search_indicators(db: Session, body: Schemas.IndicatorSearch, page: int, pagesize: int):
items = db.query(Models.Indicator).filter(
or_(Models.Indicator.cname.like("%{}%".format("" if body.name is None else body.name)), body.name is None),
or_(Models.Indicator.nature == body.nature, body.nature is None),
or_(Models.Indicator.category == body.category, body.category is None)
).offset((page-1)*pagesize).limit(pagesize).all()
count = db.query(Models.Indicator).filter(
or_(Models.Indicator.cname.like("%{}%".format("" if body.name is None else body.name)), body.name is None),
or_(Models.Indicator.nature == body.nature, body.nature is None),
or_(Models.Indicator.category == body.category, body.category is None)
).count()
return items, count
def create_indicator(db: Session, body: Schemas.IndicatorCreate):
indicator = body.dict()
indicator.pop("parameters")
item = Models.Indicator(**indicator)
item.iid = create_time_serial_num(prefix="IID", suffix="")
db.add(item)
db.commit()
db.refresh(item)
return item
def delete_indicator(db: Session, iid: str):
data = db.query(Models.Indicator).filter_by(iid=iid).first()
if not data:
raise HTTPException(status_code=400, detail="Indicator Not Existed")
db.query(Models.Indicator).filter_by(iid=iid).delete()
db.commit()
def edit_indicator(db: Session, iid: str, body: Schemas.IndicatorEdit):
db.query(Models.Indicator).filter_by(iid=iid).update(body.dict())
db.commit()
return db.query(Models.Indicator).filter(Models.Indicator.iid == iid).first()
def create_indicator_parameter(db: Session, body: Schemas.ParameterBase, _iid: str):
item = Models.Parameters(**body.dict())
item._iid = _iid
item.pid = create_time_serial_num(prefix="PID", suffix="")
db.add(item)
db.commit()
db.refresh(item)
return item
def delete_indicator_parameter(db: Session, pid: str):
db.query(Models.Parameters).filter_by(pid=pid).delete()
db.commit()
def edit_indicator_parameter(db: Session, pid: str, body: Schemas.ParameterEdit):
db.query(Models.Parameters).filter_by(pid=pid).update(body.dict())
db.commit()
def get_parameter_by_pid(db: Session, pid: str):
return db.query(Models.Parameters).filter_by(pid=pid).first()