添加修改记录模块
This commit is contained in:
parent
1825a65085
commit
34f7cb1830
|
@ -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>
|
|
@ -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>
|
|
@ -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'])
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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)
|
|
@ -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
|
|
@ -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)
|
||||
|
|
2
debug.py
2
debug.py
|
@ -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
|
||||
|
|
4
main.py
4
main.py
|
@ -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']))
|
||||
|
|
Loading…
Reference in New Issue