Project_Manager/app/projects/models.py
2026-06-26 18:21:22 +02:00

50 lines
1.7 KiB
Python

"""Modelle des Projekte-Moduls: Project, Task.
Aufgaben dürfen ohne Projekt existieren (project_id nullable). Beim Löschen
eines Projekts werden seine Aufgaben nicht gelöscht, sondern in der Routen-Logik
(Schritt 5) auf project_id=None gesetzt.
"""
from ..extensions import db
from ..models import utcnow
class Project(db.Model):
__tablename__ = "projects"
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(
db.Integer, db.ForeignKey("users.id"), nullable=False, index=True
)
name = db.Column(db.String(120), nullable=False)
# Hex-Farbe aus fester Palette (z.B. "#5b8def").
color = db.Column(db.String(7), nullable=False, default="#5b8def")
created_at = db.Column(db.DateTime, default=utcnow, nullable=False)
user = db.relationship("User", back_populates="projects")
tasks = db.relationship("Task", back_populates="project")
def __repr__(self) -> str:
return f"<Project {self.name}>"
class Task(db.Model):
__tablename__ = "tasks"
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(
db.Integer, db.ForeignKey("users.id"), nullable=False, index=True
)
project_id = db.Column(
db.Integer, db.ForeignKey("projects.id"), nullable=True, index=True
)
text = db.Column(db.String(500), nullable=False)
due_date = db.Column(db.Date, nullable=True)
done = db.Column(db.Boolean, default=False, nullable=False)
created_at = db.Column(db.DateTime, default=utcnow, nullable=False)
user = db.relationship("User", back_populates="tasks")
project = db.relationship("Project", back_populates="tasks")
def __repr__(self) -> str:
return f"<Task {self.text[:30]!r} done={self.done}>"