@@ -9,13 +9,15 @@ import (
99 "github.com/multi-tenants-cms-golang/cms-sys/internal/types"
1010 "github.com/multi-tenants-cms-golang/cms-sys/pkg/utils"
1111 "github.com/sirupsen/logrus"
12+ "gorm.io/gorm"
1213)
1314
1415type OwnerService interface {
1516 Create (req types.OwnerCreateRequest ) (* types.OwnerResponse , error )
1617 Update (id string , req types.OwnerUpdateRequest ) (* types.OwnerResponse , error )
17- GetAllOwners () ([]types.CMSUser , error )
18+ GetAllOwners () ([]types.OwnerResponse , error )
1819 GetOwnerByID (id string ) (* types.OwnerResponse , error )
20+ BulkDeleteOwners (ids []string , force bool ) error
1921}
2022
2123type OwnerServiceImpl struct {
@@ -101,8 +103,32 @@ func (os *OwnerServiceImpl) Update(id string, req types.OwnerUpdateRequest) (*ty
101103 }, nil
102104}
103105
104- func (os * OwnerServiceImpl ) GetAllOwners () ([]types.CMSUser , error ) {
105- return os .repo .GetAllOwners ()
106+ func (os * OwnerServiceImpl ) GetAllOwners () ([]types.OwnerResponse , error ) {
107+ owners , err := os .repo .GetAllOwners ()
108+ if err != nil {
109+ os .log .WithError (err ).Error ("Failed to get all owners" )
110+ return nil , errors .New ("failed to retrieve owners" )
111+ }
112+
113+ responses := make ([]types.OwnerResponse , len (owners ))
114+
115+ for i , owner := range owners {
116+ var nameSpace string
117+ if owner .CMSNameSpace != nil {
118+ nameSpace = * owner .CMSNameSpace
119+ }
120+
121+ responses [i ] = types.OwnerResponse {
122+ ID : owner .CMSUserID ,
123+ Name : owner .CMSUserName ,
124+ Email : owner .CMSUserEmail ,
125+ Role : owner .CMSUserRole ,
126+ NameSpace : nameSpace ,
127+ Verified : owner .Verified ,
128+ }
129+ }
130+
131+ return responses , nil
106132}
107133
108134func (os * OwnerServiceImpl ) GetOwnerByID (id string ) (* types.OwnerResponse , error ) {
@@ -112,12 +138,47 @@ func (os *OwnerServiceImpl) GetOwnerByID(id string) (*types.OwnerResponse, error
112138 return nil , errors .New ("failed to fetch owner" )
113139 }
114140
141+ var nameSpace string
142+ if owner .CMSNameSpace != nil {
143+ nameSpace = * owner .CMSNameSpace
144+ }
145+
115146 return & types.OwnerResponse {
116147 ID : owner .CMSUserID ,
117148 Name : owner .CMSUserName ,
118149 Email : owner .CMSUserEmail ,
119150 Role : owner .CMSUserRole ,
120- NameSpace : * owner . CMSNameSpace ,
151+ NameSpace : nameSpace ,
121152 Verified : owner .Verified ,
122153 }, nil
123154}
155+
156+ func (os * OwnerServiceImpl ) BulkDeleteOwners (ids []string , force bool ) error {
157+ for _ , id := range ids {
158+ owner , err := os .repo .GetById (id )
159+ if err != nil {
160+ if errors .Is (err , gorm .ErrRecordNotFound ) {
161+ return errors .New ("owner not found: " + id )
162+ }
163+ return err
164+ }
165+
166+ if ! force {
167+ hasAssociations := os .repo .OwnerHasAssociations (id )
168+ if hasAssociations {
169+ return errors .New ("owner " + owner .CMSUserName + " has associated records" )
170+ }
171+ }
172+
173+ if force {
174+ if err := os .repo .ForceDeleteOwner (id ); err != nil {
175+ return err
176+ }
177+ } else {
178+ if err := os .repo .DeleteOwnerByID (id ); err != nil {
179+ return err
180+ }
181+ }
182+ }
183+ return nil
184+ }
0 commit comments