From 850d472445d6196ea76310516b1eef4639dfb940 Mon Sep 17 00:00:00 2001 From: Mo Tarbin Date: Fri, 6 Dec 2024 23:43:38 -0500 Subject: [PATCH] Assign default circle to user when leaving a circle --- internal/circle/handler.go | 1 + internal/circle/repo/repository.go | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/internal/circle/handler.go b/internal/circle/handler.go index c15d322..26e9172 100644 --- a/internal/circle/handler.go +++ b/internal/circle/handler.go @@ -191,6 +191,7 @@ func handleUserLeavingCircle(h *Handler, c *gin.Context, leavingUser *uModel.Use h.choreRepo.UpdateChores(c, userAssignedCircleChores) h.choreRepo.RemoveChoreAssigneeByCircleID(c, leavingUser.ID, leavingUser.CircleID) + h.circleRepo.AssignDefaultCircle(c, leavingUser.ID) return nil } diff --git a/internal/circle/repo/repository.go b/internal/circle/repo/repository.go index 712cc99..6dfe893 100644 --- a/internal/circle/repo/repository.go +++ b/internal/circle/repo/repository.go @@ -4,6 +4,7 @@ import ( "context" cModel "donetick.com/core/internal/circle/model" + uModel "donetick.com/core/internal/user/model" "gorm.io/gorm" ) @@ -115,3 +116,20 @@ func (r *CircleRepository) GetCircleAdmins(c context.Context, circleID int) ([]* } return circleAdmins, nil } + +func (r *CircleRepository) GetDefaultCircle(c context.Context, userID int) (*cModel.Circle, error) { + var circle cModel.Circle + if err := r.db.WithContext(c).Raw("SELECT circles.* FROM circles LEFT JOIN user_circles on circles.id = user_circles.circle_id WHERE user_circles.user_id = ? AND user_circles.role = 'admin'", userID).Scan(&circle).Error; err != nil { + return nil, err + } + return &circle, nil +} + +func (r *CircleRepository) AssignDefaultCircle(c context.Context, userID int) error { + defaultCircle, err := r.GetDefaultCircle(c, userID) + if err != nil { + return err + } + + return r.db.WithContext(c).Model(&uModel.User{}).Where("id = ?", userID).Update("circle_id", defaultCircle.ID).Error +}