from sqlmodel import SQLModel, Field, TIMESTAMP, text from sqlalchemy import Column from sqlalchemy.dialects.postgresql import JSONB from datetime import datetime, timezone class Animes(SQLModel, table=True): id: int | None = Field(default=None, primary_key=True) mal_id: int = Field(index=True, unique=True) url: str | None = Field(default=None) title: str = Field(index=True) title_english: str | None = Field(default=None) searchable_text: str | None = Field(default=None) synopsis: str | None = Field(default=None) # Store nested JSON images: dict = Field(sa_column=Column(JSONB)) # Arrays → Postgres ARRAY or JSON genres: list[str] = Field(sa_column=Column(JSONB)) studios: list[str] = Field(sa_column=Column(JSONB)) themes: list[str] = Field(sa_column=Column(JSONB)) demographics: list[str] = Field(sa_column=Column(JSONB)) type: str | None = None episodes: int | None = None score: float | None = Field(default=None, index=True) scored_by: int | None = None rank: int | None = Field(default=None, index=True) popularity: int | None = None year: int | None = Field(default=None, index=True) season: str | None = None rating: str | None = None aired_from: str | None = None aired_to: str | None = None favorites: int | None = None class User(SQLModel, table=True): id: int | None = Field(default=None, primary_key=True) email: str = Field(unique=True, index=True) hashed_password: str created_at: datetime | None = Field(sa_column=Column(TIMESTAMP(timezone=True), nullable=True, server_default=text("NOW()"))) is_active: bool = Field(default=True)