Spaces:
Running
Running
File size: 1,810 Bytes
f2cb2b4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | 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)
|