From c13dd9addbf89f716e4ef5cfdf1d673139ffcb68 Mon Sep 17 00:00:00 2001 From: Mo Tarbin Date: Sun, 30 Jun 2024 21:41:41 -0400 Subject: Move to Donetick Org, first commit --- internal/notifier/repo/repository.go | 43 ++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 internal/notifier/repo/repository.go (limited to 'internal/notifier/repo') diff --git a/internal/notifier/repo/repository.go b/internal/notifier/repo/repository.go new file mode 100644 index 0000000..576a3f0 --- /dev/null +++ b/internal/notifier/repo/repository.go @@ -0,0 +1,43 @@ +package user + +import ( + "context" + "time" + + nModel "donetick.com/core/internal/notifier/model" + "gorm.io/gorm" +) + +type NotificationRepository struct { + db *gorm.DB +} + +func NewNotificationRepository(db *gorm.DB) *NotificationRepository { + return &NotificationRepository{db} +} + +func (r *NotificationRepository) DeleteAllChoreNotifications(choreID int) error { + return r.db.Where("chore_id = ?", choreID).Delete(&nModel.Notification{}).Error +} + +func (r *NotificationRepository) BatchInsertNotifications(notifications []*nModel.Notification) error { + return r.db.Create(¬ifications).Error +} +func (r *NotificationRepository) MarkNotificationsAsSent(notifications []*nModel.Notification) error { + // Extract IDs from notifications + var ids []int + for _, notification := range notifications { + ids = append(ids, notification.ID) + } + // Use the extracted IDs in the Where clause + return r.db.Model(&nModel.Notification{}).Where("id IN (?)", ids).Update("is_sent", true).Error +} +func (r *NotificationRepository) GetPendingNotificaiton(c context.Context, lookback time.Duration) ([]*nModel.Notification, error) { + var notifications []*nModel.Notification + start := time.Now().UTC().Add(-lookback) + end := time.Now().UTC() + if err := r.db.Debug().Where("is_sent = ? AND scheduled_for < ? AND scheduled_for > ?", false, end, start).Find(¬ifications).Error; err != nil { + return nil, err + } + return notifications, nil +} -- cgit