Files
WealthySmart/backend/app/api/v1/endpoints/settings.py
Carlos Escalante 996bd437a1 Replace deprecated datetime.utcnow with shared naive-UTC helper
All 29 call sites now use app.timeutil.utcnow(), which returns naive
UTC via the non-deprecated API. Semantics are unchanged on purpose:
every datetime column is TIMESTAMP WITHOUT TIME ZONE, so going aware
here would poison naive/aware comparisons. The TIMESTAMPTZ migration
(Phase 2) now has a single place to change. (BE-01)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-09 19:46:54 -06:00

61 lines
2.3 KiB
Python

from datetime import datetime
from fastapi import APIRouter, Depends
from sqlmodel import Session, select
from app.auth import get_current_user
from app.db import get_session
from app.timeutil import utcnow
from app.models.models import UserSettings, UserSettingsRead, UserSettingsUpdate
router = APIRouter(prefix="/settings", tags=["settings"])
DEFAULT_SETTINGS = {
"dashboard": {
"sections": {
"crc_accounts": {"label": "CRC Accounts", "color": "primary", "cardColor": "primary", "visible": True, "order": 0, "expanded": False},
"usd_accounts": {"label": "USD Accounts", "color": "chart-1", "cardColor": "chart-1", "visible": True, "order": 1, "expanded": False},
"pension": {"label": "Pension", "color": "chart-2", "cardColor": "chart-2", "visible": True, "order": 2, "expanded": False},
"savings": {"label": "Savings", "color": "chart-3", "cardColor": "chart-3", "visible": True, "order": 3, "expanded": False},
"liabilities": {"label": "Liabilities", "color": "destructive", "cardColor": "destructive", "visible": True, "order": 4, "expanded": False},
"crypto": {"label": "Crypto", "color": "chart-4", "cardColor": "chart-4", "visible": True, "order": 5, "expanded": False},
}
}
}
@router.get("/", response_model=UserSettingsRead)
def get_settings(
session: Session = Depends(get_session),
_user: str = Depends(get_current_user),
):
settings = session.exec(
select(UserSettings).where(UserSettings.key == "default")
).first()
if not settings:
settings = UserSettings(key="default", data=DEFAULT_SETTINGS)
session.add(settings)
session.commit()
session.refresh(settings)
return settings
@router.patch("/", response_model=UserSettingsRead)
def update_settings(
body: UserSettingsUpdate,
session: Session = Depends(get_session),
_user: str = Depends(get_current_user),
):
settings = session.exec(
select(UserSettings).where(UserSettings.key == "default")
).first()
if not settings:
settings = UserSettings(key="default", data=body.data)
else:
settings.data = body.data
settings.updated_at = utcnow()
session.add(settings)
session.commit()
session.refresh(settings)
return settings