Skip to content

Commit 642e9cc

Browse files
Merge pull request #13 from one-project-one-month/ft/cms1-6
Implement GET /me and PATCH /userProfileUpdate Routes . Conflict resolved
2 parents 0f53754 + f553bfd commit 642e9cc

File tree

5 files changed

+108
-2
lines changed

5 files changed

+108
-2
lines changed

backend/cms-sys/cmd/main.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ func main() {
6868
appLogger.WithError(err).Fatal("Failed to migrate database")
6969
return
7070
}
71+
7172
if err := utils.InitRedis(); err != nil {
7273
appLogger.Fatal("Failed to initialize Redis:", err)
7374
}
@@ -76,7 +77,7 @@ func main() {
7677
if err != nil {
7778
appLogger.WithError(err).Fatal("Failed to close Redis connection")
7879
}
79-
}()
80+
}()
8081
//if err := utils.InitJWTKeysFromVault(); err != nil {
8182
// log.Fatalf("Vault key init failed: %v", err)
8283
//}
@@ -91,7 +92,7 @@ func main() {
9192
healthChecker := utils.NewHealthChecker(dbConnection.DB, appLogger)
9293

9394
app := fiber.New(fiber.Config{
94-
AppName: "CMS Multi-Tenant System",
95+
AppName: "CMS Multi-Tenant System ",
9596
ErrorHandler: func(c *fiber.Ctx, err error) error {
9697
code := fiber.StatusInternalServerError
9798
var e *fiber.Error

backend/cms-sys/internal/handler/auth_handler.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55

66
"github.com/go-playground/validator/v10"
77
"github.com/gofiber/fiber/v2"
8+
"github.com/google/uuid"
89

910
"github.com/multi-tenants-cms-golang/cms-sys/internal/service"
1011
"github.com/multi-tenants-cms-golang/cms-sys/internal/types"
@@ -16,6 +17,8 @@ type AuthHandle interface {
1617
Register(c *fiber.Ctx) error
1718
Logout(c *fiber.Ctx) error
1819
Refresh(c *fiber.Ctx) error
20+
GetMe(c *fiber.Ctx) error
21+
UpdateUserProfile(c *fiber.Ctx) error
1922
}
2023

2124
type Handler struct {
@@ -115,3 +118,47 @@ func (h *Handler) Refresh(c *fiber.Ctx) error {
115118

116119
return utils.SuccessResponse(c, "Token refreshed successfully", tokenResponse)
117120
}
121+
122+
func (h *Handler) GetMe(c *fiber.Ctx) error {
123+
var req types.GetMeRequest
124+
if err := c.BodyParser(&req); err != nil {
125+
return utils.BadRequestResponse(c, "Invalid request body", err.Error())
126+
}
127+
128+
if err := h.validator.Struct(&req); err != nil {
129+
return utils.BadRequestResponse(c, "Validation failed", err.Error())
130+
}
131+
132+
profileResponse, err := h.service.GetMe(req)
133+
134+
if err != nil {
135+
return utils.UnauthorizedResponse(c, err.Error())
136+
}
137+
138+
return utils.SuccessResponse(c, "Get User Information successfully", profileResponse)
139+
}
140+
141+
func (h *Handler) UpdateUserProfile(c *fiber.Ctx) error {
142+
stringId := c.Params("id")
143+
144+
id, err := uuid.Parse(stringId)
145+
146+
if err != nil {
147+
return utils.BadRequestResponse(c, "The provided ID is not a valid UUID", err.Error())
148+
}
149+
var req types.UserUpdateRequest
150+
if err := c.BodyParser(&req); err != nil {
151+
return utils.BadRequestResponse(c, "Invalid request body", err.Error())
152+
}
153+
if err := h.validator.Struct(&req); err != nil {
154+
return utils.BadRequestResponse(c, "Validation failed!", err.Error())
155+
}
156+
157+
updatedProfileResponse, err := h.service.UpdateUserProfile(id, req)
158+
159+
if err != nil {
160+
return utils.InternalServerErrorResponse(c, "Failed to update user profile", err.Error())
161+
}
162+
return utils.SuccessResponse(c, "User profile updated", updatedProfileResponse)
163+
164+
}

backend/cms-sys/internal/routes/auth_route.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,6 @@ func SetupRoutes(app *fiber.App, handler handler.AuthHandle) {
1111
auth.Post("/register", handler.Register)
1212
auth.Post("/logout", handler.Logout)
1313
auth.Post("/refresh", handler.Refresh)
14+
auth.Post("/me", handler.GetMe)
15+
auth.Put("/profile/:id", handler.UpdateUserProfile)
1416
}

backend/cms-sys/internal/service/auth_service.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ type AuthService interface {
1515
Register(req *types.RegisterRequest) (*types.AuthResponse, error)
1616
RefreshToken(refreshToken string) (*types.TokenResponse, error)
1717
GetUserProfile(userID uuid.UUID) (*types.UserResponse, error)
18+
GetMe(req types.GetMeRequest) (*types.UserResponse, error)
19+
UpdateUserProfile(id uuid.UUID, req types.UserUpdateRequest) (*types.UserResponse, error)
1820
Logout(accessToken, refreshToken string) error
1921
}
2022

@@ -196,6 +198,52 @@ func (s *Service) GetUserProfile(userID uuid.UUID) (*types.UserResponse, error)
196198
}, nil
197199
}
198200

201+
202+
func (s *Service) GetMe(req types.GetMeRequest) (*types.UserResponse, error) {
203+
204+
user, err := s.repo.GetUserByEmail(req.Email)
205+
206+
if err != nil {
207+
s.log.WithError(err).Error("Failed to get user profile")
208+
return nil, errors.New("user not found")
209+
}
210+
211+
return &types.UserResponse{
212+
ID: user.CMSUserID,
213+
Name: user.CMSUserName,
214+
Email: user.CMSUserEmail,
215+
Role: user.CMSUserRole,
216+
Verified: user.Verified,
217+
CreatedAt: user.CreatedAt,
218+
UpdatedAt: user.UpdatedAt,
219+
}, nil
220+
}
221+
222+
func (s *Service) UpdateUserProfile(id uuid.UUID, req types.UserUpdateRequest) (*types.UserResponse, error) {
223+
224+
user, err := s.repo.GetUserByID(id)
225+
if err != nil {
226+
s.log.WithError(err).Error("Failed to get user profile with id ", id)
227+
return nil, errors.New("user not found")
228+
}
229+
230+
user.CMSUserName = req.Name
231+
if err := s.repo.UpdateUser(user); err != nil {
232+
s.log.WithError(err).Error("Failed to update user profile")
233+
return nil, errors.New("failed to update user profile")
234+
}
235+
236+
return &types.UserResponse{
237+
ID: user.CMSUserID,
238+
Name: user.CMSUserName,
239+
Email: user.CMSUserEmail,
240+
Role: user.CMSUserRole,
241+
Verified: user.Verified,
242+
CreatedAt: user.CreatedAt,
243+
UpdatedAt: user.UpdatedAt,
244+
}, nil
245+
246+
199247
func (s *Service) Logout(accessToken, refreshToken string) error {
200248
if accessToken != "" {
201249
accessClaims, err := utils.ValidateToken(accessToken)

backend/cms-sys/internal/types/request.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,11 @@ type OwnerUpdateRequest struct {
2626
Name string `json:"name" validate:"required,min=2"`
2727
NameSpace string `json:"namespace" validate:"required,min=3"` // TODO : Gotta remove namespace later
2828
}
29+
30+
type GetMeRequest struct {
31+
Email string `json:"email" validate:"required,email"`
32+
}
33+
34+
type UserUpdateRequest struct {
35+
Name string `json:"name" validate:"required,min=2"`
36+
}

0 commit comments

Comments
 (0)