aboutsummaryrefslogtreecommitdiffstats
path: root/internal/notifier/service
diff options
context:
space:
mode:
authorLibravatar Mo Tarbin <mhed.t91@gmail.com>2024-07-17 01:11:36 -0400
committerLibravatar Mo Tarbin <mhed.t91@gmail.com>2024-07-17 01:11:36 -0400
commit7a5eacdaf31b228ab07d5c8422d179d210e57825 (patch)
tree21806783d2ce48536ae5505e0d5b147514031ef5 /internal/notifier/service
parent83a9abc9d683cd8be848d8e49020bf1f02f55319 (diff)
parent861a1666e48a91d43db6d1fd272dac832013f5b7 (diff)
downloaddonetick-7a5eacdaf31b228ab07d5c8422d179d210e57825.tar.gz
donetick-7a5eacdaf31b228ab07d5c8422d179d210e57825.tar.bz2
donetick-7a5eacdaf31b228ab07d5c8422d179d210e57825.zip
Merge branch 'dev'
Diffstat (limited to '')
-rw-r--r--internal/notifier/service/planner.go48
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
+}