Phase 2 UI Adjustments/Edits by bonamin

This commit is contained in:
2026-02-17 09:56:07 +02:00
parent 2b48426fe5
commit 59c5049305
16 changed files with 1588 additions and 609 deletions

View File

View File

@@ -0,0 +1,19 @@
from pydantic import BaseModel
from typing import List, Optional
class MelodySettings(BaseModel):
available_languages: List[str] = ["en", "el", "sr"]
primary_language: str = "en"
quick_colors: List[str] = ["#FF5733", "#33FF57", "#3357FF", "#FFD700", "#FF69B4", "#8B4513"]
duration_values: List[int] = [
0, 15, 30, 45, 60, 75, 90, 105, 120, 135, 150, 165, 180,
240, 300, 360, 420, 480, 540, 600, 900,
]
class MelodySettingsUpdate(BaseModel):
available_languages: Optional[List[str]] = None
primary_language: Optional[str] = None
quick_colors: Optional[List[str]] = None
duration_values: Optional[List[int]] = None

View File

@@ -0,0 +1,22 @@
from fastapi import APIRouter, Depends
from auth.models import TokenPayload
from auth.dependencies import require_melody_access, require_viewer
from settings.models import MelodySettings, MelodySettingsUpdate
from settings import service
router = APIRouter(prefix="/api/settings", tags=["settings"])
@router.get("/melody", response_model=MelodySettings)
async def get_melody_settings(
_user: TokenPayload = Depends(require_viewer),
):
return service.get_melody_settings()
@router.put("/melody", response_model=MelodySettings)
async def update_melody_settings(
body: MelodySettingsUpdate,
_user: TokenPayload = Depends(require_melody_access),
):
return service.update_melody_settings(body)

View File

@@ -0,0 +1,39 @@
from shared.firebase import get_db
from settings.models import MelodySettings, MelodySettingsUpdate
COLLECTION = "admin_settings"
DOC_ID = "melody_settings"
def get_melody_settings() -> MelodySettings:
"""Get melody settings from Firestore. Creates defaults if not found."""
db = get_db()
doc = db.collection(COLLECTION).document(DOC_ID).get()
if doc.exists:
return MelodySettings(**doc.to_dict())
# Create with defaults
defaults = MelodySettings()
db.collection(COLLECTION).document(DOC_ID).set(defaults.model_dump())
return defaults
def update_melody_settings(data: MelodySettingsUpdate) -> MelodySettings:
"""Update melody settings. Only provided fields are updated."""
db = get_db()
doc_ref = db.collection(COLLECTION).document(DOC_ID)
doc = doc_ref.get()
if doc.exists:
existing = doc.to_dict()
else:
existing = MelodySettings().model_dump()
update_data = data.model_dump(exclude_none=True)
existing.update(update_data)
# Sort duration values
if "duration_values" in existing:
existing["duration_values"] = sorted(existing["duration_values"])
doc_ref.set(existing)
return MelodySettings(**existing)