Types structs reduced & simplified
This commit is contained in:
+6
-6
@@ -2,25 +2,25 @@ package auth
|
||||
|
||||
type (
|
||||
Identifiable interface {
|
||||
GetID() uint64
|
||||
Identity() uint64
|
||||
Valid() bool
|
||||
}
|
||||
|
||||
Identity struct {
|
||||
id uint64
|
||||
identity uint64
|
||||
}
|
||||
)
|
||||
|
||||
func NewIdentity(id uint64) *Identity {
|
||||
return &Identity{
|
||||
id: id,
|
||||
identity: id,
|
||||
}
|
||||
}
|
||||
|
||||
func (i Identity) GetID() uint64 {
|
||||
return i.id
|
||||
func (i Identity) Identity() uint64 {
|
||||
return i.identity
|
||||
}
|
||||
|
||||
func (i Identity) Valid() bool {
|
||||
return i.id > 0
|
||||
return i.identity > 0
|
||||
}
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@ func (t *jwt) Verifier() func(http.Handler) http.Handler {
|
||||
func (t *jwt) Encode(identity Identifiable) string {
|
||||
// @todo Set expiry
|
||||
claims := jwtauth.Claims{}
|
||||
claims.Set("sub", strconv.FormatUint(identity.GetID(), 10))
|
||||
claims.Set("sub", strconv.FormatUint(identity.Identity(), 10))
|
||||
claims.SetExpiryIn(time.Duration(config.jwtExpiry) * time.Minute)
|
||||
|
||||
_, jwt, _ := t.tokenAuth.Encode(claims)
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
<?php
|
||||
|
||||
foreach ($apis as $api) {
|
||||
if (is_array($api['struct'])) {
|
||||
$name = ucfirst($api['interface']);
|
||||
$filename = $dirname . "/" . str_replace("..", ".", strtolower($name) . ".go");
|
||||
|
||||
$tpl->load("http_structs.tpl");
|
||||
$tpl->assign($common);
|
||||
$tpl->assign("package", basename(__DIR__));
|
||||
$tpl->assign("name", $name);
|
||||
$tpl->assign("api", $api);
|
||||
$tpl->assign("self", strtolower(substr($name, 0, 1)));
|
||||
$tpl->assign("structs", $api['struct']);
|
||||
$imports = array();
|
||||
foreach ($api['struct'] as $struct) {
|
||||
if (isset($struct['imports']))
|
||||
foreach ($struct['imports'] as $import) {
|
||||
$imports[] = $import;
|
||||
}
|
||||
}
|
||||
$tpl->assign("imports", $imports);
|
||||
$tpl->assign("calls", $api['apis']);
|
||||
$contents = str_replace("\n\n}", "\n}", $tpl->get());
|
||||
|
||||
file_put_contents($filename, $contents);
|
||||
echo $filename . "\n";
|
||||
}
|
||||
}
|
||||
@@ -1,68 +0,0 @@
|
||||
package {package}
|
||||
|
||||
{load warning.tpl}
|
||||
|
||||
{if !empty($imports)}
|
||||
import (
|
||||
{foreach ($imports as $import)}
|
||||
"{import}"
|
||||
{/foreach}
|
||||
)
|
||||
{/if}
|
||||
|
||||
|
||||
{if !empty($structs)}
|
||||
type ({foreach $structs as $struct}
|
||||
|
||||
{if strpos($name, "Literal") !== false}
|
||||
{foreach $struct.fields as $field}
|
||||
{field}{newline}
|
||||
{/foreach}
|
||||
{else}
|
||||
// {api.title} - {api.description}
|
||||
{struct.name} struct {
|
||||
{foreach $struct.fields as $field}
|
||||
{field.name} {field.type} `{if $field.tag}{$field.tag} {/if}db:"{if $field.dbname}{$field.dbname}{else}{$field.name|decamel}{/if}"`{newline}
|
||||
{/foreach}
|
||||
|
||||
changed []string
|
||||
}
|
||||
|
||||
{/if}{/foreach}
|
||||
)
|
||||
{/if}
|
||||
|
||||
{foreach $structs as $struct}
|
||||
// New constructs a new instance of {struct.name}
|
||||
func ({struct.name}) New() *{struct.name} {
|
||||
return &{struct.name}{}
|
||||
}
|
||||
{/foreach}
|
||||
|
||||
{foreach $structs as $struct}
|
||||
{foreach $struct.fields as $field}
|
||||
// Get the value of {field.name}
|
||||
func ({self} *{struct.name}) Get{field.name}() {field.type} {
|
||||
return {self}.{field.name}
|
||||
}
|
||||
|
||||
// Set the value of {field.name}
|
||||
func ({self} *{struct.name}) Set{field.name}(value {field.type}) *{struct.name} {{if !$field.complex}
|
||||
if {self}.{field.name} != value {
|
||||
{self}.changed = append({self}.changed, "{field.name}")
|
||||
{self}.{field.name} = value
|
||||
}
|
||||
{else}
|
||||
{self}.changed = append({self}.changed, "{field.name}")
|
||||
{self}.{field.name} = value
|
||||
{/if}
|
||||
return {self}
|
||||
}
|
||||
{/foreach}
|
||||
|
||||
// Changes returns the names of changed fields
|
||||
func ({self} *{struct.name}) Changes() []string {
|
||||
return {self}.changed
|
||||
}
|
||||
|
||||
{/foreach}
|
||||
@@ -37,22 +37,13 @@ func (r module) Find(ctx context.Context) ([]*types.Module, error) {
|
||||
}
|
||||
|
||||
func (r module) Create(ctx context.Context, mod *types.Module) (*types.Module, error) {
|
||||
db := factory.Database.MustGet()
|
||||
mod.SetID(factory.Sonyflake.NextID())
|
||||
if err := db.With(ctx).Insert("crm_module", mod); err != nil {
|
||||
return nil, ErrDatabaseError
|
||||
} else {
|
||||
return mod, nil
|
||||
}
|
||||
mod.ID = factory.Sonyflake.NextID()
|
||||
return mod, factory.Database.MustGet().With(ctx).Insert("crm_module", mod)
|
||||
}
|
||||
|
||||
func (r module) Update(ctx context.Context, mod *types.Module) (*types.Module, error) {
|
||||
db := factory.Database.MustGet()
|
||||
if err := db.With(ctx).Replace("crm_module", mod); err != nil {
|
||||
return nil, ErrDatabaseError
|
||||
} else {
|
||||
return mod, nil
|
||||
}
|
||||
return mod, factory.Database.MustGet().With(ctx).Replace("crm_module", mod)
|
||||
|
||||
}
|
||||
|
||||
func (r module) DeleteByID(ctx context.Context, id uint64) error {
|
||||
|
||||
+2
-4
@@ -46,14 +46,12 @@ func (c *Module) Delete(ctx context.Context, r *server.ModuleDeleteRequest) (int
|
||||
}
|
||||
|
||||
func (c *Module) Create(ctx context.Context, r *server.ModuleCreateRequest) (interface{}, error) {
|
||||
m := types.Module{}.New()
|
||||
m.SetName(r.Name)
|
||||
m := &types.Module{Name: r.Name}
|
||||
return c.svc.Create(ctx, m)
|
||||
}
|
||||
|
||||
func (c *Module) Edit(ctx context.Context, r *server.ModuleEditRequest) (interface{}, error) {
|
||||
m := types.Module{}.New()
|
||||
m.SetID(r.ID).SetName(r.Name)
|
||||
m := &types.Module{ID: r.ID, Name: r.Name}
|
||||
return c.svc.Update(ctx, m)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,64 +1,9 @@
|
||||
package types
|
||||
|
||||
/*
|
||||
Hello! This file is auto-generated from `docs/src/spec.json`.
|
||||
|
||||
For development:
|
||||
In order to update the generated files, edit this file under the location,
|
||||
add your struct fields, imports, API definitions and whatever you want, and:
|
||||
|
||||
1. run [spec](https://github.com/titpetric/spec) in the same folder,
|
||||
2. run `./_gen.php` in this folder.
|
||||
|
||||
You may edit `field.go`, `field.util.go` or `field_test.go` to
|
||||
implement your API calls, helper functions and tests. The file `field.go`
|
||||
is only generated the first time, and will not be overwritten if it exists.
|
||||
*/
|
||||
|
||||
type (
|
||||
// Fields - CRM input field definitions
|
||||
Field struct {
|
||||
Name string `json:"name" db:"name"`
|
||||
Type string `json:"type" db:"type"`
|
||||
|
||||
changed []string
|
||||
}
|
||||
)
|
||||
|
||||
// New constructs a new instance of Field
|
||||
func (Field) New() *Field {
|
||||
return &Field{}
|
||||
}
|
||||
|
||||
// Get the value of Name
|
||||
func (f *Field) GetName() string {
|
||||
return f.Name
|
||||
}
|
||||
|
||||
// Set the value of Name
|
||||
func (f *Field) SetName(value string) *Field {
|
||||
if f.Name != value {
|
||||
f.changed = append(f.changed, "Name")
|
||||
f.Name = value
|
||||
}
|
||||
return f
|
||||
}
|
||||
|
||||
// Get the value of Type
|
||||
func (f *Field) GetType() string {
|
||||
return f.Type
|
||||
}
|
||||
|
||||
// Set the value of Type
|
||||
func (f *Field) SetType(value string) *Field {
|
||||
if f.Type != value {
|
||||
f.changed = append(f.changed, "Type")
|
||||
f.Type = value
|
||||
}
|
||||
return f
|
||||
}
|
||||
|
||||
// Changes returns the names of changed fields
|
||||
func (f *Field) Changes() []string {
|
||||
return f.changed
|
||||
}
|
||||
|
||||
+3
-110
@@ -1,20 +1,5 @@
|
||||
package types
|
||||
|
||||
/*
|
||||
Hello! This file is auto-generated from `docs/src/spec.json`.
|
||||
|
||||
For development:
|
||||
In order to update the generated files, edit this file under the location,
|
||||
add your struct fields, imports, API definitions and whatever you want, and:
|
||||
|
||||
1. run [spec](https://github.com/titpetric/spec) in the same folder,
|
||||
2. run `./_gen.php` in this folder.
|
||||
|
||||
You may edit `module.go`, `module.util.go` or `module_test.go` to
|
||||
implement your API calls, helper functions and tests. The file `module.go`
|
||||
is only generated the first time, and will not be overwritten if it exists.
|
||||
*/
|
||||
|
||||
import (
|
||||
"github.com/jmoiron/sqlx/types"
|
||||
)
|
||||
@@ -24,104 +9,12 @@ type (
|
||||
Module struct {
|
||||
ID uint64 `db:"id"`
|
||||
Name string `db:"name"`
|
||||
|
||||
changed []string
|
||||
}
|
||||
|
||||
// Modules - CRM module definitions
|
||||
ModuleContentRow struct {
|
||||
ID uint64 `db:"id" db:"id"`
|
||||
ModuleID uint64 `db:"module_id" db:"module_id"`
|
||||
Fields types.JSONText `db:"address" db:"fields"`
|
||||
|
||||
changed []string
|
||||
ID uint64 `db:"id"`
|
||||
ModuleID uint64 `db:"module_id"`
|
||||
Fields types.JSONText `db:"fields"`
|
||||
}
|
||||
)
|
||||
|
||||
// New constructs a new instance of Module
|
||||
func (Module) New() *Module {
|
||||
return &Module{}
|
||||
}
|
||||
|
||||
// New constructs a new instance of ModuleContentRow
|
||||
func (ModuleContentRow) New() *ModuleContentRow {
|
||||
return &ModuleContentRow{}
|
||||
}
|
||||
|
||||
// Get the value of ID
|
||||
func (m *Module) GetID() uint64 {
|
||||
return m.ID
|
||||
}
|
||||
|
||||
// Set the value of ID
|
||||
func (m *Module) SetID(value uint64) *Module {
|
||||
if m.ID != value {
|
||||
m.changed = append(m.changed, "ID")
|
||||
m.ID = value
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// Get the value of Name
|
||||
func (m *Module) GetName() string {
|
||||
return m.Name
|
||||
}
|
||||
|
||||
// Set the value of Name
|
||||
func (m *Module) SetName(value string) *Module {
|
||||
if m.Name != value {
|
||||
m.changed = append(m.changed, "Name")
|
||||
m.Name = value
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// Changes returns the names of changed fields
|
||||
func (m *Module) Changes() []string {
|
||||
return m.changed
|
||||
}
|
||||
|
||||
// Get the value of ID
|
||||
func (m *ModuleContentRow) GetID() uint64 {
|
||||
return m.ID
|
||||
}
|
||||
|
||||
// Set the value of ID
|
||||
func (m *ModuleContentRow) SetID(value uint64) *ModuleContentRow {
|
||||
if m.ID != value {
|
||||
m.changed = append(m.changed, "ID")
|
||||
m.ID = value
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// Get the value of ModuleID
|
||||
func (m *ModuleContentRow) GetModuleID() uint64 {
|
||||
return m.ModuleID
|
||||
}
|
||||
|
||||
// Set the value of ModuleID
|
||||
func (m *ModuleContentRow) SetModuleID(value uint64) *ModuleContentRow {
|
||||
if m.ModuleID != value {
|
||||
m.changed = append(m.changed, "ModuleID")
|
||||
m.ModuleID = value
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// Get the value of Fields
|
||||
func (m *ModuleContentRow) GetFields() types.JSONText {
|
||||
return m.Fields
|
||||
}
|
||||
|
||||
// Set the value of Fields
|
||||
func (m *ModuleContentRow) SetFields(value types.JSONText) *ModuleContentRow {
|
||||
m.changed = append(m.changed, "Fields")
|
||||
m.Fields = value
|
||||
return m
|
||||
}
|
||||
|
||||
// Changes returns the names of changed fields
|
||||
func (m *ModuleContentRow) Changes() []string {
|
||||
return m.changed
|
||||
}
|
||||
|
||||
@@ -44,25 +44,19 @@ func (r attachment) FindByRange(ctx context.Context, channelID, fromAttachmentID
|
||||
}
|
||||
|
||||
func (r attachment) Create(ctx context.Context, mod *types.Attachment) (*types.Attachment, error) {
|
||||
db := factory.Database.MustGet()
|
||||
mod.ID = factory.Sonyflake.NextID()
|
||||
mod.CreatedAt = time.Now()
|
||||
|
||||
mod.SetID(factory.Sonyflake.NextID())
|
||||
mod.SetCreatedAt(time.Now())
|
||||
mod.Attachment = coalesceJson(mod.Attachment, []byte("{}"))
|
||||
|
||||
if mod.Attachment == nil {
|
||||
mod.SetAttachment([]byte("{}"))
|
||||
}
|
||||
|
||||
return mod, db.With(ctx).Insert("attachments", mod)
|
||||
return mod, factory.Database.MustGet().With(ctx).Insert("attachments", mod)
|
||||
}
|
||||
|
||||
func (r attachment) Update(ctx context.Context, mod *types.Attachment) (*types.Attachment, error) {
|
||||
db := factory.Database.MustGet()
|
||||
mod.UpdatedAt = timeNowPtr()
|
||||
mod.Attachment = coalesceJson(mod.Attachment, []byte("{}"))
|
||||
|
||||
now := time.Now()
|
||||
mod.SetUpdatedAt(&now)
|
||||
|
||||
return mod, db.With(ctx).Replace("attachments", mod)
|
||||
return mod, factory.Database.MustGet().With(ctx).Replace("attachments", mod)
|
||||
}
|
||||
|
||||
func (r attachment) Delete(ctx context.Context, id uint64) error {
|
||||
|
||||
@@ -16,11 +16,11 @@ func TestAttachment(t *testing.T) {
|
||||
|
||||
rpo := Attachment()
|
||||
ctx := context.Background()
|
||||
att := types.Attachment{}.New()
|
||||
att := &types.Attachment{}
|
||||
|
||||
var aa []*types.Attachment
|
||||
|
||||
att.SetChannelID(1)
|
||||
att.ChannelID = 1
|
||||
|
||||
att, err = rpo.Create(ctx, att)
|
||||
must(t, err)
|
||||
@@ -28,7 +28,7 @@ func TestAttachment(t *testing.T) {
|
||||
t.Fatal("Changes were not stored")
|
||||
}
|
||||
|
||||
att.SetChannelID(2)
|
||||
att.ChannelID = 2
|
||||
|
||||
att, err = rpo.Update(ctx, att)
|
||||
must(t, err)
|
||||
|
||||
@@ -49,25 +49,18 @@ func (r channel) Find(ctx context.Context, filter *types.ChannelFilter) ([]*type
|
||||
}
|
||||
|
||||
func (r channel) Create(ctx context.Context, mod *types.Channel) (*types.Channel, error) {
|
||||
db := factory.Database.MustGet()
|
||||
mod.ID = factory.Sonyflake.NextID()
|
||||
mod.CreatedAt = time.Now()
|
||||
mod.Meta = coalesceJson(mod.Meta, []byte("{}"))
|
||||
|
||||
mod.SetID(factory.Sonyflake.NextID())
|
||||
mod.SetCreatedAt(time.Now())
|
||||
|
||||
if mod.Meta == nil {
|
||||
mod.SetMeta([]byte("{}"))
|
||||
}
|
||||
|
||||
return mod, db.With(ctx).Insert("channels", mod)
|
||||
return mod, factory.Database.MustGet().With(ctx).Insert("channels", mod)
|
||||
}
|
||||
|
||||
func (r channel) Update(ctx context.Context, mod *types.Channel) (*types.Channel, error) {
|
||||
db := factory.Database.MustGet()
|
||||
mod.UpdatedAt = timeNowPtr()
|
||||
mod.Meta = coalesceJson(mod.Meta, []byte("{}"))
|
||||
|
||||
now := time.Now()
|
||||
mod.SetUpdatedAt(&now)
|
||||
|
||||
return mod, db.With(ctx).Replace("channels", mod)
|
||||
return mod, factory.Database.MustGet().With(ctx).Replace("channels", mod)
|
||||
}
|
||||
|
||||
func (r channel) AddMember(ctx context.Context, channelID, userID uint64) error {
|
||||
|
||||
@@ -16,13 +16,13 @@ func TestChannel(t *testing.T) {
|
||||
|
||||
rpo := Channel()
|
||||
ctx := context.Background()
|
||||
chn := types.Channel{}.New()
|
||||
chn := &types.Channel{}
|
||||
|
||||
var name1, name2 = "Test channel v1", "Test channel v2"
|
||||
|
||||
var aa []*types.Channel
|
||||
var cc []*types.Channel
|
||||
|
||||
chn.SetName(name1)
|
||||
chn.Name = name1
|
||||
|
||||
chn, err = rpo.Create(ctx, chn)
|
||||
must(t, err)
|
||||
@@ -30,7 +30,7 @@ func TestChannel(t *testing.T) {
|
||||
t.Fatal("Changes were not stored")
|
||||
}
|
||||
|
||||
chn.SetName(name2)
|
||||
chn.Name = name2
|
||||
|
||||
chn, err = rpo.Update(ctx, chn)
|
||||
must(t, err)
|
||||
@@ -44,9 +44,9 @@ func TestChannel(t *testing.T) {
|
||||
t.Fatal("Changes were not stored")
|
||||
}
|
||||
|
||||
aa, err = rpo.Find(ctx, &types.ChannelFilter{Query: name2})
|
||||
cc, err = rpo.Find(ctx, &types.ChannelFilter{Query: name2})
|
||||
must(t, err)
|
||||
if len(aa) == 0 {
|
||||
if len(cc) == 0 {
|
||||
t.Fatal("No results found")
|
||||
}
|
||||
|
||||
@@ -66,11 +66,11 @@ func TestChannelMembers(t *testing.T) {
|
||||
rpo := Channel()
|
||||
ctx := context.Background()
|
||||
|
||||
chn := types.Channel{}.New()
|
||||
chn := &types.Channel{}
|
||||
chn, err = rpo.Create(ctx, chn)
|
||||
must(t, err)
|
||||
|
||||
usr := types.User{}.New()
|
||||
usr := &types.User{}
|
||||
usr, err = User().Create(ctx, usr)
|
||||
must(t, err)
|
||||
|
||||
|
||||
@@ -69,21 +69,16 @@ func (r message) Find(ctx context.Context, filter *types.MessageFilter) ([]*type
|
||||
}
|
||||
|
||||
func (r message) Create(ctx context.Context, mod *types.Message) (*types.Message, error) {
|
||||
db := factory.Database.MustGet()
|
||||
mod.ID = factory.Sonyflake.NextID()
|
||||
mod.CreatedAt = time.Now()
|
||||
|
||||
mod.SetID(factory.Sonyflake.NextID())
|
||||
mod.SetCreatedAt(time.Now())
|
||||
|
||||
return mod, db.With(ctx).Insert("messages", mod)
|
||||
return mod, factory.Database.MustGet().With(ctx).Insert("messages", mod)
|
||||
}
|
||||
|
||||
func (r message) Update(ctx context.Context, mod *types.Message) (*types.Message, error) {
|
||||
db := factory.Database.MustGet()
|
||||
mod.UpdatedAt = timeNowPtr()
|
||||
|
||||
now := time.Now()
|
||||
mod.SetUpdatedAt(&now)
|
||||
|
||||
return mod, db.With(ctx).Replace("messages", mod)
|
||||
return mod, factory.Database.MustGet().With(ctx).Replace("messages", mod)
|
||||
}
|
||||
|
||||
func (r message) Delete(ctx context.Context, id uint64) error {
|
||||
|
||||
@@ -16,39 +16,39 @@ func TestMessage(t *testing.T) {
|
||||
|
||||
rpo := Message()
|
||||
ctx := context.Background()
|
||||
att := types.Message{}.New()
|
||||
msg := &types.Message{}
|
||||
|
||||
var msg1, msg2 = "Test message v1", "Test message v2"
|
||||
|
||||
var aa []*types.Message
|
||||
var mm []*types.Message
|
||||
|
||||
att.SetMessage(msg1)
|
||||
msg.Message = msg1
|
||||
|
||||
att, err = rpo.Create(ctx, att)
|
||||
msg, err = rpo.Create(ctx, msg)
|
||||
must(t, err)
|
||||
if att.Message != msg1 {
|
||||
if msg.Message != msg1 {
|
||||
t.Fatal("Changes were not stored")
|
||||
}
|
||||
|
||||
att.SetMessage(msg2)
|
||||
msg.Message = msg2
|
||||
|
||||
att, err = rpo.Update(ctx, att)
|
||||
msg, err = rpo.Update(ctx, msg)
|
||||
must(t, err)
|
||||
if att.Message != msg2 {
|
||||
if msg.Message != msg2 {
|
||||
t.Fatal("Changes were not stored")
|
||||
}
|
||||
|
||||
att, err = rpo.FindByID(ctx, att.ID)
|
||||
msg, err = rpo.FindByID(ctx, msg.ID)
|
||||
must(t, err)
|
||||
if att.Message != msg2 {
|
||||
if msg.Message != msg2 {
|
||||
t.Fatal("Changes were not stored")
|
||||
}
|
||||
|
||||
aa, err = rpo.Find(ctx, &types.MessageFilter{Query: msg2})
|
||||
mm, err = rpo.Find(ctx, &types.MessageFilter{Query: msg2})
|
||||
must(t, err)
|
||||
if len(aa) == 0 {
|
||||
if len(mm) == 0 {
|
||||
t.Fatal("No results found")
|
||||
}
|
||||
|
||||
must(t, rpo.Delete(ctx, att.ID))
|
||||
must(t, rpo.Delete(ctx, msg.ID))
|
||||
}
|
||||
|
||||
@@ -48,21 +48,16 @@ func (r organisation) Find(ctx context.Context, filter *types.OrganisationFilter
|
||||
}
|
||||
|
||||
func (r organisation) Create(ctx context.Context, mod *types.Organisation) (*types.Organisation, error) {
|
||||
db := factory.Database.MustGet()
|
||||
mod.ID = factory.Sonyflake.NextID()
|
||||
mod.CreatedAt = time.Now()
|
||||
|
||||
mod.SetID(factory.Sonyflake.NextID())
|
||||
mod.SetCreatedAt(time.Now())
|
||||
|
||||
return mod, db.With(ctx).Insert("organisations", mod)
|
||||
return mod, factory.Database.MustGet().With(ctx).Insert("organisations", mod)
|
||||
}
|
||||
|
||||
func (r organisation) Update(ctx context.Context, mod *types.Organisation) (*types.Organisation, error) {
|
||||
db := factory.Database.MustGet()
|
||||
mod.UpdatedAt = timeNowPtr()
|
||||
|
||||
now := time.Now()
|
||||
mod.SetUpdatedAt(&now)
|
||||
|
||||
return mod, db.With(ctx).Replace("organisations", mod)
|
||||
return mod, factory.Database.MustGet().With(ctx).Replace("organisations", mod)
|
||||
}
|
||||
|
||||
func (r organisation) Archive(ctx context.Context, id uint64) error {
|
||||
|
||||
@@ -16,41 +16,41 @@ func TestOrganisation(t *testing.T) {
|
||||
|
||||
rpo := Organisation()
|
||||
ctx := context.Background()
|
||||
att := types.Organisation{}.New()
|
||||
org := &types.Organisation{}
|
||||
|
||||
var name1, name2 = "Test organisation v1", "Test organisation v2"
|
||||
|
||||
var aa []*types.Organisation
|
||||
var oo []*types.Organisation
|
||||
|
||||
att.SetName(name1)
|
||||
org.Name = name1
|
||||
|
||||
att, err = rpo.Create(ctx, att)
|
||||
org, err = rpo.Create(ctx, org)
|
||||
must(t, err)
|
||||
if att.Name != name1 {
|
||||
if org.Name != name1 {
|
||||
t.Fatal("Changes were not stored")
|
||||
}
|
||||
|
||||
att.SetName(name2)
|
||||
org.Name = name2
|
||||
|
||||
att, err = rpo.Update(ctx, att)
|
||||
org, err = rpo.Update(ctx, org)
|
||||
must(t, err)
|
||||
if att.Name != name2 {
|
||||
if org.Name != name2 {
|
||||
t.Fatal("Changes were not stored")
|
||||
}
|
||||
|
||||
att, err = rpo.FindByID(ctx, att.ID)
|
||||
org, err = rpo.FindByID(ctx, org.ID)
|
||||
must(t, err)
|
||||
if att.Name != name2 {
|
||||
if org.Name != name2 {
|
||||
t.Fatal("Changes were not stored")
|
||||
}
|
||||
|
||||
aa, err = rpo.Find(ctx, &types.OrganisationFilter{Query: name2})
|
||||
oo, err = rpo.Find(ctx, &types.OrganisationFilter{Query: name2})
|
||||
must(t, err)
|
||||
if len(aa) == 0 {
|
||||
if len(oo) == 0 {
|
||||
t.Fatal("No results found")
|
||||
}
|
||||
|
||||
must(t, rpo.Archive(ctx, att.ID))
|
||||
must(t, rpo.Unarchive(ctx, att.ID))
|
||||
must(t, rpo.Delete(ctx, att.ID))
|
||||
must(t, rpo.Archive(ctx, org.ID))
|
||||
must(t, rpo.Unarchive(ctx, org.ID))
|
||||
must(t, rpo.Delete(ctx, org.ID))
|
||||
}
|
||||
|
||||
@@ -41,12 +41,10 @@ func (r reaction) FindByRange(ctx context.Context, channelID, fromReactionID, to
|
||||
}
|
||||
|
||||
func (r reaction) Create(ctx context.Context, mod *types.Reaction) (*types.Reaction, error) {
|
||||
db := factory.Database.MustGet()
|
||||
mod.ID = factory.Sonyflake.NextID()
|
||||
mod.CreatedAt = time.Now()
|
||||
|
||||
mod.SetID(factory.Sonyflake.NextID())
|
||||
mod.SetCreatedAt(time.Now())
|
||||
|
||||
return mod, db.With(ctx).Insert("reactions", mod)
|
||||
return mod, factory.Database.MustGet().With(ctx).Insert("reactions", mod)
|
||||
}
|
||||
|
||||
func (r reaction) Delete(ctx context.Context, id uint64) error {
|
||||
|
||||
@@ -16,23 +16,23 @@ func TestReaction(t *testing.T) {
|
||||
|
||||
rpo := Reaction()
|
||||
ctx := context.Background()
|
||||
att := types.Reaction{}.New()
|
||||
react := &types.Reaction{}
|
||||
|
||||
var reaction = ":laugh:"
|
||||
|
||||
att.SetReaction(reaction)
|
||||
react.Reaction = reaction
|
||||
|
||||
att, err = rpo.Create(ctx, att)
|
||||
react, err = rpo.Create(ctx, react)
|
||||
must(t, err)
|
||||
if att.Reaction != reaction {
|
||||
if react.Reaction != reaction {
|
||||
t.Fatal("Changes were not stored")
|
||||
}
|
||||
|
||||
att, err = rpo.FindByID(ctx, att.ID)
|
||||
react, err = rpo.FindByID(ctx, react.ID)
|
||||
must(t, err)
|
||||
if att.Reaction != reaction {
|
||||
if react.Reaction != reaction {
|
||||
t.Fatal("Changes were not stored")
|
||||
}
|
||||
|
||||
must(t, rpo.Delete(ctx, att.ID))
|
||||
must(t, rpo.Delete(ctx, react.ID))
|
||||
}
|
||||
|
||||
+5
-10
@@ -49,21 +49,16 @@ func (r team) Find(ctx context.Context, filter *types.TeamFilter) ([]*types.Team
|
||||
}
|
||||
|
||||
func (r team) Create(ctx context.Context, mod *types.Team) (*types.Team, error) {
|
||||
db := factory.Database.MustGet()
|
||||
mod.ID = factory.Sonyflake.NextID()
|
||||
mod.CreatedAt = time.Now()
|
||||
|
||||
mod.SetID(factory.Sonyflake.NextID())
|
||||
mod.SetCreatedAt(time.Now())
|
||||
|
||||
return mod, db.With(ctx).Insert("teams", mod)
|
||||
return mod, factory.Database.MustGet().With(ctx).Insert("teams", mod)
|
||||
}
|
||||
|
||||
func (r team) Update(ctx context.Context, mod *types.Team) (*types.Team, error) {
|
||||
db := factory.Database.MustGet()
|
||||
mod.UpdatedAt = timeNowPtr()
|
||||
|
||||
now := time.Now()
|
||||
mod.SetUpdatedAt(&now)
|
||||
|
||||
return mod, db.With(ctx).Replace("teams", mod)
|
||||
return mod, factory.Database.MustGet().With(ctx).Replace("teams", mod)
|
||||
}
|
||||
|
||||
func (r team) Archive(ctx context.Context, id uint64) error {
|
||||
|
||||
+12
-12
@@ -16,31 +16,31 @@ func TestTeam(t *testing.T) {
|
||||
|
||||
rpo := Team()
|
||||
ctx := context.Background()
|
||||
att := types.Team{}.New()
|
||||
team := &types.Team{}
|
||||
|
||||
var name1, name2 = "Test team v1", "Test team v2"
|
||||
|
||||
var aa []*types.Team
|
||||
|
||||
att.SetName(name1)
|
||||
team.Name = name1
|
||||
|
||||
att, err = rpo.Create(ctx, att)
|
||||
team, err = rpo.Create(ctx, team)
|
||||
must(t, err)
|
||||
if att.Name != name1 {
|
||||
if team.Name != name1 {
|
||||
t.Fatal("Changes were not stored")
|
||||
}
|
||||
|
||||
att.SetName(name2)
|
||||
team.Name = name2
|
||||
|
||||
att, err = rpo.Update(ctx, att)
|
||||
team, err = rpo.Update(ctx, team)
|
||||
must(t, err)
|
||||
if att.Name != name2 {
|
||||
if team.Name != name2 {
|
||||
t.Fatal("Changes were not stored")
|
||||
}
|
||||
|
||||
att, err = rpo.FindByID(ctx, att.ID)
|
||||
team, err = rpo.FindByID(ctx, team.ID)
|
||||
must(t, err)
|
||||
if att.Name != name2 {
|
||||
if team.Name != name2 {
|
||||
t.Fatal("Changes were not stored")
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ func TestTeam(t *testing.T) {
|
||||
t.Fatal("No results found")
|
||||
}
|
||||
|
||||
must(t, rpo.Archive(ctx, att.ID))
|
||||
must(t, rpo.Unarchive(ctx, att.ID))
|
||||
must(t, rpo.Delete(ctx, att.ID))
|
||||
must(t, rpo.Archive(ctx, team.ID))
|
||||
must(t, rpo.Unarchive(ctx, team.ID))
|
||||
must(t, rpo.Delete(ctx, team.ID))
|
||||
}
|
||||
|
||||
+7
-14
@@ -62,25 +62,18 @@ func (r user) Find(ctx context.Context, filter *types.UserFilter) ([]*types.User
|
||||
}
|
||||
|
||||
func (r user) Create(ctx context.Context, mod *types.User) (*types.User, error) {
|
||||
db := factory.Database.MustGet()
|
||||
mod.ID = factory.Sonyflake.NextID()
|
||||
mod.CreatedAt = time.Now()
|
||||
mod.Meta = coalesceJson(mod.Meta, []byte("{}"))
|
||||
|
||||
mod.SetID(factory.Sonyflake.NextID())
|
||||
mod.SetCreatedAt(time.Now())
|
||||
|
||||
if mod.Meta == nil {
|
||||
mod.SetMeta([]byte("{}"))
|
||||
}
|
||||
|
||||
return mod, db.With(ctx).Insert("users", mod)
|
||||
return mod, factory.Database.MustGet().With(ctx).Insert("users", mod)
|
||||
}
|
||||
|
||||
func (r user) Update(ctx context.Context, mod *types.User) (*types.User, error) {
|
||||
db := factory.Database.MustGet()
|
||||
mod.UpdatedAt = timeNowPtr()
|
||||
mod.Meta = coalesceJson(mod.Meta, []byte("{}"))
|
||||
|
||||
now := time.Now()
|
||||
mod.SetUpdatedAt(&now)
|
||||
|
||||
return mod, db.With(ctx).Replace("users", mod)
|
||||
return mod, factory.Database.MustGet().With(ctx).Replace("users", mod)
|
||||
}
|
||||
|
||||
func (r user) Suspend(ctx context.Context, id uint64) error {
|
||||
|
||||
+10
-10
@@ -16,31 +16,31 @@ func TestUser(t *testing.T) {
|
||||
|
||||
rpo := User()
|
||||
ctx := context.Background()
|
||||
att := types.User{}.New()
|
||||
usr := &types.User{}
|
||||
|
||||
var name1, name2 = "Test user v1", "Test user v2"
|
||||
|
||||
var aa []*types.User
|
||||
|
||||
att.SetUsername(name1)
|
||||
usr.Username = name1
|
||||
|
||||
att, err = rpo.Create(ctx, att)
|
||||
usr, err = rpo.Create(ctx, usr)
|
||||
must(t, err)
|
||||
if att.Username != name1 {
|
||||
if usr.Username != name1 {
|
||||
t.Fatal("Changes were not stored")
|
||||
}
|
||||
|
||||
att.SetUsername(name2)
|
||||
usr.Username = name2
|
||||
|
||||
att, err = rpo.Update(ctx, att)
|
||||
usr, err = rpo.Update(ctx, usr)
|
||||
must(t, err)
|
||||
if att.Username != name2 {
|
||||
if usr.Username != name2 {
|
||||
t.Fatal("Changes were not stored")
|
||||
}
|
||||
|
||||
att, err = rpo.FindByID(ctx, att.ID)
|
||||
usr, err = rpo.FindByID(ctx, usr.ID)
|
||||
must(t, err)
|
||||
if att.Username != name2 {
|
||||
if usr.Username != name2 {
|
||||
t.Fatal("Changes were not stored")
|
||||
}
|
||||
|
||||
@@ -50,5 +50,5 @@ func TestUser(t *testing.T) {
|
||||
t.Fatal("No results found")
|
||||
}
|
||||
|
||||
must(t, rpo.Delete(ctx, att.ID))
|
||||
must(t, rpo.Delete(ctx, usr.ID))
|
||||
}
|
||||
|
||||
@@ -2,8 +2,10 @@ package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/titpetric/factory"
|
||||
"time"
|
||||
)
|
||||
|
||||
func simpleUpdate(ctx context.Context, tableName, columnName string, value interface{}, id uint64) (err error) {
|
||||
@@ -38,3 +40,18 @@ func isFound(err error, valid bool, nerr error) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func timeNowPtr() *time.Time {
|
||||
n := time.Now()
|
||||
return &n
|
||||
}
|
||||
|
||||
func coalesceJson(vals ...json.RawMessage) json.RawMessage {
|
||||
for _, val := range vals {
|
||||
if val != nil {
|
||||
return val
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
+9
-13
@@ -3,11 +3,9 @@ package rest
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/titpetric/factory"
|
||||
|
||||
"github.com/crusttech/crust/sam/rest/server"
|
||||
"github.com/crusttech/crust/sam/types"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
var _ = errors.Wrap
|
||||
@@ -36,21 +34,19 @@ func (Channel) New(channelSvc channelService) *Channel {
|
||||
}
|
||||
|
||||
func (ctrl *Channel) Create(ctx context.Context, r *server.ChannelCreateRequest) (interface{}, error) {
|
||||
channel := types.Channel{}.
|
||||
New().
|
||||
SetName(r.Name).
|
||||
SetTopic(r.Topic).
|
||||
SetMeta([]byte("{}")).
|
||||
SetID(factory.Sonyflake.NextID())
|
||||
channel := &types.Channel{
|
||||
Name: r.Name,
|
||||
Topic: r.Topic,
|
||||
}
|
||||
|
||||
return ctrl.svc.Create(ctx, channel)
|
||||
}
|
||||
|
||||
func (ctrl *Channel) Edit(ctx context.Context, r *server.ChannelEditRequest) (interface{}, error) {
|
||||
channel := types.Channel{}.
|
||||
New().
|
||||
SetName(r.Name).
|
||||
SetTopic(r.Topic)
|
||||
channel := &types.Channel{
|
||||
Name: r.Name,
|
||||
Topic: r.Topic,
|
||||
}
|
||||
|
||||
return ctrl.svc.Update(ctx, channel)
|
||||
|
||||
|
||||
+9
-7
@@ -43,9 +43,10 @@ func (Message) New(messageSvc messageService) *Message {
|
||||
}
|
||||
|
||||
func (ctrl *Message) Create(ctx context.Context, r *server.MessageCreateRequest) (interface{}, error) {
|
||||
return ctrl.svc.Create(ctx, (&types.Message{}).
|
||||
SetChannelID(r.ChannelID).
|
||||
SetMessage(r.Message))
|
||||
return ctrl.svc.Create(ctx, &types.Message{
|
||||
ChannelID: r.ChannelID,
|
||||
Message: r.Message,
|
||||
})
|
||||
}
|
||||
|
||||
func (ctrl *Message) History(ctx context.Context, r *server.MessageHistoryRequest) (interface{}, error) {
|
||||
@@ -56,10 +57,11 @@ func (ctrl *Message) History(ctx context.Context, r *server.MessageHistoryReques
|
||||
}
|
||||
|
||||
func (ctrl *Message) Edit(ctx context.Context, r *server.MessageEditRequest) (interface{}, error) {
|
||||
return ctrl.svc.Update(ctx, (&types.Message{}).
|
||||
SetID(r.MessageID).
|
||||
SetChannelID(r.ChannelID).
|
||||
SetMessage(r.Message))
|
||||
return ctrl.svc.Update(ctx, &types.Message{
|
||||
ID: r.MessageID,
|
||||
ChannelID: r.ChannelID,
|
||||
Message: r.Message,
|
||||
})
|
||||
}
|
||||
|
||||
func (ctrl *Message) Delete(ctx context.Context, r *server.MessageDeleteRequest) (interface{}, error) {
|
||||
|
||||
@@ -41,18 +41,18 @@ func (ctrl *Organisation) List(ctx context.Context, r *server.OrganisationListRe
|
||||
}
|
||||
|
||||
func (ctrl *Organisation) Create(ctx context.Context, r *server.OrganisationCreateRequest) (interface{}, error) {
|
||||
org := types.Organisation{}.
|
||||
New().
|
||||
SetName(r.Name)
|
||||
org := &types.Organisation{
|
||||
Name: r.Name,
|
||||
}
|
||||
|
||||
return ctrl.svc.Create(ctx, org)
|
||||
}
|
||||
|
||||
func (ctrl *Organisation) Edit(ctx context.Context, r *server.OrganisationEditRequest) (interface{}, error) {
|
||||
org := types.Organisation{}.
|
||||
New().
|
||||
SetID(r.ID).
|
||||
SetName(r.Name)
|
||||
org := &types.Organisation{
|
||||
ID: r.ID,
|
||||
Name: r.Name,
|
||||
}
|
||||
|
||||
return ctrl.svc.Update(ctx, org)
|
||||
}
|
||||
|
||||
+7
-7
@@ -43,18 +43,18 @@ func (ctrl *Team) List(ctx context.Context, r *server.TeamListRequest) (interfac
|
||||
}
|
||||
|
||||
func (ctrl *Team) Create(ctx context.Context, r *server.TeamCreateRequest) (interface{}, error) {
|
||||
org := types.Team{}.
|
||||
New().
|
||||
SetName(r.Name)
|
||||
org := &types.Team{
|
||||
Name: r.Name,
|
||||
}
|
||||
|
||||
return ctrl.svc.Create(ctx, org)
|
||||
}
|
||||
|
||||
func (ctrl *Team) Edit(ctx context.Context, r *server.TeamEditRequest) (interface{}, error) {
|
||||
org := types.Team{}.
|
||||
New().
|
||||
SetID(r.TeamID).
|
||||
SetName(r.Name)
|
||||
org := &types.Team{
|
||||
ID: r.TeamID,
|
||||
Name: r.Name,
|
||||
}
|
||||
|
||||
return ctrl.svc.Update(ctx, org)
|
||||
}
|
||||
|
||||
@@ -42,11 +42,11 @@ func (svc channel) Create(ctx context.Context, mod *types.Channel) (*types.Chann
|
||||
// @todo: topic channelEvent/log entry
|
||||
// @todo: channel name cmessage/log entry
|
||||
// @todo: permission check if channel can add channel
|
||||
|
||||
return svc.repository.Create(ctx, mod)
|
||||
}
|
||||
|
||||
func (svc channel) Update(ctx context.Context, mod *types.Channel) (*types.Channel, error) {
|
||||
// @todo: load current entry and merge changes
|
||||
// @todo: topic change channelEvent/log entry
|
||||
// @todo: channel name change channelEvent/log entry
|
||||
// @todo: permission check if current user can edit channel
|
||||
|
||||
+13
-12
@@ -2,6 +2,7 @@ package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/crusttech/crust/auth"
|
||||
"github.com/crusttech/crust/sam/repository"
|
||||
"github.com/crusttech/crust/sam/types"
|
||||
)
|
||||
@@ -49,7 +50,7 @@ func Message() *message {
|
||||
|
||||
func (svc message) Find(ctx context.Context, filter *types.MessageFilter) ([]*types.Message, error) {
|
||||
// @todo get user from context
|
||||
var currentUserID uint64 = 0
|
||||
var currentUserID uint64 = auth.GetIdentityFromContext(ctx).Identity()
|
||||
|
||||
// @todo verify if current user can access & read from this channel
|
||||
_ = currentUserID
|
||||
@@ -60,7 +61,7 @@ func (svc message) Find(ctx context.Context, filter *types.MessageFilter) ([]*ty
|
||||
|
||||
func (svc message) Create(ctx context.Context, mod *types.Message) (*types.Message, error) {
|
||||
// @todo get user from context
|
||||
var currentUserID uint64 = 0
|
||||
var currentUserID uint64 = auth.GetIdentityFromContext(ctx).Identity()
|
||||
|
||||
// @todo verify if current user can access & write to this channel
|
||||
_ = currentUserID
|
||||
@@ -70,7 +71,7 @@ func (svc message) Create(ctx context.Context, mod *types.Message) (*types.Messa
|
||||
|
||||
func (svc message) Update(ctx context.Context, mod *types.Message) (*types.Message, error) {
|
||||
// @todo get user from context
|
||||
var currentUserID uint64 = 0
|
||||
var currentUserID uint64 = auth.GetIdentityFromContext(ctx).Identity()
|
||||
|
||||
// @todo verify if current user can access & write to this channel
|
||||
_ = currentUserID
|
||||
@@ -84,7 +85,7 @@ func (svc message) Update(ctx context.Context, mod *types.Message) (*types.Messa
|
||||
|
||||
func (svc message) Delete(ctx context.Context, id uint64) error {
|
||||
// @todo get user from context
|
||||
var currentUserID uint64 = 0
|
||||
var currentUserID uint64 = auth.GetIdentityFromContext(ctx).Identity()
|
||||
|
||||
// @todo verify if current user can access & write to this channel
|
||||
_ = currentUserID
|
||||
@@ -98,7 +99,7 @@ func (svc message) Delete(ctx context.Context, id uint64) error {
|
||||
|
||||
func (svc message) React(ctx context.Context, messageID uint64, reaction string) error {
|
||||
// @todo get user from context
|
||||
var currentUserID uint64 = 0
|
||||
var currentUserID uint64 = auth.GetIdentityFromContext(ctx).Identity()
|
||||
|
||||
// @todo verify if current user can access & write to this channel
|
||||
var m *types.Message
|
||||
@@ -121,7 +122,7 @@ func (svc message) React(ctx context.Context, messageID uint64, reaction string)
|
||||
|
||||
func (svc message) Unreact(ctx context.Context, messageID uint64, reaction string) error {
|
||||
// @todo get user from context
|
||||
var currentUserID uint64 = 0
|
||||
var currentUserID uint64 = auth.GetIdentityFromContext(ctx).Identity()
|
||||
|
||||
// @todo verify if current user can access & write to this channel
|
||||
_ = currentUserID
|
||||
@@ -134,7 +135,7 @@ func (svc message) Unreact(ctx context.Context, messageID uint64, reaction strin
|
||||
|
||||
func (svc message) Pin(ctx context.Context, messageID uint64) error {
|
||||
// @todo get user from context
|
||||
var currentUserID uint64 = 0
|
||||
var currentUserID uint64 = auth.GetIdentityFromContext(ctx).Identity()
|
||||
|
||||
// @todo verify if current user can access & write to this channel
|
||||
_ = currentUserID
|
||||
@@ -144,7 +145,7 @@ func (svc message) Pin(ctx context.Context, messageID uint64) error {
|
||||
|
||||
func (svc message) Unpin(ctx context.Context, messageID uint64) error {
|
||||
// @todo get user from context
|
||||
var currentUserID uint64 = 0
|
||||
var currentUserID uint64 = auth.GetIdentityFromContext(ctx).Identity()
|
||||
|
||||
// @todo verify if current user can access & write to this channel
|
||||
_ = currentUserID
|
||||
@@ -154,7 +155,7 @@ func (svc message) Unpin(ctx context.Context, messageID uint64) error {
|
||||
|
||||
func (svc message) Flag(ctx context.Context, messageID uint64) error {
|
||||
// @todo get user from context
|
||||
var currentUserID uint64 = 0
|
||||
var currentUserID uint64 = auth.GetIdentityFromContext(ctx).Identity()
|
||||
|
||||
// @todo verify if current user can access & write to this channel
|
||||
_ = currentUserID
|
||||
@@ -164,7 +165,7 @@ func (svc message) Flag(ctx context.Context, messageID uint64) error {
|
||||
|
||||
func (svc message) Unflag(ctx context.Context, messageID uint64) error {
|
||||
// @todo get user from context
|
||||
var currentUserID uint64 = 0
|
||||
var currentUserID uint64 = auth.GetIdentityFromContext(ctx).Identity()
|
||||
|
||||
// @todo verify if current user can access & write to this channel
|
||||
_ = currentUserID
|
||||
@@ -176,7 +177,7 @@ func (svc message) Attach(ctx context.Context) (*types.Attachment, error) {
|
||||
// @todo define func signature
|
||||
|
||||
// @todo get user from context
|
||||
var currentUserID uint64 = 0
|
||||
var currentUserID uint64 = auth.GetIdentityFromContext(ctx).Identity()
|
||||
|
||||
// @todo verify if current user can access & write to this channel
|
||||
_ = currentUserID
|
||||
@@ -186,7 +187,7 @@ func (svc message) Attach(ctx context.Context) (*types.Attachment, error) {
|
||||
|
||||
func (svc message) Detach(ctx context.Context, attachmentID uint64) error {
|
||||
// @todo get user from context
|
||||
var currentUserID uint64 = 0
|
||||
var currentUserID uint64 = auth.GetIdentityFromContext(ctx).Identity()
|
||||
|
||||
// @todo verify if current user can access & write to this channel
|
||||
_ = currentUserID
|
||||
|
||||
+1
-1
@@ -78,7 +78,7 @@ func (svc user) generatePassword(user *types.User, password string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
user.SetPassword(pwd)
|
||||
user.Password = pwd
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package types
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"time"
|
||||
)
|
||||
|
||||
type (
|
||||
Attachment struct {
|
||||
ID uint64 `db:"id"`
|
||||
UserID uint64 `db:"rel_user"`
|
||||
MessageID uint64 `db:"rel_message"`
|
||||
ChannelID uint64 `db:"rel_channel"`
|
||||
Attachment json.RawMessage `db:"attachment"`
|
||||
Url string `db:"url"`
|
||||
PreviewUrl string `db:"preview_url"`
|
||||
Size uint `db:"size"`
|
||||
Mimetype string `db:"mimetype"`
|
||||
Name string `db:"name"`
|
||||
CreatedAt time.Time `json:"created_at,omitempty" db:"created_at"`
|
||||
UpdatedAt *time.Time `json:"updated_at,omitempty" db:"updated_at"`
|
||||
DeletedAt *time.Time `json:"deleted_at,omitempty" db:"deleted_at"`
|
||||
}
|
||||
)
|
||||
@@ -1,16 +0,0 @@
|
||||
package types
|
||||
|
||||
/*
|
||||
Hello! This file is auto-generated from `docs/src/spec.json`.
|
||||
|
||||
For development:
|
||||
In order to update the generated files, edit this file under the location,
|
||||
add your struct fields, imports, API definitions and whatever you want, and:
|
||||
|
||||
1. run [spec](https://github.com/titpetric/spec) in the same folder,
|
||||
2. run `./_gen.php` in this folder.
|
||||
|
||||
You may edit `auth.go`, `auth.util.go` or `auth_test.go` to
|
||||
implement your API calls, helper functions and tests. The file `auth.go`
|
||||
is only generated the first time, and will not be overwritten if it exists.
|
||||
*/
|
||||
+3
-143
@@ -1,27 +1,11 @@
|
||||
package types
|
||||
|
||||
/*
|
||||
Hello! This file is auto-generated from `docs/src/spec.json`.
|
||||
|
||||
For development:
|
||||
In order to update the generated files, edit this file under the location,
|
||||
add your struct fields, imports, API definitions and whatever you want, and:
|
||||
|
||||
1. run [spec](https://github.com/titpetric/spec) in the same folder,
|
||||
2. run `./_gen.php` in this folder.
|
||||
|
||||
You may edit `channel.go`, `channel.util.go` or `channel_test.go` to
|
||||
implement your API calls, helper functions and tests. The file `channel.go`
|
||||
is only generated the first time, and will not be overwritten if it exists.
|
||||
*/
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"time"
|
||||
)
|
||||
|
||||
type (
|
||||
// Channels - A channel is a representation of a sequence of messages. It has meta data like channel subject. Channels may be public, private or direct (between two users).
|
||||
Channel struct {
|
||||
ID uint64 `db:"id"`
|
||||
Name string `db:"name"`
|
||||
@@ -32,133 +16,9 @@ type (
|
||||
UpdatedAt *time.Time `json:"updated_at,omitempty" db:"updated_at"`
|
||||
ArchivedAt *time.Time `json:"archived_at,omitempty" db:"archived_at"`
|
||||
DeletedAt *time.Time `json:"deleted_at,omitempty" db:"deleted_at"`
|
||||
}
|
||||
|
||||
changed []string
|
||||
ChannelFilter struct {
|
||||
Query string
|
||||
}
|
||||
)
|
||||
|
||||
// New constructs a new instance of Channel
|
||||
func (Channel) New() *Channel {
|
||||
return &Channel{}
|
||||
}
|
||||
|
||||
// Get the value of ID
|
||||
func (c *Channel) GetID() uint64 {
|
||||
return c.ID
|
||||
}
|
||||
|
||||
// Set the value of ID
|
||||
func (c *Channel) SetID(value uint64) *Channel {
|
||||
if c.ID != value {
|
||||
c.changed = append(c.changed, "ID")
|
||||
c.ID = value
|
||||
}
|
||||
return c
|
||||
}
|
||||
|
||||
// Get the value of Name
|
||||
func (c *Channel) GetName() string {
|
||||
return c.Name
|
||||
}
|
||||
|
||||
// Set the value of Name
|
||||
func (c *Channel) SetName(value string) *Channel {
|
||||
if c.Name != value {
|
||||
c.changed = append(c.changed, "Name")
|
||||
c.Name = value
|
||||
}
|
||||
return c
|
||||
}
|
||||
|
||||
// Get the value of Topic
|
||||
func (c *Channel) GetTopic() string {
|
||||
return c.Topic
|
||||
}
|
||||
|
||||
// Set the value of Topic
|
||||
func (c *Channel) SetTopic(value string) *Channel {
|
||||
if c.Topic != value {
|
||||
c.changed = append(c.changed, "Topic")
|
||||
c.Topic = value
|
||||
}
|
||||
return c
|
||||
}
|
||||
|
||||
// Get the value of Meta
|
||||
func (c *Channel) GetMeta() json.RawMessage {
|
||||
return c.Meta
|
||||
}
|
||||
|
||||
// Set the value of Meta
|
||||
func (c *Channel) SetMeta(value json.RawMessage) *Channel {
|
||||
c.changed = append(c.changed, "Meta")
|
||||
c.Meta = value
|
||||
return c
|
||||
}
|
||||
|
||||
// Get the value of LastMessageID
|
||||
func (c *Channel) GetLastMessageID() uint64 {
|
||||
return c.LastMessageID
|
||||
}
|
||||
|
||||
// Set the value of LastMessageID
|
||||
func (c *Channel) SetLastMessageID(value uint64) *Channel {
|
||||
if c.LastMessageID != value {
|
||||
c.changed = append(c.changed, "LastMessageID")
|
||||
c.LastMessageID = value
|
||||
}
|
||||
return c
|
||||
}
|
||||
|
||||
// Get the value of CreatedAt
|
||||
func (c *Channel) GetCreatedAt() time.Time {
|
||||
return c.CreatedAt
|
||||
}
|
||||
|
||||
// Set the value of CreatedAt
|
||||
func (c *Channel) SetCreatedAt(value time.Time) *Channel {
|
||||
c.changed = append(c.changed, "CreatedAt")
|
||||
c.CreatedAt = value
|
||||
return c
|
||||
}
|
||||
|
||||
// Get the value of UpdatedAt
|
||||
func (c *Channel) GetUpdatedAt() *time.Time {
|
||||
return c.UpdatedAt
|
||||
}
|
||||
|
||||
// Set the value of UpdatedAt
|
||||
func (c *Channel) SetUpdatedAt(value *time.Time) *Channel {
|
||||
c.changed = append(c.changed, "UpdatedAt")
|
||||
c.UpdatedAt = value
|
||||
return c
|
||||
}
|
||||
|
||||
// Get the value of ArchivedAt
|
||||
func (c *Channel) GetArchivedAt() *time.Time {
|
||||
return c.ArchivedAt
|
||||
}
|
||||
|
||||
// Set the value of ArchivedAt
|
||||
func (c *Channel) SetArchivedAt(value *time.Time) *Channel {
|
||||
c.changed = append(c.changed, "ArchivedAt")
|
||||
c.ArchivedAt = value
|
||||
return c
|
||||
}
|
||||
|
||||
// Get the value of DeletedAt
|
||||
func (c *Channel) GetDeletedAt() *time.Time {
|
||||
return c.DeletedAt
|
||||
}
|
||||
|
||||
// Set the value of DeletedAt
|
||||
func (c *Channel) SetDeletedAt(value *time.Time) *Channel {
|
||||
c.changed = append(c.changed, "DeletedAt")
|
||||
c.DeletedAt = value
|
||||
return c
|
||||
}
|
||||
|
||||
// Changes returns the names of changed fields
|
||||
func (c *Channel) Changes() []string {
|
||||
return c.changed
|
||||
}
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
package types
|
||||
|
||||
type (
|
||||
ChannelFilter struct {
|
||||
Query string
|
||||
}
|
||||
)
|
||||
+6
-454
@@ -1,27 +1,10 @@
|
||||
package types
|
||||
|
||||
/*
|
||||
Hello! This file is auto-generated from `docs/src/spec.json`.
|
||||
|
||||
For development:
|
||||
In order to update the generated files, edit this file under the location,
|
||||
add your struct fields, imports, API definitions and whatever you want, and:
|
||||
|
||||
1. run [spec](https://github.com/titpetric/spec) in the same folder,
|
||||
2. run `./_gen.php` in this folder.
|
||||
|
||||
You may edit `message.go`, `message.util.go` or `message_test.go` to
|
||||
implement your API calls, helper functions and tests. The file `message.go`
|
||||
is only generated the first time, and will not be overwritten if it exists.
|
||||
*/
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"time"
|
||||
)
|
||||
|
||||
type (
|
||||
// Messages -
|
||||
Message struct {
|
||||
ID uint64 `db:"id"`
|
||||
Type string `db:"type"`
|
||||
@@ -32,444 +15,13 @@ type (
|
||||
CreatedAt time.Time `json:"created_at,omitempty" db:"created_at"`
|
||||
UpdatedAt *time.Time `json:"updated_at,omitempty" db:"updated_at"`
|
||||
DeletedAt *time.Time `json:"deleted_at,omitempty" db:"deleted_at"`
|
||||
|
||||
changed []string
|
||||
}
|
||||
|
||||
// Messages -
|
||||
Reaction struct {
|
||||
ID uint64 `db:"id"`
|
||||
UserID uint64 `db:"rel_user"`
|
||||
MessageID uint64 `db:"rel_message"`
|
||||
ChannelID uint64 `db:"rel_channel"`
|
||||
Reaction string `db:"reaction"`
|
||||
CreatedAt time.Time `json:"created_at,omitempty" db:"created_at"`
|
||||
|
||||
changed []string
|
||||
}
|
||||
|
||||
// Messages -
|
||||
Attachment struct {
|
||||
ID uint64 `db:"id"`
|
||||
UserID uint64 `db:"rel_user"`
|
||||
MessageID uint64 `db:"rel_message"`
|
||||
ChannelID uint64 `db:"rel_channel"`
|
||||
Attachment json.RawMessage `db:"attachment"`
|
||||
Url string `db:"url"`
|
||||
PreviewUrl string `db:"preview_url"`
|
||||
Size uint `db:"size"`
|
||||
Mimetype string `db:"mimetype"`
|
||||
Name string `db:"name"`
|
||||
CreatedAt time.Time `json:"created_at,omitempty" db:"created_at"`
|
||||
UpdatedAt *time.Time `json:"updated_at,omitempty" db:"updated_at"`
|
||||
DeletedAt *time.Time `json:"deleted_at,omitempty" db:"deleted_at"`
|
||||
|
||||
changed []string
|
||||
MessageFilter struct {
|
||||
Query string
|
||||
ChannelID uint64
|
||||
FromMessageID uint64
|
||||
UntilMessageID uint64
|
||||
Limit uint
|
||||
}
|
||||
)
|
||||
|
||||
// New constructs a new instance of Message
|
||||
func (Message) New() *Message {
|
||||
return &Message{}
|
||||
}
|
||||
|
||||
// New constructs a new instance of Reaction
|
||||
func (Reaction) New() *Reaction {
|
||||
return &Reaction{}
|
||||
}
|
||||
|
||||
// New constructs a new instance of Attachment
|
||||
func (Attachment) New() *Attachment {
|
||||
return &Attachment{}
|
||||
}
|
||||
|
||||
// Get the value of ID
|
||||
func (m *Message) GetID() uint64 {
|
||||
return m.ID
|
||||
}
|
||||
|
||||
// Set the value of ID
|
||||
func (m *Message) SetID(value uint64) *Message {
|
||||
if m.ID != value {
|
||||
m.changed = append(m.changed, "ID")
|
||||
m.ID = value
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// Get the value of Type
|
||||
func (m *Message) GetType() string {
|
||||
return m.Type
|
||||
}
|
||||
|
||||
// Set the value of Type
|
||||
func (m *Message) SetType(value string) *Message {
|
||||
if m.Type != value {
|
||||
m.changed = append(m.changed, "Type")
|
||||
m.Type = value
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// Get the value of Message
|
||||
func (m *Message) GetMessage() string {
|
||||
return m.Message
|
||||
}
|
||||
|
||||
// Set the value of Message
|
||||
func (m *Message) SetMessage(value string) *Message {
|
||||
if m.Message != value {
|
||||
m.changed = append(m.changed, "Message")
|
||||
m.Message = value
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// Get the value of UserID
|
||||
func (m *Message) GetUserID() uint64 {
|
||||
return m.UserID
|
||||
}
|
||||
|
||||
// Set the value of UserID
|
||||
func (m *Message) SetUserID(value uint64) *Message {
|
||||
if m.UserID != value {
|
||||
m.changed = append(m.changed, "UserID")
|
||||
m.UserID = value
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// Get the value of ChannelID
|
||||
func (m *Message) GetChannelID() uint64 {
|
||||
return m.ChannelID
|
||||
}
|
||||
|
||||
// Set the value of ChannelID
|
||||
func (m *Message) SetChannelID(value uint64) *Message {
|
||||
if m.ChannelID != value {
|
||||
m.changed = append(m.changed, "ChannelID")
|
||||
m.ChannelID = value
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// Get the value of ReplyTo
|
||||
func (m *Message) GetReplyTo() uint64 {
|
||||
return m.ReplyTo
|
||||
}
|
||||
|
||||
// Set the value of ReplyTo
|
||||
func (m *Message) SetReplyTo(value uint64) *Message {
|
||||
if m.ReplyTo != value {
|
||||
m.changed = append(m.changed, "ReplyTo")
|
||||
m.ReplyTo = value
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// Get the value of CreatedAt
|
||||
func (m *Message) GetCreatedAt() time.Time {
|
||||
return m.CreatedAt
|
||||
}
|
||||
|
||||
// Set the value of CreatedAt
|
||||
func (m *Message) SetCreatedAt(value time.Time) *Message {
|
||||
m.changed = append(m.changed, "CreatedAt")
|
||||
m.CreatedAt = value
|
||||
return m
|
||||
}
|
||||
|
||||
// Get the value of UpdatedAt
|
||||
func (m *Message) GetUpdatedAt() *time.Time {
|
||||
return m.UpdatedAt
|
||||
}
|
||||
|
||||
// Set the value of UpdatedAt
|
||||
func (m *Message) SetUpdatedAt(value *time.Time) *Message {
|
||||
m.changed = append(m.changed, "UpdatedAt")
|
||||
m.UpdatedAt = value
|
||||
return m
|
||||
}
|
||||
|
||||
// Get the value of DeletedAt
|
||||
func (m *Message) GetDeletedAt() *time.Time {
|
||||
return m.DeletedAt
|
||||
}
|
||||
|
||||
// Set the value of DeletedAt
|
||||
func (m *Message) SetDeletedAt(value *time.Time) *Message {
|
||||
m.changed = append(m.changed, "DeletedAt")
|
||||
m.DeletedAt = value
|
||||
return m
|
||||
}
|
||||
|
||||
// Changes returns the names of changed fields
|
||||
func (m *Message) Changes() []string {
|
||||
return m.changed
|
||||
}
|
||||
|
||||
// Get the value of ID
|
||||
func (m *Reaction) GetID() uint64 {
|
||||
return m.ID
|
||||
}
|
||||
|
||||
// Set the value of ID
|
||||
func (m *Reaction) SetID(value uint64) *Reaction {
|
||||
if m.ID != value {
|
||||
m.changed = append(m.changed, "ID")
|
||||
m.ID = value
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// Get the value of UserID
|
||||
func (m *Reaction) GetUserID() uint64 {
|
||||
return m.UserID
|
||||
}
|
||||
|
||||
// Set the value of UserID
|
||||
func (m *Reaction) SetUserID(value uint64) *Reaction {
|
||||
if m.UserID != value {
|
||||
m.changed = append(m.changed, "UserID")
|
||||
m.UserID = value
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// Get the value of MessageID
|
||||
func (m *Reaction) GetMessageID() uint64 {
|
||||
return m.MessageID
|
||||
}
|
||||
|
||||
// Set the value of MessageID
|
||||
func (m *Reaction) SetMessageID(value uint64) *Reaction {
|
||||
if m.MessageID != value {
|
||||
m.changed = append(m.changed, "MessageID")
|
||||
m.MessageID = value
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// Get the value of ChannelID
|
||||
func (m *Reaction) GetChannelID() uint64 {
|
||||
return m.ChannelID
|
||||
}
|
||||
|
||||
// Set the value of ChannelID
|
||||
func (m *Reaction) SetChannelID(value uint64) *Reaction {
|
||||
if m.ChannelID != value {
|
||||
m.changed = append(m.changed, "ChannelID")
|
||||
m.ChannelID = value
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// Get the value of Reaction
|
||||
func (m *Reaction) GetReaction() string {
|
||||
return m.Reaction
|
||||
}
|
||||
|
||||
// Set the value of Reaction
|
||||
func (m *Reaction) SetReaction(value string) *Reaction {
|
||||
if m.Reaction != value {
|
||||
m.changed = append(m.changed, "Reaction")
|
||||
m.Reaction = value
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// Get the value of CreatedAt
|
||||
func (m *Reaction) GetCreatedAt() time.Time {
|
||||
return m.CreatedAt
|
||||
}
|
||||
|
||||
// Set the value of CreatedAt
|
||||
func (m *Reaction) SetCreatedAt(value time.Time) *Reaction {
|
||||
m.changed = append(m.changed, "CreatedAt")
|
||||
m.CreatedAt = value
|
||||
return m
|
||||
}
|
||||
|
||||
// Changes returns the names of changed fields
|
||||
func (m *Reaction) Changes() []string {
|
||||
return m.changed
|
||||
}
|
||||
|
||||
// Get the value of ID
|
||||
func (m *Attachment) GetID() uint64 {
|
||||
return m.ID
|
||||
}
|
||||
|
||||
// Set the value of ID
|
||||
func (m *Attachment) SetID(value uint64) *Attachment {
|
||||
if m.ID != value {
|
||||
m.changed = append(m.changed, "ID")
|
||||
m.ID = value
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// Get the value of UserID
|
||||
func (m *Attachment) GetUserID() uint64 {
|
||||
return m.UserID
|
||||
}
|
||||
|
||||
// Set the value of UserID
|
||||
func (m *Attachment) SetUserID(value uint64) *Attachment {
|
||||
if m.UserID != value {
|
||||
m.changed = append(m.changed, "UserID")
|
||||
m.UserID = value
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// Get the value of MessageID
|
||||
func (m *Attachment) GetMessageID() uint64 {
|
||||
return m.MessageID
|
||||
}
|
||||
|
||||
// Set the value of MessageID
|
||||
func (m *Attachment) SetMessageID(value uint64) *Attachment {
|
||||
if m.MessageID != value {
|
||||
m.changed = append(m.changed, "MessageID")
|
||||
m.MessageID = value
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// Get the value of ChannelID
|
||||
func (m *Attachment) GetChannelID() uint64 {
|
||||
return m.ChannelID
|
||||
}
|
||||
|
||||
// Set the value of ChannelID
|
||||
func (m *Attachment) SetChannelID(value uint64) *Attachment {
|
||||
if m.ChannelID != value {
|
||||
m.changed = append(m.changed, "ChannelID")
|
||||
m.ChannelID = value
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// Get the value of Attachment
|
||||
func (m *Attachment) GetAttachment() json.RawMessage {
|
||||
return m.Attachment
|
||||
}
|
||||
|
||||
// Set the value of Attachment
|
||||
func (m *Attachment) SetAttachment(value json.RawMessage) *Attachment {
|
||||
m.changed = append(m.changed, "Attachment")
|
||||
m.Attachment = value
|
||||
return m
|
||||
}
|
||||
|
||||
// Get the value of Url
|
||||
func (m *Attachment) GetUrl() string {
|
||||
return m.Url
|
||||
}
|
||||
|
||||
// Set the value of Url
|
||||
func (m *Attachment) SetUrl(value string) *Attachment {
|
||||
if m.Url != value {
|
||||
m.changed = append(m.changed, "Url")
|
||||
m.Url = value
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// Get the value of PreviewUrl
|
||||
func (m *Attachment) GetPreviewUrl() string {
|
||||
return m.PreviewUrl
|
||||
}
|
||||
|
||||
// Set the value of PreviewUrl
|
||||
func (m *Attachment) SetPreviewUrl(value string) *Attachment {
|
||||
if m.PreviewUrl != value {
|
||||
m.changed = append(m.changed, "PreviewUrl")
|
||||
m.PreviewUrl = value
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// Get the value of Size
|
||||
func (m *Attachment) GetSize() uint {
|
||||
return m.Size
|
||||
}
|
||||
|
||||
// Set the value of Size
|
||||
func (m *Attachment) SetSize(value uint) *Attachment {
|
||||
if m.Size != value {
|
||||
m.changed = append(m.changed, "Size")
|
||||
m.Size = value
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// Get the value of Mimetype
|
||||
func (m *Attachment) GetMimetype() string {
|
||||
return m.Mimetype
|
||||
}
|
||||
|
||||
// Set the value of Mimetype
|
||||
func (m *Attachment) SetMimetype(value string) *Attachment {
|
||||
if m.Mimetype != value {
|
||||
m.changed = append(m.changed, "Mimetype")
|
||||
m.Mimetype = value
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// Get the value of Name
|
||||
func (m *Attachment) GetName() string {
|
||||
return m.Name
|
||||
}
|
||||
|
||||
// Set the value of Name
|
||||
func (m *Attachment) SetName(value string) *Attachment {
|
||||
if m.Name != value {
|
||||
m.changed = append(m.changed, "Name")
|
||||
m.Name = value
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// Get the value of CreatedAt
|
||||
func (m *Attachment) GetCreatedAt() time.Time {
|
||||
return m.CreatedAt
|
||||
}
|
||||
|
||||
// Set the value of CreatedAt
|
||||
func (m *Attachment) SetCreatedAt(value time.Time) *Attachment {
|
||||
m.changed = append(m.changed, "CreatedAt")
|
||||
m.CreatedAt = value
|
||||
return m
|
||||
}
|
||||
|
||||
// Get the value of UpdatedAt
|
||||
func (m *Attachment) GetUpdatedAt() *time.Time {
|
||||
return m.UpdatedAt
|
||||
}
|
||||
|
||||
// Set the value of UpdatedAt
|
||||
func (m *Attachment) SetUpdatedAt(value *time.Time) *Attachment {
|
||||
m.changed = append(m.changed, "UpdatedAt")
|
||||
m.UpdatedAt = value
|
||||
return m
|
||||
}
|
||||
|
||||
// Get the value of DeletedAt
|
||||
func (m *Attachment) GetDeletedAt() *time.Time {
|
||||
return m.DeletedAt
|
||||
}
|
||||
|
||||
// Set the value of DeletedAt
|
||||
func (m *Attachment) SetDeletedAt(value *time.Time) *Attachment {
|
||||
m.changed = append(m.changed, "DeletedAt")
|
||||
m.DeletedAt = value
|
||||
return m
|
||||
}
|
||||
|
||||
// Changes returns the names of changed fields
|
||||
func (m *Attachment) Changes() []string {
|
||||
return m.changed
|
||||
}
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
package types
|
||||
|
||||
type (
|
||||
MessageFilter struct {
|
||||
Query string
|
||||
ChannelID uint64
|
||||
FromMessageID uint64
|
||||
UntilMessageID uint64
|
||||
Limit uint
|
||||
}
|
||||
)
|
||||
+3
-116
@@ -1,20 +1,5 @@
|
||||
package types
|
||||
|
||||
/*
|
||||
Hello! This file is auto-generated from `docs/src/spec.json`.
|
||||
|
||||
For development:
|
||||
In order to update the generated files, edit this file under the location,
|
||||
add your struct fields, imports, API definitions and whatever you want, and:
|
||||
|
||||
1. run [spec](https://github.com/titpetric/spec) in the same folder,
|
||||
2. run `./_gen.php` in this folder.
|
||||
|
||||
You may edit `organisation.go`, `organisation.util.go` or `organisation_test.go` to
|
||||
implement your API calls, helper functions and tests. The file `organisation.go`
|
||||
is only generated the first time, and will not be overwritten if it exists.
|
||||
*/
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
@@ -29,107 +14,9 @@ type (
|
||||
UpdatedAt *time.Time `json:"updated_at,omitempty" db:"updated_at"`
|
||||
ArchivedAt *time.Time `json:"archived_at,omitempty" db:"archived_at"`
|
||||
DeletedAt *time.Time `json:"deleted_at,omitempty" db:"deleted_at"`
|
||||
}
|
||||
|
||||
changed []string
|
||||
OrganisationFilter struct {
|
||||
Query string
|
||||
}
|
||||
)
|
||||
|
||||
// New constructs a new instance of Organisation
|
||||
func (Organisation) New() *Organisation {
|
||||
return &Organisation{}
|
||||
}
|
||||
|
||||
// Get the value of ID
|
||||
func (o *Organisation) GetID() uint64 {
|
||||
return o.ID
|
||||
}
|
||||
|
||||
// Set the value of ID
|
||||
func (o *Organisation) SetID(value uint64) *Organisation {
|
||||
if o.ID != value {
|
||||
o.changed = append(o.changed, "ID")
|
||||
o.ID = value
|
||||
}
|
||||
return o
|
||||
}
|
||||
|
||||
// Get the value of FQN
|
||||
func (o *Organisation) GetFQN() string {
|
||||
return o.FQN
|
||||
}
|
||||
|
||||
// Set the value of FQN
|
||||
func (o *Organisation) SetFQN(value string) *Organisation {
|
||||
if o.FQN != value {
|
||||
o.changed = append(o.changed, "FQN")
|
||||
o.FQN = value
|
||||
}
|
||||
return o
|
||||
}
|
||||
|
||||
// Get the value of Name
|
||||
func (o *Organisation) GetName() string {
|
||||
return o.Name
|
||||
}
|
||||
|
||||
// Set the value of Name
|
||||
func (o *Organisation) SetName(value string) *Organisation {
|
||||
if o.Name != value {
|
||||
o.changed = append(o.changed, "Name")
|
||||
o.Name = value
|
||||
}
|
||||
return o
|
||||
}
|
||||
|
||||
// Get the value of CreatedAt
|
||||
func (o *Organisation) GetCreatedAt() time.Time {
|
||||
return o.CreatedAt
|
||||
}
|
||||
|
||||
// Set the value of CreatedAt
|
||||
func (o *Organisation) SetCreatedAt(value time.Time) *Organisation {
|
||||
o.changed = append(o.changed, "CreatedAt")
|
||||
o.CreatedAt = value
|
||||
return o
|
||||
}
|
||||
|
||||
// Get the value of UpdatedAt
|
||||
func (o *Organisation) GetUpdatedAt() *time.Time {
|
||||
return o.UpdatedAt
|
||||
}
|
||||
|
||||
// Set the value of UpdatedAt
|
||||
func (o *Organisation) SetUpdatedAt(value *time.Time) *Organisation {
|
||||
o.changed = append(o.changed, "UpdatedAt")
|
||||
o.UpdatedAt = value
|
||||
return o
|
||||
}
|
||||
|
||||
// Get the value of ArchivedAt
|
||||
func (o *Organisation) GetArchivedAt() *time.Time {
|
||||
return o.ArchivedAt
|
||||
}
|
||||
|
||||
// Set the value of ArchivedAt
|
||||
func (o *Organisation) SetArchivedAt(value *time.Time) *Organisation {
|
||||
o.changed = append(o.changed, "ArchivedAt")
|
||||
o.ArchivedAt = value
|
||||
return o
|
||||
}
|
||||
|
||||
// Get the value of DeletedAt
|
||||
func (o *Organisation) GetDeletedAt() *time.Time {
|
||||
return o.DeletedAt
|
||||
}
|
||||
|
||||
// Set the value of DeletedAt
|
||||
func (o *Organisation) SetDeletedAt(value *time.Time) *Organisation {
|
||||
o.changed = append(o.changed, "DeletedAt")
|
||||
o.DeletedAt = value
|
||||
return o
|
||||
}
|
||||
|
||||
// Changes returns the names of changed fields
|
||||
func (o *Organisation) Changes() []string {
|
||||
return o.changed
|
||||
}
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
package types
|
||||
|
||||
type (
|
||||
OrganisationFilter struct {
|
||||
Query string
|
||||
}
|
||||
)
|
||||
@@ -0,0 +1,16 @@
|
||||
package types
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
type (
|
||||
Reaction struct {
|
||||
ID uint64 `db:"id"`
|
||||
UserID uint64 `db:"rel_user"`
|
||||
MessageID uint64 `db:"rel_message"`
|
||||
ChannelID uint64 `db:"rel_channel"`
|
||||
Reaction string `db:"reaction"`
|
||||
CreatedAt time.Time `json:"created_at,omitempty" db:"created_at"`
|
||||
}
|
||||
)
|
||||
+3
-116
@@ -1,20 +1,5 @@
|
||||
package types
|
||||
|
||||
/*
|
||||
Hello! This file is auto-generated from `docs/src/spec.json`.
|
||||
|
||||
For development:
|
||||
In order to update the generated files, edit this file under the location,
|
||||
add your struct fields, imports, API definitions and whatever you want, and:
|
||||
|
||||
1. run [spec](https://github.com/titpetric/spec) in the same folder,
|
||||
2. run `./_gen.php` in this folder.
|
||||
|
||||
You may edit `team.go`, `team.util.go` or `team_test.go` to
|
||||
implement your API calls, helper functions and tests. The file `team.go`
|
||||
is only generated the first time, and will not be overwritten if it exists.
|
||||
*/
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
@@ -29,107 +14,9 @@ type (
|
||||
UpdatedAt *time.Time `json:"updated_at,omitempty" db:"updated_at"`
|
||||
ArchivedAt *time.Time `json:"archived_at,omitempty" db:"archived_at"`
|
||||
DeletedAt *time.Time `json:"deleted_at,omitempty" db:"deleted_at"`
|
||||
}
|
||||
|
||||
changed []string
|
||||
TeamFilter struct {
|
||||
Query string
|
||||
}
|
||||
)
|
||||
|
||||
// New constructs a new instance of Team
|
||||
func (Team) New() *Team {
|
||||
return &Team{}
|
||||
}
|
||||
|
||||
// Get the value of ID
|
||||
func (t *Team) GetID() uint64 {
|
||||
return t.ID
|
||||
}
|
||||
|
||||
// Set the value of ID
|
||||
func (t *Team) SetID(value uint64) *Team {
|
||||
if t.ID != value {
|
||||
t.changed = append(t.changed, "ID")
|
||||
t.ID = value
|
||||
}
|
||||
return t
|
||||
}
|
||||
|
||||
// Get the value of Name
|
||||
func (t *Team) GetName() string {
|
||||
return t.Name
|
||||
}
|
||||
|
||||
// Set the value of Name
|
||||
func (t *Team) SetName(value string) *Team {
|
||||
if t.Name != value {
|
||||
t.changed = append(t.changed, "Name")
|
||||
t.Name = value
|
||||
}
|
||||
return t
|
||||
}
|
||||
|
||||
// Get the value of Handle
|
||||
func (t *Team) GetHandle() string {
|
||||
return t.Handle
|
||||
}
|
||||
|
||||
// Set the value of Handle
|
||||
func (t *Team) SetHandle(value string) *Team {
|
||||
if t.Handle != value {
|
||||
t.changed = append(t.changed, "Handle")
|
||||
t.Handle = value
|
||||
}
|
||||
return t
|
||||
}
|
||||
|
||||
// Get the value of CreatedAt
|
||||
func (t *Team) GetCreatedAt() time.Time {
|
||||
return t.CreatedAt
|
||||
}
|
||||
|
||||
// Set the value of CreatedAt
|
||||
func (t *Team) SetCreatedAt(value time.Time) *Team {
|
||||
t.changed = append(t.changed, "CreatedAt")
|
||||
t.CreatedAt = value
|
||||
return t
|
||||
}
|
||||
|
||||
// Get the value of UpdatedAt
|
||||
func (t *Team) GetUpdatedAt() *time.Time {
|
||||
return t.UpdatedAt
|
||||
}
|
||||
|
||||
// Set the value of UpdatedAt
|
||||
func (t *Team) SetUpdatedAt(value *time.Time) *Team {
|
||||
t.changed = append(t.changed, "UpdatedAt")
|
||||
t.UpdatedAt = value
|
||||
return t
|
||||
}
|
||||
|
||||
// Get the value of ArchivedAt
|
||||
func (t *Team) GetArchivedAt() *time.Time {
|
||||
return t.ArchivedAt
|
||||
}
|
||||
|
||||
// Set the value of ArchivedAt
|
||||
func (t *Team) SetArchivedAt(value *time.Time) *Team {
|
||||
t.changed = append(t.changed, "ArchivedAt")
|
||||
t.ArchivedAt = value
|
||||
return t
|
||||
}
|
||||
|
||||
// Get the value of DeletedAt
|
||||
func (t *Team) GetDeletedAt() *time.Time {
|
||||
return t.DeletedAt
|
||||
}
|
||||
|
||||
// Set the value of DeletedAt
|
||||
func (t *Team) SetDeletedAt(value *time.Time) *Team {
|
||||
t.changed = append(t.changed, "DeletedAt")
|
||||
t.DeletedAt = value
|
||||
return t
|
||||
}
|
||||
|
||||
// Changes returns the names of changed fields
|
||||
func (t *Team) Changes() []string {
|
||||
return t.changed
|
||||
}
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
package types
|
||||
|
||||
type (
|
||||
TeamFilter struct {
|
||||
Query string
|
||||
}
|
||||
)
|
||||
+17
-147
@@ -1,163 +1,33 @@
|
||||
package types
|
||||
|
||||
/*
|
||||
Hello! This file is auto-generated from `docs/src/spec.json`.
|
||||
|
||||
For development:
|
||||
In order to update the generated files, edit this file under the location,
|
||||
add your struct fields, imports, API definitions and whatever you want, and:
|
||||
|
||||
1. run [spec](https://github.com/titpetric/spec) in the same folder,
|
||||
2. run `./_gen.php` in this folder.
|
||||
|
||||
You may edit `user.go`, `user.util.go` or `user_test.go` to
|
||||
implement your API calls, helper functions and tests. The file `user.go`
|
||||
is only generated the first time, and will not be overwritten if it exists.
|
||||
*/
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"time"
|
||||
)
|
||||
|
||||
type (
|
||||
// Users -
|
||||
User struct {
|
||||
ID uint64 `db:"id"`
|
||||
Username string `db:"username"`
|
||||
Meta interface{} `json:"-" db:"meta"`
|
||||
OrganisationID uint64 `db:"rel_organisation"`
|
||||
Password []byte `json:"-" db:"password"`
|
||||
CreatedAt time.Time `json:"created_at,omitempty" db:"created_at"`
|
||||
UpdatedAt *time.Time `json:"updated_at,omitempty" db:"updated_at"`
|
||||
SuspendedAt *time.Time `json:"suspended_at,omitempty" db:"suspended_at"`
|
||||
DeletedAt *time.Time `json:"deleted_at,omitempty" db:"deleted_at"`
|
||||
ID uint64 `db:"id"`
|
||||
Username string `db:"username"`
|
||||
Meta json.RawMessage `json:"-" db:"meta"`
|
||||
OrganisationID uint64 `db:"rel_organisation"`
|
||||
Password []byte `json:"-" db:"password"`
|
||||
CreatedAt time.Time `json:"created_at,omitempty" db:"created_at"`
|
||||
UpdatedAt *time.Time `json:"updated_at,omitempty" db:"updated_at"`
|
||||
SuspendedAt *time.Time `json:"suspended_at,omitempty" db:"suspended_at"`
|
||||
DeletedAt *time.Time `json:"deleted_at,omitempty" db:"deleted_at"`
|
||||
}
|
||||
|
||||
changed []string
|
||||
UserFilter struct {
|
||||
Query string
|
||||
MembersOfChannel uint64
|
||||
}
|
||||
)
|
||||
|
||||
// New constructs a new instance of User
|
||||
func (User) New() *User {
|
||||
return &User{}
|
||||
func (u *User) Valid() bool {
|
||||
return u.ID > 0 && u.SuspendedAt == nil && u.DeletedAt == nil
|
||||
}
|
||||
|
||||
// Get the value of ID
|
||||
func (u *User) GetID() uint64 {
|
||||
func (u *User) Identity() uint64 {
|
||||
return u.ID
|
||||
}
|
||||
|
||||
// Set the value of ID
|
||||
func (u *User) SetID(value uint64) *User {
|
||||
if u.ID != value {
|
||||
u.changed = append(u.changed, "ID")
|
||||
u.ID = value
|
||||
}
|
||||
return u
|
||||
}
|
||||
|
||||
// Get the value of Username
|
||||
func (u *User) GetUsername() string {
|
||||
return u.Username
|
||||
}
|
||||
|
||||
// Set the value of Username
|
||||
func (u *User) SetUsername(value string) *User {
|
||||
if u.Username != value {
|
||||
u.changed = append(u.changed, "Username")
|
||||
u.Username = value
|
||||
}
|
||||
return u
|
||||
}
|
||||
|
||||
// Get the value of Meta
|
||||
func (u *User) GetMeta() interface{} {
|
||||
return u.Meta
|
||||
}
|
||||
|
||||
// Set the value of Meta
|
||||
func (u *User) SetMeta(value interface{}) *User {
|
||||
if u.Meta != value {
|
||||
u.changed = append(u.changed, "Meta")
|
||||
u.Meta = value
|
||||
}
|
||||
return u
|
||||
}
|
||||
|
||||
// Get the value of OrganisationID
|
||||
func (u *User) GetOrganisationID() uint64 {
|
||||
return u.OrganisationID
|
||||
}
|
||||
|
||||
// Set the value of OrganisationID
|
||||
func (u *User) SetOrganisationID(value uint64) *User {
|
||||
if u.OrganisationID != value {
|
||||
u.changed = append(u.changed, "OrganisationID")
|
||||
u.OrganisationID = value
|
||||
}
|
||||
return u
|
||||
}
|
||||
|
||||
// Get the value of Password
|
||||
func (u *User) GetPassword() []byte {
|
||||
return u.Password
|
||||
}
|
||||
|
||||
// Set the value of Password
|
||||
func (u *User) SetPassword(value []byte) *User {
|
||||
u.changed = append(u.changed, "Password")
|
||||
u.Password = value
|
||||
return u
|
||||
}
|
||||
|
||||
// Get the value of CreatedAt
|
||||
func (u *User) GetCreatedAt() time.Time {
|
||||
return u.CreatedAt
|
||||
}
|
||||
|
||||
// Set the value of CreatedAt
|
||||
func (u *User) SetCreatedAt(value time.Time) *User {
|
||||
u.changed = append(u.changed, "CreatedAt")
|
||||
u.CreatedAt = value
|
||||
return u
|
||||
}
|
||||
|
||||
// Get the value of UpdatedAt
|
||||
func (u *User) GetUpdatedAt() *time.Time {
|
||||
return u.UpdatedAt
|
||||
}
|
||||
|
||||
// Set the value of UpdatedAt
|
||||
func (u *User) SetUpdatedAt(value *time.Time) *User {
|
||||
u.changed = append(u.changed, "UpdatedAt")
|
||||
u.UpdatedAt = value
|
||||
return u
|
||||
}
|
||||
|
||||
// Get the value of SuspendedAt
|
||||
func (u *User) GetSuspendedAt() *time.Time {
|
||||
return u.SuspendedAt
|
||||
}
|
||||
|
||||
// Set the value of SuspendedAt
|
||||
func (u *User) SetSuspendedAt(value *time.Time) *User {
|
||||
u.changed = append(u.changed, "SuspendedAt")
|
||||
u.SuspendedAt = value
|
||||
return u
|
||||
}
|
||||
|
||||
// Get the value of DeletedAt
|
||||
func (u *User) GetDeletedAt() *time.Time {
|
||||
return u.DeletedAt
|
||||
}
|
||||
|
||||
// Set the value of DeletedAt
|
||||
func (u *User) SetDeletedAt(value *time.Time) *User {
|
||||
u.changed = append(u.changed, "DeletedAt")
|
||||
u.DeletedAt = value
|
||||
return u
|
||||
}
|
||||
|
||||
// Changes returns the names of changed fields
|
||||
func (u *User) Changes() []string {
|
||||
return u.changed
|
||||
}
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
package types
|
||||
|
||||
func (u *User) Valid() bool {
|
||||
return u.ID > 0 && u.SuspendedAt == nil && u.DeletedAt == nil
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
package types
|
||||
|
||||
type (
|
||||
UserFilter struct {
|
||||
Query string
|
||||
MembersOfChannel uint64
|
||||
}
|
||||
)
|
||||
@@ -16,7 +16,7 @@ func (s *Session) channelJoin(ctx context.Context, p *incoming.ChannelJoin) erro
|
||||
// Telling all subscribers of the channel we're joining that we are joining.
|
||||
var chJoin = &outgoing.ChannelJoin{
|
||||
ID: p.ChannelID,
|
||||
UserID: uint64toa(auth.GetIdentityFromContext(ctx).GetID()),
|
||||
UserID: uint64toa(auth.GetIdentityFromContext(ctx).Identity()),
|
||||
}
|
||||
|
||||
// Send to all channel subscribers
|
||||
@@ -34,7 +34,7 @@ func (s *Session) channelPart(ctx context.Context, p *incoming.ChannelPart) erro
|
||||
// This payload will tell everyone that we're parting from ALL channels
|
||||
var chPart = &outgoing.ChannelPart{
|
||||
ID: p.ChannelID,
|
||||
UserID: uint64toa(auth.GetIdentityFromContext(ctx).GetID()),
|
||||
UserID: uint64toa(auth.GetIdentityFromContext(ctx).Identity()),
|
||||
}
|
||||
|
||||
s.sendToAllSubscribers(chPart, p.ChannelID)
|
||||
|
||||
@@ -62,11 +62,11 @@ func (ws Websocket) Open(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
session := store.Save(Session{}.New(r.Context(), conn))
|
||||
|
||||
session.sendToAll(&outgoing.Connected{UserID: uint64toa(identity.GetID())})
|
||||
session.sendToAll(&outgoing.Connected{UserID: uint64toa(identity.Identity())})
|
||||
|
||||
if err := session.Handle(); err != nil {
|
||||
// @todo: log error, because at this point we can't really write it to w
|
||||
}
|
||||
|
||||
session.sendToAll(&outgoing.Disconnected{UserID: uint64toa(identity.GetID())})
|
||||
session.sendToAll(&outgoing.Disconnected{UserID: uint64toa(identity.Identity())})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user