diff --git a/backend/apps/authentication/models.py b/backend/apps/authentication/models.py index 6b20219..675404c 100644 --- a/backend/apps/authentication/models.py +++ b/backend/apps/authentication/models.py @@ -1 +1,11 @@ -# Create your models here. +import uuid + +from django.conf import settings +from django.db import models + + +class UserProfile(models.Model): + id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + user = models.OneToOneField( + settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="profile" + ) diff --git a/backend/apps/authentication/serializers.py b/backend/apps/authentication/serializers.py index 8fe6822..dafc277 100644 --- a/backend/apps/authentication/serializers.py +++ b/backend/apps/authentication/serializers.py @@ -8,7 +8,7 @@ class RegisterSerializer(serializers.ModelSerializer): class Meta: model = User - fields = ["username", "email", "password"] + fields = ("username", "email", "password") def validate_username(self, value): if not all(char.isalnum() or char == "_" for char in value): diff --git a/backend/apps/authentication/views.py b/backend/apps/authentication/views.py index 317d255..c2bd20b 100644 --- a/backend/apps/authentication/views.py +++ b/backend/apps/authentication/views.py @@ -1,9 +1,37 @@ from django.contrib.auth.models import User -from rest_framework import generics +from rest_framework import generics, status +from rest_framework.response import Response +from rest_framework_simplejwt.tokens import RefreshToken +from .models import UserProfile from .serializers import RegisterSerializer class RegisterationView(generics.CreateAPIView): queryset = User.objects.all() serializer_class = RegisterSerializer + + def create(self, request, *args, **kwargs): + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + user = serializer.save() + profile = UserProfile.objects.create(user=user) + refresh = RefreshToken.for_user(user) + return Response( + { + "success": True, + "data": { + "tokens": { + "access_token": str(refresh.access_token), + "refresh_token": str(refresh), + }, + "user": { + "id": str(profile.id), + "username": user.username, + "email": user.email, + "created_at": user.date_joined, + }, + }, + }, + status=status.HTTP_201_CREATED, + ) diff --git a/backend/config/settings/base.py b/backend/config/settings/base.py index 9cf1e2e..c6d7070 100644 --- a/backend/config/settings/base.py +++ b/backend/config/settings/base.py @@ -14,6 +14,7 @@ "django.contrib.staticfiles", # Third-party apps "rest_framework", + "rest_framework_simplejwt", # Local apps "apps.authentication", ] diff --git a/backend/manage.py b/backend/manage.py index aabb818..aac3002 100644 --- a/backend/manage.py +++ b/backend/manage.py @@ -7,7 +7,7 @@ def main(): """Run administrative tasks.""" - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings") + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.local") try: from django.core.management import execute_from_command_line except ImportError as exc: