feat: notification enhancement
This commit is contained in:
@@ -50,27 +50,53 @@ const (
|
||||
|
||||
type ReminderService struct {
|
||||
repo *repository.ReminderRepo
|
||||
prefs *repository.NotificationPrefsRepo
|
||||
notif *NotificationService
|
||||
logger *zap.Logger
|
||||
sadhnaURL string
|
||||
}
|
||||
|
||||
func NewReminderService(repo *repository.ReminderRepo, notif *NotificationService, logger *zap.Logger, frontendURL string) *ReminderService {
|
||||
func NewReminderService(repo *repository.ReminderRepo, prefs *repository.NotificationPrefsRepo, notif *NotificationService, logger *zap.Logger, frontendURL string) *ReminderService {
|
||||
return &ReminderService{
|
||||
repo: repo,
|
||||
prefs: prefs,
|
||||
notif: notif,
|
||||
logger: logger,
|
||||
sadhnaURL: strings.TrimRight(frontendURL, "/") + "/sadhna-streak",
|
||||
}
|
||||
}
|
||||
|
||||
// Enabled / SetEnabled / SetTimezone back the settings + tz-capture endpoints.
|
||||
// Enabled / SetEnabled back the legacy all-or-nothing reminder toggle — now a
|
||||
// shim over the per-kind/channel prefs (dual-writing the legacy users column)
|
||||
// so old clients and the new matrix stay consistent. "Enabled" means at least
|
||||
// one reminder kind × channel cell is still on.
|
||||
func (s *ReminderService) Enabled(ctx context.Context, userID string) (bool, error) {
|
||||
return s.repo.GetEnabled(ctx, userID)
|
||||
off, err := s.prefs.DisabledSet(ctx, userID)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
for _, kind := range PrefCategories["sadhna_reminders"] {
|
||||
for _, ch := range PrefChannels {
|
||||
if _, disabled := off[repository.PrefKey(kind, ch)]; !disabled {
|
||||
return true, nil
|
||||
}
|
||||
}
|
||||
}
|
||||
return false, nil
|
||||
}
|
||||
|
||||
func (s *ReminderService) SetEnabled(ctx context.Context, userID string, enabled bool) error {
|
||||
return s.repo.SetEnabled(ctx, userID, enabled)
|
||||
kinds := PrefCategories["sadhna_reminders"]
|
||||
var err error
|
||||
if enabled {
|
||||
err = s.prefs.Enable(ctx, userID, kinds, PrefChannels)
|
||||
} else {
|
||||
err = s.prefs.Disable(ctx, userID, kinds, PrefChannels)
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return s.prefs.SyncLegacyColumns(ctx, userID)
|
||||
}
|
||||
|
||||
// SetTimezone validates the IANA zone before storing so a bad value can never
|
||||
|
||||
Reference in New Issue
Block a user