mirror of
https://github.com/i701/sarlink-portal-api.git
synced 2025-06-27 22:03:58 +00:00
Add wallet balance to User model and implement Atoll/Island management
- Added `wallet_balance` field to the User model. - Updated UserAdmin to include `wallet_balance` in the admin interface. - Created serializers and views for Atoll and Island management. - Implemented endpoints for listing, creating, and updating Atolls and Islands. - Enhanced payment processing with UUIDs for Payment and Topup models. - Added migration files for new fields and constraints. - Improved error handling and validation in various views. - Updated email templates for better responsiveness and SEO.
This commit is contained in:
76
api/views.py
76
api/views.py
@ -11,6 +11,7 @@ from rest_framework.response import Response
|
||||
from rest_framework import status
|
||||
from rest_framework.exceptions import ValidationError
|
||||
from rest_framework.decorators import api_view, permission_classes
|
||||
from api.serializers import AtollSerializer, IslandSerializer
|
||||
|
||||
# knox imports
|
||||
from knox.views import LoginView as KnoxLoginView
|
||||
@ -85,13 +86,19 @@ class CreateUserView(generics.CreateAPIView):
|
||||
return Response({"message": "Policy acceptance is required."}, status=400)
|
||||
|
||||
if not re.match(r"^[A-Z]{1,2}[0-9]{6,7}$", id_card):
|
||||
return Response({"message": "Please enter a valid ID card number."}, status=400)
|
||||
return Response(
|
||||
{"message": "Please enter a valid ID card number."}, status=400
|
||||
)
|
||||
|
||||
if not re.match(r"^[7|9][0-9]{6}$", mobile):
|
||||
return Response({"message": "Please enter a valid mobile number."}, status=400)
|
||||
return Response(
|
||||
{"message": "Please enter a valid mobile number."}, status=400
|
||||
)
|
||||
|
||||
if not re.match(r"^(7\d{12}|9\d{16})$", acc_no):
|
||||
return Response({"message": "Please enter a valid account number."}, status=400)
|
||||
return Response(
|
||||
{"message": "Please enter a valid account number."}, status=400
|
||||
)
|
||||
|
||||
# Fetch Atoll and Island instances
|
||||
try:
|
||||
@ -109,7 +116,7 @@ class CreateUserView(generics.CreateAPIView):
|
||||
username=username,
|
||||
password=password,
|
||||
address=address,
|
||||
mobile=str("+960") + str(mobile),
|
||||
mobile=mobile,
|
||||
acc_no=acc_no,
|
||||
id_card=id_card,
|
||||
dob=dob,
|
||||
@ -219,3 +226,64 @@ def test_email(request):
|
||||
fail_silently=False,
|
||||
)
|
||||
return Response({"status": "ok"}, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
class ListCreateAtollView(StaffEditorPermissionMixin, generics.ListCreateAPIView):
|
||||
serializer_class = AtollSerializer
|
||||
queryset = Atoll.objects.all()
|
||||
|
||||
def create(self, request, *args, **kwargs):
|
||||
serializer = self.get_serializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
name = serializer.validated_data.get("name")
|
||||
print(name)
|
||||
if Atoll.objects.filter(name=name).exists():
|
||||
return Response({"message": "Atoll name already exists."}, status=400)
|
||||
return super().create(request, *args, **kwargs)
|
||||
|
||||
|
||||
class RetrieveUpdateDestroyAtollView(
|
||||
StaffEditorPermissionMixin, generics.RetrieveUpdateDestroyAPIView
|
||||
):
|
||||
serializer_class = AtollSerializer
|
||||
queryset = Atoll.objects.all()
|
||||
lookup_field = "pk"
|
||||
|
||||
def update(self, request, *args, **kwargs):
|
||||
instance = self.get_object()
|
||||
serializer = self.get_serializer(instance, data=request.data, partial=True)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
name = serializer.validated_data.get("name")
|
||||
if name and Atoll.objects.filter(name=name).exclude(pk=instance.pk).exists():
|
||||
return Response({"message": "Atoll name already exists."}, status=400)
|
||||
return super().update(request, *args, **kwargs)
|
||||
|
||||
|
||||
class ListCreateIslandView(StaffEditorPermissionMixin, generics.ListCreateAPIView):
|
||||
serializer_class = IslandSerializer
|
||||
queryset = Island.objects.all()
|
||||
|
||||
def create(self, request, *args, **kwargs):
|
||||
serializer = self.get_serializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
name = serializer.validated_data.get("name")
|
||||
if Island.objects.filter(name=name).exists():
|
||||
return Response({"message": "Island name already exists."}, status=400)
|
||||
return super().create(request, *args, **kwargs)
|
||||
|
||||
|
||||
class RetrieveUpdateDestroyIslandView(
|
||||
StaffEditorPermissionMixin, generics.RetrieveUpdateDestroyAPIView
|
||||
):
|
||||
serializer_class = IslandSerializer
|
||||
queryset = Island.objects.all()
|
||||
lookup_field = "pk"
|
||||
|
||||
def update(self, request, *args, **kwargs):
|
||||
instance = self.get_object()
|
||||
serializer = self.get_serializer(instance, data=request.data, partial=True)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
name = serializer.validated_data.get("name")
|
||||
if name and Island.objects.filter(name=name).exclude(pk=instance.pk).exists():
|
||||
return Response({"message": "Island name already exists."}, status=400)
|
||||
return super().update(request, *args, **kwargs)
|
||||
|
Reference in New Issue
Block a user