Improve type-set generator, apply to system, sam
This commit is contained in:
@@ -14,10 +14,12 @@ function gofmt {
|
||||
|
||||
echo "=== go generate ==="
|
||||
cd system/db && go generate && cd ../..
|
||||
cd system/types && go generate && cd ../..
|
||||
cd crm/db && go generate && cd ../..
|
||||
cd crm/types && go generate && cd ../..
|
||||
cd crm/repository && go generate && cd ../..
|
||||
cd sam/db && go generate && cd ../..
|
||||
cd sam/types && go generate && cd ../..
|
||||
|
||||
_PWD=$PWD
|
||||
SPECS=$(find $PWD -name 'spec.json' | xargs -n1 dirname)
|
||||
|
||||
@@ -1,29 +1,36 @@
|
||||
package main
|
||||
|
||||
// Makeshift *Set type generator for functions like Walk(), Filter(), FindByID() & IDs()
|
||||
// *Set type generator for functions like Walk(), Filter(), FindByID() & IDs()
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"flag"
|
||||
"fmt"
|
||||
"go/format"
|
||||
"io"
|
||||
"os"
|
||||
"strings"
|
||||
"text/template"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
const tmplTypeSet = `package types
|
||||
|
||||
// Hello! This file is auto-generated.
|
||||
|
||||
type (
|
||||
{{ range .Sets }}
|
||||
// {{ . }}Set slice of {{ . }}
|
||||
{{ . }}Set []*{{ . }}
|
||||
{{- end }}
|
||||
{{ range $i, $set := .Sets }}
|
||||
// {{ $set.Name }}Set slice of {{ $set.Name }}
|
||||
//
|
||||
// This type is auto-generated.
|
||||
{{ $set.Name }}Set []*{{ $set.Name }}
|
||||
{{ end }}
|
||||
)
|
||||
|
||||
{{ range .Sets }}
|
||||
// Walk iterates through every slice item and calls w({{ . }}) err
|
||||
func (set {{ . }}Set) Walk(w func(*{{ . }}) error) (err error) {
|
||||
{{ range $i, $set := .Sets }}
|
||||
// Walk iterates through every slice item and calls w({{ $set.Name }}) err
|
||||
//
|
||||
// This function is auto-generated.
|
||||
func (set {{ $set.Name }}Set) Walk(w func(*{{ $set.Name }}) error) (err error) {
|
||||
for i := range set {
|
||||
if err = w(set[i]); err != nil {
|
||||
return
|
||||
@@ -33,10 +40,12 @@ func (set {{ . }}Set) Walk(w func(*{{ . }}) error) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
// Filter iterates through every slice item, calls f({{ . }}) (bool, err) and return filtered slice
|
||||
func (set {{ . }}Set) Filter(f func(*{{ . }}) (bool, error)) (out {{ . }}Set, err error) {
|
||||
// Filter iterates through every slice item, calls f({{ $set.Name }}) (bool, err) and return filtered slice
|
||||
//
|
||||
// This function is auto-generated.
|
||||
func (set {{ $set.Name }}Set) Filter(f func(*{{ $set.Name }}) (bool, error)) (out {{ $set.Name }}Set, err error) {
|
||||
var ok bool
|
||||
out = {{ . }}Set{}
|
||||
out = {{ $set.Name }}Set{}
|
||||
for i := range set {
|
||||
if ok, err = f(set[i]); err != nil {
|
||||
return
|
||||
@@ -48,8 +57,11 @@ func (set {{ . }}Set) Filter(f func(*{{ . }}) (bool, error)) (out {{ . }}Set, er
|
||||
return
|
||||
}
|
||||
|
||||
// Finds slice item by its ID property
|
||||
func (set {{ . }}Set) FindByID(ID uint64) *{{ . }} {
|
||||
{{ if $set.PK }}
|
||||
// FindByID finds items from slice by its ID property
|
||||
//
|
||||
// This function is auto-generated.
|
||||
func (set {{ $set.Name }}Set) FindByID(ID uint64) *{{ $set.Name }} {
|
||||
for i := range set {
|
||||
if set[i].ID == ID {
|
||||
return set[i]
|
||||
@@ -59,8 +71,10 @@ func (set {{ . }}Set) FindByID(ID uint64) *{{ . }} {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Returns a slice of uint64s from all items in the set
|
||||
func (set {{ . }}Set) IDs() (IDs []uint64) {
|
||||
// IDs returns a slice of uint64s from all items in the set
|
||||
//
|
||||
// This function is auto-generated.
|
||||
func (set {{ $set.Name }}Set) IDs() (IDs []uint64) {
|
||||
IDs = make([]uint64, len(set))
|
||||
|
||||
for i := range set {
|
||||
@@ -69,7 +83,8 @@ func (set {{ . }}Set) IDs() (IDs []uint64) {
|
||||
|
||||
return
|
||||
}
|
||||
{{- end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
`
|
||||
|
||||
func main() {
|
||||
@@ -77,13 +92,38 @@ func main() {
|
||||
|
||||
tpl := template.Must(template.Must(t.Clone()).Parse(tmplTypeSet))
|
||||
|
||||
if len(os.Args) < 3 {
|
||||
exit(errors.New("type-set.go <output-file> <type type2 type3 ...>"))
|
||||
type (
|
||||
set struct {
|
||||
Name string
|
||||
PK bool
|
||||
}
|
||||
)
|
||||
var (
|
||||
stdTypesStr, nopkTypesStr, outputFile string
|
||||
output io.Writer
|
||||
)
|
||||
|
||||
flag.StringVar(&stdTypesStr, "types", "", "Comma separated list of types")
|
||||
flag.StringVar(&nopkTypesStr, "no-pk-types", "", "Comma separated list of types without ID field")
|
||||
flag.StringVar(&outputFile, "output", "", "JWT Expiration in minutes")
|
||||
|
||||
flag.Parse()
|
||||
|
||||
payload := struct {
|
||||
Sets []set
|
||||
}{}
|
||||
|
||||
for _, name := range strings.Split(stdTypesStr, ",") {
|
||||
if name = strings.TrimSpace(name); len(name) > 0 {
|
||||
payload.Sets = append(payload.Sets, set{Name: name, PK: true})
|
||||
}
|
||||
}
|
||||
|
||||
l := len(os.Args) - 1
|
||||
outputFile := os.Args[l]
|
||||
payload := struct{ Sets []string }{Sets: os.Args[1:l]}
|
||||
for _, name := range strings.Split(nopkTypesStr, ",") {
|
||||
if name = strings.TrimSpace(name); len(name) > 0 {
|
||||
payload.Sets = append(payload.Sets, set{Name: name, PK: false})
|
||||
}
|
||||
}
|
||||
|
||||
buf := bytes.Buffer{}
|
||||
|
||||
@@ -96,13 +136,15 @@ func main() {
|
||||
fmtsrc = buf.Bytes()
|
||||
}
|
||||
|
||||
output, err := os.Create(outputFile)
|
||||
if err != nil {
|
||||
exit(err)
|
||||
if outputFile == "" || outputFile == "-" {
|
||||
output = os.Stdout
|
||||
} else {
|
||||
if output, err = os.Create(outputFile); err != nil {
|
||||
exit(err)
|
||||
}
|
||||
defer output.(io.Closer).Close()
|
||||
}
|
||||
|
||||
defer output.Close()
|
||||
|
||||
if _, err := output.Write(fmtsrc); err != nil {
|
||||
exit(err)
|
||||
}
|
||||
@@ -110,7 +152,7 @@ func main() {
|
||||
}
|
||||
|
||||
func stderr(format string, a ...interface{}) {
|
||||
_, _ = os.Stderr.WriteString(fmt.Sprintf(format, a...))
|
||||
_, _ = os.Stderr.WriteString(fmt.Sprintf(format+"\n", a...))
|
||||
}
|
||||
|
||||
func exit(err error) {
|
||||
|
||||
@@ -1,14 +1,23 @@
|
||||
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
|
||||
)
|
||||
|
||||
// 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 {
|
||||
@@ -20,6 +29,8 @@ func (set ModuleSet) Walk(w func(*Module) error) (err error) {
|
||||
}
|
||||
|
||||
// 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{}
|
||||
@@ -34,7 +45,9 @@ func (set ModuleSet) Filter(f func(*Module) (bool, error)) (out ModuleSet, err e
|
||||
return
|
||||
}
|
||||
|
||||
// Finds slice item by its ID property
|
||||
// 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 {
|
||||
@@ -45,7 +58,9 @@ func (set ModuleSet) FindByID(ID uint64) *Module {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Returns a slice of uint64s from all items in the set
|
||||
// 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))
|
||||
|
||||
@@ -57,6 +72,8 @@ func (set ModuleSet) IDs() (IDs []uint64) {
|
||||
}
|
||||
|
||||
// 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 {
|
||||
@@ -68,6 +85,8 @@ func (set PageSet) Walk(w func(*Page) error) (err error) {
|
||||
}
|
||||
|
||||
// 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{}
|
||||
@@ -82,7 +101,9 @@ func (set PageSet) Filter(f func(*Page) (bool, error)) (out PageSet, err error)
|
||||
return
|
||||
}
|
||||
|
||||
// Finds slice item by its ID property
|
||||
// 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 {
|
||||
@@ -93,7 +114,9 @@ func (set PageSet) FindByID(ID uint64) *Page {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Returns a slice of uint64s from all items in the set
|
||||
// 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))
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package types
|
||||
|
||||
//go:generate go run ../../codegen/v2/type-set.go Module Page type-sets.gen.go
|
||||
//go:generate go run ../../codegen/v2/type-set.go --types Module,Page --output type.gen.go
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
@@ -205,7 +205,7 @@ func (r *message) PrefillThreadParticipants(mm types.MessageSet) error {
|
||||
return err
|
||||
} else {
|
||||
for _, p := range rval {
|
||||
mm.FindById(p.ReplyTo).RepliesFrom = append(mm.FindById(p.ReplyTo).RepliesFrom, p.UserID)
|
||||
mm.FindByID(p.ReplyTo).RepliesFrom = append(mm.FindByID(p.ReplyTo).RepliesFrom, p.UserID)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -187,7 +187,7 @@ func (svc *channel) FindMembers(channelID uint64) (out types.ChannelMemberSet, e
|
||||
return err
|
||||
} else {
|
||||
return out.Walk(func(member *types.ChannelMember) error {
|
||||
member.User = uu.FindById(member.UserID)
|
||||
member.User = uu.FindByID(member.UserID)
|
||||
return nil
|
||||
})
|
||||
}
|
||||
@@ -572,7 +572,7 @@ func (svc *channel) InviteUser(channelID uint64, memberIDs ...uint64) (out types
|
||||
}
|
||||
|
||||
for _, memberID := range memberIDs {
|
||||
user := users.FindById(memberID)
|
||||
user := users.FindByID(memberID)
|
||||
if user == nil {
|
||||
return errors.New("Unexisting user")
|
||||
}
|
||||
@@ -633,7 +633,7 @@ func (svc *channel) AddMember(channelID uint64, memberIDs ...uint64) (out types.
|
||||
for _, memberID := range memberIDs {
|
||||
var exists bool
|
||||
|
||||
user := users.FindById(memberID)
|
||||
user := users.FindByID(memberID)
|
||||
if user == nil {
|
||||
return errors.New("Unexisting user")
|
||||
}
|
||||
|
||||
@@ -471,7 +471,7 @@ func (svc *message) preloadUsers(mm types.MessageSet) (err error) {
|
||||
continue
|
||||
}
|
||||
|
||||
if msg.User = uu.FindById(msg.UserID); msg.User != nil {
|
||||
if msg.User = uu.FindByID(msg.UserID); msg.User != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -494,7 +494,7 @@ func (svc *message) preloadFlags(mm types.MessageSet) (err error) {
|
||||
}
|
||||
|
||||
return ff.Walk(func(flag *types.MessageFlag) error {
|
||||
mm.FindById(flag.MessageID).Flags = append(mm.FindById(flag.MessageID).Flags, flag)
|
||||
mm.FindByID(flag.MessageID).Flags = append(mm.FindByID(flag.MessageID).Flags, flag)
|
||||
return nil
|
||||
})
|
||||
}
|
||||
@@ -536,7 +536,7 @@ func (svc *message) preloadAttachments(mm types.MessageSet) (err error) {
|
||||
} else {
|
||||
return aa.Walk(func(a *types.MessageAttachment) error {
|
||||
if a.MessageID > 0 {
|
||||
if m := mm.FindById(a.MessageID); m != nil {
|
||||
if m := mm.FindByID(a.MessageID); m != nil {
|
||||
m.Attachment = &a.Attachment
|
||||
}
|
||||
}
|
||||
|
||||
67
sam/types/attachment.gen.go
Normal file
67
sam/types/attachment.gen.go
Normal file
@@ -0,0 +1,67 @@
|
||||
package types
|
||||
|
||||
// Hello! This file is auto-generated.
|
||||
|
||||
type (
|
||||
|
||||
// MessageAttachmentSet slice of MessageAttachment
|
||||
//
|
||||
// This type is auto-generated.
|
||||
MessageAttachmentSet []*MessageAttachment
|
||||
)
|
||||
|
||||
// Walk iterates through every slice item and calls w(MessageAttachment) err
|
||||
//
|
||||
// This function is auto-generated.
|
||||
func (set MessageAttachmentSet) Walk(w func(*MessageAttachment) error) (err error) {
|
||||
for i := range set {
|
||||
if err = w(set[i]); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Filter iterates through every slice item, calls f(MessageAttachment) (bool, err) and return filtered slice
|
||||
//
|
||||
// This function is auto-generated.
|
||||
func (set MessageAttachmentSet) Filter(f func(*MessageAttachment) (bool, error)) (out MessageAttachmentSet, err error) {
|
||||
var ok bool
|
||||
out = MessageAttachmentSet{}
|
||||
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 MessageAttachmentSet) FindByID(ID uint64) *MessageAttachment {
|
||||
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 MessageAttachmentSet) IDs() (IDs []uint64) {
|
||||
IDs = make([]uint64, len(set))
|
||||
|
||||
for i := range set {
|
||||
IDs[i] = set[i].ID
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
package types
|
||||
|
||||
//go:generate go run ../../codegen/v2/type-set.go --types MessageAttachment --output attachment.gen.go
|
||||
|
||||
import (
|
||||
"database/sql/driver"
|
||||
"encoding/json"
|
||||
@@ -43,20 +45,8 @@ type (
|
||||
Attachment
|
||||
MessageID uint64 `db:"rel_message" json:"-"`
|
||||
}
|
||||
|
||||
MessageAttachmentSet []*MessageAttachment
|
||||
)
|
||||
|
||||
func (aa MessageAttachmentSet) Walk(w func(*MessageAttachment) error) (err error) {
|
||||
for i := range aa {
|
||||
if err = w(aa[i]); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (a *Attachment) SetOriginalImageMeta(width, height int, animated bool) *attachmentFileMeta {
|
||||
a.imageMeta(&a.Meta.Original, width, height, animated)
|
||||
return &a.Meta.Original
|
||||
|
||||
67
sam/types/channel.gen.go
Normal file
67
sam/types/channel.gen.go
Normal file
@@ -0,0 +1,67 @@
|
||||
package types
|
||||
|
||||
// Hello! This file is auto-generated.
|
||||
|
||||
type (
|
||||
|
||||
// ChannelSet slice of Channel
|
||||
//
|
||||
// This type is auto-generated.
|
||||
ChannelSet []*Channel
|
||||
)
|
||||
|
||||
// Walk iterates through every slice item and calls w(Channel) err
|
||||
//
|
||||
// This function is auto-generated.
|
||||
func (set ChannelSet) Walk(w func(*Channel) error) (err error) {
|
||||
for i := range set {
|
||||
if err = w(set[i]); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Filter iterates through every slice item, calls f(Channel) (bool, err) and return filtered slice
|
||||
//
|
||||
// This function is auto-generated.
|
||||
func (set ChannelSet) Filter(f func(*Channel) (bool, error)) (out ChannelSet, err error) {
|
||||
var ok bool
|
||||
out = ChannelSet{}
|
||||
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 ChannelSet) FindByID(ID uint64) *Channel {
|
||||
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 ChannelSet) IDs() (IDs []uint64) {
|
||||
IDs = make([]uint64, len(set))
|
||||
|
||||
for i := range set {
|
||||
IDs[i] = set[i].ID
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
package types
|
||||
|
||||
//go:generate go run ../../codegen/v2/type-set.go --types Channel --output channel.gen.go
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
@@ -51,8 +53,6 @@ type (
|
||||
}
|
||||
|
||||
ChannelType string
|
||||
|
||||
ChannelSet []*Channel
|
||||
)
|
||||
|
||||
// Scope returns permissions group that for this type
|
||||
@@ -74,40 +74,6 @@ func (c *Channel) IsValid() bool {
|
||||
return c.ArchivedAt == nil && c.DeletedAt == nil
|
||||
}
|
||||
|
||||
func (cc ChannelSet) Walk(w func(*Channel) error) (err error) {
|
||||
for i := range cc {
|
||||
if err = w(cc[i]); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (cc ChannelSet) Filter(f func(*Channel) (bool, error)) (out ChannelSet, err error) {
|
||||
var ok bool
|
||||
out = ChannelSet{}
|
||||
for i := range cc {
|
||||
if ok, err = f(cc[i]); err != nil {
|
||||
return
|
||||
} else if ok {
|
||||
out = append(out, cc[i])
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (cc ChannelSet) FindById(ID uint64) *Channel {
|
||||
for i := range cc {
|
||||
if cc[i].ID == ID {
|
||||
return cc[i]
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
const (
|
||||
ChannelTypePublic ChannelType = "public"
|
||||
ChannelTypePrivate = "private"
|
||||
|
||||
41
sam/types/channel_member.gen.go
Normal file
41
sam/types/channel_member.gen.go
Normal file
@@ -0,0 +1,41 @@
|
||||
package types
|
||||
|
||||
// Hello! This file is auto-generated.
|
||||
|
||||
type (
|
||||
|
||||
// ChannelMemberSet slice of ChannelMember
|
||||
//
|
||||
// This type is auto-generated.
|
||||
ChannelMemberSet []*ChannelMember
|
||||
)
|
||||
|
||||
// Walk iterates through every slice item and calls w(ChannelMember) err
|
||||
//
|
||||
// This function is auto-generated.
|
||||
func (set ChannelMemberSet) Walk(w func(*ChannelMember) error) (err error) {
|
||||
for i := range set {
|
||||
if err = w(set[i]); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Filter iterates through every slice item, calls f(ChannelMember) (bool, err) and return filtered slice
|
||||
//
|
||||
// This function is auto-generated.
|
||||
func (set ChannelMemberSet) Filter(f func(*ChannelMember) (bool, error)) (out ChannelMemberSet, err error) {
|
||||
var ok bool
|
||||
out = ChannelMemberSet{}
|
||||
for i := range set {
|
||||
if ok, err = f(set[i]); err != nil {
|
||||
return
|
||||
} else if ok {
|
||||
out = append(out, set[i])
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
package types
|
||||
|
||||
//go:generate go run ../../codegen/v2/type-set.go --no-pk-types ChannelMember --output channel_member.gen.go
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
@@ -26,68 +28,8 @@ type (
|
||||
}
|
||||
|
||||
ChannelMembershipType string
|
||||
|
||||
ChannelMemberSet []*ChannelMember
|
||||
)
|
||||
|
||||
func (mm ChannelMemberSet) Walk(w func(*ChannelMember) error) (err error) {
|
||||
for i := range mm {
|
||||
if err = w(mm[i]); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// MembersOf extracts member IDs from channel member set
|
||||
//
|
||||
// It filters out only members that match a particular channel
|
||||
func (mm ChannelMemberSet) MembersOf(channelID uint64) []uint64 {
|
||||
var mmof = make([]uint64, 0)
|
||||
|
||||
for i := range mm {
|
||||
if mm[i].ChannelID == channelID {
|
||||
mmof = append(mmof, mm[i].UserID)
|
||||
}
|
||||
}
|
||||
|
||||
return mmof
|
||||
}
|
||||
|
||||
// AllMemberIDs returns IDs of all members
|
||||
func (mm ChannelMemberSet) AllMemberIDs() []uint64 {
|
||||
var mmof = make([]uint64, 0)
|
||||
|
||||
for i := range mm {
|
||||
mmof = append(mmof, mm[i].UserID)
|
||||
}
|
||||
|
||||
return mmof
|
||||
}
|
||||
|
||||
func (mm ChannelMemberSet) FindByUserID(userID uint64) *ChannelMember {
|
||||
for i := range mm {
|
||||
if mm[i].UserID == userID {
|
||||
return mm[i]
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (mm ChannelMemberSet) FindByChannelID(channelID uint64) (out ChannelMemberSet) {
|
||||
out = ChannelMemberSet{}
|
||||
|
||||
for i := range mm {
|
||||
if mm[i].ChannelID == channelID {
|
||||
out = append(out, mm[i])
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
const (
|
||||
ChannelMembershipTypeOwner ChannelMembershipType = "owner"
|
||||
ChannelMembershipTypeMember = "member"
|
||||
|
||||
76
sam/types/command.gen.go
Normal file
76
sam/types/command.gen.go
Normal file
@@ -0,0 +1,76 @@
|
||||
package types
|
||||
|
||||
// Hello! This file is auto-generated.
|
||||
|
||||
type (
|
||||
|
||||
// CommandSet slice of Command
|
||||
//
|
||||
// This type is auto-generated.
|
||||
CommandSet []*Command
|
||||
|
||||
// CommandParamSet slice of CommandParam
|
||||
//
|
||||
// This type is auto-generated.
|
||||
CommandParamSet []*CommandParam
|
||||
)
|
||||
|
||||
// Walk iterates through every slice item and calls w(Command) err
|
||||
//
|
||||
// This function is auto-generated.
|
||||
func (set CommandSet) Walk(w func(*Command) error) (err error) {
|
||||
for i := range set {
|
||||
if err = w(set[i]); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Filter iterates through every slice item, calls f(Command) (bool, err) and return filtered slice
|
||||
//
|
||||
// This function is auto-generated.
|
||||
func (set CommandSet) Filter(f func(*Command) (bool, error)) (out CommandSet, err error) {
|
||||
var ok bool
|
||||
out = CommandSet{}
|
||||
for i := range set {
|
||||
if ok, err = f(set[i]); err != nil {
|
||||
return
|
||||
} else if ok {
|
||||
out = append(out, set[i])
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Walk iterates through every slice item and calls w(CommandParam) err
|
||||
//
|
||||
// This function is auto-generated.
|
||||
func (set CommandParamSet) Walk(w func(*CommandParam) error) (err error) {
|
||||
for i := range set {
|
||||
if err = w(set[i]); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Filter iterates through every slice item, calls f(CommandParam) (bool, err) and return filtered slice
|
||||
//
|
||||
// This function is auto-generated.
|
||||
func (set CommandParamSet) Filter(f func(*CommandParam) (bool, error)) (out CommandParamSet, err error) {
|
||||
var ok bool
|
||||
out = CommandParamSet{}
|
||||
for i := range set {
|
||||
if ok, err = f(set[i]); err != nil {
|
||||
return
|
||||
} else if ok {
|
||||
out = append(out, set[i])
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
@@ -1,11 +1,6 @@
|
||||
package types
|
||||
|
||||
import (
|
||||
"database/sql/driver"
|
||||
"encoding/json"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
//go:generate go run ../../codegen/v2/type-set.go --no-pk-types Command,CommandParam --output command.gen.go
|
||||
|
||||
type (
|
||||
Command struct {
|
||||
@@ -19,9 +14,6 @@ type (
|
||||
Type string `db:"type" json:"type"`
|
||||
Required bool `db:"required" json:"required"`
|
||||
}
|
||||
|
||||
CommandSet []*Command
|
||||
CommandParamSet []*CommandParam
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -38,40 +30,3 @@ func init() {
|
||||
Description: "It does exactly what it says on the tin"},
|
||||
}
|
||||
}
|
||||
|
||||
func (cc CommandSet) Walk(w func(*Command) error) (err error) {
|
||||
for i := range cc {
|
||||
if err = w(cc[i]); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (pp CommandParamSet) Walk(w func(*CommandParam) error) (err error) {
|
||||
for i := range pp {
|
||||
if err = w(pp[i]); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (pp *CommandParamSet) Scan(value interface{}) error {
|
||||
switch value.(type) {
|
||||
case nil:
|
||||
*pp = CommandParamSet{}
|
||||
case []uint8:
|
||||
if err := json.Unmarshal(value.([]byte), pp); err != nil {
|
||||
return errors.Wrapf(err, "Can not scan '%v' into CommandParamSet", value)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (pp CommandParamSet) Value() (driver.Value, error) {
|
||||
return json.Marshal(pp)
|
||||
}
|
||||
|
||||
67
sam/types/mention.gen.go
Normal file
67
sam/types/mention.gen.go
Normal file
@@ -0,0 +1,67 @@
|
||||
package types
|
||||
|
||||
// Hello! This file is auto-generated.
|
||||
|
||||
type (
|
||||
|
||||
// MentionSet slice of Mention
|
||||
//
|
||||
// This type is auto-generated.
|
||||
MentionSet []*Mention
|
||||
)
|
||||
|
||||
// Walk iterates through every slice item and calls w(Mention) err
|
||||
//
|
||||
// This function is auto-generated.
|
||||
func (set MentionSet) Walk(w func(*Mention) error) (err error) {
|
||||
for i := range set {
|
||||
if err = w(set[i]); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Filter iterates through every slice item, calls f(Mention) (bool, err) and return filtered slice
|
||||
//
|
||||
// This function is auto-generated.
|
||||
func (set MentionSet) Filter(f func(*Mention) (bool, error)) (out MentionSet, err error) {
|
||||
var ok bool
|
||||
out = MentionSet{}
|
||||
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 MentionSet) FindByID(ID uint64) *Mention {
|
||||
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 MentionSet) IDs() (IDs []uint64) {
|
||||
IDs = make([]uint64, len(set))
|
||||
|
||||
for i := range set {
|
||||
IDs[i] = set[i].ID
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
package types
|
||||
|
||||
//go:generate go run ../../codegen/v2/type-set.go --types Mention --output mention.gen.go
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
@@ -14,8 +16,6 @@ type (
|
||||
CreatedAt time.Time `db:"created_at"`
|
||||
}
|
||||
|
||||
MentionSet []*Mention
|
||||
|
||||
MentionFilter struct {
|
||||
// All mentions by this user
|
||||
MentionedByID uint64
|
||||
@@ -27,97 +27,3 @@ type (
|
||||
Limit uint
|
||||
}
|
||||
)
|
||||
|
||||
func (mm MentionSet) Walk(w func(*Mention) error) (err error) {
|
||||
for i := range mm {
|
||||
if err = w(mm[i]); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (mm MentionSet) FindByID(ID uint64) (out *Mention) {
|
||||
out = &Mention{}
|
||||
|
||||
for i := range mm {
|
||||
if mm[i].ID == ID {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (mm MentionSet) FindByUserID(ID uint64) (out MentionSet) {
|
||||
out = MentionSet{}
|
||||
|
||||
for i := range mm {
|
||||
if mm[i].UserID == ID {
|
||||
out = append(out, mm[i])
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (mm MentionSet) FindByMessageID(ID uint64) (out MentionSet) {
|
||||
out = MentionSet{}
|
||||
|
||||
for i := range mm {
|
||||
if mm[i].MessageID == ID {
|
||||
out = append(out, mm[i])
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (mm MentionSet) IDs() (IDs []uint64) {
|
||||
IDs = make([]uint64, len(mm))
|
||||
|
||||
for i := range mm {
|
||||
IDs[i] = mm[i].ID
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (mm MentionSet) UserIDs() (IDs []uint64) {
|
||||
IDs = make([]uint64, len(mm))
|
||||
|
||||
for i := range mm {
|
||||
IDs[i] = mm[i].UserID
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (mm MentionSet) Diff(in MentionSet) (add, upd, del MentionSet) {
|
||||
add, upd, del = MentionSet{}, MentionSet{}, MentionSet{}
|
||||
|
||||
for _, m := range in {
|
||||
if m.ID == 0 {
|
||||
// Mark for adding all new
|
||||
add = append(add, m)
|
||||
}
|
||||
}
|
||||
|
||||
for _, m := range mm {
|
||||
if m.ID == 0 {
|
||||
// Ignore all unsaved
|
||||
continue
|
||||
}
|
||||
|
||||
if in.FindByID(m.ID) == nil {
|
||||
// Mark for removal all that are not added
|
||||
del = append(del, m)
|
||||
} else {
|
||||
// Mark for update all that are still there
|
||||
upd = append(upd, m)
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
67
sam/types/message.gen.go
Normal file
67
sam/types/message.gen.go
Normal file
@@ -0,0 +1,67 @@
|
||||
package types
|
||||
|
||||
// Hello! This file is auto-generated.
|
||||
|
||||
type (
|
||||
|
||||
// MessageSet slice of Message
|
||||
//
|
||||
// This type is auto-generated.
|
||||
MessageSet []*Message
|
||||
)
|
||||
|
||||
// Walk iterates through every slice item and calls w(Message) err
|
||||
//
|
||||
// This function is auto-generated.
|
||||
func (set MessageSet) Walk(w func(*Message) error) (err error) {
|
||||
for i := range set {
|
||||
if err = w(set[i]); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Filter iterates through every slice item, calls f(Message) (bool, err) and return filtered slice
|
||||
//
|
||||
// This function is auto-generated.
|
||||
func (set MessageSet) Filter(f func(*Message) (bool, error)) (out MessageSet, err error) {
|
||||
var ok bool
|
||||
out = MessageSet{}
|
||||
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 MessageSet) FindByID(ID uint64) *Message {
|
||||
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 MessageSet) IDs() (IDs []uint64) {
|
||||
IDs = make([]uint64, len(set))
|
||||
|
||||
for i := range set {
|
||||
IDs[i] = set[i].ID
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
package types
|
||||
|
||||
//go:generate go run ../../codegen/v2/type-set.go --types Message --output message.gen.go
|
||||
|
||||
import (
|
||||
"database/sql/driver"
|
||||
"time"
|
||||
@@ -27,8 +29,6 @@ type (
|
||||
RepliesFrom []uint64
|
||||
}
|
||||
|
||||
MessageSet []*Message
|
||||
|
||||
MessageFilter struct {
|
||||
Query string
|
||||
|
||||
@@ -72,36 +72,6 @@ const (
|
||||
MessageTypeAttachment = "attachment"
|
||||
)
|
||||
|
||||
func (mm MessageSet) Walk(w func(*Message) error) (err error) {
|
||||
for i := range mm {
|
||||
if err = w(mm[i]); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (mm MessageSet) FindById(ID uint64) *Message {
|
||||
for i := range mm {
|
||||
if mm[i].ID == ID {
|
||||
return mm[i]
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (mm MessageSet) IDs() (IDs []uint64) {
|
||||
IDs = make([]uint64, len(mm))
|
||||
|
||||
for i := range mm {
|
||||
IDs[i] = mm[i].ID
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (mtype MessageType) String() string {
|
||||
return string(mtype)
|
||||
}
|
||||
|
||||
67
sam/types/message_flag.gen.go
Normal file
67
sam/types/message_flag.gen.go
Normal file
@@ -0,0 +1,67 @@
|
||||
package types
|
||||
|
||||
// Hello! This file is auto-generated.
|
||||
|
||||
type (
|
||||
|
||||
// MessageFlagSet slice of MessageFlag
|
||||
//
|
||||
// This type is auto-generated.
|
||||
MessageFlagSet []*MessageFlag
|
||||
)
|
||||
|
||||
// Walk iterates through every slice item and calls w(MessageFlag) err
|
||||
//
|
||||
// This function is auto-generated.
|
||||
func (set MessageFlagSet) Walk(w func(*MessageFlag) error) (err error) {
|
||||
for i := range set {
|
||||
if err = w(set[i]); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Filter iterates through every slice item, calls f(MessageFlag) (bool, err) and return filtered slice
|
||||
//
|
||||
// This function is auto-generated.
|
||||
func (set MessageFlagSet) Filter(f func(*MessageFlag) (bool, error)) (out MessageFlagSet, err error) {
|
||||
var ok bool
|
||||
out = MessageFlagSet{}
|
||||
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 MessageFlagSet) FindByID(ID uint64) *MessageFlag {
|
||||
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 MessageFlagSet) IDs() (IDs []uint64) {
|
||||
IDs = make([]uint64, len(set))
|
||||
|
||||
for i := range set {
|
||||
IDs[i] = set[i].ID
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
package types
|
||||
|
||||
//go:generate go run ../../codegen/v2/type-set.go --types MessageFlag --output message_flag.gen.go
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
@@ -16,8 +18,6 @@ type (
|
||||
// Internal only
|
||||
DeletedAt *time.Time `json:"-" db:"-"`
|
||||
}
|
||||
|
||||
MessageFlagSet []*MessageFlag
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -25,46 +25,6 @@ const (
|
||||
MessageFlagBookmarkedMessage string = "bookmark"
|
||||
)
|
||||
|
||||
func (ff MessageFlagSet) Walk(w func(*MessageFlag) error) (err error) {
|
||||
for i := range ff {
|
||||
if err = w(ff[i]); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (ff MessageFlagSet) FindById(ID uint64) *MessageFlag {
|
||||
for i := range ff {
|
||||
if ff[i].ID == ID {
|
||||
return ff[i]
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (ff MessageFlagSet) IsBookmarked(UserID uint64) bool {
|
||||
for i := range ff {
|
||||
if ff[i].UserID == UserID && ff[i].IsBookmark() {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func (ff MessageFlagSet) IsPinned() bool {
|
||||
for i := range ff {
|
||||
if ff[i].IsPin() {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func (f *MessageFlag) IsReaction() bool {
|
||||
return f.Flag != MessageFlagPinnedToChannel && f.Flag != MessageFlagBookmarkedMessage
|
||||
}
|
||||
|
||||
165
sam/types/sets.go
Normal file
165
sam/types/sets.go
Normal file
@@ -0,0 +1,165 @@
|
||||
package types
|
||||
|
||||
import (
|
||||
"database/sql/driver"
|
||||
"encoding/json"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
// MembersOf extracts member IDs from channel member set
|
||||
//
|
||||
// It filters out only members that match a particular channel
|
||||
func (set ChannelMemberSet) MembersOf(channelID uint64) []uint64 {
|
||||
var mmof = make([]uint64, 0)
|
||||
|
||||
for i := range set {
|
||||
if set[i].ChannelID == channelID {
|
||||
mmof = append(mmof, set[i].UserID)
|
||||
}
|
||||
}
|
||||
|
||||
return mmof
|
||||
}
|
||||
|
||||
// AllMemberIDs returns IDs of all members
|
||||
func (set ChannelMemberSet) AllMemberIDs() []uint64 {
|
||||
var mmof = make([]uint64, 0)
|
||||
|
||||
for i := range set {
|
||||
mmof = append(mmof, set[i].UserID)
|
||||
}
|
||||
|
||||
return mmof
|
||||
}
|
||||
|
||||
func (set ChannelMemberSet) FindByUserID(userID uint64) *ChannelMember {
|
||||
for i := range set {
|
||||
if set[i].UserID == userID {
|
||||
return set[i]
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (set ChannelMemberSet) FindByChannelID(channelID uint64) (out ChannelMemberSet) {
|
||||
out = ChannelMemberSet{}
|
||||
|
||||
for i := range set {
|
||||
if set[i].ChannelID == channelID {
|
||||
out = append(out, set[i])
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (set *CommandParamSet) Scan(value interface{}) error {
|
||||
switch value.(type) {
|
||||
case nil:
|
||||
*set = CommandParamSet{}
|
||||
case []uint8:
|
||||
if err := json.Unmarshal(value.([]byte), set); err != nil {
|
||||
return errors.Wrapf(err, "Can not scan '%v' into CommandParamSet", value)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (set CommandParamSet) Value() (driver.Value, error) {
|
||||
return json.Marshal(set)
|
||||
}
|
||||
|
||||
func (set MessageFlagSet) IsBookmarked(UserID uint64) bool {
|
||||
for i := range set {
|
||||
if set[i].UserID == UserID && set[i].IsBookmark() {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func (set MessageFlagSet) IsPinned() bool {
|
||||
for i := range set {
|
||||
if set[i].IsPin() {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func (set MentionSet) FindByUserID(ID uint64) (out MentionSet) {
|
||||
out = MentionSet{}
|
||||
|
||||
for i := range set {
|
||||
if set[i].UserID == ID {
|
||||
out = append(out, set[i])
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (set MentionSet) FindByMessageID(ID uint64) (out MentionSet) {
|
||||
out = MentionSet{}
|
||||
|
||||
for i := range set {
|
||||
if set[i].MessageID == ID {
|
||||
out = append(out, set[i])
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (set MentionSet) UserIDs() (IDs []uint64) {
|
||||
IDs = make([]uint64, len(set))
|
||||
|
||||
for i := range set {
|
||||
IDs[i] = set[i].UserID
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (set MentionSet) Diff(in MentionSet) (add, upd, del MentionSet) {
|
||||
add, upd, del = MentionSet{}, MentionSet{}, MentionSet{}
|
||||
|
||||
for _, m := range in {
|
||||
if m.ID == 0 {
|
||||
// Mark for adding all new
|
||||
add = append(add, m)
|
||||
}
|
||||
}
|
||||
|
||||
for _, m := range set {
|
||||
if m.ID == 0 {
|
||||
// Ignore all unsaved
|
||||
continue
|
||||
}
|
||||
|
||||
if in.FindByID(m.ID) == nil {
|
||||
// Mark for removal all that are not added
|
||||
del = append(del, m)
|
||||
} else {
|
||||
// Mark for update all that are still there
|
||||
upd = append(upd, m)
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (set UnreadSet) FindByChannelId(channelID uint64) *Unread {
|
||||
for i := range set {
|
||||
if set[i].ChannelID == channelID {
|
||||
return set[i]
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
41
sam/types/unread.gen.go
Normal file
41
sam/types/unread.gen.go
Normal file
@@ -0,0 +1,41 @@
|
||||
package types
|
||||
|
||||
// Hello! This file is auto-generated.
|
||||
|
||||
type (
|
||||
|
||||
// UnreadSet slice of Unread
|
||||
//
|
||||
// This type is auto-generated.
|
||||
UnreadSet []*Unread
|
||||
)
|
||||
|
||||
// Walk iterates through every slice item and calls w(Unread) err
|
||||
//
|
||||
// This function is auto-generated.
|
||||
func (set UnreadSet) Walk(w func(*Unread) error) (err error) {
|
||||
for i := range set {
|
||||
if err = w(set[i]); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Filter iterates through every slice item, calls f(Unread) (bool, err) and return filtered slice
|
||||
//
|
||||
// This function is auto-generated.
|
||||
func (set UnreadSet) Filter(f func(*Unread) (bool, error)) (out UnreadSet, err error) {
|
||||
var ok bool
|
||||
out = UnreadSet{}
|
||||
for i := range set {
|
||||
if ok, err = f(set[i]); err != nil {
|
||||
return
|
||||
} else if ok {
|
||||
out = append(out, set[i])
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
package types
|
||||
|
||||
//go:generate go run ../../codegen/v2/type-set.go --no-pk-types Unread --output unread.gen.go
|
||||
|
||||
type (
|
||||
Unread struct {
|
||||
ChannelID uint64 `db:"rel_channel"`
|
||||
@@ -13,26 +15,4 @@ type (
|
||||
UnreadFilter struct {
|
||||
UserID uint64
|
||||
}
|
||||
|
||||
UnreadSet []*Unread
|
||||
)
|
||||
|
||||
func (mm UnreadSet) Walk(w func(*Unread) error) (err error) {
|
||||
for i := range mm {
|
||||
if err = w(mm[i]); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (uu UnreadSet) FindByChannelId(channelID uint64) *Unread {
|
||||
for i := range uu {
|
||||
if uu[i].ChannelID == channelID {
|
||||
return uu[i]
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
67
system/types/user.gen.go
Normal file
67
system/types/user.gen.go
Normal file
@@ -0,0 +1,67 @@
|
||||
package types
|
||||
|
||||
// Hello! This file is auto-generated.
|
||||
|
||||
type (
|
||||
|
||||
// UserSet slice of User
|
||||
//
|
||||
// This type is auto-generated.
|
||||
UserSet []*User
|
||||
)
|
||||
|
||||
// Walk iterates through every slice item and calls w(User) err
|
||||
//
|
||||
// This function is auto-generated.
|
||||
func (set UserSet) Walk(w func(*User) error) (err error) {
|
||||
for i := range set {
|
||||
if err = w(set[i]); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Filter iterates through every slice item, calls f(User) (bool, err) and return filtered slice
|
||||
//
|
||||
// This function is auto-generated.
|
||||
func (set UserSet) Filter(f func(*User) (bool, error)) (out UserSet, err error) {
|
||||
var ok bool
|
||||
out = UserSet{}
|
||||
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 UserSet) FindByID(ID uint64) *User {
|
||||
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 UserSet) IDs() (IDs []uint64) {
|
||||
IDs = make([]uint64, len(set))
|
||||
|
||||
for i := range set {
|
||||
IDs[i] = set[i].ID
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
package types
|
||||
|
||||
//go:generate go run ../../codegen/v2/type-set.go --types User --output user.gen.go
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
@@ -28,8 +30,6 @@ type (
|
||||
UserFilter struct {
|
||||
Query string
|
||||
}
|
||||
|
||||
UserSet []*User
|
||||
)
|
||||
|
||||
func (u *User) Valid() bool {
|
||||
@@ -53,23 +53,3 @@ func (u *User) GeneratePassword(password string) error {
|
||||
u.Password = pwd
|
||||
return nil
|
||||
}
|
||||
|
||||
func (uu UserSet) Walk(w func(*User) error) (err error) {
|
||||
for i := range uu {
|
||||
if err = w(uu[i]); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (uu UserSet) FindById(ID uint64) *User {
|
||||
for i := range uu {
|
||||
if uu[i].ID == ID {
|
||||
return uu[i]
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user