volsu-contests/backend/app/models/problem.py
2025-11-30 19:55:50 +03:00

32 lines
1.5 KiB
Python

from datetime import datetime, timezone
from sqlalchemy import String, Text, Integer, DateTime, ForeignKey
from sqlalchemy.orm import Mapped, mapped_column, relationship
from app.database import Base
def utcnow() -> datetime:
return datetime.now(timezone.utc)
class Problem(Base):
__tablename__ = "problems"
id: Mapped[int] = mapped_column(primary_key=True)
contest_id: Mapped[int] = mapped_column(ForeignKey("contests.id", ondelete="CASCADE"), nullable=False)
title: Mapped[str] = mapped_column(String(255), nullable=False)
description: Mapped[str] = mapped_column(Text, nullable=False)
input_format: Mapped[str | None] = mapped_column(Text, nullable=True)
output_format: Mapped[str | None] = mapped_column(Text, nullable=True)
constraints: Mapped[str | None] = mapped_column(Text, nullable=True)
time_limit_ms: Mapped[int] = mapped_column(Integer, default=1000)
memory_limit_kb: Mapped[int] = mapped_column(Integer, default=262144) # 256 MB
total_points: Mapped[int] = mapped_column(Integer, default=100)
order_index: Mapped[int] = mapped_column(Integer, default=0)
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=utcnow)
# Relationships
contest = relationship("Contest", back_populates="problems")
test_cases = relationship("TestCase", back_populates="problem", cascade="all, delete-orphan")
submissions = relationship("Submission", back_populates="problem", cascade="all, delete-orphan", passive_deletes=True)