"""Ozon 店铺(Client-Id / Api-Key 加密落库)。""" from __future__ import annotations import uuid from datetime import datetime from sqlalchemy import DateTime, Enum, String, Uuid, func from sqlalchemy.orm import Mapped, mapped_column from db import Base from models.enums import ShopStatus class Shop(Base): __tablename__ = "shops" id: Mapped[uuid.UUID] = mapped_column(Uuid(as_uuid=True), primary_key=True, default=uuid.uuid4) user_id: Mapped[uuid.UUID | None] = mapped_column(Uuid(as_uuid=True), nullable=True) # 预留多用户 name: Mapped[str] = mapped_column(String(128), nullable=False) client_id_enc: Mapped[str] = mapped_column(String(1024), nullable=False) # AES-GCM 密文 api_key_enc: Mapped[str] = mapped_column(String(1024), nullable=False) currency_code: Mapped[str] = mapped_column(String(3), default="RUB", server_default="RUB") status: Mapped[ShopStatus] = mapped_column( Enum(ShopStatus, native_enum=False, length=16), default=ShopStatus.active ) last_checked_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now()) updated_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now(), onupdate=func.now() )