creditrating-wcq/IndexStore/AppIndicators/Crud.py

109 lines
3.6 KiB
Python
Raw Permalink Normal View History

2023-02-20 09:44:05 +08:00
from sqlalchemy import or_
from sqlalchemy.orm import Session
from Utils.DataBase.IndexStore.SqlAlchemyUtils import set_next_id
from IndexStore.AppIndicators import Models, Schemas
from Utils.UniqueCoder.TimeSerialNumUtils import create_time_serial_num
from .Models import IndicatorCategory
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 search_indicators(db: Session, schema: Schemas.SearchIndicatorReqBody):
page = 1 if schema.page < 1 else (100 if schema.page > 100 else schema.page)
pagesize = 5 if schema.pagesize < 5 else (20 if schema.pagesize > 20 else schema.pagesize)
items = db.query(Models.Indicator).filter(
or_(Models.Indicator.cname.like("%{}%".format("" if schema.name is None else schema.name)), schema.name is None),
or_(Models.Indicator.nature == schema.nature, schema.nature is None),
or_(Models.Indicator.category_id == schema.category_id, schema.category_id is None)
).offset((page-1)*pagesize).limit(pagesize).all()
count = db.query(Models.Indicator).filter(
or_(Models.Indicator.cname.like("%{}%".format("" if schema.name is None else schema.name)), schema.name is None),
or_(Models.Indicator.nature == schema.nature, schema.nature is None),
or_(Models.Indicator.category_id == schema.category_id, schema.category_id is None)
).count()
return items, count
def create_indicator(db: Session, schema: Schemas.CreateIndicatorReqBody):
item = Models.Indicator(**schema.to_dict())
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):
db.query(Models.Indicator).filter_by(iid=iid).delete()
db.commit()
return True
def edit_indicator(db: Session, iid: str, schema: Schemas.EditIndicatorReqBody):
db.query(Models.Indicator).filter_by(iid=iid).update(schema.del_null_value())
db.commit()
return True
def create_parameter(db: Session, schema: Schemas.EditParamReqBody, _iid: str):
item = Models.Parameters(**schema.dict())
item._iid = _iid
item.pid = create_time_serial_num(prefix="PID", suffix="")
db.add(item)
db.commit()
return True
def delete_parameter(db: Session, pid: str):
db.query(Models.Parameters).filter_by(pid=pid).delete()
db.commit()
def edit_parameter(db: Session, pid: str, schema: Schemas.EditParamReqBody):
db.query(Models.Parameters).filter_by(pid=pid).update(schema.dict())
db.commit()
def get_parameter_by_pid(db: Session, pid: str):
return db.query(Models.Parameters).filter_by(pid=pid).first()
def create_category(db: Session, schema: Schemas.CreateCategoryReqBody):
item = IndicatorCategory(**schema.dict())
item.id = set_next_id(db=db, num_len=3, prefix="CATEGORY", model=IndicatorCategory)
db.add(item)
db.commit()
return True
def get_category_by_name(db: Session, title: str):
item = db.query(Models.IndicatorCategory).filter_by(title=title).first()
return item
def get_category_by_id(db: Session, category_id: str):
item = db.query(Models.IndicatorCategory).filter_by(id=category_id).first()
return item
def delete_category(db: Session, category_id: str):
db.query(Models.IndicatorCategory).filter_by(id=category_id).delete()
db.commit()
return True
def list_category(db: Session):
return db.query(Models.IndicatorCategory).order_by(Models.IndicatorCategory.id.asc()).all()