refactor: move generate_random_color() to serializer, apply only if no color provided, return userId on user creation
This commit is contained in:
parent
c80fdb2588
commit
34b7909f7e
3 changed files with 26 additions and 6 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Reference in a new issue