mirror of
https://github.com/collinear-ai/yc-bench.git
synced 2026-05-01 17:45:20 +00:00
The old `db/` pattern in .gitignore matched src/yc_bench/db/ too, preventing all ORM models and session.py from being committed. Previous commit fixed .gitignore to `/db/`; this adds the 10 missing files. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
140 lines
3.9 KiB
Python
140 lines
3.9 KiB
Python
from __future__ import annotations
|
|
|
|
from enum import Enum
|
|
from uuid import uuid4
|
|
|
|
from sqlalchemy import BigInteger, Boolean, CheckConstraint, DateTime, Enum as SAEnum, ForeignKey, Integer, Numeric, String, Uuid, text
|
|
from sqlalchemy.orm import mapped_column
|
|
|
|
from ..base import Base
|
|
from .company import Domain
|
|
|
|
class TaskStatus(str, Enum):
|
|
MARKET = "market"
|
|
PLANNED = "planned"
|
|
ACTIVE = "active"
|
|
COMPLETED_SUCCESS = "completed_success"
|
|
COMPLETED_FAIL = "completed_fail"
|
|
CANCELLED = "cancelled"
|
|
|
|
class Task(Base):
|
|
__tablename__ = "tasks"
|
|
__table_args__ = (
|
|
CheckConstraint("required_prestige >= 1 AND required_prestige <= 10", name="ck_tasks_required_prestige_range"),
|
|
CheckConstraint("skill_boost_pct >= 0", name="ck_tasks_skill_boost_pct_range"),
|
|
CheckConstraint("reward_funds_cents >= 0", name="ck_tasks_reward_funds_cents_gte_0"),
|
|
CheckConstraint("reward_prestige_delta >= 0 AND reward_prestige_delta <= 5", name="ck_tasks_reward_prestige_delta_range"),
|
|
)
|
|
|
|
id = mapped_column(
|
|
Uuid(as_uuid=True),
|
|
primary_key=True,
|
|
default=uuid4,
|
|
)
|
|
company_id = mapped_column(
|
|
Uuid(as_uuid=True),
|
|
ForeignKey("companies.id", ondelete="CASCADE"),
|
|
nullable=True,
|
|
)
|
|
status = mapped_column(
|
|
SAEnum(TaskStatus, name="task_status", values_callable=lambda e: [x.value for x in e]),
|
|
nullable=False,
|
|
default=TaskStatus.MARKET,
|
|
)
|
|
title = mapped_column(
|
|
String(255),
|
|
nullable=False,
|
|
)
|
|
description = mapped_column(
|
|
String,
|
|
nullable=False,
|
|
)
|
|
required_prestige = mapped_column(
|
|
Integer,
|
|
nullable=False,
|
|
)
|
|
reward_funds_cents = mapped_column(
|
|
BigInteger,
|
|
nullable=False,
|
|
)
|
|
reward_prestige_delta = mapped_column(
|
|
Numeric(6, 3),
|
|
nullable=False,
|
|
)
|
|
skill_boost_pct = mapped_column(
|
|
Numeric(6, 4),
|
|
nullable=False,
|
|
)
|
|
accepted_at = mapped_column(
|
|
DateTime(timezone=True),
|
|
nullable=True,
|
|
)
|
|
deadline = mapped_column(
|
|
DateTime(timezone=True),
|
|
nullable=True,
|
|
)
|
|
completed_at = mapped_column(
|
|
DateTime(timezone=True),
|
|
nullable=True,
|
|
)
|
|
success = mapped_column(
|
|
Boolean,
|
|
nullable=True,
|
|
)
|
|
halfway_event_emitted = mapped_column(
|
|
Boolean,
|
|
nullable=False,
|
|
default=False,
|
|
server_default=text("false"),
|
|
)
|
|
|
|
class TaskRequirement(Base):
|
|
__tablename__ = "task_requirements"
|
|
__table_args__ = (
|
|
CheckConstraint("required_qty >= 200 AND required_qty <= 3000", name="ck_task_requirements_required_qty_range"),
|
|
CheckConstraint("completed_qty >= 0", name="ck_task_requirements_completed_qty_gte_0"),
|
|
CheckConstraint("completed_qty <= required_qty", name="ck_task_requirements_completed_qty_lte_required_qty"),
|
|
)
|
|
|
|
task_id = mapped_column(
|
|
Uuid(as_uuid=True),
|
|
ForeignKey("tasks.id", ondelete="CASCADE"),
|
|
primary_key=True,
|
|
nullable=False,
|
|
)
|
|
domain = mapped_column(
|
|
SAEnum(Domain, name="domain", values_callable=lambda e: [x.value for x in e]),
|
|
primary_key=True,
|
|
nullable=False,
|
|
)
|
|
required_qty = mapped_column(
|
|
Numeric(14, 4),
|
|
nullable=False,
|
|
)
|
|
completed_qty = mapped_column(
|
|
Numeric(14, 4),
|
|
nullable=False,
|
|
default=0,
|
|
)
|
|
|
|
class TaskAssignment(Base):
|
|
__tablename__ = "task_assignments"
|
|
|
|
task_id = mapped_column(
|
|
Uuid(as_uuid=True),
|
|
ForeignKey("tasks.id", ondelete="CASCADE"),
|
|
primary_key=True,
|
|
nullable=False,
|
|
)
|
|
employee_id = mapped_column(
|
|
Uuid(as_uuid=True),
|
|
ForeignKey("employees.id", ondelete="CASCADE"),
|
|
primary_key=True,
|
|
nullable=False,
|
|
)
|
|
assigned_at = mapped_column(
|
|
DateTime(timezone=True),
|
|
nullable=False,
|
|
)
|
|
|
|
__all__ = ["TaskStatus", "Task", "TaskRequirement", "TaskAssignment"]
|