Files
backend/backend/app/admin/model/dict.py
2025-10-18 10:54:08 +08:00

43 lines
1.9 KiB
Python
Executable File

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import Optional
from sqlalchemy import String, Column, LargeBinary, ForeignKey, BigInteger, Index, func, JSON, Text, Numeric
from sqlalchemy.dialects.postgresql import JSONB
from sqlalchemy.orm import Mapped, mapped_column
from backend.app.admin.schema.dict import WordMetaData
from backend.app.admin.schema.pydantic_type import PydanticType
from backend.common.model import snowflake_id_key, DataClassBase
class DictionaryEntry(DataClassBase):
__tablename__ = 'dict_entry'
id: Mapped[int] = mapped_column(primary_key=True, init=True, autoincrement=True)
word: Mapped[str] = mapped_column(String(255), unique=True, nullable=False)
definition: Mapped[Optional[str]] = mapped_column(Text, default=None)
details: Mapped[Optional[WordMetaData]] = mapped_column(PydanticType(pydantic_type=WordMetaData), default=None) # 其他可能的字段(根据实际需求添加)
__table_args__ = (
Index('idx_dict_word', word),
)
class DictionaryMedia(DataClassBase):
__tablename__ = 'dict_media'
id: Mapped[int] = mapped_column(primary_key=True, init=True, autoincrement=True)
file_name: Mapped[str] = mapped_column(String(255), nullable=False)
file_type: Mapped[str] = mapped_column(String(50), nullable=False) # 'audio', 'image'
dict_id: Mapped[Optional[int]] = mapped_column(BigInteger, ForeignKey("dict_entry.id"), default=None)
file_data: Mapped[Optional[bytes]] = mapped_column(LargeBinary, default=None)
file_hash: Mapped[Optional[str]] = mapped_column(String(64), default=None)
details: Mapped[Optional[dict]] = mapped_column(JSONB(astext_type=Text()), default=None, comment="其他信息") # 其他信息
__table_args__ = (
Index('idx_media_filename', file_name),
Index('idx_media_dict_id', dict_id),
)