50 lines
1.7 KiB
Python
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}>"
|