diff --git a/market/services.py b/market/services.py index 6b15668..5705f2b 100644 --- a/market/services.py +++ b/market/services.py @@ -79,10 +79,30 @@ def upload_service_images(entity: Any, image_file) -> None: # 엔티티 타입 별 쿼리 생성 if isinstance(entity, Service): ServiceImage.objects.create(market_service=entity, image=image_file) - elif isinstance(entity, ServiceOption): - ServiceOptionImage.objects.create( - service_option=entity, image=image_file - ) + + except ValidationError as e: + raise ValidationError(f"Validation Error: {str(e)}") + except Exception as e: + raise e + + @staticmethod + @transaction.atomic + def upload_service_option_images(entity: Any, image_files) -> None: + """ + 서비스 소개 이미지를 S3에 업로드 및 데이터베이스에 저장하는 함수 + """ + try: + # 파일 유효성 검증 + validate_image_files(image_files) + + # 엔티티 타입 별 쿼리 생성 + if isinstance(entity, ServiceOption): + bulk_images: List[ServiceOptionImage] = [] + for image_file in image_files: + bulk_images.append( + ServiceOptionImage(service_option=entity, image=image_file) + ) + ServiceOptionImage.objects.bulk_create(bulk_images) except ValidationError as e: raise ValidationError(f"Validation Error: {str(e)}") diff --git a/market/views/image_upload_view.py b/market/views/image_upload_view.py index 06971f0..ad9a95a 100644 --- a/market/views/image_upload_view.py +++ b/market/views/image_upload_view.py @@ -93,8 +93,8 @@ def post(self, request, **kwargs): if not image_files: raise ValidationError("There are no image files to upload") - self.service.upload_service_images( - entity=market_service_option, image_file=image_files + self.service.upload_service_option_images( + entity=market_service_option, image_files=image_files ) return Response( diff --git a/order/serializers/order_retrieve_serializer.py b/order/serializers/order_retrieve_serializer.py index a39b598..dec180d 100644 --- a/order/serializers/order_retrieve_serializer.py +++ b/order/serializers/order_retrieve_serializer.py @@ -1,5 +1,8 @@ from rest_framework import serializers +from market.serializers.service_serializers.service_create_retrieve_serializer import ( + ServiceRetrieveSerializer, +) from market.serializers.service_serializers.service_material.service_material_retrieve_serializer import ( ServiceMaterialRetrieveSerializer, ) @@ -23,7 +26,7 @@ class OrderRetrieveSerializer(serializers.ModelSerializer): - service_uuid = serializers.SerializerMethodField(read_only=True) + service = ServiceRetrieveSerializer(read_only=True) reformer = serializers.SerializerMethodField(read_only=True) materials = ServiceMaterialRetrieveSerializer(many=True, read_only=True) additional_options = ServiceOptionRetrieveSerializer(many=True, read_only=True) @@ -33,9 +36,6 @@ class OrderRetrieveSerializer(serializers.ModelSerializer): delivery_status = serializers.SerializerMethodField(read_only=True) images = OrderImageSerializer(source="order_image", many=True, read_only=True) - def get_service_uuid(self, obj): - return obj.service.service_uuid - def get_reformer(self, obj): reformer = obj.service.market.reformer if reformer: @@ -57,7 +57,7 @@ def get_delivery_status(self, obj): class Meta: model = Order fields = [ - "service_uuid", + "service", "reformer", "order_uuid", "order_date", diff --git a/order/tests.py b/order/tests.py index 4fca648..ba56df1 100644 --- a/order/tests.py +++ b/order/tests.py @@ -369,7 +369,7 @@ def test_get_order_list(self, _): # Then self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertIn("service_uuid", response.data[0]) + self.assertIn("service", response.data[0]) self.assertIn("order_uuid", response.data[0]) self.assertIn("order_date", response.data[0]) self.assertIn("orderer_information", response.data[0])