183 lines
6.6 KiB
Python
183 lines
6.6 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import datetime, timedelta
|
|
|
|
from app import create_app
|
|
from app.cli import seed_badges
|
|
from app.extensions import db
|
|
from app.models import TaskInstance, TaskTemplate, User
|
|
from app.services.monthly import archive_months_missing_up_to_previous
|
|
|
|
|
|
def seed_database() -> None:
|
|
app = create_app()
|
|
with app.app_context():
|
|
db.drop_all()
|
|
db.create_all()
|
|
seed_badges()
|
|
|
|
anna = User(
|
|
name="Anna",
|
|
email="anna@putzliga.local",
|
|
avatar_path="images/avatars/anna.svg",
|
|
notification_task_due_enabled=True,
|
|
notification_monthly_winner_enabled=True,
|
|
)
|
|
anna.set_password("putzliga123")
|
|
ben = User(
|
|
name="Ben",
|
|
email="ben@putzliga.local",
|
|
avatar_path="images/avatars/ben.svg",
|
|
notification_task_due_enabled=True,
|
|
notification_monthly_winner_enabled=False,
|
|
)
|
|
ben.set_password("putzliga123")
|
|
|
|
db.session.add_all([anna, ben])
|
|
db.session.flush()
|
|
|
|
templates = [
|
|
TaskTemplate(
|
|
title="Küche wischen",
|
|
description="Arbeitsfläche, Herd und Tisch sauber machen.",
|
|
default_points=12,
|
|
default_assigned_user_id=anna.id,
|
|
recurrence_interval_value=3,
|
|
recurrence_interval_unit="days",
|
|
active=True,
|
|
),
|
|
TaskTemplate(
|
|
title="Bad putzen",
|
|
description="Waschbecken, Spiegel und Dusche reinigen.",
|
|
default_points=20,
|
|
default_assigned_user_id=ben.id,
|
|
recurrence_interval_value=1,
|
|
recurrence_interval_unit="weeks",
|
|
active=True,
|
|
),
|
|
TaskTemplate(
|
|
title="Müll runterbringen",
|
|
description="Restmüll, Papier und Bio entsorgen.",
|
|
default_points=8,
|
|
default_assigned_user_id=anna.id,
|
|
recurrence_interval_value=1,
|
|
recurrence_interval_unit="weeks",
|
|
active=True,
|
|
),
|
|
TaskTemplate(
|
|
title="Fensterbank entstauben",
|
|
description="Wohnzimmer und Flur mitnehmen.",
|
|
default_points=6,
|
|
default_assigned_user_id=ben.id,
|
|
recurrence_interval_unit="none",
|
|
active=True,
|
|
),
|
|
TaskTemplate(
|
|
title="Bettwäsche wechseln",
|
|
description="Neue Bettwäsche aufziehen.",
|
|
default_points=15,
|
|
default_assigned_user_id=anna.id,
|
|
recurrence_interval_value=1,
|
|
recurrence_interval_unit="months",
|
|
active=True,
|
|
),
|
|
]
|
|
db.session.add_all(templates)
|
|
db.session.flush()
|
|
|
|
now = datetime.now()
|
|
current_month_anchor = now.replace(day=5, hour=10, minute=0, second=0, microsecond=0)
|
|
previous_month_anchor = (current_month_anchor.replace(day=1) - timedelta(days=3)).replace(day=10)
|
|
|
|
instances = [
|
|
TaskInstance(
|
|
task_template_id=templates[0].id,
|
|
title=templates[0].title,
|
|
description=templates[0].description,
|
|
assigned_user_id=anna.id,
|
|
due_date=(now + timedelta(days=1)).date(),
|
|
status="soon",
|
|
points_awarded=12,
|
|
),
|
|
TaskInstance(
|
|
task_template_id=templates[1].id,
|
|
title=templates[1].title,
|
|
description=templates[1].description,
|
|
assigned_user_id=ben.id,
|
|
due_date=(now - timedelta(days=1)).date(),
|
|
status="overdue",
|
|
points_awarded=20,
|
|
),
|
|
TaskInstance(
|
|
task_template_id=templates[2].id,
|
|
title=templates[2].title,
|
|
description=templates[2].description,
|
|
assigned_user_id=anna.id,
|
|
due_date=(now + timedelta(days=4)).date(),
|
|
status="open",
|
|
points_awarded=8,
|
|
),
|
|
TaskInstance(
|
|
task_template_id=templates[3].id,
|
|
title=templates[3].title,
|
|
description=templates[3].description,
|
|
assigned_user_id=ben.id,
|
|
due_date=(now + timedelta(days=2)).date(),
|
|
status="soon",
|
|
points_awarded=6,
|
|
),
|
|
TaskInstance(
|
|
task_template_id=templates[4].id,
|
|
title=templates[4].title,
|
|
description=templates[4].description,
|
|
assigned_user_id=anna.id,
|
|
due_date=(now - timedelta(days=9)).date(),
|
|
status="completed",
|
|
completed_at=current_month_anchor - timedelta(days=2),
|
|
completed_by_user_id=anna.id,
|
|
points_awarded=15,
|
|
),
|
|
TaskInstance(
|
|
task_template_id=templates[1].id,
|
|
title=templates[1].title,
|
|
description=templates[1].description,
|
|
assigned_user_id=ben.id,
|
|
due_date=(previous_month_anchor - timedelta(days=1)).date(),
|
|
status="completed",
|
|
completed_at=previous_month_anchor,
|
|
completed_by_user_id=ben.id,
|
|
points_awarded=20,
|
|
),
|
|
TaskInstance(
|
|
task_template_id=templates[0].id,
|
|
title=templates[0].title,
|
|
description=templates[0].description,
|
|
assigned_user_id=anna.id,
|
|
due_date=(previous_month_anchor - timedelta(days=2)).date(),
|
|
status="completed",
|
|
completed_at=previous_month_anchor - timedelta(days=1),
|
|
completed_by_user_id=anna.id,
|
|
points_awarded=12,
|
|
),
|
|
TaskInstance(
|
|
task_template_id=templates[2].id,
|
|
title=templates[2].title,
|
|
description=templates[2].description,
|
|
assigned_user_id=anna.id,
|
|
due_date=(previous_month_anchor + timedelta(days=2)).date(),
|
|
status="completed",
|
|
completed_at=previous_month_anchor + timedelta(days=2),
|
|
completed_by_user_id=anna.id,
|
|
points_awarded=8,
|
|
),
|
|
]
|
|
db.session.add_all(instances)
|
|
db.session.commit()
|
|
|
|
archive_months_missing_up_to_previous()
|
|
print("Seed-Daten geschrieben.")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
seed_database()
|