Ported pkg/rh to pkg/filter and removed obsolete code
This commit is contained in:
@@ -5,25 +5,23 @@ import (
|
||||
"encoding/csv"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/cortezaproject/corteza-server/store"
|
||||
"net/http"
|
||||
"path"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/titpetric/factory/resputil"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/compose/decoder"
|
||||
"github.com/cortezaproject/corteza-server/compose/encoder"
|
||||
"github.com/cortezaproject/corteza-server/compose/rest/request"
|
||||
"github.com/cortezaproject/corteza-server/compose/service"
|
||||
"github.com/cortezaproject/corteza-server/compose/types"
|
||||
"github.com/cortezaproject/corteza-server/pkg/corredor"
|
||||
"github.com/cortezaproject/corteza-server/pkg/filter"
|
||||
"github.com/cortezaproject/corteza-server/pkg/mime"
|
||||
"github.com/cortezaproject/corteza-server/pkg/payload"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/cortezaproject/corteza-server/store"
|
||||
systemService "github.com/cortezaproject/corteza-server/system/service"
|
||||
systemTypes "github.com/cortezaproject/corteza-server/system/types"
|
||||
"github.com/titpetric/factory/resputil"
|
||||
"net/http"
|
||||
"path"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type (
|
||||
@@ -83,7 +81,7 @@ func (ctrl *Record) List(ctx context.Context, r *request.RecordList) (interface{
|
||||
rf = types.RecordFilter{
|
||||
NamespaceID: r.NamespaceID,
|
||||
ModuleID: r.ModuleID,
|
||||
Deleted: rh.FilterState(r.Deleted),
|
||||
Deleted: filter.State(r.Deleted),
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@@ -4,12 +4,9 @@ import (
|
||||
"database/sql/driver"
|
||||
"encoding/json"
|
||||
"github.com/cortezaproject/corteza-server/pkg/filter"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"time"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/pkg/permissions"
|
||||
"github.com/pkg/errors"
|
||||
"time"
|
||||
)
|
||||
|
||||
type (
|
||||
@@ -47,7 +44,7 @@ type (
|
||||
Handle string `json:"handle"`
|
||||
Query string `json:"query"`
|
||||
|
||||
Deleted rh.FilterState `json:"deleted"`
|
||||
Deleted filter.State `json:"deleted"`
|
||||
|
||||
// Check fn is called by store backend for each resource found function can
|
||||
// modify the resource and return false if store should not return it
|
||||
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
"github.com/jmoiron/sqlx/types"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/pkg/permissions"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
)
|
||||
|
||||
type (
|
||||
@@ -31,7 +30,7 @@ type (
|
||||
Handle string `json:"handle"`
|
||||
Name string `json:"name"`
|
||||
|
||||
Deleted rh.FilterState `json:"deleted"`
|
||||
Deleted filter.State `json:"deleted"`
|
||||
|
||||
// Check fn is called by store backend for each resource found function can
|
||||
// modify the resource and return false if store should not return it
|
||||
|
||||
@@ -3,11 +3,10 @@ package types
|
||||
import (
|
||||
"database/sql/driver"
|
||||
"encoding/json"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/cortezaproject/corteza-server/pkg/filter"
|
||||
"github.com/cortezaproject/corteza-server/pkg/permissions"
|
||||
"sort"
|
||||
"time"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/pkg/permissions"
|
||||
)
|
||||
|
||||
type (
|
||||
@@ -36,7 +35,7 @@ type (
|
||||
|
||||
ModuleFieldFilter struct {
|
||||
ModuleID []uint64
|
||||
Deleted rh.FilterState
|
||||
Deleted filter.State
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ import (
|
||||
"github.com/pkg/errors"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/pkg/permissions"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
)
|
||||
|
||||
type (
|
||||
@@ -30,7 +29,7 @@ type (
|
||||
Slug string `json:"slug"`
|
||||
Name string `json:"name"`
|
||||
|
||||
Deleted rh.FilterState `json:"deleted"`
|
||||
Deleted filter.State `json:"deleted"`
|
||||
|
||||
// Check fn is called by store backend for each resource found function can
|
||||
// modify the resource and return false if store should not return it
|
||||
|
||||
@@ -9,7 +9,6 @@ import (
|
||||
"github.com/pkg/errors"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/pkg/permissions"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
)
|
||||
|
||||
type (
|
||||
@@ -60,7 +59,7 @@ type (
|
||||
Handle string `json:"handle"`
|
||||
Query string `json:"query"`
|
||||
|
||||
Deleted rh.FilterState `json:"deleted"`
|
||||
Deleted filter.State `json:"deleted"`
|
||||
|
||||
// Check fn is called by store backend for each resource found function can
|
||||
// modify the resource and return false if store should not return it
|
||||
|
||||
@@ -8,7 +8,6 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/pkg/permissions"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
)
|
||||
|
||||
type (
|
||||
@@ -57,7 +56,7 @@ type (
|
||||
// Preloaded set of additional modules that are used for record filtering
|
||||
// Modules ModuleSet
|
||||
|
||||
Deleted rh.FilterState `json:"deleted"`
|
||||
Deleted filter.State `json:"deleted"`
|
||||
|
||||
// Check fn is called by store backend for each resource found function can
|
||||
// modify the resource and return false if store should not return it
|
||||
|
||||
@@ -4,10 +4,9 @@ import (
|
||||
"database/sql/driver"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"time"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/pkg/filter"
|
||||
"github.com/pkg/errors"
|
||||
"time"
|
||||
)
|
||||
|
||||
type (
|
||||
@@ -26,7 +25,7 @@ type (
|
||||
|
||||
RecordValueFilter struct {
|
||||
RecordID []uint64
|
||||
Deleted rh.FilterState `json:"deleted"`
|
||||
Deleted filter.State `json:"deleted"`
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@ import (
|
||||
"fmt"
|
||||
"github.com/Masterminds/squirrel"
|
||||
"github.com/cortezaproject/corteza-server/pkg/cli"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/davecgh/go-spew/spew"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/titpetric/factory"
|
||||
|
||||
40
pkg/filter/state.go
Normal file
40
pkg/filter/state.go
Normal file
@@ -0,0 +1,40 @@
|
||||
package filter
|
||||
|
||||
import (
|
||||
"github.com/Masterminds/squirrel"
|
||||
)
|
||||
|
||||
type (
|
||||
// State for filtering by state,
|
||||
// for example: include, exclude or return only deleted values
|
||||
State uint
|
||||
)
|
||||
|
||||
// State* constants aid with Filter*
|
||||
const (
|
||||
// StateExcluded do not include entries
|
||||
StateExcluded State = 0
|
||||
|
||||
// StateInclusive include entries
|
||||
StateInclusive State = 1
|
||||
|
||||
// StateExclusive only entries that have this state
|
||||
StateExclusive State = 2
|
||||
)
|
||||
|
||||
// squirrel.SelectBuilder
|
||||
func StateCondition(q squirrel.SelectBuilder, field string, fs State) squirrel.SelectBuilder {
|
||||
switch fs {
|
||||
case StateExclusive:
|
||||
// only null values
|
||||
return q.Where(squirrel.NotEq{field: nil})
|
||||
|
||||
case StateInclusive:
|
||||
// mo filter
|
||||
return q
|
||||
|
||||
default:
|
||||
// exclude all non-null values
|
||||
return q.Where(squirrel.Eq{field: nil})
|
||||
}
|
||||
}
|
||||
@@ -11,8 +11,7 @@ package ngimporter
|
||||
// "github.com/cortezaproject/corteza-server/compose/repository"
|
||||
// cct "github.com/cortezaproject/corteza-server/compose/types"
|
||||
// "github.com/cortezaproject/corteza-server/pkg/ngimporter/types"
|
||||
// "github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
// "github.com/schollz/progressbar/v2"
|
||||
//// "github.com/schollz/progressbar/v2"
|
||||
//)
|
||||
//
|
||||
//type (
|
||||
@@ -195,7 +194,7 @@ package ngimporter
|
||||
// }
|
||||
// rr, _, err := recRepo.Find(uMod, cct.RecordFilter{
|
||||
// ModuleID: uMod.ID,
|
||||
// Deleted: rh.FilterStateInclusive,
|
||||
// Deleted: filter.StateInclusive,
|
||||
// NamespaceID: ns.ID,
|
||||
// Query: "sys_legacy_ref_id IS NOT NULL",
|
||||
// PageFilter: rh.PageFilter{
|
||||
|
||||
@@ -15,8 +15,7 @@ package types
|
||||
// "github.com/cortezaproject/corteza-server/compose/repository"
|
||||
// cv "github.com/cortezaproject/corteza-server/compose/service/values"
|
||||
// "github.com/cortezaproject/corteza-server/compose/types"
|
||||
// "github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
// "github.com/schollz/progressbar/v2"
|
||||
//// "github.com/schollz/progressbar/v2"
|
||||
//)
|
||||
//
|
||||
//type (
|
||||
@@ -164,7 +163,7 @@ package types
|
||||
// fl := types.RecordFilter{
|
||||
// ModuleID: refModU,
|
||||
// NamespaceID: n.Namespace.ID,
|
||||
// Deleted: rh.FilterStateInclusive,
|
||||
// Deleted: filter.StateInclusive,
|
||||
// Query: fmt.Sprintf("%s='%s'", LegacyRefIDField, ref),
|
||||
// PageFilter: rh.PageFilter{
|
||||
// Page: 1,
|
||||
@@ -196,7 +195,7 @@ package types
|
||||
// // fetch all records, ordered by the ID for this module before the specified timestamp (if provided)
|
||||
// f := types.RecordFilter{
|
||||
// Sort: "id ASC",
|
||||
// Deleted: rh.FilterStateInclusive,
|
||||
// Deleted: filter.StateInclusive,
|
||||
// ModuleID: n.Module.ID,
|
||||
// NamespaceID: n.Namespace.ID,
|
||||
// PageFilter: rh.PageFilter{
|
||||
|
||||
@@ -2,10 +2,7 @@ package permissions
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/Masterminds/squirrel"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
)
|
||||
|
||||
type (
|
||||
@@ -86,7 +83,9 @@ func (rf ResourceFilter) ToSql() (sql string, args []interface{}, err error) {
|
||||
}
|
||||
|
||||
build = func(ss ...squirrel.Sqlizer) (sql string, args []interface{}, err error) {
|
||||
return rh.SquirrelFunction("COALESCE", append(checks, ss...)...).ToSql()
|
||||
return squirrel.Expr("FALSE").ToSql()
|
||||
// @obsolete
|
||||
//return rh.SquirrelFunction("COALESCE", append(checks, ss...)...).ToSql()
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
# (rh) Repository Helpers
|
||||
|
||||
Package name is short an abbreviated to avoid
|
||||
colliding with per-service repository package names.
|
||||
@@ -1,11 +0,0 @@
|
||||
package rh
|
||||
|
||||
import (
|
||||
"github.com/Masterminds/squirrel"
|
||||
"github.com/titpetric/factory"
|
||||
)
|
||||
|
||||
func Delete(db *factory.DB, table string, cnd squirrel.Sqlizer) error {
|
||||
_, err := squirrel.ExecWith(db, squirrel.Delete(table).Where(cnd))
|
||||
return err
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
package rh
|
||||
|
||||
import (
|
||||
"github.com/Masterminds/squirrel"
|
||||
)
|
||||
|
||||
type (
|
||||
// FilterState for filtering by state,
|
||||
// for example: include, exclude or return only deleted values
|
||||
FilterState uint
|
||||
)
|
||||
|
||||
// FilterState* constants aid with Filter*
|
||||
const (
|
||||
// FilterStateExcluded do not include entries
|
||||
FilterStateExcluded FilterState = 0
|
||||
|
||||
// FilterStateInclusive include entries
|
||||
FilterStateInclusive FilterState = 1
|
||||
|
||||
// FilterStateExclusive only entries that have this state
|
||||
FilterStateExclusive FilterState = 2
|
||||
)
|
||||
|
||||
// squirrel.SelectBuilder
|
||||
func FilterNullByState(q squirrel.SelectBuilder, field string, fs FilterState) squirrel.SelectBuilder {
|
||||
switch fs {
|
||||
case FilterStateExclusive:
|
||||
// only null values
|
||||
return q.Where(squirrel.NotEq{field: nil})
|
||||
|
||||
case FilterStateInclusive:
|
||||
// mo filter
|
||||
return q
|
||||
|
||||
default:
|
||||
// exclude all non-null values
|
||||
return q.Where(squirrel.Eq{field: nil})
|
||||
}
|
||||
}
|
||||
@@ -1,50 +0,0 @@
|
||||
package rh
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/Masterminds/squirrel"
|
||||
"github.com/titpetric/factory"
|
||||
)
|
||||
|
||||
// DailyMetrics aids repositories on simple stat building queries
|
||||
//
|
||||
// Returns a slice of numbers (timestamp + value pairs
|
||||
func DailyMetrics(db *factory.DB, q squirrel.SelectBuilder, field string) (rval []uint, err error) {
|
||||
var (
|
||||
aux = make([]struct {
|
||||
Timestamp uint
|
||||
Value uint
|
||||
}, 0)
|
||||
)
|
||||
|
||||
q = q.
|
||||
Column(fmt.Sprintf("UNIX_TIMESTAMP(DATE(%s)) timestamp", field)).
|
||||
Column("COUNT(*) AS value").
|
||||
Where(fmt.Sprintf("%s IS NOT NULL", field)).
|
||||
OrderBy("timestamp").
|
||||
GroupBy("timestamp")
|
||||
|
||||
if err = FetchAll(db, q, &aux); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
rval = make([]uint, 2*len(aux))
|
||||
for i := 0; i < len(aux); i++ {
|
||||
rval[2*i], rval[2*i+1] = aux[i].Timestamp, aux[i].Value
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// MultiDailyMetrics simplifies fetching of multiple daily metrics
|
||||
func MultiDailyMetrics(db *factory.DB, q squirrel.SelectBuilder, fields []string, mm ...*[]uint) (err error) {
|
||||
for m := 0; m < len(mm); m++ {
|
||||
*mm[m], err = DailyMetrics(db, q, fields[m])
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
@@ -1,63 +0,0 @@
|
||||
package rh
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/pkg/ql"
|
||||
)
|
||||
|
||||
var (
|
||||
normalizeSortColumns = strings.NewReplacer(
|
||||
"createdAt",
|
||||
"created_at",
|
||||
"updatedAt",
|
||||
"updated_at",
|
||||
"deletedAt",
|
||||
"deleted_at",
|
||||
)
|
||||
)
|
||||
|
||||
// NormalizeSortColumns returns sort-by columns by replacing names
|
||||
// that API returns as JSON objects into internal (db) representation
|
||||
func NormalizeSortColumns(sort string) string {
|
||||
return normalizeSortColumns.Replace(sort)
|
||||
}
|
||||
|
||||
func ParseOrder(order string, valid ...string) (out []string, err error) {
|
||||
var (
|
||||
// Sort parser
|
||||
sp = ql.NewParser()
|
||||
|
||||
// Sort columns
|
||||
sc ql.Columns
|
||||
|
||||
whitelist = map[string]bool{}
|
||||
)
|
||||
|
||||
for _, col := range valid {
|
||||
if i := strings.Index(col, "."); i > -1 {
|
||||
whitelist[col[i+1:]] = true
|
||||
}
|
||||
|
||||
whitelist[col] = true
|
||||
}
|
||||
|
||||
sp.OnIdent = func(i ql.Ident) (ql.Ident, error) {
|
||||
if !whitelist[i.Value] {
|
||||
return i, errors.Errorf("unknown order-by column %q", i.Value)
|
||||
}
|
||||
|
||||
i.Value += " "
|
||||
return i, nil
|
||||
}
|
||||
|
||||
if sc, err = sp.ParseColumns(order); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
out = sc.Strings()
|
||||
|
||||
return
|
||||
}
|
||||
107
pkg/rh/paging.go
107
pkg/rh/paging.go
@@ -1,107 +0,0 @@
|
||||
package rh
|
||||
|
||||
import "strconv"
|
||||
|
||||
const (
|
||||
PER_PAGE_DEFAULT uint = 50
|
||||
PER_PAGE_MAX = 200
|
||||
PER_PAGE_MIN = 10
|
||||
)
|
||||
|
||||
type (
|
||||
// PageFilter supports page/perPage (one based) and limit/offset
|
||||
// pagination.
|
||||
//
|
||||
// Limit/offset is prioritised over page/perPage
|
||||
//
|
||||
PageFilter struct {
|
||||
// If limit is set to a positive number,
|
||||
// paging mechanisms will use limit/offset
|
||||
// Otherwise page/perPage is used
|
||||
Limit uint `json:"limit,omitempty"`
|
||||
Offset uint `json:"offset,omitempty"`
|
||||
|
||||
Page uint `json:"page,omitempty"`
|
||||
PerPage uint `json:"perPage,omitempty"`
|
||||
|
||||
// Count is used when filter and pagination are send back
|
||||
// with the response
|
||||
Count uint `json:"count"`
|
||||
}
|
||||
|
||||
paginationParams interface {
|
||||
GetLimit() uint
|
||||
GetOffset() uint
|
||||
GetPage() uint
|
||||
GetPerPage() uint
|
||||
}
|
||||
)
|
||||
|
||||
func Paging(p paginationParams) PageFilter {
|
||||
return PageFilter{
|
||||
Limit: p.GetLimit(),
|
||||
Offset: p.GetOffset(),
|
||||
Page: p.GetPage(),
|
||||
PerPage: p.GetPerPage(),
|
||||
}
|
||||
}
|
||||
|
||||
// Limit creates PageFilter struct from limit and, optionally offset
|
||||
func Limit(a ...uint) PageFilter {
|
||||
switch len(a) {
|
||||
case 1:
|
||||
return PageFilter{Limit: a[0]}
|
||||
case 2:
|
||||
return PageFilter{Limit: a[0], Offset: a[1]}
|
||||
}
|
||||
|
||||
return PageFilter{}
|
||||
}
|
||||
|
||||
func (pf *PageFilter) ParsePagination(input interface{}) error {
|
||||
return parsePagination(pf, input)
|
||||
}
|
||||
|
||||
func parsePagination(pf *PageFilter, input interface{}) (err error) {
|
||||
switch i := input.(type) {
|
||||
case map[string]string:
|
||||
conv := func(v *uint, name string) error {
|
||||
if _, has := i[name]; has {
|
||||
pv, err := strconv.ParseUint(i[name], 10, 32)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
*v = uint(pv)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
if len(i["limit"]+i["offset"]) > 0 {
|
||||
if err = conv(&pf.Limit, "limit"); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if err = conv(&pf.Offset, "offset"); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
if len(i["page"]+i["perPage"]) > 0 {
|
||||
if err = conv(&pf.Page, "page"); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if err = conv(&pf.PerPage, "perPage"); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -1,73 +0,0 @@
|
||||
package rh
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestLimit(t *testing.T) {
|
||||
var (
|
||||
r = require.New(t)
|
||||
)
|
||||
|
||||
r.Equal(Limit(42).Limit, uint(42))
|
||||
r.Equal(Limit(0, 42).Offset, uint(42))
|
||||
}
|
||||
|
||||
func Test_parsePagination(t *testing.T) {
|
||||
var (
|
||||
tests = []struct {
|
||||
name string
|
||||
args interface{}
|
||||
pf PageFilter
|
||||
wantErr bool
|
||||
}{
|
||||
{
|
||||
"empty",
|
||||
nil,
|
||||
PageFilter{},
|
||||
false,
|
||||
},
|
||||
{
|
||||
"valid l/o",
|
||||
map[string]string{"limit": "42", "offset": "314"},
|
||||
PageFilter{Limit: 42, Offset: 314},
|
||||
false,
|
||||
},
|
||||
{
|
||||
"mixed",
|
||||
map[string]string{"page": "42", "limit": "314"},
|
||||
PageFilter{Limit: 314, Offset: 0},
|
||||
false,
|
||||
},
|
||||
{
|
||||
"invalid limit",
|
||||
map[string]string{"limit": "abc"},
|
||||
PageFilter{},
|
||||
true,
|
||||
},
|
||||
{
|
||||
"invalid page",
|
||||
map[string]string{"page": "abc"},
|
||||
PageFilter{},
|
||||
true,
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
var (
|
||||
pf = PageFilter{}
|
||||
)
|
||||
|
||||
if err := parsePagination(&pf, tt.args); (err != nil) != tt.wantErr {
|
||||
t.Errorf("parsePagination() error = %v, wantErr %v", err, tt.wantErr)
|
||||
} else if !reflect.DeepEqual(pf, tt.pf) {
|
||||
t.Errorf("\n actual: %v\nexpected: %v\n", pf, tt.pf)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -1,92 +0,0 @@
|
||||
package rh
|
||||
|
||||
import (
|
||||
"github.com/Masterminds/squirrel"
|
||||
"github.com/lann/builder"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/titpetric/factory"
|
||||
)
|
||||
|
||||
// FetchOne fetches single row from table
|
||||
func FetchOne(db *factory.DB, q squirrel.SelectBuilder, one interface{}) (err error) {
|
||||
var (
|
||||
sql string
|
||||
args []interface{}
|
||||
)
|
||||
|
||||
if sql, args, err = q.ToSql(); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if err = db.Get(one, sql, args...); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Count counts all rows that match conditions from given query builder
|
||||
func Count(db *factory.DB, q squirrel.SelectBuilder) (count uint, err error) {
|
||||
// Remove order-bys for counting
|
||||
q = builder.Delete(q, "OrderBys").(squirrel.SelectBuilder)
|
||||
|
||||
// Replace columns
|
||||
q = builder.Delete(q, "Columns").(squirrel.SelectBuilder).Column("COUNT(*)")
|
||||
|
||||
if sqlSelect, argsSelect, err := q.ToSql(); err != nil {
|
||||
return 0, err
|
||||
} else {
|
||||
if err := db.Get(&count, sqlSelect, argsSelect...); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
}
|
||||
|
||||
return count, nil
|
||||
}
|
||||
|
||||
// FetchPaged fetches paged rows
|
||||
func FetchPaged(db *factory.DB, q squirrel.SelectBuilder, p PageFilter, set interface{}) error {
|
||||
if p.Limit+p.Offset == 0 {
|
||||
// When both, offset & limit are 0,
|
||||
// calculate both values from page/perPage params
|
||||
if p.PerPage > 0 {
|
||||
p.Limit = p.PerPage
|
||||
}
|
||||
|
||||
if p.Page < 1 {
|
||||
p.Page = 1
|
||||
}
|
||||
|
||||
p.Offset = uint((p.Page - 1) * p.PerPage)
|
||||
}
|
||||
|
||||
if p.Limit > 0 {
|
||||
q = q.Limit(uint64(p.Limit))
|
||||
}
|
||||
|
||||
if p.Offset > 0 {
|
||||
q = q.Offset(uint64(p.Offset))
|
||||
}
|
||||
|
||||
return FetchAll(db, q, set)
|
||||
}
|
||||
|
||||
// FetchPaged fetches paged rows
|
||||
func FetchAll(db *factory.DB, q squirrel.Sqlizer, set interface{}) error {
|
||||
if sqlSelect, argsSelect, err := q.ToSql(); err != nil {
|
||||
return err
|
||||
} else {
|
||||
return db.Select(set, sqlSelect, argsSelect...)
|
||||
}
|
||||
}
|
||||
|
||||
// IsFound helps with one-row results
|
||||
func IsFound(err error, valid bool, nerr error) error {
|
||||
if err != nil {
|
||||
return errors.WithStack(err)
|
||||
} else if !valid {
|
||||
return errors.WithStack(nerr)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -1,82 +0,0 @@
|
||||
package rh
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/Masterminds/squirrel"
|
||||
)
|
||||
|
||||
type (
|
||||
// Waiting for PR to be merged:
|
||||
// https://github.com/Masterminds/squirrel/pull/206
|
||||
//
|
||||
// then we can move to squirrel.Fn(...)
|
||||
squirrelFunction struct {
|
||||
name string
|
||||
fargs []squirrel.Sqlizer
|
||||
}
|
||||
)
|
||||
|
||||
func SquirrelFunction(name string, args ...squirrel.Sqlizer) *squirrelFunction {
|
||||
return &squirrelFunction{name: name, fargs: args}
|
||||
}
|
||||
|
||||
func (f squirrelFunction) ToSql() (sql string, args []interface{}, err error) {
|
||||
var (
|
||||
aSql string
|
||||
aArgs []interface{}
|
||||
)
|
||||
|
||||
sql = f.name + "("
|
||||
args = make([]interface{}, 0)
|
||||
for a := 0; a < len(f.fargs); a++ {
|
||||
if a > 0 {
|
||||
sql += ", "
|
||||
}
|
||||
|
||||
aSql, aArgs, err = f.fargs[a].ToSql()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
sql += aSql
|
||||
args = append(args, aArgs...)
|
||||
}
|
||||
sql += ")"
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
type (
|
||||
squirrelConcatExpr struct {
|
||||
parts []string
|
||||
args []interface{}
|
||||
err error
|
||||
}
|
||||
)
|
||||
|
||||
func SquirrelConcatExpr(args ...interface{}) squirrel.Sqlizer {
|
||||
var w = new(squirrelConcatExpr)
|
||||
|
||||
for _, a := range args {
|
||||
if w.err != nil {
|
||||
break
|
||||
}
|
||||
|
||||
switch o := a.(type) {
|
||||
case string:
|
||||
w.parts = append(w.parts, o)
|
||||
case squirrel.Sqlizer:
|
||||
p, a, err := o.ToSql()
|
||||
w.parts = append(w.parts, p)
|
||||
w.args = append(w.args, a...)
|
||||
w.err = err
|
||||
}
|
||||
}
|
||||
|
||||
return w
|
||||
}
|
||||
|
||||
func (w *squirrelConcatExpr) ToSql() (string, []interface{}, error) {
|
||||
return strings.Join(w.parts, ""), w.args, w.err
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
package rh
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
var (
|
||||
now = func() time.Time {
|
||||
return time.Now()
|
||||
}
|
||||
)
|
||||
|
||||
// SetCurrentTimeRounded sets current time (rounded to seconds) to a given ptr
|
||||
func SetCurrentTimeRounded(v interface{}) {
|
||||
n := now().Truncate(time.Second)
|
||||
|
||||
switch t := v.(type) {
|
||||
case *time.Time:
|
||||
*t = n
|
||||
case **time.Time:
|
||||
_ = t
|
||||
*t = &n
|
||||
}
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
package rh
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestNow(t *testing.T) {
|
||||
var (
|
||||
r = require.New(t)
|
||||
|
||||
val time.Time
|
||||
ptr *time.Time
|
||||
inv1 int
|
||||
inv2 string
|
||||
)
|
||||
|
||||
SetCurrentTimeRounded(&val)
|
||||
r.NotEmpty(val)
|
||||
|
||||
SetCurrentTimeRounded(&ptr)
|
||||
r.NotNil(ptr)
|
||||
|
||||
SetCurrentTimeRounded(&inv1)
|
||||
r.Empty(inv1)
|
||||
|
||||
SetCurrentTimeRounded(&inv2)
|
||||
r.Empty(inv2)
|
||||
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
package rh
|
||||
|
||||
import (
|
||||
"github.com/Masterminds/squirrel"
|
||||
"github.com/titpetric/factory"
|
||||
)
|
||||
|
||||
type (
|
||||
Set map[string]interface{}
|
||||
)
|
||||
|
||||
// UpdateColumns constructs and executes an update query
|
||||
func UpdateColumns(db *factory.DB, table string, set Set, cnd squirrel.Sqlizer) error {
|
||||
_, err := squirrel.ExecWith(db, squirrel.Update(table).SetMap(set).Where(cnd))
|
||||
return err
|
||||
}
|
||||
@@ -3,14 +3,14 @@ package rdbms
|
||||
import (
|
||||
"context"
|
||||
"github.com/Masterminds/squirrel"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/cortezaproject/corteza-server/pkg/filter"
|
||||
"github.com/cortezaproject/corteza-server/system/types"
|
||||
)
|
||||
|
||||
func (s Store) convertApplicationFilter(f types.ApplicationFilter) (query squirrel.SelectBuilder, err error) {
|
||||
query = s.applicationsSelectBuilder()
|
||||
|
||||
query = rh.FilterNullByState(query, "app.deleted_at", f.Deleted)
|
||||
query = filter.StateCondition(query, "app.deleted_at", f.Deleted)
|
||||
|
||||
if f.Query != "" {
|
||||
qs := f.Query + "%"
|
||||
|
||||
@@ -3,14 +3,14 @@ package rdbms
|
||||
import (
|
||||
"github.com/Masterminds/squirrel"
|
||||
"github.com/cortezaproject/corteza-server/compose/types"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/cortezaproject/corteza-server/pkg/filter"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func (s Store) convertComposeChartFilter(f types.ChartFilter) (query squirrel.SelectBuilder, err error) {
|
||||
query = s.composeChartsSelectBuilder()
|
||||
|
||||
query = rh.FilterNullByState(query, "cch.deleted_at", f.Deleted)
|
||||
query = filter.StateCondition(query, "cch.deleted_at", f.Deleted)
|
||||
|
||||
if f.NamespaceID > 0 {
|
||||
query = query.Where("cch.rel_namespace = ?", f.NamespaceID)
|
||||
|
||||
@@ -3,14 +3,14 @@ package rdbms
|
||||
import (
|
||||
"github.com/Masterminds/squirrel"
|
||||
"github.com/cortezaproject/corteza-server/compose/types"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/cortezaproject/corteza-server/pkg/filter"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func (s Store) convertComposeModuleFilter(f types.ModuleFilter) (query squirrel.SelectBuilder, err error) {
|
||||
query = s.composeModulesSelectBuilder()
|
||||
|
||||
query = rh.FilterNullByState(query, "cmd.deleted_at", f.Deleted)
|
||||
query = filter.StateCondition(query, "cmd.deleted_at", f.Deleted)
|
||||
|
||||
if f.NamespaceID > 0 {
|
||||
query = query.Where("cmd.rel_namespace = ?", f.NamespaceID)
|
||||
|
||||
@@ -4,7 +4,7 @@ import (
|
||||
"fmt"
|
||||
"github.com/Masterminds/squirrel"
|
||||
"github.com/cortezaproject/corteza-server/compose/types"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/cortezaproject/corteza-server/pkg/filter"
|
||||
)
|
||||
|
||||
func (s Store) convertComposeModuleFieldFilter(f types.ModuleFieldFilter) (query squirrel.SelectBuilder, err error) {
|
||||
@@ -15,7 +15,7 @@ func (s Store) convertComposeModuleFieldFilter(f types.ModuleFieldFilter) (query
|
||||
return
|
||||
}
|
||||
|
||||
query = rh.FilterNullByState(query, "cmf.deleted_at", f.Deleted)
|
||||
query = filter.StateCondition(query, "cmf.deleted_at", f.Deleted)
|
||||
query = query.Where(squirrel.Eq{"cmf.rel_module": f.ModuleID})
|
||||
|
||||
return
|
||||
|
||||
@@ -3,14 +3,14 @@ package rdbms
|
||||
import (
|
||||
"github.com/Masterminds/squirrel"
|
||||
"github.com/cortezaproject/corteza-server/compose/types"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/cortezaproject/corteza-server/pkg/filter"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func (s Store) convertComposeNamespaceFilter(f types.NamespaceFilter) (query squirrel.SelectBuilder, err error) {
|
||||
query = s.composeNamespacesSelectBuilder()
|
||||
|
||||
query = rh.FilterNullByState(query, "cns.deleted_at", f.Deleted)
|
||||
query = filter.StateCondition(query, "cns.deleted_at", f.Deleted)
|
||||
|
||||
if f.Query != "" {
|
||||
q := "%" + strings.ToLower(f.Query) + "%"
|
||||
|
||||
@@ -4,7 +4,7 @@ import (
|
||||
"context"
|
||||
"github.com/Masterminds/squirrel"
|
||||
"github.com/cortezaproject/corteza-server/compose/types"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/cortezaproject/corteza-server/pkg/filter"
|
||||
"github.com/cortezaproject/corteza-server/store"
|
||||
"strings"
|
||||
)
|
||||
@@ -12,7 +12,7 @@ import (
|
||||
func (s Store) convertComposePageFilter(f types.PageFilter) (query squirrel.SelectBuilder, err error) {
|
||||
query = s.composePagesSelectBuilder()
|
||||
|
||||
query = rh.FilterNullByState(query, "cpg.deleted_at", f.Deleted)
|
||||
query = filter.StateCondition(query, "cpg.deleted_at", f.Deleted)
|
||||
|
||||
if f.NamespaceID > 0 {
|
||||
query = query.Where("cpg.rel_namespace = ?", f.NamespaceID)
|
||||
|
||||
@@ -8,7 +8,6 @@ import (
|
||||
"github.com/cortezaproject/corteza-server/compose/types"
|
||||
"github.com/cortezaproject/corteza-server/pkg/handle"
|
||||
"github.com/cortezaproject/corteza-server/pkg/ql"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/cortezaproject/corteza-server/pkg/slice"
|
||||
"github.com/jmoiron/sqlx"
|
||||
"strconv"
|
||||
@@ -190,7 +189,7 @@ func (b *recordReportBuilder) Build() (sb squirrel.SelectBuilder, err error) {
|
||||
}
|
||||
|
||||
// Wrap to cast func to ensure numeric output
|
||||
col := squirrel.Alias(rh.SquirrelConcatExpr("CAST(", m.Expr, " AS DECIMAL(14,2))"), m.Alias)
|
||||
col := squirrel.Alias(SquirrelConcatExpr("CAST(", m.Expr, " AS DECIMAL(14,2))"), m.Alias)
|
||||
report = report.Column(col)
|
||||
|
||||
b.numerics = append(b.numerics, m.Alias)
|
||||
|
||||
@@ -6,13 +6,13 @@ import (
|
||||
"errors"
|
||||
"github.com/Masterminds/squirrel"
|
||||
"github.com/cortezaproject/corteza-server/compose/types"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/cortezaproject/corteza-server/pkg/filter"
|
||||
)
|
||||
|
||||
func (s Store) convertComposeRecordValueFilter(_ *types.Module, f types.RecordValueFilter) (query squirrel.SelectBuilder, err error) {
|
||||
// Always filter by record IDs
|
||||
query = s.composeRecordValuesSelectBuilder().Where(squirrel.Eq{"crv.record_id": f.RecordID})
|
||||
query = rh.FilterNullByState(query, "crv.deleted_at", f.Deleted)
|
||||
query = filter.StateCondition(query, "crv.deleted_at", f.Deleted)
|
||||
|
||||
return query, nil
|
||||
}
|
||||
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
"github.com/cortezaproject/corteza-server/compose/types"
|
||||
"github.com/cortezaproject/corteza-server/pkg/filter"
|
||||
"github.com/cortezaproject/corteza-server/pkg/ql"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/cortezaproject/corteza-server/pkg/slice"
|
||||
"github.com/cortezaproject/corteza-server/store"
|
||||
"strings"
|
||||
@@ -240,7 +239,7 @@ func (s Store) convertComposeRecordFilter(m *types.Module, f types.RecordFilter)
|
||||
Where("crd.rel_namespace = ?", m.NamespaceID)
|
||||
|
||||
// Inc/exclude deleted records according to filter settings
|
||||
query = rh.FilterNullByState(query, "crd.deleted_at", f.Deleted)
|
||||
query = filter.StateCondition(query, "crd.deleted_at", f.Deleted)
|
||||
|
||||
// Parse filters.
|
||||
if f.Query != "" {
|
||||
@@ -291,7 +290,7 @@ func (s Store) composeRecordPostLoadProcessor(ctx context.Context, m *types.Modu
|
||||
)
|
||||
rvs, _, err = s.searchComposeRecordValues(ctx, nil, types.RecordValueFilter{
|
||||
RecordID: types.RecordSet(set).IDs(),
|
||||
Deleted: rh.FilterStateInclusive,
|
||||
Deleted: filter.StateInclusive,
|
||||
})
|
||||
if err != nil {
|
||||
return
|
||||
|
||||
@@ -3,7 +3,6 @@ package rdbms
|
||||
import (
|
||||
"context"
|
||||
"github.com/Masterminds/squirrel"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/lann/builder"
|
||||
)
|
||||
|
||||
@@ -25,38 +24,3 @@ func Count(ctx context.Context, db dbLayer, q squirrel.SelectBuilder) (count uin
|
||||
|
||||
return count, nil
|
||||
}
|
||||
|
||||
func calculatePaging(p rh.PageFilter) (o uint, l uint) {
|
||||
o, l = p.Offset, p.Limit
|
||||
|
||||
if o+l == 0 {
|
||||
// When both, offset & limit are 0,
|
||||
// calculate both values from page/perPage params
|
||||
if p.PerPage > 0 {
|
||||
l = p.PerPage
|
||||
}
|
||||
|
||||
if p.Page < 1 {
|
||||
p.Page = 1
|
||||
}
|
||||
|
||||
o = (p.Page - 1) * p.PerPage
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// FetchPaged fetches paged rows
|
||||
func ApplyPaging(q squirrel.SelectBuilder, p rh.PageFilter) squirrel.SelectBuilder {
|
||||
o, l := calculatePaging(p)
|
||||
|
||||
if o > 0 {
|
||||
q = q.Offset(uint64(o))
|
||||
}
|
||||
|
||||
if l > 0 {
|
||||
q = q.Limit(uint64(l))
|
||||
}
|
||||
|
||||
return q
|
||||
}
|
||||
|
||||
@@ -3,15 +3,15 @@ package rdbms
|
||||
import (
|
||||
"context"
|
||||
"github.com/Masterminds/squirrel"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/cortezaproject/corteza-server/pkg/filter"
|
||||
"github.com/cortezaproject/corteza-server/system/types"
|
||||
)
|
||||
|
||||
func (s Store) convertRoleFilter(f types.RoleFilter) (query squirrel.SelectBuilder, err error) {
|
||||
query = s.rolesSelectBuilder()
|
||||
|
||||
query = rh.FilterNullByState(query, "rl.deleted_at", f.Deleted)
|
||||
query = rh.FilterNullByState(query, "rl.archived_at", f.Archived)
|
||||
query = filter.StateCondition(query, "rl.deleted_at", f.Deleted)
|
||||
query = filter.StateCondition(query, "rl.archived_at", f.Archived)
|
||||
|
||||
if len(f.RoleID) > 0 {
|
||||
query = query.Where(squirrel.Eq{"rl.ID": f.RoleID})
|
||||
|
||||
41
store/rdbms/squirrel.go
Normal file
41
store/rdbms/squirrel.go
Normal file
@@ -0,0 +1,41 @@
|
||||
package rdbms
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/Masterminds/squirrel"
|
||||
)
|
||||
|
||||
type (
|
||||
squirrelConcatExpr struct {
|
||||
parts []string
|
||||
args []interface{}
|
||||
err error
|
||||
}
|
||||
)
|
||||
|
||||
func SquirrelConcatExpr(args ...interface{}) squirrel.Sqlizer {
|
||||
var w = new(squirrelConcatExpr)
|
||||
|
||||
for _, a := range args {
|
||||
if w.err != nil {
|
||||
break
|
||||
}
|
||||
|
||||
switch o := a.(type) {
|
||||
case string:
|
||||
w.parts = append(w.parts, o)
|
||||
case squirrel.Sqlizer:
|
||||
p, a, err := o.ToSql()
|
||||
w.parts = append(w.parts, p)
|
||||
w.args = append(w.args, a...)
|
||||
w.err = err
|
||||
}
|
||||
}
|
||||
|
||||
return w
|
||||
}
|
||||
|
||||
func (w *squirrelConcatExpr) ToSql() (string, []interface{}, error) {
|
||||
return strings.Join(w.parts, ""), w.args, w.err
|
||||
}
|
||||
@@ -4,15 +4,15 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/Masterminds/squirrel"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/cortezaproject/corteza-server/pkg/filter"
|
||||
"github.com/cortezaproject/corteza-server/system/types"
|
||||
)
|
||||
|
||||
func (s Store) convertUserFilter(f types.UserFilter) (query squirrel.SelectBuilder, err error) {
|
||||
query = s.usersSelectBuilder()
|
||||
|
||||
query = rh.FilterNullByState(query, "usr.deleted_at", f.Deleted)
|
||||
query = rh.FilterNullByState(query, "usr.suspended_at", f.Suspended)
|
||||
query = filter.StateCondition(query, "usr.deleted_at", f.Deleted)
|
||||
query = filter.StateCondition(query, "usr.suspended_at", f.Suspended)
|
||||
|
||||
if len(f.UserID) > 0 {
|
||||
query = query.Where(squirrel.Eq{"usr.ID": f.UserID})
|
||||
|
||||
@@ -2,8 +2,8 @@ package tests
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/cortezaproject/corteza-server/pkg/filter"
|
||||
"github.com/cortezaproject/corteza-server/pkg/id"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/cortezaproject/corteza-server/store"
|
||||
"github.com/cortezaproject/corteza-server/system/types"
|
||||
"github.com/stretchr/testify/require"
|
||||
@@ -96,12 +96,12 @@ func testApplications(t *testing.T, s store.Applications) {
|
||||
req.Len(set, valid) // we've deleted one
|
||||
|
||||
// search for ALL
|
||||
set, f, err = s.SearchApplications(ctx, types.ApplicationFilter{Deleted: rh.FilterStateInclusive})
|
||||
set, f, err = s.SearchApplications(ctx, types.ApplicationFilter{Deleted: filter.StateInclusive})
|
||||
req.NoError(err)
|
||||
req.Len(set, count) // we've deleted one
|
||||
|
||||
// search for deleted only
|
||||
set, f, err = s.SearchApplications(ctx, types.ApplicationFilter{Deleted: rh.FilterStateExclusive})
|
||||
set, f, err = s.SearchApplications(ctx, types.ApplicationFilter{Deleted: filter.StateExclusive})
|
||||
req.NoError(err)
|
||||
req.Len(set, 1) // we've deleted one
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@ package tests
|
||||
import (
|
||||
"context"
|
||||
"github.com/cortezaproject/corteza-server/compose/types"
|
||||
"github.com/cortezaproject/corteza-server/pkg/filter"
|
||||
"github.com/cortezaproject/corteza-server/pkg/id"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/cortezaproject/corteza-server/store"
|
||||
"github.com/stretchr/testify/require"
|
||||
"testing"
|
||||
@@ -106,12 +106,12 @@ func testComposeCharts(t *testing.T, s store.Storable) {
|
||||
req.Len(set, valid) // we've deleted one
|
||||
|
||||
// search for ALL
|
||||
set, f, err = s.SearchComposeCharts(ctx, types.ChartFilter{Deleted: rh.FilterStateInclusive})
|
||||
set, f, err = s.SearchComposeCharts(ctx, types.ChartFilter{Deleted: filter.StateInclusive})
|
||||
req.NoError(err)
|
||||
req.Len(set, count) // we've deleted one
|
||||
|
||||
// search for deleted only
|
||||
set, f, err = s.SearchComposeCharts(ctx, types.ChartFilter{Deleted: rh.FilterStateExclusive})
|
||||
set, f, err = s.SearchComposeCharts(ctx, types.ChartFilter{Deleted: filter.StateExclusive})
|
||||
req.NoError(err)
|
||||
req.Len(set, 1) // we've deleted one
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@ package tests
|
||||
import (
|
||||
"context"
|
||||
"github.com/cortezaproject/corteza-server/compose/types"
|
||||
"github.com/cortezaproject/corteza-server/pkg/filter"
|
||||
"github.com/cortezaproject/corteza-server/pkg/id"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/cortezaproject/corteza-server/store"
|
||||
"github.com/stretchr/testify/require"
|
||||
"testing"
|
||||
@@ -106,12 +106,12 @@ func testComposeModules(t *testing.T, s store.ComposeModules) {
|
||||
req.Len(set, valid) // we've deleted one
|
||||
|
||||
// search for ALL
|
||||
set, f, err = s.SearchComposeModules(ctx, types.ModuleFilter{Deleted: rh.FilterStateInclusive})
|
||||
set, f, err = s.SearchComposeModules(ctx, types.ModuleFilter{Deleted: filter.StateInclusive})
|
||||
req.NoError(err)
|
||||
req.Len(set, count) // we've deleted one
|
||||
|
||||
// search for deleted only
|
||||
set, f, err = s.SearchComposeModules(ctx, types.ModuleFilter{Deleted: rh.FilterStateExclusive})
|
||||
set, f, err = s.SearchComposeModules(ctx, types.ModuleFilter{Deleted: filter.StateExclusive})
|
||||
req.NoError(err)
|
||||
req.Len(set, 1) // we've deleted one
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@ package tests
|
||||
import (
|
||||
"context"
|
||||
"github.com/cortezaproject/corteza-server/compose/types"
|
||||
"github.com/cortezaproject/corteza-server/pkg/filter"
|
||||
"github.com/cortezaproject/corteza-server/pkg/id"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/cortezaproject/corteza-server/store"
|
||||
"github.com/stretchr/testify/require"
|
||||
"testing"
|
||||
@@ -103,12 +103,12 @@ func testComposeNamespaces(t *testing.T, s store.ComposeNamespaces) {
|
||||
req.Len(set, valid) // we've deleted one
|
||||
|
||||
// search for ALL
|
||||
set, f, err = s.SearchComposeNamespaces(ctx, types.NamespaceFilter{Deleted: rh.FilterStateInclusive})
|
||||
set, f, err = s.SearchComposeNamespaces(ctx, types.NamespaceFilter{Deleted: filter.StateInclusive})
|
||||
req.NoError(err)
|
||||
req.Len(set, count) // we've deleted one
|
||||
|
||||
// search for deleted only
|
||||
set, f, err = s.SearchComposeNamespaces(ctx, types.NamespaceFilter{Deleted: rh.FilterStateExclusive})
|
||||
set, f, err = s.SearchComposeNamespaces(ctx, types.NamespaceFilter{Deleted: filter.StateExclusive})
|
||||
req.NoError(err)
|
||||
req.Len(set, 1) // we've deleted one
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@ package tests
|
||||
import (
|
||||
"context"
|
||||
"github.com/cortezaproject/corteza-server/compose/types"
|
||||
"github.com/cortezaproject/corteza-server/pkg/filter"
|
||||
"github.com/cortezaproject/corteza-server/pkg/id"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/cortezaproject/corteza-server/store"
|
||||
"github.com/stretchr/testify/require"
|
||||
"testing"
|
||||
@@ -106,12 +106,12 @@ func testComposePages(t *testing.T, s store.ComposePages) {
|
||||
req.Len(set, valid) // we've deleted one
|
||||
|
||||
// search for ALL
|
||||
set, f, err = s.SearchComposePages(ctx, types.PageFilter{Deleted: rh.FilterStateInclusive})
|
||||
set, f, err = s.SearchComposePages(ctx, types.PageFilter{Deleted: filter.StateInclusive})
|
||||
req.NoError(err)
|
||||
req.Len(set, count) // we've deleted one
|
||||
|
||||
// search for deleted only
|
||||
set, f, err = s.SearchComposePages(ctx, types.PageFilter{Deleted: rh.FilterStateExclusive})
|
||||
set, f, err = s.SearchComposePages(ctx, types.PageFilter{Deleted: filter.StateExclusive})
|
||||
req.NoError(err)
|
||||
req.Len(set, 1) // we've deleted one
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@ package tests
|
||||
import (
|
||||
"context"
|
||||
"github.com/cortezaproject/corteza-server/compose/types"
|
||||
"github.com/cortezaproject/corteza-server/pkg/filter"
|
||||
"github.com/cortezaproject/corteza-server/pkg/id"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/cortezaproject/corteza-server/store"
|
||||
"github.com/stretchr/testify/require"
|
||||
"testing"
|
||||
@@ -228,12 +228,12 @@ func testComposeRecords(t *testing.T, s store.ComposeRecords) {
|
||||
req.Len(set, valid) // we've deleted one
|
||||
|
||||
// search for ALL
|
||||
set, _, err = s.SearchComposeRecords(ctx, mod, types.RecordFilter{Deleted: rh.FilterStateInclusive})
|
||||
set, _, err = s.SearchComposeRecords(ctx, mod, types.RecordFilter{Deleted: filter.StateInclusive})
|
||||
req.NoError(err)
|
||||
req.Len(set, count) // we've deleted one
|
||||
|
||||
// search for deleted only
|
||||
set, _, err = s.SearchComposeRecords(ctx, mod, types.RecordFilter{Deleted: rh.FilterStateExclusive})
|
||||
set, _, err = s.SearchComposeRecords(ctx, mod, types.RecordFilter{Deleted: filter.StateExclusive})
|
||||
req.NoError(err)
|
||||
req.Len(set, 1) // we've deleted one
|
||||
})
|
||||
|
||||
@@ -3,8 +3,8 @@ package tests
|
||||
import (
|
||||
"context"
|
||||
"github.com/cortezaproject/corteza-server/pkg/id"
|
||||
"github.com/cortezaproject/corteza-server/store"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rand"
|
||||
"github.com/cortezaproject/corteza-server/store"
|
||||
// "github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/cortezaproject/corteza-server/system/types"
|
||||
_ "github.com/joho/godotenv/autoload"
|
||||
@@ -21,12 +21,12 @@ func testCredentials(t *testing.T, s store.Credentials) {
|
||||
makeNew = func(nn ...string) *types.Credentials {
|
||||
name := strings.Join(nn, "")
|
||||
return &types.Credentials{
|
||||
ID: id.Next(),
|
||||
OwnerID: id.Next(),
|
||||
Kind: "test-kind" + name,
|
||||
ID: id.Next(),
|
||||
OwnerID: id.Next(),
|
||||
Kind: "test-kind" + name,
|
||||
Credentials: name,
|
||||
Label: "CredentialsCRUD" + name,
|
||||
CreatedAt: time.Now(),
|
||||
Label: "CredentialsCRUD" + name,
|
||||
CreatedAt: time.Now(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -105,7 +105,6 @@ func testCredentials(t *testing.T, s store.Credentials) {
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
t.Run("search", func(t *testing.T) {
|
||||
t.Run("by owner", func(t *testing.T) {
|
||||
req, prefill := truncAndFill(t, 5)
|
||||
@@ -131,15 +130,15 @@ func testCredentials(t *testing.T, s store.Credentials) {
|
||||
// prefill[0].DeletedAt = &time
|
||||
// req.NoError(s.DeleteCredentialsByID(ctx, prefill[0].ID))
|
||||
|
||||
// set, _, err := s.SearchCredentials(ctx, types.CredentialsFilter{Deleted: rh.FilterStateExcluded})
|
||||
// set, _, err := s.SearchCredentials(ctx, types.CredentialsFilter{Deleted: filter.StateExcluded})
|
||||
// req.NoError(err)
|
||||
// req.Len(set, 4)
|
||||
|
||||
// set, _, err = s.SearchCredentials(ctx, types.CredentialsFilter{Deleted: rh.FilterStateInclusive})
|
||||
// set, _, err = s.SearchCredentials(ctx, types.CredentialsFilter{Deleted: filter.StateInclusive})
|
||||
// req.NoError(err)
|
||||
// req.Len(set, 5)
|
||||
|
||||
// set, _, err = s.SearchCredentials(ctx, types.CredentialsFilter{Deleted: rh.FilterStateExclusive})
|
||||
// set, _, err = s.SearchCredentials(ctx, types.CredentialsFilter{Deleted: filter.StateExclusive})
|
||||
// req.NoError(err)
|
||||
// req.Len(set, 1)
|
||||
// })
|
||||
|
||||
@@ -2,9 +2,9 @@ package tests
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/cortezaproject/corteza-server/pkg/filter"
|
||||
"github.com/cortezaproject/corteza-server/pkg/id"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rand"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/cortezaproject/corteza-server/store"
|
||||
"github.com/cortezaproject/corteza-server/system/types"
|
||||
_ "github.com/joho/godotenv/autoload"
|
||||
@@ -107,15 +107,15 @@ func testRoles(t *testing.T, s store.Roles) {
|
||||
prefill[0].DeletedAt = &(prefill[0].CreatedAt)
|
||||
s.UpdateRole(ctx, prefill[0])
|
||||
|
||||
set, _, err := s.SearchRoles(ctx, types.RoleFilter{Deleted: rh.FilterStateExcluded})
|
||||
set, _, err := s.SearchRoles(ctx, types.RoleFilter{Deleted: filter.StateExcluded})
|
||||
req.NoError(err)
|
||||
req.Len(set, 4)
|
||||
|
||||
set, _, err = s.SearchRoles(ctx, types.RoleFilter{Deleted: rh.FilterStateInclusive})
|
||||
set, _, err = s.SearchRoles(ctx, types.RoleFilter{Deleted: filter.StateInclusive})
|
||||
req.NoError(err)
|
||||
req.Len(set, 5)
|
||||
|
||||
set, _, err = s.SearchRoles(ctx, types.RoleFilter{Deleted: rh.FilterStateExclusive})
|
||||
set, _, err = s.SearchRoles(ctx, types.RoleFilter{Deleted: filter.StateExclusive})
|
||||
req.NoError(err)
|
||||
req.Len(set, 1)
|
||||
})
|
||||
@@ -126,15 +126,15 @@ func testRoles(t *testing.T, s store.Roles) {
|
||||
prefill[0].ArchivedAt = &(prefill[0].CreatedAt)
|
||||
s.UpdateRole(ctx, prefill[0])
|
||||
|
||||
set, _, err := s.SearchRoles(ctx, types.RoleFilter{Archived: rh.FilterStateExcluded})
|
||||
set, _, err := s.SearchRoles(ctx, types.RoleFilter{Archived: filter.StateExcluded})
|
||||
req.NoError(err)
|
||||
req.Len(set, 4)
|
||||
|
||||
set, _, err = s.SearchRoles(ctx, types.RoleFilter{Archived: rh.FilterStateInclusive})
|
||||
set, _, err = s.SearchRoles(ctx, types.RoleFilter{Archived: filter.StateInclusive})
|
||||
req.NoError(err)
|
||||
req.Len(set, 5)
|
||||
|
||||
set, _, err = s.SearchRoles(ctx, types.RoleFilter{Archived: rh.FilterStateExclusive})
|
||||
set, _, err = s.SearchRoles(ctx, types.RoleFilter{Archived: filter.StateExclusive})
|
||||
req.NoError(err)
|
||||
req.Len(set, 1)
|
||||
})
|
||||
|
||||
@@ -5,7 +5,6 @@ import (
|
||||
"github.com/cortezaproject/corteza-server/pkg/actionlog"
|
||||
"github.com/cortezaproject/corteza-server/pkg/filter"
|
||||
"github.com/cortezaproject/corteza-server/pkg/payload"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/cortezaproject/corteza-server/system/rest/request"
|
||||
"github.com/cortezaproject/corteza-server/system/service"
|
||||
"github.com/cortezaproject/corteza-server/system/types"
|
||||
@@ -81,8 +80,8 @@ func (ctrl Actionlog) makeFilterPayload(ctx context.Context, ee []*actionlog.Act
|
||||
close(c)
|
||||
},
|
||||
types.UserFilter{
|
||||
Deleted: rh.FilterStateInclusive,
|
||||
Suspended: rh.FilterStateInclusive,
|
||||
Deleted: filter.StateInclusive,
|
||||
Suspended: filter.StateInclusive,
|
||||
},
|
||||
func(u *types.User) error {
|
||||
for p := range pp {
|
||||
|
||||
@@ -6,7 +6,6 @@ import (
|
||||
"github.com/titpetric/factory/resputil"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/pkg/corredor"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/cortezaproject/corteza-server/system/rest/request"
|
||||
"github.com/cortezaproject/corteza-server/system/service"
|
||||
"github.com/cortezaproject/corteza-server/system/service/event"
|
||||
@@ -67,7 +66,7 @@ func (ctrl *Application) List(ctx context.Context, r *request.ApplicationList) (
|
||||
Name: r.Name,
|
||||
Query: r.Query,
|
||||
|
||||
Deleted: rh.FilterState(r.Deleted),
|
||||
Deleted: filter.State(r.Deleted),
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@ import (
|
||||
|
||||
"github.com/cortezaproject/corteza-server/pkg/corredor"
|
||||
"github.com/cortezaproject/corteza-server/pkg/payload"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/cortezaproject/corteza-server/system/rest/request"
|
||||
"github.com/cortezaproject/corteza-server/system/service"
|
||||
"github.com/cortezaproject/corteza-server/system/service/event"
|
||||
@@ -62,8 +61,8 @@ func (ctrl Role) List(ctx context.Context, r *request.RoleList) (interface{}, er
|
||||
f = types.RoleFilter{
|
||||
Query: r.Query,
|
||||
|
||||
Archived: rh.FilterState(r.Archived),
|
||||
Deleted: rh.FilterState(r.Deleted),
|
||||
Archived: filter.State(r.Archived),
|
||||
Deleted: filter.State(r.Deleted),
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@ import (
|
||||
|
||||
"github.com/cortezaproject/corteza-server/pkg/corredor"
|
||||
"github.com/cortezaproject/corteza-server/pkg/payload"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/cortezaproject/corteza-server/system/rest/request"
|
||||
"github.com/cortezaproject/corteza-server/system/service"
|
||||
"github.com/cortezaproject/corteza-server/system/service/event"
|
||||
@@ -47,8 +46,8 @@ func (ctrl User) List(ctx context.Context, r *request.UserList) (interface{}, er
|
||||
Username: r.Username,
|
||||
Handle: r.Handle,
|
||||
Kind: r.Kind,
|
||||
Suspended: rh.FilterState(r.Suspended),
|
||||
Deleted: rh.FilterState(r.Deleted),
|
||||
Suspended: filter.State(r.Suspended),
|
||||
Deleted: filter.State(r.Deleted),
|
||||
}
|
||||
)
|
||||
|
||||
@@ -61,11 +60,11 @@ func (ctrl User) List(ctx context.Context, r *request.UserList) (interface{}, er
|
||||
}
|
||||
|
||||
if r.IncSuspended && f.Suspended == 0 {
|
||||
f.Suspended = rh.FilterStateInclusive
|
||||
f.Suspended = filter.StateInclusive
|
||||
}
|
||||
|
||||
if r.IncDeleted && f.Deleted == 0 {
|
||||
f.Deleted = rh.FilterStateInclusive
|
||||
f.Deleted = filter.StateInclusive
|
||||
}
|
||||
|
||||
set, filter, err := ctrl.user.With(ctx).Find(f)
|
||||
|
||||
@@ -3,8 +3,8 @@ package service
|
||||
import (
|
||||
"context"
|
||||
"github.com/cortezaproject/corteza-server/pkg/actionlog"
|
||||
"github.com/cortezaproject/corteza-server/pkg/filter"
|
||||
"github.com/cortezaproject/corteza-server/pkg/permissions"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/cortezaproject/corteza-server/store"
|
||||
"github.com/cortezaproject/corteza-server/system/service/event"
|
||||
"github.com/cortezaproject/corteza-server/system/types"
|
||||
@@ -60,13 +60,13 @@ func (svc *application) LookupByID(ctx context.Context, ID uint64) (app *types.A
|
||||
return app, svc.recordAction(ctx, aaProps, ApplicationActionLookup, err)
|
||||
}
|
||||
|
||||
func (svc *application) Search(ctx context.Context, filter types.ApplicationFilter) (aa types.ApplicationSet, f types.ApplicationFilter, err error) {
|
||||
func (svc *application) Search(ctx context.Context, af types.ApplicationFilter) (aa types.ApplicationSet, f types.ApplicationFilter, err error) {
|
||||
var (
|
||||
aaProps = &applicationActionProps{filter: &filter}
|
||||
aaProps = &applicationActionProps{filter: &af}
|
||||
)
|
||||
|
||||
// For each fetched item, store backend will check if it is valid or not
|
||||
filter.Check = func(res *types.Application) (bool, error) {
|
||||
af.Check = func(res *types.Application) (bool, error) {
|
||||
if !svc.ac.CanReadApplication(ctx, res) {
|
||||
return false, nil
|
||||
}
|
||||
@@ -75,7 +75,7 @@ func (svc *application) Search(ctx context.Context, filter types.ApplicationFilt
|
||||
}
|
||||
|
||||
err = func() error {
|
||||
if filter.Deleted > rh.FilterStateExcluded {
|
||||
if af.Deleted > filter.StateExcluded {
|
||||
// If list with deleted applications is requested
|
||||
// user must have access permissions to system (ie: is admin)
|
||||
//
|
||||
@@ -86,7 +86,7 @@ func (svc *application) Search(ctx context.Context, filter types.ApplicationFilt
|
||||
}
|
||||
}
|
||||
|
||||
aa, f, err = svc.store.SearchApplications(ctx, filter)
|
||||
aa, f, err = svc.store.SearchApplications(ctx, af)
|
||||
return err
|
||||
}()
|
||||
|
||||
|
||||
@@ -6,10 +6,10 @@ import (
|
||||
"github.com/cortezaproject/corteza-server/pkg/actionlog"
|
||||
internalAuth "github.com/cortezaproject/corteza-server/pkg/auth"
|
||||
"github.com/cortezaproject/corteza-server/pkg/eventbus"
|
||||
"github.com/cortezaproject/corteza-server/pkg/filter"
|
||||
"github.com/cortezaproject/corteza-server/pkg/handle"
|
||||
"github.com/cortezaproject/corteza-server/pkg/id"
|
||||
"github.com/cortezaproject/corteza-server/pkg/permissions"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/cortezaproject/corteza-server/store"
|
||||
"github.com/cortezaproject/corteza-server/system/service/event"
|
||||
"github.com/cortezaproject/corteza-server/system/types"
|
||||
@@ -423,10 +423,10 @@ func (svc user) UniqueCheck(u *types.User) (err error) {
|
||||
isUnique := func(field string) bool {
|
||||
f := types.UserFilter{
|
||||
// If user exists and is deleted -- not a dup
|
||||
Deleted: rh.FilterStateExcluded,
|
||||
Deleted: filter.StateExcluded,
|
||||
|
||||
// If user exists and is suspended -- duplicate
|
||||
Suspended: rh.FilterStateInclusive,
|
||||
Suspended: filter.StateInclusive,
|
||||
}
|
||||
|
||||
switch field {
|
||||
|
||||
@@ -9,7 +9,6 @@ import (
|
||||
"github.com/pkg/errors"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/pkg/permissions"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
)
|
||||
|
||||
type (
|
||||
@@ -40,7 +39,7 @@ type (
|
||||
Name string `json:"name"`
|
||||
Query string `json:"query"`
|
||||
|
||||
Deleted rh.FilterState `json:"deleted"`
|
||||
Deleted filter.State `json:"deleted"`
|
||||
|
||||
// Check fn is called by store backend for each resource found function can
|
||||
// modify the resource and return false if store should not return it
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
package types
|
||||
|
||||
import (
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"time"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/pkg/filter"
|
||||
"github.com/jmoiron/sqlx/types"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
"time"
|
||||
)
|
||||
|
||||
type (
|
||||
@@ -24,10 +23,10 @@ type (
|
||||
}
|
||||
|
||||
CredentialsFilter struct {
|
||||
OwnerID uint64 `json:"ownerID"`
|
||||
Kind string `json:"kind"`
|
||||
Credentials string `json:"credentials"`
|
||||
Deleted rh.FilterState `json:"deleted"`
|
||||
OwnerID uint64 `json:"ownerID"`
|
||||
Kind string `json:"kind"`
|
||||
Credentials string `json:"credentials"`
|
||||
Deleted filter.State `json:"deleted"`
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/pkg/permissions"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
)
|
||||
|
||||
type (
|
||||
@@ -29,8 +28,8 @@ type (
|
||||
Handle string `json:"handle"`
|
||||
Name string `json:"name"`
|
||||
|
||||
Deleted rh.FilterState `json:"deleted"`
|
||||
Archived rh.FilterState `json:"archived"`
|
||||
Deleted filter.State `json:"deleted"`
|
||||
Archived filter.State `json:"archived"`
|
||||
|
||||
// Check fn is called by store backend for each resource found function can
|
||||
// modify the resource and return false if store should not return it
|
||||
|
||||
@@ -10,7 +10,6 @@ import (
|
||||
"github.com/pkg/errors"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/pkg/permissions"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
)
|
||||
|
||||
type (
|
||||
@@ -50,8 +49,8 @@ type (
|
||||
Handle string `json:"handle"`
|
||||
Kind UserKind `json:"kind"`
|
||||
|
||||
Deleted rh.FilterState `json:"deleted"`
|
||||
Suspended rh.FilterState `json:"suspended"`
|
||||
Deleted filter.State `json:"deleted"`
|
||||
Suspended filter.State `json:"suspended"`
|
||||
|
||||
// Check fn is called by store backend for each resource found function can
|
||||
// modify the resource and return false if store should not return it
|
||||
|
||||
@@ -3,6 +3,7 @@ package compose
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/cortezaproject/corteza-server/pkg/filter"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"testing"
|
||||
@@ -12,7 +13,6 @@ import (
|
||||
"github.com/cortezaproject/corteza-server/compose/rest/request"
|
||||
"github.com/cortezaproject/corteza-server/compose/service"
|
||||
"github.com/cortezaproject/corteza-server/compose/types"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
"github.com/cortezaproject/corteza-server/tests/helpers"
|
||||
)
|
||||
|
||||
@@ -62,11 +62,11 @@ func TestRecordExec(t *testing.T) {
|
||||
|
||||
assertSort := func(expectedHandles, expectedCats string) {
|
||||
// Using record service for fetching to avoid value pre-fetching etc..
|
||||
sorting, _ := filter.NewSorting("position ASC")
|
||||
set, _, err := service.DefaultRecord.With(h.secCtx()).Find(types.RecordFilter{
|
||||
ModuleID: module.ID,
|
||||
NamespaceID: module.NamespaceID,
|
||||
Sort: "position ASC",
|
||||
PageFilter: rh.PageFilter{},
|
||||
Sorting: sorting,
|
||||
})
|
||||
|
||||
h.a.NoError(err)
|
||||
|
||||
Reference in New Issue
Block a user