Files
finance_app/backend/app/models/calendar.py

35 lines
2.1 KiB
Python

from datetime import datetime, date, time
from decimal import Decimal
from sqlalchemy import String, Boolean, Text, Numeric, ForeignKey, Date, Time, DateTime, Integer, func
from sqlalchemy.orm import Mapped, mapped_column, relationship
from app.database import Base
class CalendarEvent(Base):
__tablename__ = "calendar_events"
id: Mapped[int] = mapped_column(primary_key=True)
user_id: Mapped[int] = mapped_column(ForeignKey("users.id"), nullable=False, index=True)
title: Mapped[str] = mapped_column(String(200), nullable=False)
description: Mapped[str | None] = mapped_column(Text)
event_date: Mapped[date] = mapped_column(Date, nullable=False, index=True)
event_time: Mapped[time | None] = mapped_column(Time)
is_recurring: Mapped[bool] = mapped_column(Boolean, default=False, nullable=False)
recurrence_pattern: Mapped[str | None] = mapped_column(String(50)) # daily | weekly | monthly | yearly
recurrence_end_date: Mapped[date | None] = mapped_column(Date)
related_operation_id: Mapped[int | None] = mapped_column(ForeignKey("operations.id"), nullable=True)
category_id: Mapped[int | None] = mapped_column(ForeignKey("categories.id"), nullable=True)
amount: Mapped[Decimal | None] = mapped_column(Numeric(20, 2))
currency_id: Mapped[int | None] = mapped_column(ForeignKey("currencies.id"), nullable=True)
reminder_days: Mapped[int | None] = mapped_column(Integer)
is_completed: Mapped[bool] = mapped_column(Boolean, default=False, nullable=False)
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
updated_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True), server_default=func.now(), onupdate=func.now()
)
user: Mapped["User"] = relationship("User", back_populates="calendar_events")
related_operation: Mapped["Operation | None"] = relationship("Operation", back_populates="calendar_events")
category: Mapped["Category | None"] = relationship("Category", back_populates="calendar_events")
currency: Mapped["Currency | None"] = relationship("Currency", back_populates="calendar_events")