feat: init project
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
from datetime import datetime, timezone, timedelta, date
|
||||
|
||||
from pydantic import model_validator
|
||||
from sqlmodel import SQLModel, Field
|
||||
|
||||
# 定义北京时区(UTC+8)
|
||||
beijing_timezone = timezone(timedelta(hours=8))
|
||||
|
||||
# 定义获取当前北京时区时间的匿名函数,用于默认值生成
|
||||
current_datetime = lambda: datetime.now(beijing_timezone)
|
||||
|
||||
|
||||
# 定义基础模型类,所有其他模型类的父类,包含通用字段和配置
|
||||
class BasicModel(SQLModel):
|
||||
# 唯一标识字段,主键,默认为None(通常由系统生成),描述为“唯一标识,编号”
|
||||
id: str = Field(default=None, primary_key=True, description="唯一标识,编号")
|
||||
# 创建时间字段,默认值为当前北京时区时间,描述为“创建时间”
|
||||
created_at: datetime = Field(default_factory=current_datetime, description="创建时间")
|
||||
# 更新时间字段,默认值为当前北京时区时间,描述为“更新时间”
|
||||
updated_at: datetime = Field(default_factory=current_datetime, description="更新时间")
|
||||
# 创建人ID字段,默认为None,描述为“创建人id”
|
||||
created_by: str | None = Field(default=None, description="创建人id")
|
||||
# 更新人ID字段,默认为None,描述为“更新人id”
|
||||
updated_by: str | None = Field(default=None, description="更新人id")
|
||||
|
||||
# 模型配置类,用于设置JSON序列化等配置
|
||||
class Config:
|
||||
# 定义datetime和date类型的JSON编码器,将其格式化为指定字符串
|
||||
json_encoders = {
|
||||
# 若为datetime类型,格式化为“年-月-日 时:分:秒”,若为None则保持None
|
||||
datetime: lambda dt: dt.strftime("%Y-%m-%d %H:%M:%S") if dt is not None else None,
|
||||
# 若为date类型,格式化为“年-月-日”,若为None则保持None
|
||||
date: lambda dt: dt.strftime("%Y-%m-%d") if dt is not None else None
|
||||
}
|
||||
|
||||
# 定义模型验证器,在数据解析前(mode='before')执行,用于处理字符串格式的日期时间
|
||||
@model_validator(mode='before')
|
||||
def parse_string_datetimes(cls, data: dict) -> dict:
|
||||
# 处理datetime类型字段:将字符串格式的日期时间转换为datetime对象
|
||||
datetime_fields = {
|
||||
k: datetime.strptime(v, "%Y-%m-%d %H:%M:%S") # 使用strptime解析字符串为datetime
|
||||
for k, v in data.items() # 遍历输入数据的键值对
|
||||
if isinstance(v, str) # 只处理值为字符串的项
|
||||
and k in cls.model_fields # 键必须是模型中定义的字段
|
||||
and cls.model_fields[k].annotation is datetime # 字段的注解类型是datetime
|
||||
}
|
||||
# 处理date类型字段:将字符串格式的日期转换为date对象(通过datetime解析后取date部分)
|
||||
date_fields = {
|
||||
k: datetime.strptime(v, "%Y-%m-%d").date() # 使用strptime解析字符串为datetime后取date
|
||||
for k, v in data.items() # 遍历输入数据的键值对
|
||||
if isinstance(v, str) # 只处理值为字符串的项
|
||||
and k in cls.model_fields # 键必须是模型中定义的字段
|
||||
and cls.model_fields[k].annotation is date # 字段的注解类型是date
|
||||
}
|
||||
# 打印转换后的datetime字段,用于调试
|
||||
# print("datetime_fields", datetime_fields)
|
||||
# 合并原始数据、转换后的datetime字段和date字段,转换后的字段会覆盖原始数据中的对应键
|
||||
result = {**data, **datetime_fields, **date_fields}
|
||||
# 打印合并后的结果,用于调试
|
||||
# print("result", result)
|
||||
# 返回处理后的数据字典
|
||||
return result
|
||||
@@ -0,0 +1,15 @@
|
||||
from sqlmodel import Field
|
||||
|
||||
from app.model.BasicModel import BasicModel
|
||||
from app.utils.create_module_service import create_model_service
|
||||
|
||||
|
||||
class LgApprove(BasicModel, table=True):
|
||||
__tablename__ = "lg_approve"
|
||||
|
||||
status: str = Field(default=None, description="报销单的状态")
|
||||
remarks: str = Field(default=None, description="报销备注信息")
|
||||
result_content: str = Field(default=None, description="审批结果信息")
|
||||
|
||||
|
||||
LgApproveService = create_model_service(LgApprove)
|
||||
@@ -0,0 +1,13 @@
|
||||
from sqlmodel import Field
|
||||
|
||||
from app.model.BasicModel import BasicModel
|
||||
from app.utils.create_module_service import create_model_service
|
||||
|
||||
|
||||
class LgChat(BasicModel, table=True):
|
||||
__tablename__ = "lg_chat"
|
||||
|
||||
title: str = Field(default=None, description="会话标题")
|
||||
|
||||
|
||||
LgChatService = create_model_service(LgChat)
|
||||
@@ -0,0 +1,16 @@
|
||||
from sqlmodel import Field
|
||||
|
||||
from app.model.BasicModel import BasicModel
|
||||
from app.utils.create_module_service import create_model_service
|
||||
|
||||
|
||||
class LgMessage(BasicModel, table=True):
|
||||
__tablename__ = "lg_message"
|
||||
|
||||
title: str = Field(default=None, description="消息标题")
|
||||
content: str = Field(default=None, description="消息内容")
|
||||
status: str = Field(default=None, description="消息的状态")
|
||||
render_configs: str = Field(default=None, description="渲染配置")
|
||||
|
||||
|
||||
LgMessageService = create_model_service(LgMessage)
|
||||
@@ -0,0 +1,16 @@
|
||||
from datetime import datetime
|
||||
|
||||
from sqlmodel import Field
|
||||
|
||||
from app.model.BasicModel import BasicModel
|
||||
from app.utils.create_module_service import create_model_service
|
||||
|
||||
|
||||
class LlmOrder(BasicModel, table=True):
|
||||
__tablename__ = "llm_order"
|
||||
|
||||
prod_id: str = Field(default=None, description="商品ID")
|
||||
user_id: str = Field(default=None, description="用户ID")
|
||||
|
||||
|
||||
LlmOrderService = create_model_service(LlmOrder)
|
||||
@@ -0,0 +1,18 @@
|
||||
from datetime import datetime
|
||||
|
||||
from sqlmodel import Field
|
||||
|
||||
from app.model.BasicModel import BasicModel
|
||||
from app.utils.create_module_service import create_model_service
|
||||
|
||||
|
||||
class LlmProduct(BasicModel, table=True):
|
||||
__tablename__ = "llm_product"
|
||||
|
||||
name: str = Field(default=None, description="商品名称")
|
||||
price: float = Field(default=None, description="商品价格")
|
||||
valid_start: datetime = Field(default=None, description="商品有效开始时间")
|
||||
valid_end: datetime = Field(default=None, description="商品有效结束时间")
|
||||
|
||||
|
||||
LlmProductService = create_model_service(LlmProduct)
|
||||
@@ -0,0 +1,15 @@
|
||||
from datetime import datetime
|
||||
|
||||
from sqlmodel import Field
|
||||
|
||||
from app.model.BasicModel import BasicModel
|
||||
|
||||
|
||||
class LlmUser(BasicModel, table=True):
|
||||
__tablename__ = "llm_user"
|
||||
|
||||
full_name: str = Field(default=None, description="用户名称")
|
||||
username: str = Field(default=None, description="用户名")
|
||||
password: str = Field(default=None, description="用户密码")
|
||||
member_start: datetime = Field(default=None, description="开通会员时间")
|
||||
member_end: datetime = Field(default=None, description="会员截止到期时间")
|
||||
Reference in New Issue
Block a user