/
sunchise
/
Test
Обзор
Документация
Войти
/
sunchise
/
Test
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
backend/models/project.py
55 строк
3 KB
sunchise
Запрос на слияние 'frontend2' (
#1
) из frontend2 в master
26 мар 2026, 18:24
Верифицирован
26 мар 2026, 18:24
761ae63
Код
Авторство
О чём код?
from sqlalchemy import Column, Integer, String, Text, ForeignKey, Enum, DateTime from sqlalchemy.orm import relationship, Mapped, mapped_column from typing import Optional, List from datetime import datetime import enum from .base import Base class ProjectStatus(str, enum.Enum): DRAFT = "draft" ACTIVE = "active" COMPLETED = "completed" class Project(Base): __tablename__ = "projects" id: Mapped[int] = mapped_column(primary_key=True) name: Mapped[str] = mapped_column(String(255), nullable=False) description: Mapped[Optional[str]] = mapped_column(Text) status: Mapped[ProjectStatus] = mapped_column(Enum(ProjectStatus), default=ProjectStatus.DRAFT) category_id: Mapped[Optional[int]] = mapped_column(ForeignKey("project_categories.id")) created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow) updated_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) category: Mapped[Optional["ProjectCategory"]] = relationship() steps: Mapped[List["Step"]] = relationship(back_populates="project", cascade="all, delete-orphan") nodes: Mapped[List["Node"]] = relationship(back_populates="project", cascade="all, delete-orphan") estimates: Mapped[List["EstimateItem"]] = relationship(back_populates="project", cascade="all, delete-orphan") class Step(Base): __tablename__ = "steps" id: Mapped[int] = mapped_column(primary_key=True) project_id: Mapped[int] = mapped_column(ForeignKey("projects.id"), nullable=False) order_index: Mapped[int] = mapped_column(Integer, default=0) title: Mapped[str] = mapped_column(String(255), nullable=False) description: Mapped[Optional[str]] = mapped_column(Text) parent_step_id: Mapped[Optional[int]] = mapped_column(ForeignKey("steps.id")) project: Mapped["Project"] = relationship(back_populates="steps") parent: Mapped[Optional["Step"]] = relationship("Step", remote_side=[id], back_populates="children") children: Mapped[List["Step"]] = relationship("Step", back_populates="parent") class Node(Base): __tablename__ = "nodes" id: Mapped[int] = mapped_column(primary_key=True) project_id: Mapped[int] = mapped_column(ForeignKey("projects.id"), nullable=False) name: Mapped[str] = mapped_column(String(255), nullable=False) description: Mapped[Optional[str]] = mapped_column(Text) technical_specs: Mapped[Optional[dict]] = mapped_column(type_=Text) # JSON stored as text in SQLite parent_node_id: Mapped[Optional[int]] = mapped_column(ForeignKey("nodes.id")) project: Mapped["Project"] = relationship(back_populates="nodes") parent: Mapped[Optional["Node"]] = relationship("Node", remote_side=[id], back_populates="children") children: Mapped[List["Node"]] = relationship("Node", back_populates="parent")