diff options
author | Mo Tarbin <mhed.t91@gmail.com> | 2024-07-17 01:11:36 -0400 |
---|---|---|
committer | Mo Tarbin <mhed.t91@gmail.com> | 2024-07-17 01:11:36 -0400 |
commit | 7a5eacdaf31b228ab07d5c8422d179d210e57825 (patch) | |
tree | 21806783d2ce48536ae5505e0d5b147514031ef5 /internal/notifier/service | |
parent | 83a9abc9d683cd8be848d8e49020bf1f02f55319 (diff) | |
parent | 861a1666e48a91d43db6d1fd272dac832013f5b7 (diff) | |
download | donetick-7a5eacdaf31b228ab07d5c8422d179d210e57825.tar.gz donetick-7a5eacdaf31b228ab07d5c8422d179d210e57825.tar.bz2 donetick-7a5eacdaf31b228ab07d5c8422d179d210e57825.zip |
Merge branch 'dev'
Diffstat (limited to '')
-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 +} |