From 7d64d4b75e8edc8704435e8af1cabda3a25b7aa5 Mon Sep 17 00:00:00 2001 From: Coldot <41678750+Coldot@users.noreply.github.com> Date: Sat, 22 Mar 2025 18:51:41 +0900 Subject: [PATCH 1/3] =?UTF-8?q?Feat:=20=ED=8C=8C=EC=9D=BC=20=EC=A4=91?= =?UTF-8?q?=EB=B3=B5=20=EA=B2=80=EC=82=AC=20=ED=81=90=EC=9D=98=20=EB=A9=94?= =?UTF-8?q?=EC=8B=9C=EC=A7=80=20=EC=A0=84=EC=86=A1=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=EC=97=90=EC=84=9C=20request=5Fid=EB=A5=BC=20MD5=20?= =?UTF-8?q?=ED=95=B4=EC=8B=9C=EB=A1=9C=20=EB=B3=80=ED=99=98=ED=95=98?= =?UTF-8?q?=EC=97=AC=20MessageDeduplicationId=EB=A1=9C=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/ai/data/FileDuplicateCheckQueue.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/ai/data/FileDuplicateCheckQueue.py b/src/main/ai/data/FileDuplicateCheckQueue.py index 2267b64..6381af0 100644 --- a/src/main/ai/data/FileDuplicateCheckQueue.py +++ b/src/main/ai/data/FileDuplicateCheckQueue.py @@ -1,4 +1,5 @@ import json +import hashlib class FileDuplicateCheckQueue: def __init__(self, sqs_client, queue_url): @@ -17,10 +18,14 @@ def send_message(self, request_id: str, user_id: str, s3_bucket: str, s3_key: st } } + # MessageDeduplicationId는 알파벳, 숫자, 구두점만 포함 가능하므로 + # request_id를 MD5 해시로 변환하여 사용합니다. + deduplication_id = hashlib.md5(str(request_id).encode()).hexdigest() + response = self.sqs_client.send_message( QueueUrl=self.queue_url, MessageGroupId=str(user_id), - MessageDeduplicationId=str(request_id), + MessageDeduplicationId=deduplication_id, MessageBody=json.dumps(message_body), ) From b8740014e71d4b4a3585a4fa61b70513d6df0650 Mon Sep 17 00:00:00 2001 From: Coldot <41678750+Coldot@users.noreply.github.com> Date: Sat, 22 Mar 2025 18:51:47 +0900 Subject: [PATCH 2/3] =?UTF-8?q?Refactor:=20=ED=8C=8C=EC=9D=BC=20=EC=A4=91?= =?UTF-8?q?=EB=B3=B5=20=EA=B2=80=EC=82=AC=20=EB=A9=94=EC=8B=9C=EC=A7=80=20?= =?UTF-8?q?=EC=A0=84=EC=86=A1=20=EB=A9=94=EC=84=9C=EB=93=9C=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EB=A9=94=EC=8B=9C=EC=A7=80=20=ED=98=95=EC=8B=9D?= =?UTF-8?q?=EC=9D=84=20=EA=B0=9C=EC=84=A0=ED=95=98=EA=B3=A0,=20SQS=20?= =?UTF-8?q?=EB=A9=94=EC=8B=9C=EC=A7=80=20=EB=B0=9C=EC=86=A1=20=EC=8B=9C=20?= =?UTF-8?q?=ED=95=84=EC=9A=94=ED=95=9C=20=EB=A7=A4=EA=B0=9C=EB=B3=80?= =?UTF-8?q?=EC=88=98=EB=A5=BC=20=EC=A7=81=EC=A0=91=20=EC=A0=84=EB=8B=AC?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ai/service/FileDuplicateCheckService.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/main/ai/service/FileDuplicateCheckService.py b/src/main/ai/service/FileDuplicateCheckService.py index ce0b6c1..6107cf4 100644 --- a/src/main/ai/service/FileDuplicateCheckService.py +++ b/src/main/ai/service/FileDuplicateCheckService.py @@ -53,16 +53,15 @@ def create_duplicate_check_request(self, request: FileDuplicateCheckRequest) -> "s3_key": file["s3_key"] } - message = { - "request_type": "file_duplicate_check_embedding_file", - "request_id": str(result["_id"]), - "user_id": request.user_id, - "payload": file_data - } + message_id = str(result["_id"]) + logger.info(f"SQS 메시지 발송 준비: request_id: {message_id}, user_id: {request.user_id}, s3_bucket: {file['s3_bucket']}, s3_key: {file['s3_key']}") - message_json = json.dumps(message) - logger.info(f"SQS 메시지 발송: {message_json}") - response = self.sqs_service.send_message(message_json) + response = self.sqs_service.send_message( + request_id=message_id, + user_id=request.user_id, + s3_bucket=file["s3_bucket"], + s3_key=file["s3_key"] + ) logger.info(f"SQS 메시지 발송 응답: {response}") # 5. 요청 ID 응답 From 60e39b1f07c6520797fd827f30eab088d84e434c Mon Sep 17 00:00:00 2001 From: Coldot <41678750+Coldot@users.noreply.github.com> Date: Sat, 22 Mar 2025 18:51:52 +0900 Subject: [PATCH 3/3] =?UTF-8?q?Test:=20=ED=8C=8C=EC=9D=BC=20=EC=A4=91?= =?UTF-8?q?=EB=B3=B5=20=EA=B2=80=EC=82=AC=20=ED=81=90=EC=9D=98=20=EB=A9=94?= =?UTF-8?q?=EC=8B=9C=EC=A7=80=20=EC=A0=84=EC=86=A1=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=EC=97=90=EC=84=9C=20MessageDeduplicationId=EB=A5=BC?= =?UTF-8?q?=20MD5=20=ED=95=B4=EC=8B=9C=EB=A1=9C=20=EB=B3=80=ED=99=98?= =?UTF-8?q?=ED=95=98=EC=97=AC=20=EA=B2=80=EC=A6=9D=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tests/ai/data/test_file_duplicate_check_queue.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/tests/ai/data/test_file_duplicate_check_queue.py b/src/tests/ai/data/test_file_duplicate_check_queue.py index afa91c5..cb0caef 100644 --- a/src/tests/ai/data/test_file_duplicate_check_queue.py +++ b/src/tests/ai/data/test_file_duplicate_check_queue.py @@ -1,5 +1,6 @@ import pytest import json +import hashlib from unittest.mock import MagicMock, patch from src.main.ai.data.FileDuplicateCheckQueue import FileDuplicateCheckQueue @@ -32,6 +33,8 @@ def test_send_message_success(self): } } + expected_deduplication_id = hashlib.md5(str(self.test_request_id).encode()).hexdigest() + expected_response = {"MessageId": "12345"} self.mock_sqs.send_message.return_value = expected_response @@ -47,7 +50,7 @@ def test_send_message_success(self): self.mock_sqs.send_message.assert_called_once_with( QueueUrl=self.test_queue_url, MessageGroupId=self.test_user_id, - MessageDeduplicationId=self.test_request_id, + MessageDeduplicationId=expected_deduplication_id, MessageBody=json.dumps(expected_message_body) ) assert response == expected_response @@ -65,5 +68,4 @@ def test_send_message_exception(self): s3_key=self.test_s3_key ) - assert str(exc_info.value) == "SQS Error" - self.mock_sqs.send_message.assert_called_once() \ No newline at end of file + assert str(exc_info.value) == "SQS Error" \ No newline at end of file