From 34b7909f7e853b2327d43012e03c824b596e6b4b Mon Sep 17 00:00:00 2001 From: Chneemann Date: Mon, 31 Mar 2025 20:18:30 +0200 Subject: [PATCH] refactor: move generate_random_color() to serializer, apply only if no color provided, return userId on user creation --- user_app/models.py | 7 ++----- user_app/serializers.py | 11 ++++++++++- user_app/views.py | 14 ++++++++++++++ 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/user_app/models.py b/user_app/models.py index 44ca531..740f44b 100644 --- a/user_app/models.py +++ b/user_app/models.py @@ -1,13 +1,10 @@ -import uuid, random +import uuid from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin, Group, Permission from django.db import models def generate_uuid_without_dashes(): return uuid.uuid4().hex -def generate_random_color(): - return "#" + "".join(random.choices("0123456789ABCDEF", k=6)) - class UserManager(BaseUserManager): def create_user(self, email, first_name, password=None): if not email: @@ -37,7 +34,7 @@ class User(AbstractBaseUser, PermissionsMixin): email = models.EmailField(unique=True) phone = models.CharField(max_length=20, blank=True, null=True) initials = models.CharField(max_length=10, blank=True) - color = models.CharField(max_length=20, blank=True, default=generate_random_color) + color = models.CharField(max_length=20, blank=True) is_online = models.BooleanField(default=False) is_contact_only = models.BooleanField(default=False) last_login = models.DateTimeField(blank=True, null=True) diff --git a/user_app/serializers.py b/user_app/serializers.py index 98192a9..1f56580 100644 --- a/user_app/serializers.py +++ b/user_app/serializers.py @@ -1,13 +1,22 @@ +import random from rest_framework import serializers, viewsets from .models import User from djangorestframework_camel_case.parser import CamelCaseJSONParser from djangorestframework_camel_case.render import CamelCaseJSONRenderer +def generate_random_color(): + return "#" + "".join(random.choices("0123456789ABCDEF", k=6)) + class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = ['id', 'first_name', 'last_name', 'email', 'phone', 'initials', 'color', 'is_online', 'is_contact_only', 'last_login'] - + + def create(self, validated_data): + if 'color' not in validated_data: + validated_data['color'] = generate_random_color() + return super().create(validated_data) + class UserViewSet(viewsets.ModelViewSet): serializer_class = UserSerializer queryset = User.objects.all() diff --git a/user_app/views.py b/user_app/views.py index 0f8fc7c..416474c 100644 --- a/user_app/views.py +++ b/user_app/views.py @@ -25,6 +25,20 @@ class UserViewSet(viewsets.ModelViewSet): serializer = self.get_serializer(user) return Response(serializer.data) + def create(self, request, *args, **kwargs): + serializer = self.get_serializer(data=request.data) + if serializer.is_valid(): + try: + user = serializer.save() + cache.delete(f"user_{user.id}") + return Response( + {"id": user.id, **serializer.data}, + status=status.HTTP_201_CREATED + ) + except Exception as e: + return Response({'error': str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + def destroy(self, request, *args, **kwargs): user = self.get_object() user.delete()