3
0

upd(crm): split types, closes #79 (#82)

* upd(crm): split types, closes #79
* upd(crm): split generated types, codegen
This commit is contained in:
Tit Petric 2019-03-13 18:40:33 +01:00 committed by GitHub
parent 7b79fcb617
commit 191f815444
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 645 additions and 581 deletions

View File

@ -22,12 +22,15 @@ function types {
CGO_ENABLED=0 go build -o ./build/gen-type-set codegen/v2/type-set.go
fi
./build/gen-type-set --types Module,Page,Chart,Trigger,Record \
--output crm/types/type.primary.gen.go
./build/gen-type-set --with-primary-key=false --types ModuleField,RecordValue \
--output crm/types/type.other.gen.go
./build/gen-type-set --types Attachment \
--output crm/types/attachment.gen.go
./build/gen-type-set --types Attachment --output crm/types/attachment.gen.go
./build/gen-type-set --types Module --output crm/types/module.gen.go
./build/gen-type-set --types Page --output crm/types/page.gen.go
./build/gen-type-set --types Chart --output crm/types/chart.gen.go
./build/gen-type-set --types Trigger --output crm/types/trigger.gen.go
./build/gen-type-set --types Record --output crm/types/record.gen.go
./build/gen-type-set --with-primary-key=false --types ModuleField --output crm/types/module_field.gen.go
./build/gen-type-set --with-primary-key=false --types RecordValue --output crm/types/record_value.gen.go
./build/gen-type-set --types MessageAttachment --output messaging/types/attachment.gen.go
./build/gen-type-set --with-resources=true --types Channel --resource-type "rules.Resource" --imports "github.com/crusttech/crust/internal/rules" --output messaging/types/channel.gen.go

67
crm/types/chart.gen.go Normal file
View File

@ -0,0 +1,67 @@
package types
// Hello! This file is auto-generated.
type (
// ChartSet slice of Chart
//
// This type is auto-generated.
ChartSet []*Chart
)
// Walk iterates through every slice item and calls w(Chart) err
//
// This function is auto-generated.
func (set ChartSet) Walk(w func(*Chart) error) (err error) {
for i := range set {
if err = w(set[i]); err != nil {
return
}
}
return
}
// Filter iterates through every slice item, calls f(Chart) (bool, err) and return filtered slice
//
// This function is auto-generated.
func (set ChartSet) Filter(f func(*Chart) (bool, error)) (out ChartSet, err error) {
var ok bool
out = ChartSet{}
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 ChartSet) FindByID(ID uint64) *Chart {
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 ChartSet) IDs() (IDs []uint64) {
IDs = make([]uint64, len(set))
for i := range set {
IDs[i] = set[i].ID
}
return
}

67
crm/types/module.gen.go Normal file
View File

@ -0,0 +1,67 @@
package types
// Hello! This file is auto-generated.
type (
// ModuleSet slice of Module
//
// This type is auto-generated.
ModuleSet []*Module
)
// Walk iterates through every slice item and calls w(Module) err
//
// This function is auto-generated.
func (set ModuleSet) Walk(w func(*Module) error) (err error) {
for i := range set {
if err = w(set[i]); err != nil {
return
}
}
return
}
// Filter iterates through every slice item, calls f(Module) (bool, err) and return filtered slice
//
// This function is auto-generated.
func (set ModuleSet) Filter(f func(*Module) (bool, error)) (out ModuleSet, err error) {
var ok bool
out = ModuleSet{}
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 ModuleSet) FindByID(ID uint64) *Module {
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 ModuleSet) IDs() (IDs []uint64) {
IDs = make([]uint64, len(set))
for i := range set {
IDs[i] = set[i].ID
}
return
}

35
crm/types/module.go Normal file
View File

@ -0,0 +1,35 @@
package types
import (
"time"
"github.com/jmoiron/sqlx/types"
"github.com/crusttech/crust/internal/rules"
)
type (
// Modules - CRM module definitions
Module struct {
ID uint64 `json:"moduleID,string" db:"id"`
Name string `json:"name" db:"name"`
Meta types.JSONText `json:"meta" db:"json"`
Fields ModuleFieldSet `json:"fields" db:"-"`
Page *Page `json:"page,omitempty"`
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"`
}
)
// Resource returns a system resource ID for this type
func (r *Module) Resource() rules.Resource {
resource := rules.Resource{
Service: "compose",
Scope: "module",
ID: r.ID,
}
return resource
}

View File

@ -8,11 +8,6 @@ type (
//
// This type is auto-generated.
ModuleFieldSet []*ModuleField
// RecordValueSet slice of RecordValue
//
// This type is auto-generated.
RecordValueSet []*RecordValue
)
// Walk iterates through every slice item and calls w(ModuleField) err
@ -44,33 +39,3 @@ func (set ModuleFieldSet) Filter(f func(*ModuleField) (bool, error)) (out Module
return
}
// Walk iterates through every slice item and calls w(RecordValue) err
//
// This function is auto-generated.
func (set RecordValueSet) Walk(w func(*RecordValue) error) (err error) {
for i := range set {
if err = w(set[i]); err != nil {
return
}
}
return
}
// Filter iterates through every slice item, calls f(RecordValue) (bool, err) and return filtered slice
//
// This function is auto-generated.
func (set RecordValueSet) Filter(f func(*RecordValue) (bool, error)) (out RecordValueSet, err error) {
var ok bool
out = RecordValueSet{}
for i := range set {
if ok, err = f(set[i]); err != nil {
return
} else if ok {
out = append(out, set[i])
}
}
return
}

83
crm/types/module_field.go Normal file
View File

@ -0,0 +1,83 @@
package types
import (
"database/sql/driver"
"encoding/json"
"github.com/jmoiron/sqlx/types"
)
type (
// Modules - CRM module definitions
ModuleField struct {
ModuleID uint64 `json:"moduleID,string" db:"module_id"`
Place int `json:"-" db:"place"`
Kind string `json:"kind" db:"kind"`
Name string `json:"name" db:"name"`
Label string `json:"label" db:"label"`
Options types.JSONText `json:"options" db:"json"`
Private bool `json:"isPrivate" db:"is_private"`
Required bool `json:"isRequired" db:"is_required"`
Visible bool `json:"isVisible" db:"is_visible"`
Multi bool `json:"isMulti" db:"is_multi"`
}
)
func (set *ModuleFieldSet) Scan(src interface{}) error {
if data, ok := src.([]byte); ok {
return json.Unmarshal(data, set)
}
return nil
}
func (set ModuleFieldSet) Value() (driver.Value, error) {
return json.Marshal(set)
}
func (set ModuleFieldSet) Names() (names []string) {
names = make([]string, len(set))
for i := range set {
names[i] = set[i].Name
}
return
}
func (set ModuleFieldSet) HasName(name string) bool {
for i := range set {
if name == set[i].Name {
return true
}
}
return false
}
func (set ModuleFieldSet) FindByName(name string) *ModuleField {
for i := range set {
if name == set[i].Name {
return set[i]
}
}
return nil
}
func (set ModuleFieldSet) FilterByModule(moduleID uint64) (ff ModuleFieldSet) {
for i := range set {
if set[i].ModuleID == moduleID {
ff = append(ff, set[i])
}
}
return
}
// IsRef tells us if value of this field be a reference to something (another record, user)?
func (f ModuleField) IsRef() bool {
return f.Kind == "Record" || f.Kind == "Owner" || f.Kind == "File"
}

67
crm/types/page.gen.go Normal file
View File

@ -0,0 +1,67 @@
package types
// Hello! This file is auto-generated.
type (
// PageSet slice of Page
//
// This type is auto-generated.
PageSet []*Page
)
// Walk iterates through every slice item and calls w(Page) err
//
// This function is auto-generated.
func (set PageSet) Walk(w func(*Page) error) (err error) {
for i := range set {
if err = w(set[i]); err != nil {
return
}
}
return
}
// Filter iterates through every slice item, calls f(Page) (bool, err) and return filtered slice
//
// This function is auto-generated.
func (set PageSet) Filter(f func(*Page) (bool, error)) (out PageSet, err error) {
var ok bool
out = PageSet{}
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 PageSet) FindByID(ID uint64) *Page {
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 PageSet) IDs() (IDs []uint64) {
IDs = make([]uint64, len(set))
for i := range set {
IDs[i] = set[i].ID
}
return
}

51
crm/types/page.go Normal file
View File

@ -0,0 +1,51 @@
package types
import (
"github.com/jmoiron/sqlx/types"
"github.com/crusttech/crust/internal/rules"
)
type (
// Page - page structure
Page struct {
ID uint64 `json:"pageID,string" db:"id"`
SelfID uint64 `json:"selfID,string" db:"self_id"`
ModuleID uint64 `json:"moduleID,string" db:"module_id"`
Module *Module `json:"module,omitempty" db:"-"`
Title string `json:"title" db:"title"`
Description string `json:"description" db:"description"`
Blocks types.JSONText `json:"blocks" db:"blocks"`
Children PageSet `json:"children,omitempty" db:"-"`
Visible bool `json:"visible" db:"visible"`
Weight int `json:"-" db:"weight"`
}
// Block - value of Page.Blocks ([]Block)
Block struct {
Title string `json:"title"`
Description string `json:"description"`
Options types.JSONText `json:"options"`
Kind string `json:"kind"`
X int `json:"x"`
Y int `json:"y"`
Width int `json:"width"`
Height int `json:"height"`
}
)
// Resource returns a system resource ID for this type
func (r *Page) Resource() rules.Resource {
resource := rules.Resource{
Service: "compose",
Scope: "page",
ID: r.ID,
}
return resource
}

67
crm/types/record.gen.go Normal file
View File

@ -0,0 +1,67 @@
package types
// Hello! This file is auto-generated.
type (
// RecordSet slice of Record
//
// This type is auto-generated.
RecordSet []*Record
)
// Walk iterates through every slice item and calls w(Record) err
//
// This function is auto-generated.
func (set RecordSet) Walk(w func(*Record) error) (err error) {
for i := range set {
if err = w(set[i]); err != nil {
return
}
}
return
}
// Filter iterates through every slice item, calls f(Record) (bool, err) and return filtered slice
//
// This function is auto-generated.
func (set RecordSet) Filter(f func(*Record) (bool, error)) (out RecordSet, err error) {
var ok bool
out = RecordSet{}
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 RecordSet) FindByID(ID uint64) *Record {
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 RecordSet) IDs() (IDs []uint64) {
IDs = make([]uint64, len(set))
for i := range set {
IDs[i] = set[i].ID
}
return
}

54
crm/types/record.go Normal file
View File

@ -0,0 +1,54 @@
package types
import (
"time"
"github.com/crusttech/crust/internal/rules"
)
type (
// Record is a stored row in the `record` table
Record struct {
ID uint64 `json:"recordID,string" db:"id"`
ModuleID uint64 `json:"moduleID,string" db:"module_id"`
Values RecordValueSet `json:"values,omitempty" db:"-"`
OwnedBy uint64 `db:"owned_by" json:"ownedBy,string"`
CreatedAt time.Time `db:"created_at" json:"createdAt,omitempty"`
CreatedBy uint64 `db:"created_by" json:"createdBy,string" `
UpdatedAt *time.Time `db:"updated_at" json:"updatedAt,omitempty,omitempty"`
UpdatedBy uint64 `db:"updated_by" json:"updatedBy,string,omitempty" `
DeletedAt *time.Time `db:"deleted_at" json:"deletedAt,omitempty"`
DeletedBy uint64 `db:"deleted_by" json:"deletedBy,string,omitempty" `
}
)
// UserIDs returns a slice of user IDs from all items in the set
func (set RecordSet) UserIDs() (IDs []uint64) {
IDs = make([]uint64, 0)
loop:
for i := range set {
for _, id := range IDs {
if id == set[i].OwnedBy {
continue loop
}
}
IDs = append(IDs, set[i].OwnedBy)
}
return
}
// Resource returns a system resource ID for this type
func (r *Record) Resource() rules.Resource {
resource := rules.Resource{
Service: "compose",
Scope: "module", // intentionally using module here so we can use Record's resource
ID: r.ModuleID,
}
return resource
}

View File

@ -0,0 +1,41 @@
package types
// Hello! This file is auto-generated.
type (
// RecordValueSet slice of RecordValue
//
// This type is auto-generated.
RecordValueSet []*RecordValue
)
// Walk iterates through every slice item and calls w(RecordValue) err
//
// This function is auto-generated.
func (set RecordValueSet) Walk(w func(*RecordValue) error) (err error) {
for i := range set {
if err = w(set[i]); err != nil {
return
}
}
return
}
// Filter iterates through every slice item, calls f(RecordValue) (bool, err) and return filtered slice
//
// This function is auto-generated.
func (set RecordValueSet) Filter(f func(*RecordValue) (bool, error)) (out RecordValueSet, err error) {
var ok bool
out = RecordValueSet{}
for i := range set {
if ok, err = f(set[i]); err != nil {
return
} else if ok {
out = append(out, set[i])
}
}
return
}

37
crm/types/record_value.go Normal file
View File

@ -0,0 +1,37 @@
package types
import (
"time"
)
type (
// RecordValue is a stored row in the `record_value` table
RecordValue struct {
RecordID uint64 `db:"record_id" json:"-"`
Name string `db:"name" json:"name"`
Value string `db:"value" json:"value,omitempty"`
Ref uint64 `db:"ref" json:"-"`
Place uint `db:"place" json:"-"`
DeletedAt *time.Time `db:"deleted_at" json:"deletedAt,omitempty"`
}
)
func (set RecordValueSet) FilterByName(name string) (vv RecordValueSet) {
for i := range set {
if set[i].Name == name {
vv = append(vv, set[i])
}
}
return
}
func (set RecordValueSet) FilterByRecordID(recordID uint64) (vv RecordValueSet) {
for i := range set {
if set[i].RecordID == recordID {
vv = append(vv, set[i])
}
}
return
}

67
crm/types/trigger.gen.go Normal file
View File

@ -0,0 +1,67 @@
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
}

View File

@ -1,311 +0,0 @@
package types
// Hello! This file is auto-generated.
type (
// ModuleSet slice of Module
//
// This type is auto-generated.
ModuleSet []*Module
// PageSet slice of Page
//
// This type is auto-generated.
PageSet []*Page
// ChartSet slice of Chart
//
// This type is auto-generated.
ChartSet []*Chart
// TriggerSet slice of Trigger
//
// This type is auto-generated.
TriggerSet []*Trigger
// RecordSet slice of Record
//
// This type is auto-generated.
RecordSet []*Record
)
// Walk iterates through every slice item and calls w(Module) err
//
// This function is auto-generated.
func (set ModuleSet) Walk(w func(*Module) error) (err error) {
for i := range set {
if err = w(set[i]); err != nil {
return
}
}
return
}
// Filter iterates through every slice item, calls f(Module) (bool, err) and return filtered slice
//
// This function is auto-generated.
func (set ModuleSet) Filter(f func(*Module) (bool, error)) (out ModuleSet, err error) {
var ok bool
out = ModuleSet{}
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 ModuleSet) FindByID(ID uint64) *Module {
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 ModuleSet) IDs() (IDs []uint64) {
IDs = make([]uint64, len(set))
for i := range set {
IDs[i] = set[i].ID
}
return
}
// Walk iterates through every slice item and calls w(Page) err
//
// This function is auto-generated.
func (set PageSet) Walk(w func(*Page) error) (err error) {
for i := range set {
if err = w(set[i]); err != nil {
return
}
}
return
}
// Filter iterates through every slice item, calls f(Page) (bool, err) and return filtered slice
//
// This function is auto-generated.
func (set PageSet) Filter(f func(*Page) (bool, error)) (out PageSet, err error) {
var ok bool
out = PageSet{}
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 PageSet) FindByID(ID uint64) *Page {
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 PageSet) IDs() (IDs []uint64) {
IDs = make([]uint64, len(set))
for i := range set {
IDs[i] = set[i].ID
}
return
}
// Walk iterates through every slice item and calls w(Chart) err
//
// This function is auto-generated.
func (set ChartSet) Walk(w func(*Chart) error) (err error) {
for i := range set {
if err = w(set[i]); err != nil {
return
}
}
return
}
// Filter iterates through every slice item, calls f(Chart) (bool, err) and return filtered slice
//
// This function is auto-generated.
func (set ChartSet) Filter(f func(*Chart) (bool, error)) (out ChartSet, err error) {
var ok bool
out = ChartSet{}
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 ChartSet) FindByID(ID uint64) *Chart {
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 ChartSet) IDs() (IDs []uint64) {
IDs = make([]uint64, len(set))
for i := range set {
IDs[i] = set[i].ID
}
return
}
// 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
}
// Walk iterates through every slice item and calls w(Record) err
//
// This function is auto-generated.
func (set RecordSet) Walk(w func(*Record) error) (err error) {
for i := range set {
if err = w(set[i]); err != nil {
return
}
}
return
}
// Filter iterates through every slice item, calls f(Record) (bool, err) and return filtered slice
//
// This function is auto-generated.
func (set RecordSet) Filter(f func(*Record) (bool, error)) (out RecordSet, err error) {
var ok bool
out = RecordSet{}
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 RecordSet) FindByID(ID uint64) *Record {
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 RecordSet) IDs() (IDs []uint64) {
IDs = make([]uint64, len(set))
for i := range set {
IDs[i] = set[i].ID
}
return
}

View File

@ -1,229 +0,0 @@
package types
import (
"database/sql/driver"
"encoding/json"
"time"
"github.com/jmoiron/sqlx/types"
"github.com/crusttech/crust/internal/rules"
)
type (
// Record is a stored row in the `record` table
Record struct {
ID uint64 `json:"recordID,string" db:"id"`
ModuleID uint64 `json:"moduleID,string" db:"module_id"`
Values RecordValueSet `json:"values,omitempty" db:"-"`
OwnedBy uint64 `db:"owned_by" json:"ownedBy,string"`
CreatedAt time.Time `db:"created_at" json:"createdAt,omitempty"`
CreatedBy uint64 `db:"created_by" json:"createdBy,string" `
UpdatedAt *time.Time `db:"updated_at" json:"updatedAt,omitempty,omitempty"`
UpdatedBy uint64 `db:"updated_by" json:"updatedBy,string,omitempty" `
DeletedAt *time.Time `db:"deleted_at" json:"deletedAt,omitempty"`
DeletedBy uint64 `db:"deleted_by" json:"deletedBy,string,omitempty" `
}
// RecordValue is a stored row in the `record_value` table
RecordValue struct {
RecordID uint64 `db:"record_id" json:"-"`
Name string `db:"name" json:"name"`
Value string `db:"value" json:"value,omitempty"`
Ref uint64 `db:"ref" json:"-"`
Place uint `db:"place" json:"-"`
DeletedAt *time.Time `db:"deleted_at" json:"deletedAt,omitempty"`
}
// Modules - CRM module definitions
Module struct {
ID uint64 `json:"moduleID,string" db:"id"`
Name string `json:"name" db:"name"`
Meta types.JSONText `json:"meta" db:"json"`
Fields ModuleFieldSet `json:"fields" db:"-"`
Page *Page `json:"page,omitempty"`
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"`
}
// Modules - CRM module definitions
ModuleField struct {
ModuleID uint64 `json:"moduleID,string" db:"module_id"`
Place int `json:"-" db:"place"`
Kind string `json:"kind" db:"kind"`
Name string `json:"name" db:"name"`
Label string `json:"label" db:"label"`
Options types.JSONText `json:"options" db:"json"`
Private bool `json:"isPrivate" db:"is_private"`
Required bool `json:"isRequired" db:"is_required"`
Visible bool `json:"isVisible" db:"is_visible"`
Multi bool `json:"isMulti" db:"is_multi"`
}
// Page - page structure
Page struct {
ID uint64 `json:"pageID,string" db:"id"`
SelfID uint64 `json:"selfID,string" db:"self_id"`
ModuleID uint64 `json:"moduleID,string" db:"module_id"`
Module *Module `json:"module,omitempty" db:"-"`
Title string `json:"title" db:"title"`
Description string `json:"description" db:"description"`
Blocks types.JSONText `json:"blocks" db:"blocks"`
Children PageSet `json:"children,omitempty" db:"-"`
Visible bool `json:"visible" db:"visible"`
Weight int `json:"-" db:"weight"`
}
// Block - value of Page.Blocks ([]Block)
Block struct {
Title string `json:"title"`
Description string `json:"description"`
Options types.JSONText `json:"options"`
Kind string `json:"kind"`
X int `json:"x"`
Y int `json:"y"`
Width int `json:"width"`
Height int `json:"height"`
}
)
func (set *ModuleFieldSet) Scan(src interface{}) error {
if data, ok := src.([]byte); ok {
return json.Unmarshal(data, set)
}
return nil
}
func (set ModuleFieldSet) Value() (driver.Value, error) {
return json.Marshal(set)
}
func (set ModuleFieldSet) Names() (names []string) {
names = make([]string, len(set))
for i := range set {
names[i] = set[i].Name
}
return
}
func (set ModuleFieldSet) HasName(name string) bool {
for i := range set {
if name == set[i].Name {
return true
}
}
return false
}
func (set ModuleFieldSet) FindByName(name string) *ModuleField {
for i := range set {
if name == set[i].Name {
return set[i]
}
}
return nil
}
func (set ModuleFieldSet) FilterByModule(moduleID uint64) (ff ModuleFieldSet) {
for i := range set {
if set[i].ModuleID == moduleID {
ff = append(ff, set[i])
}
}
return
}
// IsRef tells us if value of this field be a reference to something (another record, user)?
func (f ModuleField) IsRef() bool {
return f.Kind == "Record" || f.Kind == "Owner" || f.Kind == "File"
}
// UserIDs returns a slice of user IDs from all items in the set
//
// This function is auto-generated.
func (set RecordSet) UserIDs() (IDs []uint64) {
IDs = make([]uint64, 0)
loop:
for i := range set {
for _, id := range IDs {
if id == set[i].OwnedBy {
continue loop
}
}
IDs = append(IDs, set[i].OwnedBy)
}
return
}
func (set RecordValueSet) FilterByName(name string) (vv RecordValueSet) {
for i := range set {
if set[i].Name == name {
vv = append(vv, set[i])
}
}
return
}
func (set RecordValueSet) FilterByRecordID(recordID uint64) (vv RecordValueSet) {
for i := range set {
if set[i].RecordID == recordID {
vv = append(vv, set[i])
}
}
return
}
// Resource returns a system resource ID for this type
func (r *Module) Resource() rules.Resource {
resource := rules.Resource{
Service: "compose",
Scope: "module",
ID: r.ID,
}
return resource
}
// Resource returns a system resource ID for this type
func (r *Record) Resource() rules.Resource {
resource := rules.Resource{
Service: "compose",
Scope: "module", // intentionally using module here so we can use Record's resource
ID: r.ModuleID,
}
return resource
}
// Resource returns a system resource ID for this type
func (r *Page) Resource() rules.Resource {
resource := rules.Resource{
Service: "compose",
Scope: "page",
ID: r.ID,
}
return resource
}