32 lines
1.5 KiB
Python
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)
|