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.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)
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue