mirror of
https://github.com/i701/sarlink-portal-api.git
synced 2025-04-19 23:46:53 +00:00
Add registered field to CreateDeviceSerializer and enhance BlockDeviceSerializer with reason_for_blocking and blocked_by fields
This commit is contained in:
parent
b415d8f35b
commit
c127c5d093
@ -4,17 +4,25 @@ from api.serializers import CustomReadOnlyUserSerializer
|
||||
|
||||
|
||||
class CreateDeviceSerializer(serializers.ModelSerializer):
|
||||
name = serializers.CharField(required=True)
|
||||
mac = serializers.CharField(required=True)
|
||||
registered = serializers.BooleanField(required=True)
|
||||
|
||||
class Meta:
|
||||
model = Device
|
||||
fields = ["name", "mac"]
|
||||
fields = ["name", "mac", "registered", "blocked_by"]
|
||||
|
||||
|
||||
class BlockDeviceSerializer(serializers.ModelSerializer):
|
||||
blocked = serializers.BooleanField(required=True)
|
||||
reason_for_blocking = serializers.CharField(required=True)
|
||||
blocked_by = serializers.ChoiceField(
|
||||
choices=[("ADMIN", "Admin"), ("PARENT", "Parent")], required=True
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = Device
|
||||
fields = ["blocked"]
|
||||
fields = ["blocked", "reason_for_blocking", "blocked_by"]
|
||||
|
||||
|
||||
class DeviceSerializer(serializers.ModelSerializer):
|
||||
|
@ -69,21 +69,22 @@ class DeviceUpdateAPIView(StaffEditorPermissionMixin, generics.UpdateAPIView):
|
||||
serializer_class = CreateDeviceSerializer
|
||||
lookup_field = "pk"
|
||||
|
||||
def update(self, request, *args, **kwargs):
|
||||
# Pass 'partial=True' to allow partial updates
|
||||
def update(self, request, **kwargs):
|
||||
instance = self.get_object()
|
||||
user_id = request.user.id
|
||||
|
||||
partial = kwargs.pop("partial", True)
|
||||
instance = self.get_object()
|
||||
if not request.user.is_superuser and instance.user_id != user_id:
|
||||
return Response(
|
||||
{"message": "You are not authorized to update this device."},
|
||||
status=403,
|
||||
)
|
||||
mac = request.data.get("mac", None)
|
||||
if not re.match(r"^([0-9A-Fa-f]{2}([.:-]?)){5}[0-9A-Fa-f]{2}$", mac):
|
||||
return Response({"message": "Invalid mac address"}, status=400)
|
||||
serializer = self.get_serializer(instance, data=request.data, partial=partial)
|
||||
|
||||
# Validate MAC address format
|
||||
mac = request.data.get("mac")
|
||||
if mac and not re.match(r"^([0-9A-Fa-f]{2}([.:-]?)){5}[0-9A-Fa-f]{2}$", mac):
|
||||
return Response({"message": "Invalid MAC address"}, status=400)
|
||||
|
||||
serializer = self.get_serializer(instance, data=request.data, partial=True)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
self.perform_update(serializer)
|
||||
return Response(serializer.data)
|
||||
@ -98,7 +99,6 @@ class DeviceBlockAPIView(StaffEditorPermissionMixin, generics.UpdateAPIView):
|
||||
# Pass 'partial=True' to allow partial updates
|
||||
user_id = request.user.id
|
||||
|
||||
partial = kwargs.pop("partial", True)
|
||||
instance = self.get_object()
|
||||
if not request.user.is_superuser and instance.user_id != user_id:
|
||||
return Response(
|
||||
@ -112,7 +112,7 @@ class DeviceBlockAPIView(StaffEditorPermissionMixin, generics.UpdateAPIView):
|
||||
return Response({"message": "Blocked field must be a boolean."}, status=400)
|
||||
instance.blocked = blocked
|
||||
instance.save()
|
||||
serializer = self.get_serializer(instance, data=request.data, partial=partial)
|
||||
serializer = self.get_serializer(instance, data=request.data, partial=False)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
self.perform_update(serializer)
|
||||
return Response(serializer.data)
|
||||
|
Loading…
x
Reference in New Issue
Block a user