AnimeRAGSystem / src /database /models.py
Pushkar02-n's picture
Few changes for making it production ready
f2cb2b4
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)