From b440daa49da8c5cbe38f34632a1bb9a21b514813 Mon Sep 17 00:00:00 2001 From: DevlTz Date: Wed, 8 Apr 2026 18:10:23 -0300 Subject: [PATCH 1/5] fix(users): validate user_type using ChoiceField in RegisterSerializer --- apps/users/serializers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/users/serializers.py b/apps/users/serializers.py index 0990e1b..7b31440 100644 --- a/apps/users/serializers.py +++ b/apps/users/serializers.py @@ -32,7 +32,7 @@ def update(self, instance, validated_data): class RegisterSerializer(serializers.ModelSerializer): password = serializers.CharField(write_only=True, min_length=8) - user_type = serializers.CharField(default="S") + user_type = serializers.ChoiceField(choices=User.UserType.choices, default=User.UserType.SEEKER) class Meta: model = User fields = ['id', 'name', 'email', 'password', 'user_type'] From 09ab21434d4f36efc5608d4d72b137b6f899b637 Mon Sep 17 00:00:00 2001 From: DevlTz Date: Wed, 8 Apr 2026 18:10:26 -0300 Subject: [PATCH 2/5] fix(properties): protect owner field and expose owner_name in serializers --- apps/properties/serializers/property_serializers.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/properties/serializers/property_serializers.py b/apps/properties/serializers/property_serializers.py index cde973c..6d4cc92 100644 --- a/apps/properties/serializers/property_serializers.py +++ b/apps/properties/serializers/property_serializers.py @@ -45,7 +45,8 @@ class PropertiesReadSerializer(serializers.ModelSerializer): rooms_extras = RoomsExtrasSerializer() images = PropertiesPhotosSerializer(many=True, read_only=True, source="photos") average_rating = serializers.SerializerMethodField() - + owner_name = serializers.CharField(source="owner.name", read_only=True) + def get_average_rating(self, obj): if hasattr(obj, "average_rating"): return obj.average_rating @@ -98,7 +99,6 @@ def update(self, instance, validated_data): defaults=condo_data ) instance.condo = condo_obj - instance.save() for attr, value in rooms_extras_data.items(): setattr(instance.rooms_extras, attr, value) @@ -139,4 +139,4 @@ def validate_city(self, value): class Meta: model = Properties exclude = ["embedding"] - read_only_fields = ["id"] + read_only_fields = ["id", "owner"] From 00fe0225ba5d24b866a4c925d03b4d638a43ec89 Mon Sep 17 00:00:00 2001 From: DevlTz Date: Wed, 8 Apr 2026 18:10:31 -0300 Subject: [PATCH 3/5] fix(properties): correct permission class instantiation in photo views --- apps/properties/views/photo_views.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/properties/views/photo_views.py b/apps/properties/views/photo_views.py index 1bfc3e6..18ffcad 100644 --- a/apps/properties/views/photo_views.py +++ b/apps/properties/views/photo_views.py @@ -1,13 +1,13 @@ from rest_framework import generics from rest_framework.permissions import IsAuthenticated, AllowAny -from apps.properties.views.property_views import IsPropertyOwner +from apps.properties.permissions import IsPropertyOwner from apps.properties.models import Properties, PropertiesPhotos from apps.properties.serializers.photo_serializers import PropertiesUploadPhotosSerializer, PropertiesPhotosSerializer class UploadPhotoPropertyView(generics.CreateAPIView): queryset = Properties.objects.all() - permission_classes = [IsAuthenticated(), IsPropertyOwner()] + permission_classes = [IsAuthenticated, IsPropertyOwner] serializer_class = PropertiesUploadPhotosSerializer lookup_field = "pk" @@ -26,5 +26,5 @@ def get_serializer_class(self): def get_permissions(self): if self.request.method in ["PUT", "PATCH", "DELETE"]: - return [IsAuthenticated(), IsPropertyOwner()] - return [AllowAny()] + return [IsAuthenticated, IsPropertyOwner] + return [AllowAny] From 23cbde652c9c51c2f64b97e814faad767695f66a Mon Sep 17 00:00:00 2001 From: DevlTz Date: Wed, 8 Apr 2026 18:10:35 -0300 Subject: [PATCH 4/5] fix(properties): ensure rooms_extras are deleted when property is removed --- apps/properties/signals.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/properties/signals.py b/apps/properties/signals.py index b4d8807..c96f156 100644 --- a/apps/properties/signals.py +++ b/apps/properties/signals.py @@ -7,6 +7,11 @@ # sender = escuta só eventos do model Properties @receiver(post_delete, sender=Properties) def delete_fatherless_room(sender, instance, **kwargs): - room = instance.rooms # instance = o propertie que foi deletado, intance.room = pega o room que o propetie usava - if not room.properties.exists(): # nenhum outro imóvel usa esse room - room.delete() \ No newline at end of file + room = getattr(instance, 'rooms', None) # instance = o propertie que foi deletado, intance.room = pega o room que o propetie usava + if room and not room.properties.exists(): # nenhum outro imóvel usa esse room + room.delete() + + extras = getattr(instance, 'rooms_extras', None) # pega os extras do imóvel deletado + if extras and not extras.properties.exists(): # nenhum outro imóvel usa esses extras + extras.delete() + \ No newline at end of file From c256900a56b679133baa1df1570dc8b8fe8ad617 Mon Sep 17 00:00:00 2001 From: DevlTz Date: Wed, 8 Apr 2026 18:10:39 -0300 Subject: [PATCH 5/5] refactor(properties): comment out search route pending AI implementation --- apps/properties/urls.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/properties/urls.py b/apps/properties/urls.py index 4a7baac..4cd429b 100644 --- a/apps/properties/urls.py +++ b/apps/properties/urls.py @@ -7,7 +7,7 @@ path("/photos/", photo_views.UploadPhotoPropertyView.as_view()), path("photos//", photo_views.RUDPhotoPropertyView.as_view()), #path("search/filters/", property_views.FilterPropertyView.as_view()), - path("search/", property_views.SearchPropertyAIView.as_view()), + #path("search/", property_views.SearchPropertyAIView.as_view()), path("/reviews/", property_views.CreateListReviewPropertyView.as_view()), path("/reviews//", property_views.RUDReviewPropertyView.as_view()), ]