@@ -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+
69101func (h * HttpEndpoints ) addNewProfileHandl (c * gin.Context ) {
70102 token := c .MustGet ("validatedToken" ).(* jwthandling.ParticipantUserClaims )
71103
0 commit comments