feat: 初始化考培练系统项目
- 从服务器拉取完整代码 - 按框架规范整理项目结构 - 配置 Drone CI 测试环境部署 - 包含后端(FastAPI)、前端(Vue3)、管理端 技术栈: Vue3 + TypeScript + FastAPI + MySQL
This commit is contained in:
100
backend/app/models/task.py
Normal file
100
backend/app/models/task.py
Normal file
@@ -0,0 +1,100 @@
|
||||
"""
|
||||
任务相关模型
|
||||
"""
|
||||
from datetime import datetime
|
||||
from typing import List, Optional
|
||||
from sqlalchemy import Column, Integer, String, Text, DateTime, Enum as SQLEnum, JSON, Boolean, ForeignKey
|
||||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||||
from app.models.base import BaseModel
|
||||
from enum import Enum
|
||||
|
||||
|
||||
class TaskPriority(str, Enum):
|
||||
"""任务优先级"""
|
||||
LOW = "low"
|
||||
MEDIUM = "medium"
|
||||
HIGH = "high"
|
||||
|
||||
|
||||
class TaskStatus(str, Enum):
|
||||
"""任务状态"""
|
||||
PENDING = "pending" # 待开始
|
||||
ONGOING = "ongoing" # 进行中
|
||||
COMPLETED = "completed" # 已完成
|
||||
EXPIRED = "expired" # 已过期
|
||||
|
||||
|
||||
class AssignmentStatus(str, Enum):
|
||||
"""分配状态"""
|
||||
NOT_STARTED = "not_started"
|
||||
IN_PROGRESS = "in_progress"
|
||||
COMPLETED = "completed"
|
||||
|
||||
|
||||
class Task(BaseModel):
|
||||
"""任务表"""
|
||||
__tablename__ = "tasks"
|
||||
|
||||
title: Mapped[str] = mapped_column(String(200), nullable=False, comment="任务标题")
|
||||
description: Mapped[Optional[str]] = mapped_column(Text, nullable=True, comment="任务描述")
|
||||
priority: Mapped[TaskPriority] = mapped_column(
|
||||
SQLEnum(TaskPriority, values_callable=lambda x: [e.value for e in x]),
|
||||
default=TaskPriority.MEDIUM,
|
||||
nullable=False,
|
||||
comment="优先级"
|
||||
)
|
||||
status: Mapped[TaskStatus] = mapped_column(
|
||||
SQLEnum(TaskStatus, values_callable=lambda x: [e.value for e in x]),
|
||||
default=TaskStatus.PENDING,
|
||||
nullable=False,
|
||||
comment="任务状态"
|
||||
)
|
||||
creator_id: Mapped[int] = mapped_column(Integer, ForeignKey("users.id"), nullable=False, comment="创建人ID")
|
||||
deadline: Mapped[Optional[datetime]] = mapped_column(DateTime, nullable=True, comment="截止时间")
|
||||
requirements: Mapped[Optional[dict]] = mapped_column(JSON, nullable=True, comment="任务要求配置")
|
||||
progress: Mapped[int] = mapped_column(Integer, default=0, nullable=False, comment="完成进度")
|
||||
is_deleted: Mapped[bool] = mapped_column(Boolean, default=False, nullable=False)
|
||||
|
||||
# 关系
|
||||
creator = relationship("User", backref="created_tasks", foreign_keys=[creator_id])
|
||||
course_links = relationship("TaskCourse", back_populates="task", cascade="all, delete-orphan")
|
||||
assignments = relationship("TaskAssignment", back_populates="task", cascade="all, delete-orphan")
|
||||
|
||||
|
||||
class TaskCourse(BaseModel):
|
||||
"""任务课程关联表"""
|
||||
__tablename__ = "task_courses"
|
||||
|
||||
task_id: Mapped[int] = mapped_column(Integer, ForeignKey("tasks.id"), nullable=False, comment="任务ID")
|
||||
course_id: Mapped[int] = mapped_column(Integer, ForeignKey("courses.id"), nullable=False, comment="课程ID")
|
||||
|
||||
# 关系
|
||||
task = relationship("Task", back_populates="course_links")
|
||||
course = relationship("Course")
|
||||
|
||||
|
||||
class TaskAssignment(BaseModel):
|
||||
"""任务分配表"""
|
||||
__tablename__ = "task_assignments"
|
||||
|
||||
task_id: Mapped[int] = mapped_column(Integer, ForeignKey("tasks.id"), nullable=False, comment="任务ID")
|
||||
user_id: Mapped[int] = mapped_column(Integer, ForeignKey("users.id"), nullable=False, comment="分配用户ID")
|
||||
team_id: Mapped[Optional[int]] = mapped_column(Integer, nullable=True, comment="团队ID")
|
||||
status: Mapped[AssignmentStatus] = mapped_column(
|
||||
SQLEnum(AssignmentStatus, values_callable=lambda x: [e.value for e in x]),
|
||||
default=AssignmentStatus.NOT_STARTED,
|
||||
nullable=False,
|
||||
comment="完成状态"
|
||||
)
|
||||
progress: Mapped[int] = mapped_column(Integer, default=0, nullable=False, comment="个人完成进度")
|
||||
completed_at: Mapped[Optional[datetime]] = mapped_column(DateTime, nullable=True, comment="完成时间")
|
||||
|
||||
# 关系
|
||||
task = relationship("Task", back_populates="assignments")
|
||||
user = relationship("User")
|
||||
|
||||
|
||||
__all__ = ["Task", "TaskCourse", "TaskAssignment", "TaskPriority", "TaskStatus", "AssignmentStatus"]
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user