3
0
Files
corteza/server/system/rest/reminder.go
Vivek Patel 8a7b8d9c7f Add endpoint to undo dismissed reminder
User can undo their own reminders.
2023-02-28 15:24:21 +01:00

113 lines
3.1 KiB
Go

package rest
import (
"context"
"github.com/cortezaproject/corteza/server/pkg/api"
"github.com/cortezaproject/corteza/server/pkg/auth"
"github.com/cortezaproject/corteza/server/pkg/filter"
"github.com/cortezaproject/corteza/server/system/rest/request"
"github.com/cortezaproject/corteza/server/system/service"
"github.com/cortezaproject/corteza/server/system/types"
"time"
)
type (
Reminder struct {
reminder service.ReminderService
}
reminderSetPayload struct {
Filter types.ReminderFilter `json:"filter"`
Set types.ReminderSet `json:"set,omitempty"`
}
)
func (Reminder) New() *Reminder {
ctrl := &Reminder{}
ctrl.reminder = service.DefaultReminder
return ctrl
}
func (ctrl *Reminder) List(ctx context.Context, r *request.ReminderList) (interface{}, error) {
var (
err error
f = types.ReminderFilter{
AssignedTo: r.AssignedTo,
Resource: r.Resource,
ScheduledFrom: r.ScheduledFrom,
ScheduledUntil: r.ScheduledUntil,
ExcludeDismissed: r.ExcludeDismissed,
IncludeDeleted: r.IncludeDeleted,
ScheduledOnly: r.ScheduledOnly,
}
)
if f.Paging, err = filter.NewPaging(r.Limit, r.PageCursor); err != nil {
return nil, err
}
if f.Sorting, err = filter.NewSorting(r.Sort); err != nil {
return nil, err
}
set, f, err := ctrl.reminder.Find(ctx, f)
return ctrl.makeFilterPayload(ctx, set, f, err)
}
func (ctrl *Reminder) Create(ctx context.Context, r *request.ReminderCreate) (interface{}, error) {
ntf := &types.Reminder{
AssignedAt: time.Now(),
AssignedBy: auth.GetIdentityFromContext(ctx).Identity(),
AssignedTo: r.AssignedTo,
Payload: r.Payload,
Resource: r.Resource,
RemindAt: r.RemindAt,
}
return ctrl.reminder.Create(ctx, ntf)
}
func (ctrl *Reminder) Update(ctx context.Context, r *request.ReminderUpdate) (interface{}, error) {
ntf := &types.Reminder{
ID: r.ReminderID,
AssignedAt: time.Now(),
AssignedBy: auth.GetIdentityFromContext(ctx).Identity(),
AssignedTo: r.AssignedTo,
Payload: r.Payload,
Resource: r.Resource,
RemindAt: r.RemindAt,
}
return ctrl.reminder.Update(ctx, ntf)
}
func (ctrl *Reminder) Read(ctx context.Context, r *request.ReminderRead) (interface{}, error) {
return ctrl.reminder.FindByID(ctx, r.ReminderID)
}
func (ctrl *Reminder) Delete(ctx context.Context, r *request.ReminderDelete) (interface{}, error) {
return api.OK(), ctrl.reminder.Delete(ctx, r.ReminderID)
}
func (ctrl *Reminder) Dismiss(ctx context.Context, r *request.ReminderDismiss) (interface{}, error) {
return api.OK(), ctrl.reminder.Dismiss(ctx, r.ReminderID)
}
func (ctrl *Reminder) Undismiss(ctx context.Context, r *request.ReminderUndismiss) (interface{}, error) {
return api.OK(), ctrl.reminder.Undismiss(ctx, r.ReminderID)
}
func (ctrl *Reminder) Snooze(ctx context.Context, r *request.ReminderSnooze) (interface{}, error) {
return api.OK(), ctrl.reminder.Snooze(ctx, r.ReminderID, r.RemindAt)
}
func (ctrl *Reminder) makeFilterPayload(ctx context.Context, nn types.ReminderSet, f types.ReminderFilter, err error) (*reminderSetPayload, error) {
if err != nil {
return nil, err
}
return &reminderSetPayload{Filter: f, Set: nn}, nil
}