Files
ohm_streaming/app/models/settings.py
T
root e5b30741fe feat: parametres - filtres contenu, categories, repertoire (#9, #10, #11, #12)
- Filtre recommandations (all/anime/series)
- Filtre dernieres sorties (all/anime/series)
- Toggle categories anime/series (min 1 active)
- Repertoire de telechargement personnalisable
- Migration automatique des nouvelles colonnes SQLite
- Template settings avec tous les nouveaux controles
- Validation cote backend (400 si les deux categories desactivees)

Closes #9, Closes #10, Closes #11, Closes #12
2026-04-02 22:41:18 +00:00

82 lines
2.6 KiB
Python

"""Models for application settings with SQLModel support"""
import uuid
import json
from pydantic import BaseModel, Field as PydanticField
from typing import Optional, List, Dict
from datetime import datetime
from sqlmodel import SQLModel, Field, Column, String
class AppSettingsBase(SQLModel):
"""Base schema for application settings"""
default_lang: str = Field(default="vostfr")
theme: str = Field(default="dark")
# Store list of disabled providers as a JSON string
disabled_providers_json: str = Field(default="[]", sa_column=Column(String))
# #9: Filter for recommendations section ("all", "anime", "series")
recommendations_filter: str = Field(default="all", sa_column=Column(String))
# #10: Filter for latest releases section ("all", "anime", "series")
releases_filter: str = Field(default="all", sa_column=Column(String))
# #11: Enable/disable categories
anime_enabled: bool = Field(default=True)
series_enabled: bool = Field(default=True)
# #12: Custom download directory
download_dir: str = Field(default="downloads")
@property
def disabled_providers(self) -> List[str]:
try:
return json.loads(self.disabled_providers_json or "[]")
except:
return []
@disabled_providers.setter
def disabled_providers(self, value: List[str]):
self.disabled_providers_json = json.dumps(value or [])
class AppSettingsTable(AppSettingsBase, table=True):
"""Database table for application settings"""
__tablename__ = "app_settings"
id: str = Field(
default_factory=lambda: str(uuid.uuid4()),
primary_key=True,
index=True,
nullable=False
)
user_id: str = Field(foreign_key="users.id", index=True, unique=True)
updated_at: datetime = Field(default_factory=datetime.now)
class AppSettings(BaseModel):
"""Application settings (API Response)"""
default_lang: str = "vostfr"
theme: str = "dark"
disabled_providers: List[str] = []
recommendations_filter: str = "all"
releases_filter: str = "all"
anime_enabled: bool = True
series_enabled: bool = True
download_dir: str = "downloads"
class Config:
from_attributes = True
class AppSettingsUpdate(BaseModel):
"""Model for updating application settings"""
default_lang: Optional[str] = None
theme: Optional[str] = None
disabled_providers: Optional[List[str]] = None
recommendations_filter: Optional[str] = None
releases_filter: Optional[str] = None
anime_enabled: Optional[bool] = None
series_enabled: Optional[bool] = None
download_dir: Optional[str] = None