Reorganized model structure by replacing 'object' and 'items' with a unified 'item' model using UUIDs, and moved base model logic into separate files. Updated routes to use the new item model and improved request/response handling. Enhanced user and setting models, added utility functions, and improved error handling throughout the codebase. Also added initial .idea project files and minor admin API improvements. Co-Authored-By: 砂糖橘 <54745033+Foxerine@users.noreply.github.com>
78 lines
1.9 KiB
Python
78 lines
1.9 KiB
Python
from datetime import datetime
|
|
from enum import StrEnum
|
|
from typing import TYPE_CHECKING, Self, Optional
|
|
from uuid import UUID
|
|
|
|
from sqlmodel import Field, Relationship
|
|
|
|
from .base import SQLModelBase, UUIDTableBase
|
|
|
|
if TYPE_CHECKING:
|
|
from .user import User
|
|
|
|
class ItemTypeEnum(StrEnum):
|
|
normal = 'normal'
|
|
car = 'car'
|
|
|
|
class ItemStatusEnum(StrEnum):
|
|
ok = 'ok'
|
|
lost = 'lost'
|
|
|
|
class ItemBase(SQLModelBase):
|
|
type: ItemTypeEnum = ItemTypeEnum.normal
|
|
"""物品的类型"""
|
|
|
|
name: str
|
|
"""物品名称"""
|
|
|
|
icon: str | None = None
|
|
"""物品图标"""
|
|
|
|
status: ItemStatusEnum = ItemStatusEnum.ok
|
|
"""物品状态"""
|
|
|
|
phone: str | None = None
|
|
"""联系电话"""
|
|
|
|
description: str | None = None
|
|
"""物品描述"""
|
|
|
|
class Item(ItemBase, UUIDTableBase, table=True):
|
|
expires_at: datetime | None = None
|
|
"""物品过期时间"""
|
|
|
|
lost_at: datetime | None = None
|
|
"""物品丢失的时间"""
|
|
|
|
find_ip: str | None = None
|
|
"""最后一次发现的IP地址"""
|
|
|
|
user_id: UUID = Field(foreign_key='user.id', ondelete='CASCADE')
|
|
"""所属用户ID"""
|
|
|
|
user: 'User' = Relationship(back_populates='items')
|
|
|
|
parent_item_id: UUID | None = Field(foreign_key='item.id', ondelete='RESTRICT')
|
|
parent_item: Optional['Item'] = Relationship(back_populates='sub_items', sa_relationship_kwargs={'remote_side': 'Item.id'})
|
|
sub_items: list['Item'] = Relationship(back_populates='parent_item', passive_deletes='all')
|
|
|
|
class ItemDataUpdateRequest(ItemBase):
|
|
pass
|
|
|
|
class ItemDataResponse(ItemBase):
|
|
expires_at: datetime | None = None
|
|
"""物品过期时间"""
|
|
|
|
lost_at: datetime | None = None
|
|
"""物品丢失的时间"""
|
|
|
|
class ItemDataResponseAdmin(ItemBase):
|
|
expires_at: datetime | None = None
|
|
"""物品过期时间"""
|
|
|
|
lost_at: datetime | None = None
|
|
"""物品丢失的时间"""
|
|
|
|
user_id: UUID = Field(foreign_key='user.id')
|
|
"""所属用户ID"""
|