diff --git a/backend/account/migrations/0006_useraddressmodel.py b/backend/account/migrations/0006_useraddressmodel.py new file mode 100644 index 0000000..c7bbf1d --- /dev/null +++ b/backend/account/migrations/0006_useraddressmodel.py @@ -0,0 +1,26 @@ +# Generated by Django 5.1.2 on 2024-12-14 10:38 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0005_remove_user_groups_remove_user_user_permissions'), + ] + + operations = [ + migrations.CreateModel( + name='UserAddressModel', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=30)), + ('address', models.TextField()), + ('postal_code', models.CharField(max_length=10)), + ('phone', models.CharField(max_length=11)), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/backend/account/models.py b/backend/account/models.py index cc94052..6fef0b4 100644 --- a/backend/account/models.py +++ b/backend/account/models.py @@ -98,3 +98,12 @@ class User(AbstractBaseUser, PermissionsMixin): return self.email +class UserAddressModel(models.Model): + user = models.ForeignKey(User, on_delete=models.CASCADE) + name = models.CharField(max_length=30) + address = models.TextField() + postal_code = models.CharField(max_length=10) + phone = models.CharField(max_length=11) + + def __str__(self): + return f"{self.user.phone}, {self.name}" \ No newline at end of file diff --git a/backend/account/serializers.py b/backend/account/serializers.py index b342d1e..fb47e54 100644 --- a/backend/account/serializers.py +++ b/backend/account/serializers.py @@ -9,3 +9,15 @@ class ProfileSerializer(serializers.ModelSerializer): model = User fields = ['first_name', 'last_name', 'email', 'profile_photo', 'phone'] read_only_fields = ("phone",) + + +class UserAddressSerializer(serializers.ModelSerializer): + class Meta: + model = UserAddressModel + fields = ['id', 'name', 'address', 'postal_code', 'phone'] + + def validate(self, data): + user = self.context['request'].user + if not user.is_authenticated: + raise serializers.ValidationError("You must be logged in to perform this action.") + return data \ No newline at end of file diff --git a/backend/account/urls.py b/backend/account/urls.py index a8cab77..106fe30 100644 --- a/backend/account/urls.py +++ b/backend/account/urls.py @@ -3,4 +3,10 @@ from . import views urlpatterns = [ path('profile', views.ProfileView.as_view()), + path('address/create', views.CreateAddressView.as_view(), name='create-address'), + path('address/edit/', views.EditAddressView.as_view(), name='edit-address'), + path('address/delete/', views.DeleteAddressView.as_view(), name='delete-address'), + path('address/list', views.GetUserAddressesView.as_view(), name='list-addresses'), + path('address/', views.GetIDUserAddressView.as_view(), name='get-ID-address'), + ] \ No newline at end of file diff --git a/backend/account/views.py b/backend/account/views.py index d131306..15323f3 100644 --- a/backend/account/views.py +++ b/backend/account/views.py @@ -1,13 +1,14 @@ from django.shortcuts import render from rest_framework.views import APIView -from .serializers import ProfileSerializer -from rest_framework.permissions import IsAuthenticated -from rest_framework import status +from rest_framework import generics, permissions, status from rest_framework.response import Response +from .serializers import ProfileSerializer, UserAddressSerializer +from .models import UserAddressModel +from rest_framework.permissions import IsAuthenticated class ProfileView(APIView): serializer_class = ProfileSerializer permission_classes = [IsAuthenticated] - + def get(self, request): user_ser = self.serializer_class(instance=request.user) return Response(user_ser.data, status=status.HTTP_200_OK) @@ -19,4 +20,41 @@ class ProfileView(APIView): if user_ser.is_valid(): user_ser.save() return Response(user_ser.data) - return Response(user_ser.errors, status=status.HTTP_400_BAD_REQUEST) \ No newline at end of file + return Response(user_ser.errors, status=status.HTTP_400_BAD_REQUEST) + +class CreateAddressView(generics.CreateAPIView): + queryset = UserAddressModel.objects.all() + serializer_class = UserAddressSerializer + permission_classes = [permissions.IsAuthenticated] + + def perform_create(self, serializer): + serializer.save(user=self.request.user) + +class EditAddressView(generics.UpdateAPIView): + queryset = UserAddressModel.objects.all() + serializer_class = UserAddressSerializer + permission_classes = [permissions.IsAuthenticated] + + def get_queryset(self): + return UserAddressModel.objects.filter(user=self.request.user) + +class DeleteAddressView(generics.DestroyAPIView): + queryset = UserAddressModel.objects.all() + permission_classes = [permissions.IsAuthenticated] + + def get_queryset(self): + return UserAddressModel.objects.filter(user=self.request.user) + +class GetUserAddressesView(generics.ListAPIView): + serializer_class = UserAddressSerializer + permission_classes = [permissions.IsAuthenticated] + + def get_queryset(self): + return UserAddressModel.objects.filter(user=self.request.user) + +class GetIDUserAddressView(generics.RetrieveAPIView): + serializer_class = UserAddressSerializer + permission_classes = [permissions.IsAuthenticated] + + def get_queryset(self): + return UserAddressModel.objects.filter(user=self.request.user) \ No newline at end of file