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.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin, Group, Permission
from django.db import models from django.db import models
def generate_uuid_without_dashes(): def generate_uuid_without_dashes():
return uuid.uuid4().hex return uuid.uuid4().hex
def generate_random_color():
return "#" + "".join(random.choices("0123456789ABCDEF", k=6))
class UserManager(BaseUserManager): class UserManager(BaseUserManager):
def create_user(self, email, first_name, password=None): def create_user(self, email, first_name, password=None):
if not email: if not email:
@ -37,7 +34,7 @@ class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(unique=True) email = models.EmailField(unique=True)
phone = models.CharField(max_length=20, blank=True, null=True) phone = models.CharField(max_length=20, blank=True, null=True)
initials = models.CharField(max_length=10, blank=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_online = models.BooleanField(default=False)
is_contact_only = models.BooleanField(default=False) is_contact_only = models.BooleanField(default=False)
last_login = models.DateTimeField(blank=True, null=True) last_login = models.DateTimeField(blank=True, null=True)

View file

@ -1,13 +1,22 @@
import random
from rest_framework import serializers, viewsets from rest_framework import serializers, viewsets
from .models import User from .models import User
from djangorestframework_camel_case.parser import CamelCaseJSONParser from djangorestframework_camel_case.parser import CamelCaseJSONParser
from djangorestframework_camel_case.render import CamelCaseJSONRenderer from djangorestframework_camel_case.render import CamelCaseJSONRenderer
def generate_random_color():
return "#" + "".join(random.choices("0123456789ABCDEF", k=6))
class UserSerializer(serializers.ModelSerializer): class UserSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = User model = User
fields = ['id', 'first_name', 'last_name', 'email', 'phone', 'initials', 'color', 'is_online', 'is_contact_only', 'last_login'] 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): class UserViewSet(viewsets.ModelViewSet):
serializer_class = UserSerializer serializer_class = UserSerializer
queryset = User.objects.all() queryset = User.objects.all()

View file

@ -25,6 +25,20 @@ class UserViewSet(viewsets.ModelViewSet):
serializer = self.get_serializer(user) serializer = self.get_serializer(user)
return Response(serializer.data) 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): def destroy(self, request, *args, **kwargs):
user = self.get_object() user = self.get_object()
user.delete() user.delete()