/
Ru5Kasper
/
Trackly
Обзор
Документация
Войти
/
Ru5Kasper
/
Trackly
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
backend/app/models.py
81 строка
3 KB
DORANDKOR
feat(backend): add users/update endpoint, theme and notifications switches
05 май 2026, 11:39
05 май 2026, 11:39
4af2b3d
Код
Авторство
О чём код?
from __future__ import annotations from datetime import datetime, UTC from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Integer, String from sqlalchemy.dialects.postgresql import JSONB from sqlalchemy.orm import mapped_column, Mapped, relationship from app.database import Base class User(Base): __tablename__ = "users" id: Mapped[int] = mapped_column(primary_key=True, index=True) name: Mapped[str] = mapped_column() email: Mapped[str] = mapped_column(String(120), unique=True, nullable=False) password_hash: Mapped[str] = mapped_column(String(255), nullable=False) avatar_url: Mapped[str | None] = mapped_column( String(500), nullable=True, default=None ) habits: Mapped[list[Habit]] = relationship( back_populates="owner", cascade="all, delete-orphan" ) theme: Mapped[str] = mapped_column(String(30), default="light") disable_notifications: Mapped[bool] = mapped_column(default=False) @property def bool_theme(self) -> bool: match self.theme: case "dark": return True case "light": return False case _: return False @property def has_avatar(self) -> bool: return self.avatar_url is not None class Habit(Base): __tablename__ = "habits" id: Mapped[int] = mapped_column(primary_key=True, index=True) user_id: Mapped[int] = mapped_column( ForeignKey("users.id", ondelete="CASCADE"), nullable=False, index=True ) title: Mapped[str] description: Mapped[str] color: Mapped[str] = mapped_column(String(7)) frequency: Mapped[int] target_count: Mapped[int] created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), nullable=False ) updated_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), nullable=False ) is_active: Mapped[bool] = mapped_column(default=False) schedule = mapped_column(JSONB, nullable=True) owner: Mapped[User] = relationship(back_populates="habits") logs: Mapped[list[HabitLog]] = relationship( back_populates="habit", cascade="all, delete-orphan" ) class HabitLog(Base): __tablename__ = "habit_logs" id: Mapped[int] = mapped_column(primary_key=True, index=True) habit_id: Mapped[int] = mapped_column( ForeignKey("habits.id", ondelete="CASCADE"), nullable=False, index=True ) completed_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), nullable=False, default=lambda: datetime.now(UTC) ) habit: Mapped[Habit] = relationship(back_populates="logs")