Skip to content

Commit 4280065

Browse files
authored
Merge pull request #99 from KTB16Team/feature/98-refactor-ocr-stt-to-mq
Feature: ocr, mq를 mq로 변경(#98)
2 parents 6d38a72 + d8f5798 commit 4280065

31 files changed

+276
-428
lines changed

backend/src/main/java/aimo/backend/common/messageQueue/MessageQueueService.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,22 @@
1010
public class MessageQueueService {
1111

1212
private final RabbitTemplate rabbitTemplate;
13-
private final String DIRECT_EXCHANGE_NAME = "aiProcessingExchange"; // 추후 변경
14-
private final String DIRECT_QUEUE_ROUTING_KEY = "ai.processing.key"; // 추후 변경
13+
private final String JUDGEMENT_EXCHANGE_NAME = "aiProcessingExchange";
14+
private final String JUDGEMENT_QUEUE_ROUTING_KEY = "ai.processing.key";
15+
private final String IMAGE_TO_TEXT_EXCHANGE_NAME = "aiOCRExchange";
16+
private final String IMAGE_TO_TEXT_QUEUE_ROUTING_KEY = "ai.ocr.key";
17+
private final String SPEECH_TO_TEXT_EXCHANGE_NAME = "aiSTTExchange";
18+
private final String SPEECH_TO_TEXT_QUEUE_ROUTING_KEY = "ai.stt.key";
1519

16-
public void send(Object data) {
17-
rabbitTemplate.convertAndSend(DIRECT_EXCHANGE_NAME,DIRECT_QUEUE_ROUTING_KEY,data);
20+
public void judgement(Object data) {
21+
rabbitTemplate.convertAndSend(JUDGEMENT_EXCHANGE_NAME, JUDGEMENT_QUEUE_ROUTING_KEY,data);
22+
}
23+
24+
public void imageToText(Object data) {
25+
rabbitTemplate.convertAndSend(IMAGE_TO_TEXT_EXCHANGE_NAME, IMAGE_TO_TEXT_QUEUE_ROUTING_KEY, data);
26+
}
27+
28+
public void speechToText(Object data) {
29+
rabbitTemplate.convertAndSend(SPEECH_TO_TEXT_EXCHANGE_NAME, SPEECH_TO_TEXT_QUEUE_ROUTING_KEY, data);
1830
}
1931
}

backend/src/main/java/aimo/backend/common/properties/AiServerProperties.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,5 @@
1111
public class AiServerProperties {
1212

1313
private String domainUrl;
14-
private String judgementApi;
15-
private String speechToTextApi;
16-
private String imageToTextApi;
1714
private String accessKey;
1815
}

backend/src/main/java/aimo/backend/common/util/webclient/ReactiveHttpService.java

Lines changed: 0 additions & 31 deletions
This file was deleted.
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
package aimo.backend.domains.ai.controller;
2+
3+
import org.springframework.http.ResponseEntity;
4+
import org.springframework.web.bind.annotation.PostMapping;
5+
import org.springframework.web.bind.annotation.RequestBody;
6+
import org.springframework.web.bind.annotation.RequestMapping;
7+
import org.springframework.web.bind.annotation.RestController;
8+
9+
import aimo.backend.common.dto.DataResponse;
10+
import aimo.backend.common.util.memberLoader.MemberLoader;
11+
import aimo.backend.domains.ai.dto.parameter.ImageToTextParameter;
12+
import aimo.backend.domains.ai.dto.parameter.JudgementToAiParameter;
13+
import aimo.backend.domains.ai.dto.parameter.SpeechToTextParameter;
14+
import aimo.backend.domains.ai.dto.request.ImageToTextCallbackRequest;
15+
import aimo.backend.domains.ai.dto.request.ImageToTextRequest;
16+
import aimo.backend.domains.ai.dto.request.SpeechToTextCallbackRequest;
17+
import aimo.backend.domains.ai.dto.request.SpeechToTextRequest;
18+
import aimo.backend.domains.ai.dto.request.UpdateContentToPrivatePostRequest;
19+
import aimo.backend.domains.ai.service.AIService;
20+
import aimo.backend.domains.privatePost.dto.parameter.UpdateContentToPrivatePostParameter;
21+
import aimo.backend.domains.privatePost.dto.request.UploadTextRecordAndRequestJudgementRequest;
22+
import aimo.backend.domains.privatePost.model.OriginType;
23+
import aimo.backend.domains.privatePost.service.PrivatePostService;
24+
import jakarta.validation.Valid;
25+
import lombok.RequiredArgsConstructor;
26+
27+
@RestController
28+
@RequestMapping("/api/v1")
29+
@RequiredArgsConstructor
30+
public class AIController {
31+
32+
private final AIService aiService;
33+
private final PrivatePostService privatePostService;
34+
35+
@PostMapping("/private-posts/speech-to-text")
36+
public ResponseEntity<DataResponse<Void>> speechToText(
37+
@Valid @RequestBody SpeechToTextRequest request
38+
) {
39+
SpeechToTextParameter parameter = SpeechToTextParameter.of(request.url(), MemberLoader.getMemberId());
40+
aiService.speechToText(parameter);
41+
42+
return ResponseEntity.ok(DataResponse.ok());
43+
}
44+
45+
// AI로부터의 음성인식 콜백
46+
@PostMapping("/private-posts/speech-to-text/callback")
47+
public ResponseEntity<DataResponse<Void>> speechToTextCallback(
48+
@Valid @RequestBody SpeechToTextCallbackRequest request
49+
) {
50+
JudgementToAiParameter parameter = JudgementToAiParameter.of(request.id(), request.script(), OriginType.VOICE);
51+
aiService.uploadTextRecordAndRequestJudgement(parameter);
52+
53+
return ResponseEntity.ok(DataResponse.ok());
54+
}
55+
56+
@PostMapping("/private-posts/image-to-text")
57+
public ResponseEntity<DataResponse<Void>> ImageToText(
58+
@Valid @RequestBody ImageToTextRequest request
59+
) {
60+
ImageToTextParameter parameter = ImageToTextParameter.from(request.url(), MemberLoader.getMemberId());
61+
aiService.imageToText(parameter);
62+
63+
return ResponseEntity.ok(DataResponse.ok());
64+
}
65+
66+
@PostMapping("/private-posts/image-to-text/callback")
67+
public ResponseEntity<DataResponse<Void>> imageToTextCallback(
68+
@Valid @RequestBody ImageToTextCallbackRequest request
69+
) {
70+
JudgementToAiParameter parameter = JudgementToAiParameter.of(request.id(), request.script(), OriginType.IMAGE);
71+
72+
aiService.uploadTextRecordAndRequestJudgement(parameter);
73+
74+
return ResponseEntity.ok(DataResponse.ok());
75+
}
76+
77+
@PostMapping("/private-posts/judgement/text")
78+
public ResponseEntity<DataResponse<Void>> uploadTextRecordAndJudgement(
79+
@Valid @RequestBody UploadTextRecordAndRequestJudgementRequest request
80+
) {
81+
Long memberId = MemberLoader.getMemberId();
82+
83+
JudgementToAiParameter judgementToAiParameter = JudgementToAiParameter.of(
84+
memberId,
85+
request.content(),
86+
OriginType.TEXT);
87+
88+
aiService.uploadTextRecordAndRequestJudgement(judgementToAiParameter);
89+
90+
return ResponseEntity.ok(DataResponse.ok());
91+
}
92+
93+
// AI로부터의 판결문 요청 콜백
94+
@PostMapping("/private-posts/judgement/callback")
95+
public ResponseEntity<DataResponse<Void>> updateContentToPrivatePost(
96+
@Valid @RequestBody UpdateContentToPrivatePostRequest request
97+
) {
98+
UpdateContentToPrivatePostParameter parameter = UpdateContentToPrivatePostParameter.from(request);
99+
privatePostService.updateContentToPrivatePost(parameter);
100+
101+
return ResponseEntity.ok(DataResponse.ok());
102+
}
103+
104+
@PostMapping("/private-posts/analyze-conflict")
105+
public ResponseEntity<DataResponse<Void>> uploadImageOrSoundRecordAndJudgement(
106+
@Valid @RequestBody UploadTextRecordAndRequestJudgementRequest request
107+
) {
108+
Long memberId = MemberLoader.getMemberId();
109+
110+
JudgementToAiParameter judgementToAiParameter = JudgementToAiParameter.of(
111+
memberId,
112+
request.content(),
113+
OriginType.TEXT);
114+
115+
aiService.uploadImageOrSoundRecordAndJudgement(judgementToAiParameter);
116+
117+
return ResponseEntity.ok(DataResponse.ok());
118+
}
119+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package aimo.backend.domains.ai.dto.parameter;
2+
3+
public record ImageToTextParameter(String url, Long id) {
4+
5+
public static ImageToTextParameter from(String url, Long id) {
6+
return new ImageToTextParameter(url, id);
7+
}
8+
}
Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
package aimo.backend.domains.privatePost.dto.parameter;
1+
package aimo.backend.domains.ai.dto.parameter;
22

3-
import aimo.backend.domains.privatePost.dto.request.JudgementToAiRequest;
43
import aimo.backend.domains.privatePost.model.OriginType;
54

65
public record JudgementToAiParameter(
@@ -20,12 +19,4 @@ public static JudgementToAiParameter of(
2019
originType
2120
);
2221
}
23-
24-
public static JudgementToAiParameter from(Long memberId, JudgementToAiRequest request) {
25-
return new JudgementToAiParameter(
26-
memberId,
27-
request.content(),
28-
request.originType()
29-
);
30-
}
3122
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package aimo.backend.domains.ai.dto.parameter;
2+
3+
public record SpeechToTextParameter(String url, Long id) {
4+
5+
public static SpeechToTextParameter of(String url, Long id) {
6+
return new SpeechToTextParameter(url, id);
7+
}
8+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package aimo.backend.domains.ai.dto.request;
2+
3+
import jakarta.validation.constraints.NotBlank;
4+
import jakarta.validation.constraints.NotNull;
5+
6+
public record ImageToTextCallbackRequest(
7+
@NotBlank(message = "accessKey가 필요합니다.")
8+
String accessKey,
9+
@NotNull(message = "status가 필요합니다.")
10+
Boolean status,
11+
12+
String url,
13+
@NotBlank(message = "script가 필요합니다.")
14+
String script,
15+
@NotNull(message = "id가 필요합니다.")
16+
Long id
17+
) {
18+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package aimo.backend.domains.privatePost.dto.request;
1+
package aimo.backend.domains.ai.dto.request;
22

33
import jakarta.validation.constraints.NotNull;
44

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package aimo.backend.domains.ai.dto.request;
2+
3+
import jakarta.validation.constraints.NotBlank;
4+
import jakarta.validation.constraints.NotNull;
5+
6+
public record SpeechToTextCallbackRequest(
7+
@NotBlank(message = "accessKey가 필요합니다.")
8+
String accessKey,
9+
@NotNull(message = "status가 필요합니다.")
10+
Boolean status,
11+
String url,
12+
@NotBlank(message = "script가 필요합니다.")
13+
String script,
14+
@NotNull(message = "id가 필요합니다.")
15+
Long id
16+
) {
17+
}

0 commit comments

Comments
 (0)