Small code tweaks
This commit is contained in:
@@ -1634,7 +1634,7 @@
|
||||
"name": "page",
|
||||
"type": "uint",
|
||||
"required": false,
|
||||
"title": "Page number (1 based)"
|
||||
"title": "Page number (0 based)"
|
||||
},
|
||||
{
|
||||
"name": "perPage",
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
{
|
||||
"name": "page",
|
||||
"required": false,
|
||||
"title": "Page number (1 based)",
|
||||
"title": "Page number (0 based)",
|
||||
"type": "uint"
|
||||
},
|
||||
{
|
||||
|
||||
+2
-2
@@ -81,14 +81,14 @@ function types {
|
||||
./build/gen-type-set --types Role --output system/types/role.gen.go
|
||||
./build/gen-type-set --types Organisation --output system/types/organisation.gen.go
|
||||
./build/gen-type-set --types Credentials --output system/types/credentials.gen.go
|
||||
./build/gen-type-set --types Reminder --output system/types/reminder.gen.go
|
||||
./build/gen-type-set --types Reminder --output system/types/reminder.gen.go
|
||||
|
||||
./build/gen-type-set-test --types User --output system/types/user.gen_test.go
|
||||
./build/gen-type-set-test --types Application --output system/types/application.gen_test.go
|
||||
./build/gen-type-set-test --types Role --output system/types/role.gen_test.go
|
||||
./build/gen-type-set-test --types Organisation --output system/types/organisation.gen_test.go
|
||||
./build/gen-type-set-test --types Credentials --output system/types/credentials.gen_test.go
|
||||
./build/gen-type-set-test --types Reminder --output system/types/reminder.gen_test.go
|
||||
./build/gen-type-set-test --types Reminder --output system/types/reminder.gen_test.go
|
||||
|
||||
./build/gen-type-set --types Value --output internal/settings/types.gen.go --with-primary-key=false --package settings
|
||||
./build/gen-type-set-test --types Value --output internal/settings/types.gen_test.go --with-primary-key=false --package settings
|
||||
|
||||
@@ -715,7 +715,7 @@ 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 |
|
||||
| page | uint | GET | Page number (1 based) | 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 |
|
||||
|
||||
## Add new reminder
|
||||
|
||||
@@ -4,6 +4,8 @@ import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/system/types"
|
||||
"github.com/titpetric/factory"
|
||||
squirrel "gopkg.in/Masterminds/squirrel.v1"
|
||||
@@ -11,7 +13,7 @@ import (
|
||||
|
||||
type (
|
||||
ReminderRepository interface {
|
||||
Find(types.ReminderFilter) (set types.ReminderSet, err error)
|
||||
Find(types.ReminderFilter) (set types.ReminderSet, f types.ReminderFilter, err error)
|
||||
FindByID(ID uint64) (*types.Reminder, error)
|
||||
FindByIDs(ID []uint64) (types.ReminderSet, error)
|
||||
|
||||
@@ -43,19 +45,23 @@ func (r reminder) table() string {
|
||||
|
||||
func (r reminder) columns() []string {
|
||||
return []string{
|
||||
"r.id",
|
||||
"r.resource",
|
||||
"r.payload",
|
||||
"r.snooze_count",
|
||||
"id",
|
||||
"resource",
|
||||
"payload",
|
||||
"snooze_count",
|
||||
|
||||
"r.assigned_to",
|
||||
"r.assigned_by",
|
||||
"r.assigned_at",
|
||||
"assigned_to",
|
||||
"assigned_by",
|
||||
"assigned_at",
|
||||
|
||||
"r.dismissed_by",
|
||||
"r.dismissed_at",
|
||||
"dismissed_by",
|
||||
"dismissed_at",
|
||||
|
||||
"r.remind_at",
|
||||
"remind_at",
|
||||
|
||||
"created_at",
|
||||
"updated_at",
|
||||
"deleted_at",
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,21 +76,33 @@ func (r reminder) queryNoFilter() squirrel.SelectBuilder {
|
||||
Columns(r.columns()...)
|
||||
}
|
||||
|
||||
func (r reminder) Find(filter types.ReminderFilter) (set types.ReminderSet, err error) {
|
||||
func (r reminder) Find(filter types.ReminderFilter) (set types.ReminderSet, f types.ReminderFilter, err error) {
|
||||
f = filter
|
||||
q := r.query()
|
||||
|
||||
if filter.AssignedTo != 0 {
|
||||
q = q.Where("r.assigned_to = ?", filter.AssignedTo)
|
||||
if f.AssignedTo != 0 {
|
||||
q = q.Where("r.assigned_to = ?", f.AssignedTo)
|
||||
}
|
||||
|
||||
if filter.Resource != "" {
|
||||
q = q.Where("r.resource LIKE ?%", filter.Resource)
|
||||
if f.Resource != "" {
|
||||
q = q.Where("r.resource LIKE ?", f.Resource+"%")
|
||||
}
|
||||
|
||||
if f.AccessCheck.HasOperation() {
|
||||
q = q.Where(f.AccessCheck.BindToEnv(
|
||||
types.ReminderPermissionResource,
|
||||
"sys",
|
||||
))
|
||||
}
|
||||
|
||||
if f.Count, err = r.count(q); err != nil || f.Count == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
// @todo allow sorting at some point
|
||||
q = q.OrderBy("r.remind_at")
|
||||
|
||||
return set, r.fetchPaged(&set, q, filter.Page, filter.PerPage)
|
||||
return set, f, rh.FetchPaged(r.db(), q, f.Page, f.PerPage, &set)
|
||||
}
|
||||
|
||||
func (r reminder) FindByID(ID uint64) (rm *types.Reminder, err error) {
|
||||
@@ -93,7 +111,14 @@ func (r reminder) FindByID(ID uint64) (rm *types.Reminder, err error) {
|
||||
q := r.query().
|
||||
Where("r.id = ?", ID)
|
||||
|
||||
return rm, isFound(r.fetchOne(rm, q), rm.ID > 0, ErrReminderNotFound)
|
||||
err = r.fetchOne(rm, q)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else if rm.ID <= 0 {
|
||||
return nil, ErrReminderNotFound
|
||||
}
|
||||
|
||||
return rm, nil
|
||||
}
|
||||
|
||||
func (r reminder) FindByIDs(IDs []uint64) (rr types.ReminderSet, err error) {
|
||||
|
||||
@@ -4,6 +4,8 @@ import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/internal/auth"
|
||||
"github.com/titpetric/factory/resputil"
|
||||
|
||||
@@ -38,8 +40,8 @@ func (ctrl *Reminder) List(ctx context.Context, r *request.ReminderList) (interf
|
||||
f := types.ReminderFilter{
|
||||
AssignedTo: r.AssignedTo,
|
||||
Resource: r.Resource,
|
||||
Page: r.Page,
|
||||
PerPage: r.PerPage,
|
||||
|
||||
PageFilter: rh.Paging(r.Page, r.PerPage),
|
||||
}
|
||||
|
||||
set, filter, err := ctrl.reminder.Find(ctx, f)
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/internal/permissions"
|
||||
"github.com/cortezaproject/corteza-server/system/repository"
|
||||
|
||||
intAuth "github.com/cortezaproject/corteza-server/internal/auth"
|
||||
@@ -53,19 +54,20 @@ func Reminder(ctx context.Context) ReminderService {
|
||||
}
|
||||
|
||||
func (svc reminder) Find(ctx context.Context, f types.ReminderFilter) (types.ReminderSet, types.ReminderFilter, error) {
|
||||
rr, err := svc.reminder.Find(f)
|
||||
f.PageFilter.NormalizePerPageNoMax()
|
||||
|
||||
f.AccessCheck = permissions.InitAccessCheckFilter(
|
||||
"read",
|
||||
intAuth.GetIdentityFromContext(ctx).Roles(),
|
||||
svc.ac.CanReadAnyReminder(ctx),
|
||||
)
|
||||
|
||||
rr, f, err := svc.reminder.Find(f)
|
||||
if err != nil {
|
||||
return nil, f, err
|
||||
}
|
||||
|
||||
ret := types.ReminderSet{}
|
||||
for _, rm := range rr {
|
||||
if svc.ac.CanReadReminder(ctx, rm) {
|
||||
ret = append(ret, rm)
|
||||
}
|
||||
}
|
||||
|
||||
return ret, f, nil
|
||||
return rr, f, nil
|
||||
}
|
||||
|
||||
func (svc reminder) FindByID(ctx context.Context, ID uint64) (*types.Reminder, error) {
|
||||
|
||||
@@ -3,12 +3,14 @@ package types
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/internal/permissions"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/jmoiron/sqlx/types"
|
||||
)
|
||||
|
||||
type (
|
||||
Reminder struct {
|
||||
ID uint64 `json:"notificationID,string" db:"id"`
|
||||
ID uint64 `json:"reminderID,string" db:"id"`
|
||||
Resource string `json:"resource" db:"resource"`
|
||||
Payload types.JSONText `json:"payload" db:"payload"`
|
||||
SnoozeCount uint `json:"snoozeCount" db:"snooze_count"`
|
||||
@@ -32,5 +34,11 @@ type (
|
||||
AssignedTo uint64 `json:"assignedTo,uint64"`
|
||||
Page uint `json:"page,uint"`
|
||||
PerPage uint `json:"perPage,uint"`
|
||||
|
||||
// Standard paging fields & helpers
|
||||
rh.PageFilter
|
||||
|
||||
// Access controll
|
||||
permissions.AccessCheck `json:"-"`
|
||||
}
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user