v0.1 - макет интерфейса, аутентификация через логин, аккаунт админа, создание партии в 2 этапа, базовые настройки профиля и группы, переключение между группами, статистика

This commit is contained in:
2026-06-16 17:41:06 +03:00
parent 6ab74f01aa
commit 56b5d09a4d
123 changed files with 13572 additions and 21 deletions
+29
View File
@@ -0,0 +1,29 @@
"""Работа со временем: хранение в UTC, отдача ISO с явным смещением,
«сегодня» в часовом поясе приложения (по умолчанию +3)."""
from __future__ import annotations
from datetime import date, datetime, timedelta, timezone
from app.core.config import settings
APP_TZ = timezone(timedelta(hours=settings.app_tz_offset_hours))
def utcnow() -> datetime:
"""Текущее время в UTC (aware)."""
return datetime.now(timezone.utc)
def app_today() -> date:
"""Текущая дата в часовом поясе приложения (для «даты игры»)."""
return datetime.now(APP_TZ).date()
def iso_utc(dt: datetime | None) -> str | None:
"""ISO-строка с явным UTC-смещением. Наивное значение из SQLite считаем UTC,
чтобы фронт корректно сконвертировал его в локальный пояс отображения."""
if dt is None:
return None
if dt.tzinfo is None:
dt = dt.replace(tzinfo=timezone.utc)
return dt.astimezone(timezone.utc).isoformat()