rate-sys-template/Mods/User/InstitutionUser/Crud.py

71 lines
2.4 KiB
Python

from sqlalchemy.orm import Session
from . import Schemas
from .Models import InstitutionUser
from sqlalchemy import and_
def institution_user_add(db: Session, data: Schemas.InstitutionUserAddInfo):
item = InstitutionUser(**data.dict())
db.add(item)
db.commit()
db.refresh(item)
return item
def institution_user_delete(db: Session, item_id: str):
db.query(InstitutionUser).filter_by(id=item_id).delete()
db.commit()
def institution_user_update(db: Session, data: Schemas.InstitutionUserUpdateInfo):
db.query(InstitutionUser).filter_by(id=data.id).update({key: v for key, v in data.dict().items() if v is not None})
db.commit()
item = db.query(InstitutionUser).filter_by(id=data.id).first()
return item
def institution_user_get(db: Session, item_id: str):
item = db.query(InstitutionUser).filter_by(id=item_id).first()
return item
def institution_user_get_by_email(db: Session, email: str):
item = db.query(InstitutionUser).filter_by(email=email).first()
return item
def institution_user_get_by_institution_name(db: Session, institution_name: str):
item = db.query(InstitutionUser).filter_by(institution_name=institution_name).first()
return item
def institution_user_query(db: Session, params: Schemas.InstitutionUserQuery):
params_dict = params.dict()
query = db.query(InstitutionUser)
db_model = InstitutionUser
for key, value in params_dict.items():
if key not in ['page', 'page_size'] and value is not None:
if type(value) == str:
query = query.filter(getattr(db_model, key).like(f'%{value}%'))
elif type(value) in [int, float, bool]:
query = query.filter_by(**{key: value})
else:
query = query.filter(getattr(db_model, key) == value)
count = query.count()
page = None
page_size = None
if 'page' in params_dict:
page = params_dict['page']
if 'page_size' in params_dict:
page_size = params_dict['page_size']
# 页数不超过100
if page is not None and page_size is not None:
page_size = min(page_size, 100)
query = query.offset((page - 1) * page_size).limit(page_size).all()
return count, query
def login_by_passwd_check(db: Session, email: str, passwd_hashed: str):
return db.query(InstitutionUser).filter(and_(InstitutionUser.email == email, InstitutionUser.passwd == passwd_hashed)).first()
################