Refactor code structure for improved readability and maintainability
This commit is contained in:
32
app/models/user.py
Normal file
32
app/models/user.py
Normal file
@@ -0,0 +1,32 @@
|
||||
from datetime import datetime
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from sqlmodel import Field, Relationship
|
||||
|
||||
from app.models.base import BaseModel
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from app.models.plan import Plan
|
||||
from app.models.playlist import Playlist
|
||||
from app.models.user_oauth import UserOauth
|
||||
|
||||
|
||||
class User(BaseModel, table=True):
|
||||
"""Database model for a user."""
|
||||
|
||||
plan_id: int = Field(foreign_key="plan.id")
|
||||
role: str = Field(nullable=False, default="user")
|
||||
email: str = Field(unique=True, nullable=False)
|
||||
name: str = Field(nullable=False)
|
||||
picture: str | None = Field(default=None)
|
||||
password_hash: str | None = Field(default=None)
|
||||
is_active: bool = Field(nullable=False, default=True)
|
||||
credits: int = Field(default=0, ge=0, nullable=False)
|
||||
api_token: str | None = Field(unique=True, default=None)
|
||||
api_token_expires_at: datetime | None = Field(default=None)
|
||||
|
||||
|
||||
# relationships
|
||||
oauths: list["UserOauth"] = Relationship(back_populates="user")
|
||||
plan: "Plan" = Relationship(back_populates="users")
|
||||
playlists: list["Playlist"] = Relationship(back_populates="user")
|
||||
Reference in New Issue
Block a user