From 49ffcf3717c045203af1eb96577fb30e25b082cb Mon Sep 17 00:00:00 2001 From: Denis Arh Date: Sat, 20 Oct 2018 00:59:03 +0200 Subject: [PATCH] Improve update message service --- sam/repository/message.go | 2 +- sam/service/message.go | 25 +++++++++++++++++-------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/sam/repository/message.go b/sam/repository/message.go index b20e96725..1206bfc5c 100644 --- a/sam/repository/message.go +++ b/sam/repository/message.go @@ -38,7 +38,7 @@ const ( rel_user, rel_channel, reply_to, - replies, + replies, created_at, updated_at, deleted_at diff --git a/sam/service/message.go b/sam/service/message.go index 2b37c442c..744fed3c2 100644 --- a/sam/service/message.go +++ b/sam/service/message.go @@ -163,24 +163,33 @@ func (svc *message) Create(mod *types.Message) (message *types.Message, err erro }) } -func (svc *message) Update(mod *types.Message) (*types.Message, error) { +func (svc *message) Update(mod *types.Message) (message *types.Message, err error) { // @todo get user from context var currentUserID uint64 = repository.Identity(svc.ctx) // @todo verify if current user can access & write to this channel _ = currentUserID - // @todo load current message + return message, svc.db.Transaction(func() (err error) { + original, err := svc.message.FindMessageByID(mod.ID) + if err != nil { + return err + } - // @todo verify ownership + if original.UserID != currentUserID { + return errors.New("Not an owner") + } - message, err := svc.message.UpdateMessage(mod) + // Allow message content to be changed, ignore everything else + original.Message = mod.Message - if err == nil { - return nil, err - } + message, err = svc.message.UpdateMessage(original) + if err == nil { + return err + } - return message, svc.sendEvent(message) + return svc.sendEvent(message) + }) } func (svc *message) Delete(ID uint64) error {