Small code tweaks

This commit is contained in:
Tomaž Jerman
2019-09-30 22:05:27 +02:00
parent ac6f7cad34
commit 3df7d7d50e
8 changed files with 72 additions and 35 deletions
+1 -1
View File
@@ -1634,7 +1634,7 @@
"name": "page",
"type": "uint",
"required": false,
"title": "Page number (1 based)"
"title": "Page number (0 based)"
},
{
"name": "perPage",
+1 -1
View File
@@ -39,7 +39,7 @@
{
"name": "page",
"required": false,
"title": "Page number (1 based)",
"title": "Page number (0 based)",
"type": "uint"
},
{
+2 -2
View File
@@ -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
+1 -1
View File
@@ -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
+43 -18
View File
@@ -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 -2
View File
@@ -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)
+11 -9
View File
@@ -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) {
+9 -1
View File
@@ -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:"-"`
}
)