Merge pull request #3697 from modoboa/fix/simpleuser_update_profile

Added new route dedicated to user profile update.
This commit is contained in:
Antoine Nguyen
2025-08-27 13:28:47 +02:00
committed by GitHub
5 changed files with 44 additions and 4 deletions
+3
View File
@@ -6,6 +6,9 @@ export default {
getMe() {
return repository.get(`/${resource}/me/`)
},
updateMe(data) {
return repository.put(`/${resource}/me/`, data)
},
checkPassword(value) {
return repository.post(`/${resource}/me/password/`, { password: value })
},
+1 -1
View File
@@ -163,7 +163,7 @@ export const useAuthStore = defineStore('auth', () => {
}
async function updateAccount(data) {
return accountsApi.patch(authUser.value.pk, data).then((response) => {
return accountApi.updateMe(data).then((response) => {
const newAuthUser = { ...authUser.value, ...response.data }
delete newAuthUser.password
authUser.value = { ...newAuthUser }
+14
View File
@@ -398,6 +398,20 @@ class AccountMeSerializer(v1_serializers.AccountSerializer):
return [f"{p.content_type.app_label}.{p.codename}" for p in permissions]
class AccountMeUpdateSerializer(serializers.ModelSerializer):
"""Update serializer for connected user."""
class Meta:
model = core_models.User
fields = (
"first_name",
"last_name",
"language",
"phone_number",
"secondary_email",
)
class AccountSerializer(v1_serializers.AccountSerializer):
"""Add support for user resources."""
+12
View File
@@ -196,6 +196,18 @@ class AccountViewSetTestCase(ModoAPITestCase):
me = resp.json()
self.assertEqual(me["username"], "admin")
def test_update_me(self):
url = reverse("v2:account-me")
data = {
"first_name": "First name",
"secondary_email": "toto@iti.com",
"language": "fr",
}
resp = self.client.put(url, data, format="json")
self.assertEqual(resp.status_code, 200)
me = resp.json()
self.assertEqual(me["secondary_email"], data["secondary_email"])
def test_me_password(self, password_ko="Toto1234", password_ok="password"):
url = reverse("v2:account-check-me-password")
resp = self.client.post(url, {"password": password_ko}, format="json")
+14 -3
View File
@@ -48,11 +48,22 @@ def create_static_tokens(request):
class AccountViewSet(core_v1_viewsets.AccountViewSet):
"""Account viewset."""
@extend_schema(responses=admin_v2_serializers.AccountMeSerializer)
@action(methods=["get"], detail=False)
@extend_schema(
responses=admin_v2_serializers.AccountMeSerializer,
request=admin_v2_serializers.AccountMeUpdateSerializer,
)
@action(methods=["get", "put"], detail=False)
def me(self, request):
"""Return information about connected user."""
serializer = admin_v1_serializers.AccountSerializer(request.user)
if request.method == "PUT":
serializer = admin_v2_serializers.AccountMeUpdateSerializer(
data=request.data, instance=request.user
)
serializer.is_valid(raise_exception=True)
instance = serializer.save()
serializer = admin_v1_serializers.AccountSerializer(instance)
else:
serializer = admin_v1_serializers.AccountSerializer(request.user)
return response.Response(serializer.data)
@action(