refactor: move generate_random_color() to serializer, apply only if no color provided, return userId on user creation

This commit is contained in:
Chneemann 2025-03-31 20:18:30 +02:00
parent c80fdb2588
commit 34b7909f7e
3 changed files with 26 additions and 6 deletions

View file

@ -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)

View file

@ -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()

View file

@ -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()