3
0

Tweak reminder filter params

This commit is contained in:
Tomaž Jerman
2019-09-26 23:15:47 +02:00
parent c16b50ac0c
commit 887aab30fc
7 changed files with 75 additions and 27 deletions
+14 -2
View File
@@ -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",
+14 -2
View File
@@ -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,
+3 -1
View File
@@ -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 |
+10 -2
View File
@@ -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() {
+7 -5
View File
@@ -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),
}
+19 -9
View File
@@ -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)
}
+8 -6
View File
@@ -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