Tweak reminder filter params
This commit is contained in:
+14
-2
@@ -1637,11 +1637,23 @@
|
||||
"type": "*time.Time"
|
||||
},
|
||||
{
|
||||
"name": "scheduledBefore",
|
||||
"name": "scheduledUntil",
|
||||
"required": false,
|
||||
"title": "Only reminders up to this time (excluded)",
|
||||
"title": "Only reminders up to this time (included)",
|
||||
"type": "*time.Time"
|
||||
},
|
||||
{
|
||||
"name": "scheduledOnly",
|
||||
"required": false,
|
||||
"title": "Only scheduled reminders",
|
||||
"type": "bool"
|
||||
},
|
||||
{
|
||||
"name": "excludeDismissed",
|
||||
"required": false,
|
||||
"title": "Filter out dismissed reminders",
|
||||
"type": "bool"
|
||||
},
|
||||
{
|
||||
"name": "page",
|
||||
"type": "uint",
|
||||
|
||||
@@ -43,11 +43,23 @@
|
||||
"type": "*time.Time"
|
||||
},
|
||||
{
|
||||
"name": "scheduledBefore",
|
||||
"name": "scheduledUntil",
|
||||
"required": false,
|
||||
"title": "Only reminders up to this time (excluded)",
|
||||
"title": "Only reminders up to this time (included)",
|
||||
"type": "*time.Time"
|
||||
},
|
||||
{
|
||||
"name": "scheduledOnly",
|
||||
"required": false,
|
||||
"title": "Only scheduled reminders",
|
||||
"type": "bool"
|
||||
},
|
||||
{
|
||||
"name": "excludeDismissed",
|
||||
"required": false,
|
||||
"title": "Filter out dismissed reminders",
|
||||
"type": "bool"
|
||||
},
|
||||
{
|
||||
"name": "page",
|
||||
"required": false,
|
||||
|
||||
@@ -716,7 +716,9 @@ Organisations represent a top-level grouping entity. There may be many organisat
|
||||
| resource | string | GET | Only reminders of a specific resource | N/A | NO |
|
||||
| assignedTo | uint64 | GET | Only reminders for a given user | N/A | NO |
|
||||
| scheduledFrom | *time.Time | GET | Only reminders from this time (included) | N/A | NO |
|
||||
| scheduledBefore | *time.Time | GET | Only reminders up to this time (excluded) | N/A | NO |
|
||||
| scheduledUntil | *time.Time | GET | Only reminders up to this time (included) | N/A | NO |
|
||||
| scheduledOnly | bool | GET | Only scheduled reminders | N/A | NO |
|
||||
| excludeDismissed | bool | GET | Filter out dismissed reminders | N/A | NO |
|
||||
| page | uint | GET | Page number (0 based) | N/A | NO |
|
||||
| perPage | uint | GET | Returned items per page (default 50) | N/A | NO |
|
||||
|
||||
|
||||
@@ -80,6 +80,14 @@ func (r reminder) Find(filter types.ReminderFilter) (set types.ReminderSet, f ty
|
||||
f = filter
|
||||
q := r.query()
|
||||
|
||||
if f.ExcludeDismissed {
|
||||
q = q.Where("dismissed_at IS NULL")
|
||||
}
|
||||
|
||||
if f.ScheduledOnly {
|
||||
q = q.Where("remind_at IS NOT NULL")
|
||||
}
|
||||
|
||||
if f.AssignedTo != 0 {
|
||||
q = q.Where("r.assigned_to = ?", f.AssignedTo)
|
||||
}
|
||||
@@ -91,8 +99,8 @@ func (r reminder) Find(filter types.ReminderFilter) (set types.ReminderSet, f ty
|
||||
if f.ScheduledFrom != nil {
|
||||
q = q.Where("r.remind_at >= ?", f.ScheduledFrom.Format(time.RFC3339))
|
||||
}
|
||||
if f.ScheduledBefore != nil {
|
||||
q = q.Where("r.remind_at < ?", f.ScheduledBefore.Format(time.RFC3339))
|
||||
if f.ScheduledUntil != nil {
|
||||
q = q.Where("r.remind_at <= ?", f.ScheduledUntil.Format(time.RFC3339))
|
||||
}
|
||||
|
||||
if f.AccessCheck.HasOperation() {
|
||||
|
||||
@@ -26,7 +26,7 @@ type (
|
||||
|
||||
reminderSetPayload struct {
|
||||
Filter types.ReminderFilter `json:"filter"`
|
||||
Set types.ReminderSet `json:"set"`
|
||||
Set types.ReminderSet `json:"set,omitempty"`
|
||||
}
|
||||
)
|
||||
|
||||
@@ -38,10 +38,12 @@ func (Reminder) New() *Reminder {
|
||||
|
||||
func (ctrl *Reminder) List(ctx context.Context, r *request.ReminderList) (interface{}, error) {
|
||||
f := types.ReminderFilter{
|
||||
AssignedTo: r.AssignedTo,
|
||||
Resource: r.Resource,
|
||||
ScheduledFrom: r.ScheduledFrom,
|
||||
ScheduledBefore: r.ScheduledBefore,
|
||||
AssignedTo: r.AssignedTo,
|
||||
Resource: r.Resource,
|
||||
ScheduledFrom: r.ScheduledFrom,
|
||||
ScheduledUntil: r.ScheduledUntil,
|
||||
ExcludeDismissed: r.ExcludeDismissed,
|
||||
ScheduledOnly: r.ScheduledOnly,
|
||||
|
||||
PageFilter: rh.Paging(r.Page, r.PerPage),
|
||||
}
|
||||
|
||||
@@ -36,12 +36,14 @@ var _ = multipart.FileHeader{}
|
||||
|
||||
// Reminder list request parameters
|
||||
type ReminderList struct {
|
||||
Resource string
|
||||
AssignedTo uint64 `json:",string"`
|
||||
ScheduledFrom *time.Time
|
||||
ScheduledBefore *time.Time
|
||||
Page uint
|
||||
PerPage uint
|
||||
Resource string
|
||||
AssignedTo uint64 `json:",string"`
|
||||
ScheduledFrom *time.Time
|
||||
ScheduledUntil *time.Time
|
||||
ScheduledOnly bool
|
||||
ExcludeDismissed bool
|
||||
Page uint
|
||||
PerPage uint
|
||||
}
|
||||
|
||||
func NewReminderList() *ReminderList {
|
||||
@@ -54,7 +56,9 @@ func (r ReminderList) Auditable() map[string]interface{} {
|
||||
out["resource"] = r.Resource
|
||||
out["assignedTo"] = r.AssignedTo
|
||||
out["scheduledFrom"] = r.ScheduledFrom
|
||||
out["scheduledBefore"] = r.ScheduledBefore
|
||||
out["scheduledUntil"] = r.ScheduledUntil
|
||||
out["scheduledOnly"] = r.ScheduledOnly
|
||||
out["excludeDismissed"] = r.ExcludeDismissed
|
||||
out["page"] = r.Page
|
||||
out["perPage"] = r.PerPage
|
||||
|
||||
@@ -100,12 +104,18 @@ func (r *ReminderList) Fill(req *http.Request) (err error) {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if val, ok := get["scheduledBefore"]; ok {
|
||||
if val, ok := get["scheduledUntil"]; ok {
|
||||
|
||||
if r.ScheduledBefore, err = parseISODatePtrWithErr(val); err != nil {
|
||||
if r.ScheduledUntil, err = parseISODatePtrWithErr(val); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if val, ok := get["scheduledOnly"]; ok {
|
||||
r.ScheduledOnly = parseBool(val)
|
||||
}
|
||||
if val, ok := get["excludeDismissed"]; ok {
|
||||
r.ExcludeDismissed = parseBool(val)
|
||||
}
|
||||
if val, ok := get["page"]; ok {
|
||||
r.Page = parseUint(val)
|
||||
}
|
||||
|
||||
@@ -30,12 +30,14 @@ type (
|
||||
}
|
||||
|
||||
ReminderFilter struct {
|
||||
Resource string `json:"resource"`
|
||||
AssignedTo uint64 `json:"assignedTo,uint64"`
|
||||
ScheduledFrom *time.Time `json:"scheduledFrom"`
|
||||
ScheduledBefore *time.Time `json:"scheduledBefore"`
|
||||
Page uint `json:"page,uint"`
|
||||
PerPage uint `json:"perPage,uint"`
|
||||
Resource string `json:"resource"`
|
||||
AssignedTo uint64 `json:"assignedTo,uint64"`
|
||||
ScheduledFrom *time.Time `json:"scheduledFrom"`
|
||||
ScheduledUntil *time.Time `json:"scheduledUntil"`
|
||||
ExcludeDismissed bool `json:"excludeDismissed"`
|
||||
ScheduledOnly bool `json:"scheduledOnly"`
|
||||
Page uint `json:"page,uint"`
|
||||
PerPage uint `json:"perPage,uint"`
|
||||
|
||||
// Standard paging fields & helpers
|
||||
rh.PageFilter
|
||||
|
||||
Reference in New Issue
Block a user