添加修改记录模块

This commit is contained in:
wcq 2023-03-14 10:49:27 +08:00
parent 1825a65085
commit 34f7cb1830
10 changed files with 184 additions and 13 deletions

15
.idea/git_toolbox_prj.xml Normal file
View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GitToolBoxProjectSettings">
<option name="commitMessageIssueKeyValidationOverride">
<BoolValueOverride>
<option name="enabled" value="true" />
</BoolValueOverride>
</option>
<option name="commitMessageValidationEnabledOverride">
<BoolValueOverride>
<option name="enabled" value="true" />
</BoolValueOverride>
</option>
</component>
</project>

View File

@ -3,6 +3,7 @@
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv" />
<excludeFolder url="file://$MODULE_DIR$/jurigged" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
@ -11,4 +12,11 @@
<option name="format" value="PLAIN" />
<option name="myDocStringFormat" value="Plain" />
</component>
<component name="PyNamespacePackagesService">
<option name="namespacePackageFolders">
<list>
<option value="$MODULE_DIR$/Mods" />
</list>
</option>
</component>
</module>

View File

@ -1,5 +1,8 @@
# 全局使用的服务放到这里初始化,作为项目配置输入的入口
from logging import getLogger
from sqlalchemy.orm import declarative_base
from Utils.AuthUtils import AuthUtil, TokenDataModel
from Utils.RedisUtils import RedisPool
from Utils.SqlAlchemyUtils import SqlalchemyConnect
@ -18,7 +21,8 @@ redis_pool = RedisPool(host=conf['redis']['host'], port=int(conf['redis']['port'
redis_pool.connect()
# 共用mysql数据库
common_db = SqlalchemyConnect(host=conf['mysql']['host'],
common_db_base = declarative_base()
common_db = SqlalchemyConnect(common_db_base, host=conf['mysql']['host'],
user=conf['mysql']['user'],
password=conf['mysql']['password'],
db=conf['mysql']['db'])

View File

@ -0,0 +1,40 @@
from sqlalchemy.orm import Session
from .Schemas import EditItemTypeQuery, EditItemTypeAddInfo
from .Models import EditRecord, EditItemType
def edit_item_type_add(db: Session, data: EditItemTypeAddInfo):
item = EditItemType(**data.dict())
db.add(item)
db.commit()
db.refresh(item)
return item
def edit_item_type_delete(db: Session, item_id: int):
db.query(EditItemType).filter_by(id=item_id).delete()
db.commit()
def edit_item_type_query(db: Session, params: EditItemTypeQuery):
params_dict = params.dict()
query = db.query(EditItemType)
db_model = EditItemType
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']
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,43 @@
from Utils.SqlAlchemyUtils import Base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import relationship
from Context.common import common_db
from sqlalchemy import Column, Integer, String, ForeignKey, Text
Base = common_db.Base
class EditRecord(Base):
"""
编辑记录表
"""
__tablename__ = "edit_record"
id = Column(Integer, primary_key=True)
user = Column(String(255))
edit_user = Column(String(128), ForeignKey('user.email'), comment="填报人")
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_type_info = relationship('EditItemType', uselist=False, backref='edit_item_type')
before_edit_data = Column(Text, comment="编辑前的信息json")
after_edit_data = Column(Text, comment="编辑后的信息json")
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()
return data
class EditItemType(Base):
"""
编辑项信息配置表这个表需手动配置
"""
__tablename__ = "edit_item_type"
id = Column(Integer, primary_key=True)
name = Column(String(255), comment="名称")
category = Column(String(255), comment="类别")
def to_dict(self):
data = {c.name: getattr(self, c.name) for c in self.__table__.columns}
return data

View File

@ -0,0 +1,35 @@
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from Context.common import common_db
from . import Schemas
from . import Crud
router = APIRouter(tags=["日报"],
prefix="/api/record")
@router.post("/edit_item_type/add", response_model=Schemas.EditItemTypeAddRes)
def edit_item_type_query(req: Schemas.EditItemTypeAddReq, db: Session = Depends(common_db.get_db)):
item = Crud.edit_item_type_add(db, req)
return Schemas.EditItemTypeAddRes(**item.to_dict())
@router.post("/edit_item_type/delete")
def edit_item_type_delete(req: Schemas.EditItemTypeDeleteReq, db: Session = Depends(common_db.get_db)):
Crud.edit_item_type_delete(db, req.id)
return "删除成功"
@router.post("/edit_item_type/update", response_model=Schemas.EditItemTypeUpdateRes)
def edit_item_type_update(req: Schemas.EditItemTypeUpdateReq, db: Session = Depends(common_db.get_db)):
count, query = Crud.edit_record_update(db, req)
items = [Schemas.EditItemTypeInfo(**item.to_dict()) for item in query]
return Schemas.EditItemTypeQueryRes(count, items)
@router.post("/edit_item_type/query", response_model=Schemas.EditItemTypeQueryRes)
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)

View File

@ -0,0 +1,38 @@
from pydantic import BaseModel
from typing import Optional, List
class EditItemTypeInfo(BaseModel):
id: Optional[int]
name: Optional[str]
category: Optional[str]
class EditItemTypeAddInfo(BaseModel):
name: str
category: str
class EditItemTypeAddReq(EditItemTypeAddInfo):
pass
class EditItemTypeAddRes(EditItemTypeInfo):
pass
class EditItemTypeQuery(EditItemTypeInfo):
pass
class EditItemTypeQueryReq(EditItemTypeQuery):
pass
class EditItemTypeQueryRes(BaseModel):
count: int
items: List[EditItemTypeInfo]
class EditItemTypeDeleteReq(BaseModel):
id: int

View File

@ -2,11 +2,10 @@ from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, Session
Base = declarative_base()
class SqlalchemyConnect:
def __init__(self, host="127.0.0.1", user="", password="", db=""):
def __init__(self, Base: declarative_base, host="127.0.0.1", user="", password="", db=""):
self.Base = Base
self.host = host
self.user = user
self.password = password
@ -43,4 +42,4 @@ class SqlalchemyConnect:
return db
def init_database(self):
Base.metadata.create_all(bind=self.engine)
self.Base.metadata.create_all(bind=self.engine)

View File

@ -1,6 +1,6 @@
from fastapi.exceptions import RequestValidationError
from Config.uvicorn_log_config import uvicorn_log_config
from Middleware.DebugMiddleware import validation_exception_handler, exception_handler
from Utils.MiddlewareUtils import validation_exception_handler, exception_handler
from Utils.PrintUtils import hook_print_exception
from main import app
import uvicorn

View File

@ -3,8 +3,6 @@ from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from Config.uvicorn_log_config import uvicorn_log_config
from Router import HelloRouter
from CrudRouter import StudentCrudRouter
from Context.common import conf
app = FastAPI(
@ -20,8 +18,6 @@ app.add_middleware(
allow_headers=["*"],
)
app.include_router(HelloRouter.router)
app.include_router(StudentCrudRouter.router)
if __name__ == '__main__':
uvicorn.run(app, log_config=uvicorn_log_config, port=int(conf['app']['port']))