diff --git a/sam/rest/channel.go b/sam/rest/channel.go index 4bb101632..f3b5075f8 100644 --- a/sam/rest/channel.go +++ b/sam/rest/channel.go @@ -4,6 +4,7 @@ import ( "context" "github.com/crusttech/crust/sam/rest/request" + "github.com/crusttech/crust/sam/service" "github.com/crusttech/crust/sam/types" "github.com/pkg/errors" ) @@ -12,25 +13,12 @@ var _ = errors.Wrap type ( Channel struct { - svc channelService - } - - channelService interface { - FindByID(ctx context.Context, channelID uint64) (*types.Channel, error) - Find(ctx context.Context, filter *types.ChannelFilter) ([]*types.Channel, error) - - Create(ctx context.Context, channel *types.Channel) (*types.Channel, error) - Update(ctx context.Context, channel *types.Channel) (*types.Channel, error) - - deleter - archiver + svc service.ChannelService } ) -func (Channel) New(channelSvc channelService) *Channel { - var ctrl = &Channel{} - ctrl.svc = channelSvc - return ctrl +func (Channel) New(channel service.ChannelService) *Channel { + return &Channel{channel} } func (ctrl *Channel) Create(ctx context.Context, r *request.ChannelCreate) (interface{}, error) { diff --git a/sam/rest/message.go b/sam/rest/message.go index 96c53aea5..f8f48c8e9 100644 --- a/sam/rest/message.go +++ b/sam/rest/message.go @@ -3,6 +3,7 @@ package rest import ( "context" "github.com/crusttech/crust/sam/rest/request" + "github.com/crusttech/crust/sam/service" "github.com/crusttech/crust/sam/types" "github.com/pkg/errors" ) @@ -11,35 +12,12 @@ var _ = errors.Wrap type ( Message struct { - svc messageService - } - - messageService interface { - Find(ctx context.Context, filter *types.MessageFilter) ([]*types.Message, error) - - Create(ctx context.Context, messages *types.Message) (*types.Message, error) - Update(ctx context.Context, messages *types.Message) (*types.Message, error) - - React(ctx context.Context, messageID uint64, reaction string) error - Unreact(ctx context.Context, messageID uint64, reaction string) error - - Pin(ctx context.Context, messageID uint64) error - Unpin(ctx context.Context, messageID uint64) error - - Flag(ctx context.Context, messageID uint64) error - Unflag(ctx context.Context, messageID uint64) error - - Attach(ctx context.Context) (*types.Attachment, error) - Detach(ctx context.Context, messageID uint64) error - - deleter + svc service.MessageService } ) -func (Message) New(messageSvc messageService) *Message { - var ctrl = &Message{} - ctrl.svc = messageSvc - return ctrl +func (Message) New(message service.MessageService) *Message { + return &Message{message} } func (ctrl *Message) Create(ctx context.Context, r *request.MessageCreate) (interface{}, error) { diff --git a/sam/rest/organisation.go b/sam/rest/organisation.go index 35521937d..94916e669 100644 --- a/sam/rest/organisation.go +++ b/sam/rest/organisation.go @@ -3,6 +3,7 @@ package rest import ( "context" "github.com/crusttech/crust/sam/rest/request" + "github.com/crusttech/crust/sam/service" "github.com/crusttech/crust/sam/types" "github.com/pkg/errors" ) @@ -11,25 +12,12 @@ var _ = errors.Wrap type ( Organisation struct { - svc organisationService - } - - organisationService interface { - FindByID(ctx context.Context, organisationID uint64) (*types.Organisation, error) - Find(ctx context.Context, filter *types.OrganisationFilter) ([]*types.Organisation, error) - - Create(ctx context.Context, organisation *types.Organisation) (*types.Organisation, error) - Update(ctx context.Context, organisation *types.Organisation) (*types.Organisation, error) - - deleter - archiver + svc service.OrganisationService } ) -func (Organisation) New(organisationSvc organisationService) *Organisation { - var ctrl = &Organisation{} - ctrl.svc = organisationSvc - return ctrl +func (Organisation) New(organisation service.OrganisationService) *Organisation { + return &Organisation{organisation} } func (ctrl *Organisation) Read(ctx context.Context, r *request.OrganisationRead) (interface{}, error) { diff --git a/sam/rest/team.go b/sam/rest/team.go index fac43971c..f24a1c3e4 100644 --- a/sam/rest/team.go +++ b/sam/rest/team.go @@ -3,6 +3,7 @@ package rest import ( "context" "github.com/crusttech/crust/sam/rest/request" + "github.com/crusttech/crust/sam/service" "github.com/crusttech/crust/sam/types" "github.com/pkg/errors" ) @@ -11,27 +12,12 @@ var _ = errors.Wrap type ( Team struct { - svc teamService - } - - teamService interface { - FindByID(ctx context.Context, teamID uint64) (*types.Team, error) - Find(ctx context.Context, filter *types.TeamFilter) ([]*types.Team, error) - - Create(ctx context.Context, team *types.Team) (*types.Team, error) - Update(ctx context.Context, team *types.Team) (*types.Team, error) - Merge(ctx context.Context, teamID, targetTeamID uint64) error - Move(ctx context.Context, teamID, organisationID uint64) error - - deleter - archiver + svc service.TeamService } ) -func (Team) New(teamSvc teamService) *Team { - var ctrl = &Team{} - ctrl.svc = teamSvc - return ctrl +func (Team) New(team service.TeamService) *Team { + return &Team{team} } func (ctrl *Team) Read(ctx context.Context, r *request.TeamRead) (interface{}, error) { diff --git a/sam/rest/user.go b/sam/rest/user.go index 6aecf038d..fc6b36f3c 100644 --- a/sam/rest/user.go +++ b/sam/rest/user.go @@ -4,6 +4,7 @@ import ( "context" "github.com/crusttech/crust/sam/rest/request" + "github.com/crusttech/crust/sam/service" "github.com/crusttech/crust/sam/types" "github.com/pkg/errors" ) @@ -13,24 +14,16 @@ var _ = errors.Wrap type ( User struct { svc struct { - user userService - message userMessageService + user service.UserService + message service.MessageService } } - - userService interface { - Find(ctx context.Context, filter *types.UserFilter) ([]*types.User, error) - } - - userMessageService interface { - Direct(ctx context.Context, recipientID uint64, in *types.Message) (out *types.Message, err error) - } ) -func (User) New(userSvc userService, msgSvc userMessageService) *User { - var ctrl = &User{} - ctrl.svc.user = userSvc - ctrl.svc.message = msgSvc +func (User) New(user service.UserService, message service.MessageService) *User { + ctrl := &User{} + ctrl.svc.user = user + ctrl.svc.message = message return ctrl } diff --git a/sam/service/channel.go b/sam/service/channel.go index c074ca0ea..d1b39cfd7 100644 --- a/sam/service/channel.go +++ b/sam/service/channel.go @@ -18,6 +18,17 @@ type ( //} } + ChannelService interface { + FindByID(ctx context.Context, channelID uint64) (*types.Channel, error) + Find(ctx context.Context, filter *types.ChannelFilter) ([]*types.Channel, error) + + Create(ctx context.Context, channel *types.Channel) (*types.Channel, error) + Update(ctx context.Context, channel *types.Channel) (*types.Channel, error) + + deleter + archiver + } + channelRepository interface { repository.Transactionable repository.Channel @@ -371,3 +382,5 @@ func (svc channel) makeSystemMessage(ch *types.Channel, format string, a ...inte // // return err != nil && user.Valid() //} + +var _ ChannelService = &channel{} diff --git a/sam/rest/interfaces.go b/sam/service/interfaces.go similarity index 95% rename from sam/rest/interfaces.go rename to sam/service/interfaces.go index 34cdb2d13..a856ca682 100644 --- a/sam/rest/interfaces.go +++ b/sam/service/interfaces.go @@ -1,4 +1,4 @@ -package rest +package service import ( "context" diff --git a/sam/service/message.go b/sam/service/message.go index 78a23f894..6b44abd6f 100644 --- a/sam/service/message.go +++ b/sam/service/message.go @@ -13,6 +13,29 @@ type ( rpo messageRepository } + MessageService interface { + Find(ctx context.Context, filter *types.MessageFilter) ([]*types.Message, error) + + Create(ctx context.Context, messages *types.Message) (*types.Message, error) + Update(ctx context.Context, messages *types.Message) (*types.Message, error) + + React(ctx context.Context, messageID uint64, reaction string) error + Unreact(ctx context.Context, messageID uint64, reaction string) error + + Pin(ctx context.Context, messageID uint64) error + Unpin(ctx context.Context, messageID uint64) error + + Flag(ctx context.Context, messageID uint64) error + Unflag(ctx context.Context, messageID uint64) error + + Attach(ctx context.Context) (*types.Attachment, error) + Detach(ctx context.Context, messageID uint64) error + + Direct(ctx context.Context, recipientID uint64, in *types.Message) (out *types.Message, err error) + + deleter + } + messageRepository interface { repository.Transactionable repository.Message @@ -225,3 +248,5 @@ func (svc message) Detach(ctx context.Context, attachmentID uint64) error { return svc.rpo.DeleteAttachmentByID(attachmentID) } + +var _ MessageService = &message{} diff --git a/sam/service/organisation.go b/sam/service/organisation.go index 317644162..59bcef36e 100644 --- a/sam/service/organisation.go +++ b/sam/service/organisation.go @@ -11,6 +11,17 @@ type ( rpo organisationRepository } + OrganisationService interface { + FindByID(ctx context.Context, organisationID uint64) (*types.Organisation, error) + Find(ctx context.Context, filter *types.OrganisationFilter) ([]*types.Organisation, error) + + Create(ctx context.Context, organisation *types.Organisation) (*types.Organisation, error) + Update(ctx context.Context, organisation *types.Organisation) (*types.Organisation, error) + + deleter + archiver + } + organisationRepository interface { repository.Transactionable repository.Organisation @@ -66,3 +77,5 @@ func (svc organisation) Unarchive(ctx context.Context, id uint64) error { // @todo: permissions check if current user can unarchive organisation return svc.rpo.UnarchiveOrganisationByID(id) } + +var _ OrganisationService = &organisation{} diff --git a/sam/service/team.go b/sam/service/team.go index 6ca2d8c85..90f7def73 100644 --- a/sam/service/team.go +++ b/sam/service/team.go @@ -11,6 +11,19 @@ type ( rpo teamRepository } + TeamService interface { + FindByID(ctx context.Context, teamID uint64) (*types.Team, error) + Find(ctx context.Context, filter *types.TeamFilter) ([]*types.Team, error) + + Create(ctx context.Context, team *types.Team) (*types.Team, error) + Update(ctx context.Context, team *types.Team) (*types.Team, error) + Merge(ctx context.Context, teamID, targetTeamID uint64) error + Move(ctx context.Context, teamID, organisationID uint64) error + + deleter + archiver + } + teamRepository interface { repository.Transactionable repository.Team @@ -74,3 +87,5 @@ func (svc team) Move(ctx context.Context, id, targetOrganisationID uint64) error // @todo: permission check if current user can move team to another organisation return svc.rpo.MoveTeamByID(id, targetOrganisationID) } + +var _ TeamService = &team{} diff --git a/sam/service/user.go b/sam/service/user.go index 5fea16479..1b34a9127 100644 --- a/sam/service/user.go +++ b/sam/service/user.go @@ -16,6 +16,10 @@ type ( rpo userRepository } + UserService interface { + Find(ctx context.Context, filter *types.UserFilter) ([]*types.User, error) + } + userRepository interface { repository.Transactionable repository.Contextable @@ -88,3 +92,5 @@ func (svc user) Unsuspend(ctx context.Context, id uint64) error { // @todo: notify users that user has been unsuspended return svc.rpo.UnsuspendUserByID(id) } + +var _ UserService = &user{}