mirror of
https://github.com/rzmk/learnhouse.git
synced 2025-12-19 04:19:25 +00:00
65 lines
2 KiB
Python
65 lines
2 KiB
Python
from typing import Optional
|
|
from pydantic import BaseModel
|
|
from sqlalchemy import JSON, Column, ForeignKey, Integer
|
|
from sqlmodel import Field, SQLModel
|
|
from enum import Enum
|
|
|
|
from src.db.trail_steps import TrailStep
|
|
|
|
|
|
class TrailRunEnum(str, Enum):
|
|
RUN_TYPE_COURSE = "RUN_TYPE_COURSE"
|
|
|
|
|
|
class StatusEnum(str, Enum):
|
|
STATUS_IN_PROGRESS = "STATUS_IN_PROGRESS"
|
|
STATUS_COMPLETED = "STATUS_COMPLETED"
|
|
STATUS_PAUSED = "STATUS_PAUSED"
|
|
STATUS_CANCELLED = "STATUS_CANCELLED"
|
|
|
|
|
|
class TrailRun(SQLModel, table=True):
|
|
id: Optional[int] = Field(default=None, primary_key=True)
|
|
data: dict = Field(default={}, sa_column=Column(JSON))
|
|
status: StatusEnum = StatusEnum.STATUS_IN_PROGRESS
|
|
# foreign keys
|
|
trail_id: int = Field(
|
|
sa_column=Column(Integer, ForeignKey("trail.id", ondelete="CASCADE"))
|
|
)
|
|
course_id: int = Field(
|
|
sa_column=Column(Integer, ForeignKey("course.id", ondelete="CASCADE"))
|
|
)
|
|
org_id: int = Field(
|
|
sa_column=Column(Integer, ForeignKey("organization.id", ondelete="CASCADE"))
|
|
)
|
|
user_id: int = Field(
|
|
sa_column=Column(Integer, ForeignKey("user.id", ondelete="CASCADE"))
|
|
)
|
|
# timestamps
|
|
creation_date: str
|
|
update_date: str
|
|
|
|
|
|
class TrailRunCreate(TrailRun):
|
|
pass
|
|
|
|
|
|
# trick because Lists are not supported in SQLModel (runs: list[TrailStep] )
|
|
class TrailRunRead(BaseModel):
|
|
id: Optional[int] = Field(default=None, primary_key=True)
|
|
data: dict = Field(default={}, sa_column=Column(JSON))
|
|
status: StatusEnum = StatusEnum.STATUS_IN_PROGRESS
|
|
# foreign keys
|
|
trail_id: int = Field(default=None, foreign_key="trail.id")
|
|
course_id: int = Field(default=None, foreign_key="course.id")
|
|
org_id: int = Field(default=None, foreign_key="organization.id")
|
|
user_id: int = Field(default=None, foreign_key="user.id")
|
|
# course object
|
|
course: Optional[dict]
|
|
# timestamps
|
|
creation_date: Optional[str]
|
|
update_date: Optional[str]
|
|
# number of activities in course
|
|
course_total_steps: int
|
|
steps: list[TrailStep]
|
|
pass
|