diff options
Diffstat (limited to 'internal/notifier/service')
-rw-r--r-- | internal/notifier/service/planner.go | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/internal/notifier/service/planner.go b/internal/notifier/service/planner.go index 05d600d..2f7f207 100644 --- a/internal/notifier/service/planner.go +++ b/internal/notifier/service/planner.go @@ -62,6 +62,9 @@ func (n *NotificationPlanner) GenerateNotifications(c context.Context, chore *ch if mt.Nagging { notifications = append(notifications, generateOverdueNotifications(chore, assignees)...) } + if mt.CircleGroup { + notifications = append(notifications, generateCircleGroupNotifications(chore, mt)...) + } n.nRepo.BatchInsertNotifications(notifications) return true @@ -150,3 +153,48 @@ func generateOverdueNotifications(chore *chModel.Chore, users []*cModel.UserCirc return notifications } + +func generateCircleGroupNotifications(chore *chModel.Chore, mt *chModel.NotificationMetadata) []*nModel.Notification { + var notifications []*nModel.Notification + if !mt.CircleGroup || mt.CircleGroupID == nil || *mt.CircleGroupID == 0 { + return notifications + } + if mt.DueDate { + notifications = append(notifications, &nModel.Notification{ + ChoreID: chore.ID, + IsSent: false, + ScheduledFor: *chore.NextDueDate, + CreatedAt: time.Now().UTC(), + TypeID: 1, + TargetID: fmt.Sprint(*mt.CircleGroupID), + Text: fmt.Sprintf("📅 Reminder: *%s* is due today.", chore.Name), + }) + } + if mt.PreDue { + notifications = append(notifications, &nModel.Notification{ + ChoreID: chore.ID, + IsSent: false, + ScheduledFor: *chore.NextDueDate, + CreatedAt: time.Now().UTC().Add(-time.Hour * 3), + TypeID: 3, + TargetID: fmt.Sprint(*mt.CircleGroupID), + Text: fmt.Sprintf("📢 Heads up! *%s* is due soon (on %s).", chore.Name, chore.NextDueDate.Format("January 2nd")), + }) + } + if mt.Nagging { + for _, hours := range []int{24, 48, 72} { + scheduleTime := chore.NextDueDate.Add(time.Hour * time.Duration(hours)) + notifications = append(notifications, &nModel.Notification{ + ChoreID: chore.ID, + IsSent: false, + ScheduledFor: scheduleTime, + CreatedAt: time.Now().UTC(), + TypeID: 2, + TargetID: fmt.Sprint(*mt.CircleGroupID), + Text: fmt.Sprintf("🚨 *%s* is now %d hours overdue. Please complete it as soon as possible.", chore.Name, hours), + }) + } + } + + return notifications +} |