Skip to content

Commit 6c4e95a

Browse files
authored
Merge pull request #167 from case-framework/update-users-preferred-language
feat: add endpoint to update preferred language for users
2 parents 6ada766 + 303ec9d commit 6c4e95a

1 file changed

Lines changed: 32 additions & 0 deletions

File tree

services/participant-api/apihandlers/user-management.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ func (h *HttpEndpoints) AddUserManagementAPI(rg *gin.RouterGroup) {
3131
userGroup.Use(mw.GetAndValidateParticipantUserJWT(h.tokenSignKey, h.globalInfosDBConn))
3232
{
3333
userGroup.GET("/", h.getUser)
34+
35+
userGroup.PUT("/preferred-language", mw.RequirePayload(), h.updatePreferredLanguageHandl)
36+
3437
userGroup.POST("/profiles", mw.RequirePayload(), h.addNewProfileHandl)
3538
userGroup.PUT("/profiles", mw.RequirePayload(), h.updateProfileHandl)
3639
userGroup.POST("/profiles/remove", mw.RequirePayload(), h.removeProfileHandl)
@@ -66,6 +69,35 @@ func (h *HttpEndpoints) getUser(c *gin.Context) {
6669
c.JSON(http.StatusOK, gin.H{"user": user})
6770
}
6871

72+
func (h *HttpEndpoints) updatePreferredLanguageHandl(c *gin.Context) {
73+
token := c.MustGet("validatedToken").(*jwthandling.ParticipantUserClaims)
74+
75+
var req struct {
76+
NewLocale string `json:"newLocale"`
77+
}
78+
if err := c.ShouldBindJSON(&req); err != nil {
79+
slog.Error("failed to bind request", slog.String("error", err.Error()))
80+
c.JSON(http.StatusBadRequest, gin.H{"error": "cannot bind preferred language"})
81+
return
82+
}
83+
84+
if !umUtils.CheckLanguageCode(req.NewLocale) {
85+
slog.Error("invalid language code", slog.String("languageCode", req.NewLocale))
86+
c.JSON(http.StatusBadRequest, gin.H{"error": "invalid language code"})
87+
return
88+
}
89+
90+
update := bson.M{"$set": bson.M{"account.preferredLanguage": req.NewLocale}}
91+
if err := h.userDBConn.UpdateUser(token.InstanceID, token.Subject, update); err != nil {
92+
slog.Error("failed to update user", slog.String("error", err.Error()))
93+
c.JSON(http.StatusInternalServerError, gin.H{"error": "failed to update user"})
94+
return
95+
}
96+
97+
slog.Info("preferred language updated", slog.String("userID", token.Subject), slog.String("instanceID", token.InstanceID), slog.String("newLocale", req.NewLocale))
98+
c.JSON(http.StatusOK, gin.H{"message": "preferred language updated"})
99+
}
100+
69101
func (h *HttpEndpoints) addNewProfileHandl(c *gin.Context) {
70102
token := c.MustGet("validatedToken").(*jwthandling.ParticipantUserClaims)
71103

0 commit comments

Comments
 (0)