Removing old trigger struct, svc, repo
This commit is contained in:
@@ -1,132 +0,0 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"github.com/titpetric/factory"
|
||||
"gopkg.in/Masterminds/squirrel.v1"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/compose/types"
|
||||
)
|
||||
|
||||
type (
|
||||
TriggerRepository interface {
|
||||
With(ctx context.Context, db *factory.DB) TriggerRepository
|
||||
|
||||
FindByID(namespaceID, triggerID uint64) (*types.Trigger, error)
|
||||
Find(filter types.TriggerFilter) (set types.TriggerSet, f types.TriggerFilter, err error)
|
||||
Create(mod *types.Trigger) (*types.Trigger, error)
|
||||
Update(mod *types.Trigger) (*types.Trigger, error)
|
||||
DeleteByID(namespaceID, triggerID uint64) error
|
||||
}
|
||||
|
||||
trigger struct {
|
||||
*repository
|
||||
}
|
||||
)
|
||||
|
||||
const (
|
||||
ErrTriggerNotFound = repositoryError("TriggerNotFound")
|
||||
)
|
||||
|
||||
func Trigger(ctx context.Context, db *factory.DB) TriggerRepository {
|
||||
return (&trigger{}).With(ctx, db)
|
||||
}
|
||||
|
||||
func (r trigger) With(ctx context.Context, db *factory.DB) TriggerRepository {
|
||||
return &trigger{
|
||||
repository: r.repository.With(ctx, db),
|
||||
}
|
||||
}
|
||||
|
||||
func (r trigger) table() string {
|
||||
return "compose_trigger"
|
||||
}
|
||||
|
||||
func (r trigger) columns() []string {
|
||||
return []string{
|
||||
"id", "rel_namespace", "name",
|
||||
"actions", "enabled", "source", "rel_module",
|
||||
"created_at", "updated_at", "deleted_at",
|
||||
}
|
||||
}
|
||||
|
||||
func (r trigger) query() squirrel.SelectBuilder {
|
||||
return squirrel.
|
||||
Select().
|
||||
From(r.table()).
|
||||
Where("deleted_at IS NULL")
|
||||
}
|
||||
|
||||
func (r trigger) FindByID(namespaceID, triggerID uint64) (*types.Trigger, error) {
|
||||
var (
|
||||
query = r.query().
|
||||
Columns(r.columns()...).
|
||||
Where("id = ?", triggerID)
|
||||
|
||||
c = &types.Trigger{}
|
||||
)
|
||||
|
||||
if namespaceID > 0 {
|
||||
query = query.Where("rel_namespace = ?", namespaceID)
|
||||
}
|
||||
|
||||
return c, isFound(r.fetchOne(c, query), c.ID > 0, ErrTriggerNotFound)
|
||||
}
|
||||
|
||||
func (r trigger) Find(filter types.TriggerFilter) (set types.TriggerSet, f types.TriggerFilter, err error) {
|
||||
f = filter
|
||||
|
||||
query := r.query()
|
||||
|
||||
if filter.NamespaceID > 0 {
|
||||
query = query.Where("rel_namespace = ?", filter.NamespaceID)
|
||||
}
|
||||
|
||||
if filter.ModuleID > 0 {
|
||||
query = query.Where("rel_module = ?", filter.ModuleID)
|
||||
}
|
||||
|
||||
if f.Query != "" {
|
||||
q := "%" + f.Query + "%"
|
||||
query = query.Where("name like ?", q)
|
||||
}
|
||||
|
||||
if f.EnabledOnly {
|
||||
query = query.Where("enabled")
|
||||
}
|
||||
|
||||
if f.Count, err = r.count(query); err != nil || f.Count == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
query = query.
|
||||
Columns(r.columns()...).
|
||||
OrderBy("id ASC")
|
||||
|
||||
return set, f, r.fetchPaged(&set, query, f.Page, f.PerPage)
|
||||
}
|
||||
|
||||
func (r trigger) Create(mod *types.Trigger) (*types.Trigger, error) {
|
||||
mod.ID = factory.Sonyflake.NextID()
|
||||
mod.CreatedAt = time.Now().Truncate(time.Second)
|
||||
|
||||
return mod, r.db().Insert(r.table(), mod)
|
||||
}
|
||||
|
||||
func (r trigger) Update(mod *types.Trigger) (*types.Trigger, error) {
|
||||
now := time.Now().Truncate(time.Second)
|
||||
mod.UpdatedAt = &now
|
||||
return mod, r.db().Update(r.table(), mod, "id")
|
||||
}
|
||||
|
||||
func (r trigger) DeleteByID(namespaceID, triggerID uint64) error {
|
||||
_, err := r.db().Exec(
|
||||
"UPDATE "+r.table()+" SET deleted_at = NOW() WHERE rel_namespace = ? AND id = ?",
|
||||
namespaceID,
|
||||
triggerID,
|
||||
)
|
||||
|
||||
return err
|
||||
}
|
||||
@@ -180,7 +180,6 @@ func (svc accessControl) DefaultRules() permissions.RuleSet {
|
||||
namespaces = types.NamespacePermissionResource.AppendWildcard()
|
||||
modules = types.ModulePermissionResource.AppendWildcard()
|
||||
charts = types.ChartPermissionResource.AppendWildcard()
|
||||
triggers = types.TriggerPermissionResource.AppendWildcard()
|
||||
pages = types.PagePermissionResource.AppendWildcard()
|
||||
|
||||
allowAdm = func(res permissions.Resource, op permissions.Operation) *permissions.Rule {
|
||||
@@ -216,10 +215,6 @@ func (svc accessControl) DefaultRules() permissions.RuleSet {
|
||||
allowAdm(charts, "update"),
|
||||
allowAdm(charts, "delete"),
|
||||
|
||||
allowAdm(triggers, "read"),
|
||||
allowAdm(triggers, "update"),
|
||||
allowAdm(triggers, "delete"),
|
||||
|
||||
allowAdm(pages, "read"),
|
||||
allowAdm(pages, "update"),
|
||||
allowAdm(pages, "delete"),
|
||||
@@ -244,7 +239,6 @@ func (svc accessControl) Whitelist() permissions.Whitelist {
|
||||
"manage",
|
||||
"module.create",
|
||||
"chart.create",
|
||||
"trigger.create",
|
||||
"page.create",
|
||||
)
|
||||
|
||||
|
||||
@@ -27,7 +27,6 @@ type (
|
||||
recordRepo repository.RecordRepository
|
||||
moduleRepo repository.ModuleRepository
|
||||
nsRepo repository.NamespaceRepository
|
||||
tRepo repository.TriggerRepository
|
||||
}
|
||||
|
||||
recordAccessController interface {
|
||||
@@ -95,7 +94,6 @@ func (svc record) With(ctx context.Context) RecordService {
|
||||
recordRepo: repository.Record(ctx, db),
|
||||
moduleRepo: repository.Module(ctx, db),
|
||||
nsRepo: repository.Namespace(ctx, db),
|
||||
tRepo: repository.Trigger(ctx, db),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,67 +0,0 @@
|
||||
package types
|
||||
|
||||
// Hello! This file is auto-generated.
|
||||
|
||||
type (
|
||||
|
||||
// TriggerSet slice of Trigger
|
||||
//
|
||||
// This type is auto-generated.
|
||||
TriggerSet []*Trigger
|
||||
)
|
||||
|
||||
// Walk iterates through every slice item and calls w(Trigger) err
|
||||
//
|
||||
// This function is auto-generated.
|
||||
func (set TriggerSet) Walk(w func(*Trigger) error) (err error) {
|
||||
for i := range set {
|
||||
if err = w(set[i]); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Filter iterates through every slice item, calls f(Trigger) (bool, err) and return filtered slice
|
||||
//
|
||||
// This function is auto-generated.
|
||||
func (set TriggerSet) Filter(f func(*Trigger) (bool, error)) (out TriggerSet, err error) {
|
||||
var ok bool
|
||||
out = TriggerSet{}
|
||||
for i := range set {
|
||||
if ok, err = f(set[i]); err != nil {
|
||||
return
|
||||
} else if ok {
|
||||
out = append(out, set[i])
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// FindByID finds items from slice by its ID property
|
||||
//
|
||||
// This function is auto-generated.
|
||||
func (set TriggerSet) FindByID(ID uint64) *Trigger {
|
||||
for i := range set {
|
||||
if set[i].ID == ID {
|
||||
return set[i]
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// IDs returns a slice of uint64s from all items in the set
|
||||
//
|
||||
// This function is auto-generated.
|
||||
func (set TriggerSet) IDs() (IDs []uint64) {
|
||||
IDs = make([]uint64, len(set))
|
||||
|
||||
for i := range set {
|
||||
IDs[i] = set[i].ID
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
@@ -1,91 +0,0 @@
|
||||
package types
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"errors"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/internal/test"
|
||||
)
|
||||
|
||||
// Hello! This file is auto-generated.
|
||||
|
||||
func TestTriggerSetWalk(t *testing.T) {
|
||||
value := make(TriggerSet, 3)
|
||||
|
||||
// check walk with no errors
|
||||
{
|
||||
err := value.Walk(func(*Trigger) error {
|
||||
return nil
|
||||
})
|
||||
test.NoError(t, err, "Expected no returned error from Walk, got %+v", err)
|
||||
}
|
||||
|
||||
// check walk with error
|
||||
test.Error(t, value.Walk(func(*Trigger) error { return errors.New("Walk error") }), "Expected error from walk, got nil")
|
||||
}
|
||||
|
||||
func TestTriggerSetFilter(t *testing.T) {
|
||||
value := make(TriggerSet, 3)
|
||||
|
||||
// filter nothing
|
||||
{
|
||||
set, err := value.Filter(func(*Trigger) (bool, error) {
|
||||
return true, nil
|
||||
})
|
||||
test.NoError(t, err, "Didn't expect error when filtering set: %+v", err)
|
||||
test.Assert(t, len(set) == len(value), "Expected equal length filter: %d != %d", len(value), len(set))
|
||||
}
|
||||
|
||||
// filter one item
|
||||
{
|
||||
found := false
|
||||
set, err := value.Filter(func(*Trigger) (bool, error) {
|
||||
if !found {
|
||||
found = true
|
||||
return found, nil
|
||||
}
|
||||
return false, nil
|
||||
})
|
||||
test.NoError(t, err, "Didn't expect error when filtering set: %+v", err)
|
||||
test.Assert(t, len(set) == 1, "Expected single item, got %d", len(value))
|
||||
}
|
||||
|
||||
// filter error
|
||||
{
|
||||
_, err := value.Filter(func(*Trigger) (bool, error) {
|
||||
return false, errors.New("Filter error")
|
||||
})
|
||||
test.Error(t, err, "Expected error, got %#v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestTriggerSetIDs(t *testing.T) {
|
||||
value := make(TriggerSet, 3)
|
||||
// construct objects
|
||||
value[0] = new(Trigger)
|
||||
value[1] = new(Trigger)
|
||||
value[2] = new(Trigger)
|
||||
// set ids
|
||||
value[0].ID = 1
|
||||
value[1].ID = 2
|
||||
value[2].ID = 3
|
||||
|
||||
// Find existing
|
||||
{
|
||||
val := value.FindByID(2)
|
||||
test.Assert(t, val.ID == 2, "Expected ID 2, got %d", val.ID)
|
||||
}
|
||||
|
||||
// Find non-existing
|
||||
{
|
||||
val := value.FindByID(4)
|
||||
test.Assert(t, val == nil, "Expected no value, got %#v", val)
|
||||
}
|
||||
|
||||
// List IDs from set
|
||||
{
|
||||
val := value.IDs()
|
||||
test.Assert(t, len(val) == len(value), "Expected ID count mismatch, %d != %d", len(val), len(value))
|
||||
}
|
||||
}
|
||||
@@ -1,130 +0,0 @@
|
||||
package types
|
||||
|
||||
import (
|
||||
"database/sql/driver"
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/internal/permissions"
|
||||
)
|
||||
|
||||
type (
|
||||
ActionSet []string
|
||||
|
||||
Trigger struct {
|
||||
ID uint64 `json:"triggerID,string" db:"id"`
|
||||
NamespaceID uint64 `json:"namespaceID,string" db:"rel_namespace"`
|
||||
ModuleID uint64 `json:"moduleID,string,omitempty" db:"rel_module"`
|
||||
Name string `json:"name" db:"name"`
|
||||
Actions ActionSet `json:"actions" db:"actions"`
|
||||
|
||||
Enabled bool `json:"enabled" db:"enabled"`
|
||||
|
||||
// What is running this? browser? corredor?
|
||||
Engine string `json:"engine" db:"engine"`
|
||||
|
||||
Source string `json:"source" db:"source"`
|
||||
|
||||
// Is execution of this script critical?
|
||||
Critical bool `json:"critical" db:"critical"`
|
||||
|
||||
// No need to wait for script to return the value
|
||||
Async bool `json:"async" db:"async"`
|
||||
|
||||
// Order in which script(s) will be executed
|
||||
Weight int `json:"weight" db:"weight"`
|
||||
|
||||
// Who is running this script?
|
||||
// Leave it at 0 for the current user
|
||||
RunAs uint64 `json:"runAs", db:"rel_runner"`
|
||||
|
||||
// Are you doing something that can take more time?
|
||||
// specify timeout (in secods)
|
||||
Timeout uint32 `json:"timeout" db:"timeout"`
|
||||
|
||||
CreatedAt time.Time `db:"created_at" json:"createdAt,omitempty"`
|
||||
UpdatedAt *time.Time `db:"updated_at" json:"updatedAt,omitempty"`
|
||||
DeletedAt *time.Time `db:"deleted_at" json:"deletedAt,omitempty"`
|
||||
}
|
||||
|
||||
TriggerFilter struct {
|
||||
NamespaceID uint64 `json:"namespaceID,string"`
|
||||
Query string `json:"query"`
|
||||
EnabledOnly bool `json:"-"`
|
||||
Page uint `json:"page"`
|
||||
PerPage uint `json:"perPage"`
|
||||
// Sort string `json:"sort"`
|
||||
Count uint `json:"count"`
|
||||
ModuleID uint64 `json:"moduleID,string"`
|
||||
}
|
||||
)
|
||||
|
||||
func (t Trigger) IsCritical() bool {
|
||||
return t.Critical
|
||||
}
|
||||
|
||||
func (t Trigger) IsAsync() bool {
|
||||
return t.Async
|
||||
}
|
||||
|
||||
func (t Trigger) GetRunnerID() uint64 {
|
||||
return t.RunAs
|
||||
}
|
||||
|
||||
func (t Trigger) GetTimeout() uint32 {
|
||||
return t.Timeout
|
||||
}
|
||||
|
||||
func (t Trigger) GetName() string {
|
||||
return fmt.Sprintf("%d %s", t.ID, t.Name)
|
||||
}
|
||||
|
||||
func (t Trigger) GetSource() string {
|
||||
return t.Source
|
||||
}
|
||||
|
||||
func (set *ActionSet) Scan(src interface{}) error {
|
||||
if ser, ok := src.([]uint8); ok {
|
||||
var tmp = make([]string, 0)
|
||||
for _, a := range strings.Split(string(ser), ",") {
|
||||
if a = strings.TrimSpace(a); len(a) > 0 {
|
||||
tmp = append(tmp, a)
|
||||
}
|
||||
}
|
||||
|
||||
*set = ActionSet(tmp)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (set ActionSet) Value() (driver.Value, error) {
|
||||
return strings.Trim(strings.Join(set, ","), " ,"), nil
|
||||
}
|
||||
|
||||
func (set ActionSet) Has(action ...string) bool {
|
||||
for _, a := range set {
|
||||
for _, i := range action {
|
||||
if i == a {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func (set TriggerSet) WalkByAction(action string, fn func(t *Trigger) error) error {
|
||||
return set.Walk(func(t *Trigger) error {
|
||||
if !t.Actions.Has(action) {
|
||||
return nil
|
||||
}
|
||||
|
||||
return fn(t)
|
||||
})
|
||||
}
|
||||
|
||||
// Resource returns a system resource ID for this type
|
||||
func (t Trigger) PermissionResource() permissions.Resource {
|
||||
return TriggerPermissionResource.AppendID(t.ID)
|
||||
}
|
||||
Reference in New Issue
Block a user