"""Application model definitions""" from typing import List, Optional, Dict, Any from pydantic import BaseModel, Field, ConfigDict from datetime import datetime from bson import ObjectId class ApplicationTheme(BaseModel): """Application theme configuration""" primary_color: str = "#1976d2" secondary_color: str = "#dc004e" logo_url: Optional[str] = None favicon_url: Optional[str] = None font_family: str = "Roboto, sans-serif" custom_css: Optional[str] = None class ApplicationBase(BaseModel): """Base application model""" app_name: str = Field(..., min_length=3, max_length=100) description: Optional[str] = None redirect_uris: List[str] = [] allowed_origins: List[str] = [] theme: Optional[ApplicationTheme] = ApplicationTheme() permissions: List[str] = ["sso", "name", "email"] # Default permissions is_active: bool = True class ApplicationCreate(ApplicationBase): """Application creation model""" pass class ApplicationUpdate(BaseModel): """Application update model""" app_name: Optional[str] = Field(None, min_length=3, max_length=100) description: Optional[str] = None redirect_uris: Optional[List[str]] = None allowed_origins: Optional[List[str]] = None theme: Optional[ApplicationTheme] = None permissions: Optional[List[str]] = None is_active: Optional[bool] = None class Application(ApplicationBase): """Application response model""" id: str = Field(alias="_id") client_id: str client_secret: str created_by: str created_at: datetime updated_at: datetime model_config = ConfigDict( populate_by_name=True, arbitrary_types_allowed=True, json_encoders={ObjectId: str} ) class ApplicationInDB(Application): """Application model in database""" pass class ApplicationPublic(BaseModel): """Public application information (no secret)""" id: str = Field(alias="_id") app_name: str description: Optional[str] = None theme: Optional[ApplicationTheme] = None permissions: List[str] = [] model_config = ConfigDict( populate_by_name=True, arbitrary_types_allowed=True, json_encoders={ObjectId: str} )