@@ -12,6 +12,9 @@ type OwnerRepository interface {
1212 GetById (id string ) (* types.CMSUser , error )
1313 UpdateOwner (owner * types.CMSUser ) error
1414 GetOwnerByID (id string ) (* types.CMSUser , error )
15+ DeleteOwnerByID (id string ) error
16+ OwnerHasAssociations (id string ) bool
17+ ForceDeleteOwner (id string ) error
1518}
1619
1720type OwnerRepositoryImpl struct {
@@ -52,6 +55,7 @@ func (r *OwnerRepositoryImpl) GetAllOwners() ([]types.CMSUser, error) {
5255 return nil , err
5356 }
5457 return owners , nil
58+ }
5559
5660func (r * OwnerRepositoryImpl ) GetOwnerByID (id string ) (* types.CMSUser , error ) {
5761 var owner types.CMSUser
@@ -60,3 +64,82 @@ func (r *OwnerRepositoryImpl) GetOwnerByID(id string) (*types.CMSUser, error) {
6064 Find (& owner ).Error
6165 return & owner , err
6266}
67+
68+ func (r * OwnerRepositoryImpl ) DeleteOwnerByID (id string ) error {
69+ if err := r .db .Where ("cms_user_id = ?" , id ).Delete (& types.CMSUser {}).Error ; err != nil {
70+ r .logger .WithError (err ).Error ("Failed to delete owner by ID" )
71+ return err
72+ }
73+ return nil
74+ }
75+
76+ func (r * OwnerRepositoryImpl ) OwnerHasAssociations (id string ) bool {
77+ var count int64
78+
79+ rawSQL := `
80+ SELECT 1 FROM cms_page WHERE owner_id = ? LIMIT 1
81+ UNION ALL
82+ SELECT 1 FROM cms_page_request WHERE owner_id = ? LIMIT 1
83+ UNION ALL
84+ SELECT 1 FROM cms_cus_purchase WHERE cms_cus_id = ? LIMIT 1
85+ UNION ALL
86+ SELECT 1 FROM user_page_request WHERE user_id = ? LIMIT 1
87+ LIMIT 1
88+ `
89+ if err := r .db .Raw (rawSQL , id , id , id , id ).Scan (& count ).Error ; err != nil {
90+ r .logger .WithError (err ).Error ("Failed to check owner associations" )
91+ return true
92+ }
93+ return count > 0
94+ }
95+
96+ func (r * OwnerRepositoryImpl ) ForceDeleteOwner (id string ) error {
97+ return r .db .Transaction (func (tx * gorm.DB ) error {
98+ // Delete Pages owned by user
99+ if err := tx .Where ("owner_id = ?" , id ).Delete (& types.Page {}).Error ; err != nil {
100+ r .logger .WithError (err ).Error ("Failed to delete owned pages" )
101+ return err
102+ }
103+
104+ // Set Null staff publication
105+ if err := tx .Model (& types.Page {}).Where ("published_by_staff_id = ?" , id ).
106+ Update ("published_by_staff_id" , nil ).Error ; err != nil {
107+ r .logger .WithError (err ).Error ("Failed to nullify published_by_staff_id" )
108+ return err
109+ }
110+
111+ // Delete Page Requests
112+ if err := tx .Where ("owner_id = ?" , id ).Delete (& types.PageRequest {}).Error ; err != nil {
113+ r .logger .WithError (err ).Error ("Failed to delete page requests" )
114+ return err
115+ }
116+
117+ // Set Null admin from page requests
118+ if err := tx .Model (& types.PageRequest {}).Where ("admin_id = ?" , id ).
119+ Update ("admin_id" , nil ).Error ; err != nil {
120+ r .logger .WithError (err ).Error ("Failed to nullify admin_id" )
121+ return err
122+ }
123+
124+ // Delete purchases
125+ if err := tx .Where ("cms_cus_id = ?" , id ).Delete (& types.CMSCusPurchase {}).Error ; err != nil {
126+ r .logger .WithError (err ).Error ("Failed to delete purchases" )
127+ return err
128+ }
129+
130+ // Delete user_page_request
131+ if err := tx .Where ("user_id = ?" , id ).Delete (& types.UserPageRequest {}).Error ; err != nil {
132+ r .logger .WithError (err ).Error ("Failed to delete user page requests" )
133+ return err
134+ }
135+
136+ // Delete the user
137+ if err := tx .Where ("cms_user_id = ?" , id ).Delete (& types.CMSUser {}).Error ; err != nil {
138+ r .logger .WithError (err ).Error ("Failed to delete CMS user" )
139+ return err
140+ }
141+
142+ return nil
143+ })
144+ }
145+
0 commit comments