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()