Checkpoint React frontend migration

This commit is contained in:
Dwindi Ramadhana
2026-06-20 01:43:39 +07:00
parent ab86c254d1
commit b8e201b45f
173 changed files with 34116 additions and 782 deletions

View File

@@ -0,0 +1,74 @@
"""
AI generation run model.
Represents one admin generation request that can produce one or many variants.
"""
from datetime import datetime
from typing import Optional
from sqlalchemy import DateTime, ForeignKey, Integer, String, Text, func
from sqlalchemy.orm import Mapped, mapped_column, relationship
from app.database import Base
class AIGenerationRun(Base):
__tablename__ = "ai_generation_runs"
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
basis_item_id: Mapped[int] = mapped_column(
ForeignKey("items.id", ondelete="CASCADE", onupdate="CASCADE"),
nullable=False,
index=True,
comment="Basis item ID",
)
source_snapshot_question_id: Mapped[Optional[int]] = mapped_column(
ForeignKey("tryout_snapshot_questions.id", ondelete="SET NULL", onupdate="CASCADE"),
nullable=True,
index=True,
comment="Source snapshot question ID",
)
target_level: Mapped[str] = mapped_column(
String(50),
nullable=False,
comment="Target level (mudah/sulit)",
)
requested_count: Mapped[int] = mapped_column(
Integer,
nullable=False,
default=1,
comment="Requested output count",
)
model: Mapped[str] = mapped_column(
String(255),
nullable=False,
comment="Model identifier",
)
prompt_version: Mapped[str] = mapped_column(
String(50),
nullable=False,
default="v1",
comment="Prompt template version",
)
operator_notes: Mapped[Optional[str]] = mapped_column(
Text,
nullable=True,
comment="Optional admin notes",
)
created_by: Mapped[str] = mapped_column(
String(255),
nullable=False,
comment="Admin username",
)
created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True), nullable=False, server_default=func.now()
)
generated_items: Mapped[list["Item"]] = relationship(
"Item",
back_populates="generation_run",
primaryjoin="AIGenerationRun.id == Item.generation_run_id",
foreign_keys="Item.generation_run_id",
lazy="selectin",
)