feat: add personal ics feeds for assigned tasks

This commit is contained in:
2026-04-13 11:34:14 +02:00
parent 96b979a878
commit 07ab0461e9
8 changed files with 129 additions and 2 deletions

View File

@@ -1,5 +1,6 @@
from __future__ import annotations
import secrets
from datetime import UTC, date, datetime, timedelta
from flask_login import UserMixin
@@ -24,6 +25,7 @@ class User(UserMixin, TimestampMixin, db.Model):
password_hash = db.Column(db.String(255), nullable=False)
is_admin = db.Column(db.Boolean, nullable=False, default=False)
avatar_path = db.Column(db.String(255), nullable=True)
calendar_feed_token = db.Column(db.String(255), nullable=True, unique=True, index=True)
notification_task_due_enabled = db.Column(db.Boolean, nullable=False, default=True)
notification_monthly_winner_enabled = db.Column(db.Boolean, nullable=False, default=True)
@@ -60,6 +62,11 @@ class User(UserMixin, TimestampMixin, db.Model):
def check_password(self, password: str) -> bool:
return check_password_hash(self.password_hash, password)
def ensure_calendar_feed_token(self) -> str:
if not self.calendar_feed_token:
self.calendar_feed_token = secrets.token_urlsafe(32)
return self.calendar_feed_token
@property
def display_avatar(self) -> str:
return self.avatar_path or "images/avatars/default.svg"