From 390409ed6ae10be23605936f2f4ed83a96a12740 Mon Sep 17 00:00:00 2001 From: Denis Arh Date: Tue, 27 Nov 2018 06:10:48 +0100 Subject: [PATCH] Move logic from repo to store, fix module-check condition --- crm/repository/page.go | 18 ------------------ crm/service/page.go | 35 +++++++++++++++++++++++++++++++---- 2 files changed, 31 insertions(+), 22 deletions(-) diff --git a/crm/repository/page.go b/crm/repository/page.go index 37081d8d7..2c3b4082b 100644 --- a/crm/repository/page.go +++ b/crm/repository/page.go @@ -114,15 +114,6 @@ func (r *page) Create(item *types.Page) (*types.Page, error) { *page = *item page.ID = factory.Sonyflake.NextID() - if page.ModuleID > 0 { - if check, err := r.FindByModuleID(page.ModuleID); err != nil { - return nil, err - } else { - if check.ID > 0 { - return nil, errors.New("Page for module already exists") - } - } - } return page, r.db().Insert("crm_page", page) } @@ -130,15 +121,6 @@ func (r *page) Update(page *types.Page) (*types.Page, error) { if page.ID == 0 { return nil, errors.New("Error when savig page, invalid ID") } - if page.ModuleID > 0 { - if check, err := r.FindByModuleID(page.ModuleID); err != nil { - return nil, err - } else { - if check.ID != page.ID { - return nil, errors.New("Page for this module already exists") - } - } - } return page, r.db().Replace("crm_page", page) } diff --git a/crm/service/page.go b/crm/service/page.go index fcc817e9f..75b40a7f6 100644 --- a/crm/service/page.go +++ b/crm/service/page.go @@ -2,7 +2,9 @@ package service import ( "context" + "errors" + "github.com/davecgh/go-spew/spew" "github.com/titpetric/factory" "github.com/crusttech/crust/crm/repository" @@ -100,12 +102,37 @@ func (s *page) Reorder(selfID uint64, pageIDs []uint64) error { return s.repository.Reorder(selfID, pageIDs) } -func (s *page) Create(mod *types.Page) (*types.Page, error) { - return s.repository.Create(mod) +func (s *page) Create(mod *types.Page) (p *types.Page, err error) { + return p, s.db.Transaction(func() (err error) { + if mod.ModuleID > 0 { + // @todo check if module exists! + if p, err = s.repository.FindByModuleID(mod.ModuleID); err != nil { + return err + } else if p.ID > 0 { + return errors.New("Page for module already exists") + } + } + + p, err = s.repository.Create(mod) + return + }) } -func (s *page) Update(mod *types.Page) (*types.Page, error) { - return s.repository.Update(mod) +func (s *page) Update(mod *types.Page) (p *types.Page, err error) { + return p, s.db.Transaction(func() (err error) { + if mod.ModuleID > 0 { + // @todo check if module exists! + if p, err = s.repository.FindByModuleID(mod.ModuleID); err != nil { + return err + } else if p.ID > 0 && mod.ID != p.ID { + spew.Dump(mod, p) + return errors.New("Page for module already exists") + } + } + + p, err = s.repository.Update(mod) + return + }) } func (s *page) DeleteByID(id uint64) error {