添加修改记录增删改查接口

This commit is contained in:
wcq 2023-03-14 13:39:40 +08:00
parent 557249420d
commit 229fa2b226
5 changed files with 198 additions and 17 deletions

View File

@ -1,9 +1,9 @@
from sqlalchemy.orm import Session
from .Schemas import EditItemTypeQuery, EditItemTypeAddInfo, EditItemTypeUpdateInfo
from . import Schemas
from .Models import EditRecord, EditItemType
def edit_item_type_add(db: Session, data: EditItemTypeAddInfo):
def edit_item_type_add(db: Session, data: Schemas.EditItemTypeAddInfo):
item = EditItemType(**data.dict())
db.add(item)
db.commit()
@ -16,8 +16,8 @@ def edit_item_type_delete(db: Session, item_id: int):
db.commit()
def edit_item_type_update(db: Session, data: EditItemTypeUpdateInfo):
db.query(EditItemType).filter_by(id=data.id).update(data.dict())
def edit_item_type_update(db: Session, data: Schemas.EditItemTypeUpdateInfo):
db.query(EditItemType).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(EditItemType).filter_by(id=data.id).first()
return item
@ -28,7 +28,7 @@ def edit_item_type_get(db: Session, item_id: int):
return item
def edit_item_type_query(db: Session, params: EditItemTypeQuery):
def edit_item_type_query(db: Session, params: Schemas.EditItemTypeQuery):
params_dict = params.dict()
query = db.query(EditItemType)
db_model = EditItemType
@ -47,6 +47,62 @@ def edit_item_type_query(db: Session, params: EditItemTypeQuery):
page = params_dict['page']
if 'page_size' in params_dict:
page_size = params_dict['page_size']
# 页数不超过100
page_size = min(page_size, 100)
if page is not None and page_size is not None:
query = query.offset((page - 1) * page_size).limit(page_size).all()
return count, query
#################
def edit_record_add(db: Session, data: Schemas.EditRecordAddInfo):
item = EditRecord(**data.dict())
db.add(item)
db.commit()
db.refresh(item)
return item
def edit_record_delete(db: Session, item_id: int):
db.query(EditRecord).filter_by(id=item_id).delete()
db.commit()
def edit_record_update(db: Session, data: Schemas.EditRecordUpdateInfo):
db.query(EditRecord).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(EditRecord).filter_by(id=data.id).first()
return item
def edit_record_get(db: Session, item_id: int):
item = db.query(EditRecord).filter_by(id=item_id).first()
return item
def edit_record_query(db: Session, params: Schemas.EditRecordQuery):
params_dict = params.dict()
query = db.query(EditRecord)
db_model = EditRecord
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
page_size = min(page_size, 100)
if page is not None and page_size is not None:
query = query.offset((page - 1) * page_size).limit(page_size).all()
return count, query

View File

@ -1,7 +1,7 @@
from sqlalchemy.orm import relationship
from Context.common import common_db
from sqlalchemy import Column, Integer, String, ForeignKey, Text
from sqlalchemy import Column, Integer, String, ForeignKey, Text, DateTime, func
from Mods.User.Models import User
@ -11,20 +11,22 @@ class EditRecord(common_db.Base):
"""
__tablename__ = "edit_record"
id = Column(Integer, primary_key=True)
edit_user = Column(String(128), ForeignKey('user.email'), comment="填报人")
edit_user = Column(String(128), ForeignKey('user.email'), comment="填报人", nullable=False)
user_info = relationship('User', uselist=False, backref='user')
item_id = Column(Integer, comment="编辑项id")
item_type_id = Column(Integer, ForeignKey('edit_item_type.id'), comment="编辑项类型信息")
item_id = Column(Integer, comment="编辑项id", nullable=False)
item_type_id = Column(Integer, ForeignKey('edit_item_type.id'), comment="编辑项类型信息", nullable=False)
item_type_info = relationship('EditItemType', uselist=False, backref='edit_item_type')
before_edit_data = Column(Text, comment="编辑前的信息json")
after_edit_data = Column(Text, comment="编辑后的信息json")
edit_time = Column(DateTime, server_default=func.now(), comment='编辑时间')
create_time = Column(DateTime, server_default=func.now(), comment='创建时间')
def to_dict(self):
data = {c.name: getattr(self, c.name) for c in self.__table__.columns}
user_info = getattr(self, 'user_info')
data['user_info'] = user_info.to_dict()
item_type_info = getattr(self, 'item_type_info')
data['item_type_info'] = item_type_info.to_dict()
user_info = getattr(self, 'user_info')
data['user_info'] = user_info.to_dict()
return data
@ -34,8 +36,8 @@ class EditItemType(common_db.Base):
"""
__tablename__ = "edit_item_type"
id = Column(Integer, primary_key=True)
name = Column(String(255), comment="名称")
category = Column(String(255), comment="类别")
name = Column(String(255), comment="名称", nullable=False)
category = Column(String(255), comment="类别", nullable=False)
def to_dict(self):
data = {c.name: getattr(self, c.name) for c in self.__table__.columns}

View File

@ -1,4 +1,4 @@
from fastapi import APIRouter, Depends
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from Context.common import common_db
@ -28,8 +28,10 @@ def edit_item_type_update(req: Schemas.EditItemTypeUpdateReq, db: Session = Depe
@router.post("/edit_item_type/get", summary="获取修改项类型", response_model=Schemas.EditItemTypeGetRes)
def edit_item_type_update(req: Schemas.EditItemTypeGetReq, db: Session = Depends(common_db.get_db)):
item = Crud.edit_item_type_get(db, req)
def edit_item_type_get(req: Schemas.EditItemTypeGetReq, db: Session = Depends(common_db.get_db)):
item = Crud.edit_item_type_get(db, req.id)
if not item:
raise HTTPException(detail="未查询到信息", status_code=404)
return Schemas.EditItemTypeGetRes(**item.to_dict())
@ -37,4 +39,39 @@ def edit_item_type_update(req: Schemas.EditItemTypeGetReq, db: Session = Depends
def edit_item_type_query(req: Schemas.EditItemTypeQueryReq, db: Session = Depends(common_db.get_db)):
count, query = Crud.edit_item_type_query(db, req)
items = [Schemas.EditItemTypeInfo(**item.to_dict()) for item in query]
return Schemas.EditItemTypeQueryRes(count, items)
return Schemas.EditItemTypeQueryRes(count=count, items=items)
#########
@router.post("/edit_record/add", summary="添加编辑记录", response_model=Schemas.EditRecordAddRes)
def edit_record_query(req: Schemas.EditRecordAddReq, db: Session = Depends(common_db.get_db)):
item = Crud.edit_record_add(db, req)
return Schemas.EditRecordAddRes(**item.to_dict())
@router.post("/edit_record/delete", summary="删除编辑记录")
def edit_record_delete(req: Schemas.EditRecordDeleteReq, db: Session = Depends(common_db.get_db)):
Crud.edit_record_delete(db, req.id)
return "删除成功"
@router.post("/edit_record/update", summary="更新编辑记录", response_model=Schemas.EditRecordUpdateRes)
def edit_record_update(req: Schemas.EditRecordUpdateReq, db: Session = Depends(common_db.get_db)):
item = Crud.edit_record_update(db, req)
return Schemas.EditRecordUpdateRes(**item.to_dict())
@router.post("/edit_record/get", summary="获取编辑记录", response_model=Schemas.EditRecordGetRes)
def edit_record_get(req: Schemas.EditRecordGetReq, db: Session = Depends(common_db.get_db)):
item = Crud.edit_record_get(db, req.id)
if not item:
raise HTTPException(detail="未查询到信息", status_code=404)
return Schemas.EditRecordGetRes(**item.to_dict())
@router.post("/edit_record/query", summary="查询编辑记录", response_model=Schemas.EditRecordQueryRes)
def edit_record_query(req: Schemas.EditRecordQueryReq, db: Session = Depends(common_db.get_db)):
count, query = Crud.edit_record_query(db, req)
items = [Schemas.EditRecordFullInfo(**item.to_dict()) for item in query]
return Schemas.EditRecordQueryRes(count=count, items=items)

View File

@ -1,6 +1,10 @@
from datetime import datetime
from pydantic import BaseModel
from typing import Optional, List
from Mods.User.Schemas import UserInfo
class EditItemTypeInfo(BaseModel):
id: Optional[int]
@ -56,3 +60,76 @@ class EditItemTypeQueryRes(BaseModel):
class EditItemTypeDeleteReq(BaseModel):
id: int
#######################
class EditRecordInfo(BaseModel):
id: Optional[int]
edit_user: Optional[str]
item_id: Optional[int]
item_type_id: Optional[int]
before_edit_data: Optional[str]
after_edit_data: Optional[str]
edit_time: Optional[datetime]
create_time: Optional[datetime]
class EditRecordFullInfo(EditRecordInfo):
user_info: Optional[UserInfo]
item_type_info: EditItemTypeInfo
class EditRecordAddInfo(BaseModel):
edit_user: str
item_id: int
item_type_id: int
before_edit_data: Optional[str]
after_edit_data: Optional[str]
class EditRecordAddReq(EditRecordAddInfo):
pass
class EditRecordAddRes(EditRecordInfo):
pass
class EditRecordUpdateInfo(EditRecordInfo):
pass
class EditRecordUpdateReq(EditRecordUpdateInfo):
pass
class EditRecordUpdateRes(EditRecordInfo):
pass
class EditRecordQuery(EditRecordInfo):
pass
class EditRecordQueryReq(EditRecordQuery):
pass
class EditRecordGetReq(BaseModel):
id: int
class EditRecordGetRes(EditRecordFullInfo):
pass
class EditRecordQueryRes(BaseModel):
count: int
items: List[EditRecordFullInfo]
class EditRecordDeleteReq(BaseModel):
id: int
##########

View File

@ -0,0 +1,9 @@
from pydantic import BaseModel
class UserInfo(BaseModel):
email: str
name: str
post: str
department: str
registered: bool