From 225d1ff82d7098429db84d0fcf67c68441c242c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EB=AA=85=EC=9A=B0?= Date: Tue, 26 Sep 2023 17:05:27 +0900 Subject: [PATCH 1/7] =?UTF-8?q?fix:=20=EC=A3=BC=EC=A0=9C=EB=B3=84=20?= =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EB=AC=BC=20=EC=A1=B0=ED=9A=8C=20=EB=88=84?= =?UTF-8?q?=EB=9D=BD=20=EC=A0=95=EB=B3=B4=20=EC=88=98=EC=A0=95=20[BACK-257?= =?UTF-8?q?]=20Resolves=20:=20issue=20#257?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../item/subject/dao/SubjectFindDao.java | 6 ++--- .../item/subject/dto/SubjectCachingDto.java | 24 +++++++++++++++++++ .../domain/pix2pix/dao/Pix2PixFindDao.java | 2 +- .../domain/post/dao/PostFindDao.java | 10 ++++---- .../domain/post/dto/PostSubjectResponse.java | 9 +++---- 5 files changed, 38 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/siliconvalley/domain/item/subject/dto/SubjectCachingDto.java diff --git a/src/main/java/com/siliconvalley/domain/item/subject/dao/SubjectFindDao.java b/src/main/java/com/siliconvalley/domain/item/subject/dao/SubjectFindDao.java index 56523fb..25ac308 100644 --- a/src/main/java/com/siliconvalley/domain/item/subject/dao/SubjectFindDao.java +++ b/src/main/java/com/siliconvalley/domain/item/subject/dao/SubjectFindDao.java @@ -1,8 +1,8 @@ package com.siliconvalley.domain.item.subject.dao; import com.siliconvalley.domain.item.subject.domain.Subject; +import com.siliconvalley.domain.item.subject.dto.SubjectCachingDto; import com.siliconvalley.domain.item.subject.exception.SubjectNotFoundException; -import com.siliconvalley.domain.pix2pix.dto.Pix2PixAndSubjectDto; import lombok.RequiredArgsConstructor; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; @@ -29,9 +29,9 @@ public Subject findById(Long subjectId) { } @Cacheable(key = "'subject:' + #subjectId", value = "subjectCache") - public Pix2PixAndSubjectDto findSubjectForCachingById(Long subjectId){ + public SubjectCachingDto findSubjectForCachingById(Long subjectId){ Optional subject = subjectRepository.findById(subjectId); subject.orElseThrow(() -> new SubjectNotFoundException(subjectId)); - return new Pix2PixAndSubjectDto(subject.get()); + return new SubjectCachingDto(subject.get()); } } diff --git a/src/main/java/com/siliconvalley/domain/item/subject/dto/SubjectCachingDto.java b/src/main/java/com/siliconvalley/domain/item/subject/dto/SubjectCachingDto.java new file mode 100644 index 0000000..1aa49cc --- /dev/null +++ b/src/main/java/com/siliconvalley/domain/item/subject/dto/SubjectCachingDto.java @@ -0,0 +1,24 @@ +package com.siliconvalley.domain.item.subject.dto; + +import com.siliconvalley.domain.item.subject.domain.Subject; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class SubjectCachingDto { + + private Long subjectId; + private String subjectName; + private String subjectImage; + + @Builder + public SubjectCachingDto(Subject subject){ + this.subjectId = subject.getId(); + this.subjectName = subject.getSubjectName(); + this.subjectImage = subject.getSubjectImage(); + } + +} diff --git a/src/main/java/com/siliconvalley/domain/pix2pix/dao/Pix2PixFindDao.java b/src/main/java/com/siliconvalley/domain/pix2pix/dao/Pix2PixFindDao.java index 2298f88..418dd5c 100644 --- a/src/main/java/com/siliconvalley/domain/pix2pix/dao/Pix2PixFindDao.java +++ b/src/main/java/com/siliconvalley/domain/pix2pix/dao/Pix2PixFindDao.java @@ -14,7 +14,7 @@ public class Pix2PixFindDao { private final Pix2PixRepository pix2PixRepository; - @Cacheable(key = "'subject:'+ #subject", value = "subjectCache") + @Cacheable(key = "'subject:'+ #subject", value = "subjectAndModelCache") public UseModelDto findBySubjectId(Long subjectId){ Pix2Pix pix2Pix = pix2PixRepository.findBySubjectId(subjectId); return new UseModelDto(pix2Pix); diff --git a/src/main/java/com/siliconvalley/domain/post/dao/PostFindDao.java b/src/main/java/com/siliconvalley/domain/post/dao/PostFindDao.java index 62ea642..091a8c5 100644 --- a/src/main/java/com/siliconvalley/domain/post/dao/PostFindDao.java +++ b/src/main/java/com/siliconvalley/domain/post/dao/PostFindDao.java @@ -1,11 +1,10 @@ package com.siliconvalley.domain.post.dao; import com.siliconvalley.domain.item.subject.dao.SubjectFindDao; -import com.siliconvalley.domain.item.subject.domain.Subject; +import com.siliconvalley.domain.item.subject.dto.SubjectCachingDto; import com.siliconvalley.domain.post.code.PostCode; import com.siliconvalley.domain.post.domain.Post; import com.siliconvalley.domain.post.dto.PostListResponse; -import com.siliconvalley.domain.post.dto.PostDetailResponse; import com.siliconvalley.domain.post.dto.PostSubjectResponse; import com.siliconvalley.domain.post.exception.PostNotFoundException; import com.siliconvalley.global.common.dto.Response; @@ -15,9 +14,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; + @Service @RequiredArgsConstructor @@ -26,6 +24,7 @@ public class PostFindDao { private final PostRepository postRepository; private final PostCustomRepository postCustomRepository; + private final SubjectFindDao subjectFindDao; public Post findById(Long targetId){ final Optional post = postRepository.findById(targetId); @@ -40,7 +39,8 @@ public Response findAll(Pageable pageable){ public Response getPostsBySubjectName(Long subjectId, Pageable pageable) { Page postListResponses = postCustomRepository.findBySubjectId(subjectId, pageable); - return Response.of(PostCode.POST_RETRIEVE_SUCCESS, postListResponses); + SubjectCachingDto dto = subjectFindDao.findSubjectForCachingById(subjectId); + return Response.of(PostCode.POST_RETRIEVE_SUCCESS, new PostSubjectResponse(dto, postListResponses)); } } diff --git a/src/main/java/com/siliconvalley/domain/post/dto/PostSubjectResponse.java b/src/main/java/com/siliconvalley/domain/post/dto/PostSubjectResponse.java index 08b5c17..a5c36e5 100644 --- a/src/main/java/com/siliconvalley/domain/post/dto/PostSubjectResponse.java +++ b/src/main/java/com/siliconvalley/domain/post/dto/PostSubjectResponse.java @@ -1,6 +1,7 @@ package com.siliconvalley.domain.post.dto; import com.siliconvalley.domain.item.subject.domain.Subject; +import com.siliconvalley.domain.item.subject.dto.SubjectCachingDto; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; @@ -18,10 +19,10 @@ public class PostSubjectResponse { private int currentPage; private int totalPages; - public PostSubjectResponse(Subject subject, Page postPage){ - this.subjectId = subject.getId(); - this.subjectName = subject.getSubjectName(); - this.subjectImage = subject.getSubjectImage(); + public PostSubjectResponse(SubjectCachingDto dto, Page postPage){ + this.subjectId = dto.getSubjectId(); + this.subjectName = dto.getSubjectName(); + this.subjectImage = dto.getSubjectImage(); this.postLists = postPage.getContent(); this.currentPage = postPage.getNumber(); this.totalPages = postPage.getTotalPages(); From a5398a990562d86b53b14aa7139b8d83c0e89010 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EB=AA=85=EC=9A=B0?= Date: Tue, 26 Sep 2023 17:32:45 +0900 Subject: [PATCH 2/7] =?UTF-8?q?=EC=9E=84=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../profile/ProfileNameServiceTests.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/test/java/com/siliconvalley/profile/ProfileNameServiceTests.java diff --git a/src/test/java/com/siliconvalley/profile/ProfileNameServiceTests.java b/src/test/java/com/siliconvalley/profile/ProfileNameServiceTests.java new file mode 100644 index 0000000..518a767 --- /dev/null +++ b/src/test/java/com/siliconvalley/profile/ProfileNameServiceTests.java @@ -0,0 +1,12 @@ +package com.siliconvalley.profile; + +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; + +@Slf4j +@ExtendWith(MockitoExtension.class) +public class ProfileNameServiceTests { + +} From dd6a24042110b1f5e0fcae2d9f748e3d621817a4 Mon Sep 17 00:00:00 2001 From: fishphobiagg Date: Wed, 27 Sep 2023 00:03:23 +0900 Subject: [PATCH 3/7] =?UTF-8?q?fix:=20=EB=9E=AD=ED=82=B9=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=EB=AF=B8=EC=A1=B4=EC=9E=AC=EC=8B=9C=20TOP?= =?UTF-8?q?=20=EA=B2=8C=EC=8B=9C=EB=AC=BC=20null=20=EA=B0=92=20=EB=B0=98?= =?UTF-8?q?=ED=99=98=20=EB=B0=8F=20=EA=B7=B8=EB=A6=BC=20=EB=B3=80=ED=99=98?= =?UTF-8?q?=ED=95=98=EA=B8=B0=20=EC=9D=91=EB=8B=B5=EA=B0=92=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20[BACK-252]=20Resolves=20:=20issue=20#253?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/canvas/service/CanvasUpdateService.java | 4 ++-- .../siliconvalley/domain/post/service/RankCachingService.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/siliconvalley/domain/canvas/service/CanvasUpdateService.java b/src/main/java/com/siliconvalley/domain/canvas/service/CanvasUpdateService.java index da4d0cb..8b03074 100644 --- a/src/main/java/com/siliconvalley/domain/canvas/service/CanvasUpdateService.java +++ b/src/main/java/com/siliconvalley/domain/canvas/service/CanvasUpdateService.java @@ -1,6 +1,7 @@ package com.siliconvalley.domain.canvas.service; import com.siliconvalley.domain.canvas.domain.Canvas; +import com.siliconvalley.domain.canvas.dto.CanvasConvertResponse; import com.siliconvalley.domain.image.service.S3ImageUploadService; import com.siliconvalley.domain.post.service.RankCachingService; import com.siliconvalley.domain.rabbitMQ.code.RabbitMQCode; @@ -27,7 +28,6 @@ public Response updateSketchAndCanvas(Canvas canvas, String newSketch, Long prof s3ImageUploadService.deleteImage(canvas.getSketch()); canvas.updateSketch(newSketch); convertRequestSender.sendSketchConversionRequest(newSketch, canvas.getId(), profileId, canvas.getSubject()); - return Response.of(RabbitMQCode.CONVERSION_RESPONSE_SUCCESS, rankCachingService.getTopPostThisWeek(canvas.getSubject().getId())); + return Response.of(RabbitMQCode.CONVERSION_RESPONSE_SUCCESS, new CanvasConvertResponse(canvas.getId(), rankCachingService.getTopPostThisWeek(canvas.getSubject().getId()))); } - } diff --git a/src/main/java/com/siliconvalley/domain/post/service/RankCachingService.java b/src/main/java/com/siliconvalley/domain/post/service/RankCachingService.java index 6f0b8b1..c65349b 100644 --- a/src/main/java/com/siliconvalley/domain/post/service/RankCachingService.java +++ b/src/main/java/com/siliconvalley/domain/post/service/RankCachingService.java @@ -38,7 +38,7 @@ public void cachingRankToRedis(RankingCachingDto rankingCachingDto){ public String getTopPostThisWeek(Long subjectId){ RankingCachingDto rankingCachingDto = redisTemplate.opsForList().index(generateRedisKey(subjectId), -1); if (rankingCachingDto.getRankerList().isEmpty()){ - return "ranking is empty"; + return null; } return rankingCachingDto.getRankerList().get(0).getCanvasUrl(); } From cbfb3978f6a5cae9c23af3d3579f0d7be91c8737 Mon Sep 17 00:00:00 2001 From: ah9mon Date: Wed, 27 Sep 2023 13:00:21 +0900 Subject: [PATCH 4/7] =?UTF-8?q?Feat:=20Stage=20=EA=B8=B0=EB=A1=9D=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/profile/api/ProfileApi.java | 2 +- .../siliconvalley/jwt/ResolveTokenTest.java | 1 + .../siliconvalley/jwt/ValidateTokenTest.java | 1 + .../record/RecordCreateTest.java | 96 +++++++++++++++++++ .../record/RecordUpdateTest.java | 4 + 5 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/siliconvalley/record/RecordCreateTest.java create mode 100644 src/test/java/com/siliconvalley/record/RecordUpdateTest.java diff --git a/src/main/java/com/siliconvalley/domain/profile/api/ProfileApi.java b/src/main/java/com/siliconvalley/domain/profile/api/ProfileApi.java index 2b1d293..6aec20e 100644 --- a/src/main/java/com/siliconvalley/domain/profile/api/ProfileApi.java +++ b/src/main/java/com/siliconvalley/domain/profile/api/ProfileApi.java @@ -244,7 +244,7 @@ public ResponseEntity getStageWithRecord( return ResponseEntity.status(HttpStatus.OK).body(stageFindDao.getStageWithRecord(profileId, stageId)); } - @PostMapping("/{profileId}/stages/{stageId}/record") + @PostMapping("/{profileId}/stages/{stageId}/records") public ResponseEntity evaluateCanvasAndcreateRecord( @PathVariable(name = "profileId") Long profileId, @PathVariable(name = "stageId") Long stageId, diff --git a/src/test/java/com/siliconvalley/jwt/ResolveTokenTest.java b/src/test/java/com/siliconvalley/jwt/ResolveTokenTest.java index f3717e2..5dd8934 100644 --- a/src/test/java/com/siliconvalley/jwt/ResolveTokenTest.java +++ b/src/test/java/com/siliconvalley/jwt/ResolveTokenTest.java @@ -16,6 +16,7 @@ import java.util.Date; @SpringBootTest +@DisplayName("Resolve Token Test") public class ResolveTokenTest { @Autowired diff --git a/src/test/java/com/siliconvalley/jwt/ValidateTokenTest.java b/src/test/java/com/siliconvalley/jwt/ValidateTokenTest.java index 48e78f0..ba3c8a1 100644 --- a/src/test/java/com/siliconvalley/jwt/ValidateTokenTest.java +++ b/src/test/java/com/siliconvalley/jwt/ValidateTokenTest.java @@ -16,6 +16,7 @@ import java.util.Date; @SpringBootTest +@DisplayName("Validate Token Test") public class ValidateTokenTest { @Autowired diff --git a/src/test/java/com/siliconvalley/record/RecordCreateTest.java b/src/test/java/com/siliconvalley/record/RecordCreateTest.java new file mode 100644 index 0000000..9d5377e --- /dev/null +++ b/src/test/java/com/siliconvalley/record/RecordCreateTest.java @@ -0,0 +1,96 @@ +package com.siliconvalley.record; + +import com.siliconvalley.domain.google.service.VisionDetectingService; +import com.siliconvalley.domain.point.application.StageRewardApp; +import com.siliconvalley.domain.profile.dao.ProfileFindDao; +import com.siliconvalley.domain.profile.domain.Profile; +import com.siliconvalley.domain.record.application.RecordCreateService; +import com.siliconvalley.domain.record.dao.RecordFindDao; +import com.siliconvalley.domain.record.dao.RecordRepository; +import com.siliconvalley.domain.record.domain.Record; +import com.siliconvalley.domain.record.dto.RecordCreateRequest; +import com.siliconvalley.domain.record.exception.RecordAlreadyExist; +import com.siliconvalley.domain.stage.dao.StageFindDao; +import com.siliconvalley.domain.stage.domain.Score; +import com.siliconvalley.domain.stage.domain.Stage; +import com.siliconvalley.global.common.dto.Response; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +@DisplayName("기록 생성 테스트") +public class RecordCreateTest { + + @InjectMocks + RecordCreateService recordCreateService; + + + @Mock RecordRepository recordRepository; + @Mock RecordFindDao recordFindDao; + @Mock ProfileFindDao profileFindDao; + @Mock StageFindDao stageFindDao; + @Mock StageRewardApp stageRewardApp; + @Mock VisionDetectingService visionDetectingService; + + Long profileId; + Long stageId; + Profile mockProfile; + Stage mockStage; + Record mockRecord; + RecordCreateRequest dto; + + + @BeforeEach + void setUp() { + profileId = 1L; + stageId = 1L; + mockProfile = mock(Profile.class); + mockStage = mock(Stage.class); + dto = mock(RecordCreateRequest.class); + mockRecord = mock(Record.class); + when(profileFindDao.findById(profileId)).thenReturn(mockProfile); + when(stageFindDao.findById(stageId)).thenReturn(mockStage); + + } + + + @Test + @DisplayName("기록이 존재할때 발생하는 예외") + void 이미_기록이_존재할때_발생하는_예외() { + when(recordFindDao.findByProfileId(profileId)).thenReturn(Optional.of(mockRecord)); + + // When & Then + assertThrows(RecordAlreadyExist.class, () -> { + recordCreateService.evaluateCanvasAndcreateRecord(profileId, stageId, dto); + }); + } + + @Test + @DisplayName("새로운 기록 생성 성공") + void 기록_생성_성공() { + // Given + when(recordFindDao.findByProfileId(profileId)).thenReturn(Optional.empty()); + Long canvasId = 1L; + when(dto.getCanvasId()).thenReturn(canvasId); + when(visionDetectingService.calculateCanvasScore(canvasId)).thenReturn(Score.HIGH); + when(mockStage.getPoint()).thenReturn(100); + + // when + Response response = recordCreateService.evaluateCanvasAndcreateRecord(profileId, stageId, dto); + + // then + assertEquals(response.getStatus().getCode(), 201); + } +} diff --git a/src/test/java/com/siliconvalley/record/RecordUpdateTest.java b/src/test/java/com/siliconvalley/record/RecordUpdateTest.java new file mode 100644 index 0000000..a90e1de --- /dev/null +++ b/src/test/java/com/siliconvalley/record/RecordUpdateTest.java @@ -0,0 +1,4 @@ +package com.siliconvalley.record; + +public class RecordUpdateTest { +} From eb422f9bf7f5139e73d79db62fcb18f4f60dc60f Mon Sep 17 00:00:00 2001 From: Fishphobiagg Date: Wed, 27 Sep 2023 13:15:20 +0900 Subject: [PATCH 5/7] =?UTF-8?q?fix:=EC=8A=A4=ED=85=8C=EC=9D=B4=EC=A7=80=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C=20API=20=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20[BACK-85]=20Resolves=20:=20issue=20#85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../canvas/controller/CanvasController.java | 9 +++ .../canvas/service/CanvasConvertService.java | 4 ++ .../controller/DetectingTestController.java | 24 ++++++++ .../domain/google/dto/LabelResultDto.java | 18 ++++++ .../service/GoogleVisionApiService.java | 16 +++--- .../service/VisionDetectingService.java | 23 ++++++-- .../domain/profile/api/ProfileApi.java | 4 +- .../domain/rabbitMQ/code/RabbitMQCode.java | 1 + .../rabbitMQ/dto/DemoConversionRequest.java | 17 ++++++ .../rabbitMQ/dto/DemoConversionResponse.java | 11 ++++ .../service/ConvertRequestSender.java | 7 +++ .../application/RecordCreateService.java | 2 +- .../domain/record/dao/RecordFindDao.java | 1 + .../application/CanvasSseEmitterService.java | 1 - .../global/config/RabbitMqConfig.java | 8 +++ .../post/EmotionServiceTests.java | 4 ++ .../profile/ProfileNameServiceTests.java | 55 ++++++++++++++++++- .../vision/VisionDetectingServiceTests.java | 10 ++-- 18 files changed, 193 insertions(+), 22 deletions(-) create mode 100644 src/main/java/com/siliconvalley/domain/google/controller/DetectingTestController.java create mode 100644 src/main/java/com/siliconvalley/domain/google/dto/LabelResultDto.java create mode 100644 src/main/java/com/siliconvalley/domain/rabbitMQ/dto/DemoConversionRequest.java create mode 100644 src/main/java/com/siliconvalley/domain/rabbitMQ/dto/DemoConversionResponse.java create mode 100644 src/test/java/com/siliconvalley/post/EmotionServiceTests.java diff --git a/src/main/java/com/siliconvalley/domain/canvas/controller/CanvasController.java b/src/main/java/com/siliconvalley/domain/canvas/controller/CanvasController.java index 0ea2900..7236f1e 100644 --- a/src/main/java/com/siliconvalley/domain/canvas/controller/CanvasController.java +++ b/src/main/java/com/siliconvalley/domain/canvas/controller/CanvasController.java @@ -53,4 +53,13 @@ public SseEmitter connectSseForConvertedCanvas( return canvasSseEmitterService.connect(profileId); } + @GetMapping("") + public ResponseEntity convertSketchToCanvasTest( + @RequestParam MultipartFile sketchFile + )throws IOException{ + String sketchUrl = s3ImageUploadService.uploadFile(sketchFile, "rendingPage"); + Response response = canvasConvertService.convertSketchToCanvasDemo(sketchUrl); + return ResponseEntity.ok(response); + } + } diff --git a/src/main/java/com/siliconvalley/domain/canvas/service/CanvasConvertService.java b/src/main/java/com/siliconvalley/domain/canvas/service/CanvasConvertService.java index e74ed0f..dc5140b 100644 --- a/src/main/java/com/siliconvalley/domain/canvas/service/CanvasConvertService.java +++ b/src/main/java/com/siliconvalley/domain/canvas/service/CanvasConvertService.java @@ -43,6 +43,10 @@ public Response convertSketchToCanvas(Long profileId, Long subjectId, String ske return convertRequestSender.sendSketchConversionRequest(sketch, canvas.getId(), profileId, subject); } + public Response convertSketchToCanvasDemo(String sketch){ + + } + public Response updateSketchAndCanvas(Long profileId, Long canvasId, String sketch){ Canvas canvas = canvasFindDao.findById(canvasId); return canvasUpdateService.updateSketchAndCanvas(canvas, sketch, profileId); diff --git a/src/main/java/com/siliconvalley/domain/google/controller/DetectingTestController.java b/src/main/java/com/siliconvalley/domain/google/controller/DetectingTestController.java new file mode 100644 index 0000000..c180221 --- /dev/null +++ b/src/main/java/com/siliconvalley/domain/google/controller/DetectingTestController.java @@ -0,0 +1,24 @@ +package com.siliconvalley.domain.google.controller; + +import com.siliconvalley.domain.google.service.VisionDetectingService; +import com.siliconvalley.global.common.code.CommonCode; +import com.siliconvalley.global.common.dto.Response; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/api/test/google") +@RequiredArgsConstructor +public class DetectingTestController { + + private final VisionDetectingService visionDetectingService; + + @GetMapping("{canvasId}") + public ResponseEntity test( + @PathVariable Long canvasId + ){ + return ResponseEntity.ok(visionDetectingService.testLabelDetecting(canvasId)); + } + +} diff --git a/src/main/java/com/siliconvalley/domain/google/dto/LabelResultDto.java b/src/main/java/com/siliconvalley/domain/google/dto/LabelResultDto.java new file mode 100644 index 0000000..000a8b4 --- /dev/null +++ b/src/main/java/com/siliconvalley/domain/google/dto/LabelResultDto.java @@ -0,0 +1,18 @@ +package com.siliconvalley.domain.google.dto; + +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class LabelResultDto { + + private String label; + private Float confidence;; + + public LabelResultDto(String label, Float confidence){ + this.label = label; + this.confidence = confidence; + } +} diff --git a/src/main/java/com/siliconvalley/domain/google/service/GoogleVisionApiService.java b/src/main/java/com/siliconvalley/domain/google/service/GoogleVisionApiService.java index d581401..7af4c71 100644 --- a/src/main/java/com/siliconvalley/domain/google/service/GoogleVisionApiService.java +++ b/src/main/java/com/siliconvalley/domain/google/service/GoogleVisionApiService.java @@ -3,8 +3,6 @@ import com.google.api.gax.core.FixedCredentialsProvider; import com.google.auth.oauth2.GoogleCredentials; import com.google.cloud.vision.v1.*; -import com.google.cloud.vision.v1.ImageAnnotatorClient; -import com.google.cloud.vision.v1.ImageAnnotatorSettings; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -24,14 +22,17 @@ public class GoogleVisionApiService { @Value("${google.service.account.key}") private String serviceAccountKey; - public Map detectObjects(String filePath) { + public Map detectLabels(String filePath) { List requests = new ArrayList<>(); Map results = new HashMap<>(); try { ImageSource imageSource = ImageSource.newBuilder().setImageUri(filePath).build(); Image img = Image.newBuilder().setSource(imageSource).build(); - Feature feat = Feature.newBuilder().setType(Feature.Type.OBJECT_LOCALIZATION).build(); + + // LABEL_DETECTION 유형으로 변경 + Feature feat = Feature.newBuilder().setType(Feature.Type.LABEL_DETECTION).build(); + AnnotateImageRequest request = AnnotateImageRequest.newBuilder() .addFeatures(feat) .setImage(img) @@ -56,9 +57,10 @@ public Map detectObjects(String filePath) { continue; } - for (LocalizedObjectAnnotation entity : res.getLocalizedObjectAnnotationsList()) { - log.info("Detected object: " + entity.getName() + " with confidence: " + entity.getScore()); - results.put(entity.getName().toLowerCase(), entity.getScore()); + // EntityAnnotation 리스트로 변경 + for (EntityAnnotation annotation : res.getLabelAnnotationsList()) { + log.info("Detected label: " + annotation.getDescription() + " with confidence: " + annotation.getScore()); + results.put(annotation.getDescription().toLowerCase(), annotation.getScore()); } } } diff --git a/src/main/java/com/siliconvalley/domain/google/service/VisionDetectingService.java b/src/main/java/com/siliconvalley/domain/google/service/VisionDetectingService.java index 9ec4899..9074dd8 100644 --- a/src/main/java/com/siliconvalley/domain/google/service/VisionDetectingService.java +++ b/src/main/java/com/siliconvalley/domain/google/service/VisionDetectingService.java @@ -2,12 +2,17 @@ import com.siliconvalley.domain.canvas.dao.CanvasFindDao; import com.siliconvalley.domain.canvas.domain.Canvas; +import com.siliconvalley.domain.google.dto.LabelResultDto; import com.siliconvalley.domain.stage.domain.Score; +import com.siliconvalley.global.common.code.CommonCode; +import com.siliconvalley.global.common.dto.Response; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; +import java.util.List; import java.util.Map; @Service @@ -21,12 +26,22 @@ public class VisionDetectingService { public Score calculateCanvasScore(Long canvasId) { Canvas canvas = canvasFindDao.findById(canvasId); - Map detectResult = visionService.detectObjects(canvas.getCanvas()); - - if (detectResult.size() == 0) {return Score.LOW;} - Float detectionScore = detectResult.get(canvas.getSubject().getPix2Pix().getModelName()); + Map detectResult = visionService.detectLabels(canvas.getCanvas()); + if (detectResult.size() == 0 || canvas.getSubject().getPix2Pix().getVisionName().equals(null)) {return Score.LOW;} + Float detectionScore = detectResult.get(canvas.getSubject().getPix2Pix().getVisionName()); return Score.determineScore(detectionScore); } + public Response testLabelDetecting(Long canvasId){ + Canvas canvas = canvasFindDao.findById(canvasId); + List results = new ArrayList<>(); + for (Map.Entry entry : visionService.detectLabels(canvas.getCanvas()).entrySet()){ + results.add(new LabelResultDto(entry.getKey(), entry.getValue())); + } + + return Response.of(CommonCode.GOOD_REQUEST, results); + + } + } diff --git a/src/main/java/com/siliconvalley/domain/profile/api/ProfileApi.java b/src/main/java/com/siliconvalley/domain/profile/api/ProfileApi.java index 2b1d293..4dc9c8e 100644 --- a/src/main/java/com/siliconvalley/domain/profile/api/ProfileApi.java +++ b/src/main/java/com/siliconvalley/domain/profile/api/ProfileApi.java @@ -245,7 +245,7 @@ public ResponseEntity getStageWithRecord( } @PostMapping("/{profileId}/stages/{stageId}/record") - public ResponseEntity evaluateCanvasAndcreateRecord( + public ResponseEntity evaluateCanvasAndCreateRecord( @PathVariable(name = "profileId") Long profileId, @PathVariable(name = "stageId") Long stageId, @RequestBody RecordCreateRequest dto @@ -254,7 +254,7 @@ public ResponseEntity evaluateCanvasAndcreateRecord( } @PatchMapping("/{profileId}/stages/{stageId}/records/{recordId}") - public ResponseEntity evaluateCanvasAndupdateRecord( + public ResponseEntity evaluateCanvasAndUpdateRecord( @PathVariable(name = "recordId") Long recordId, @RequestBody RecordUpdateRequest dto ) { diff --git a/src/main/java/com/siliconvalley/domain/rabbitMQ/code/RabbitMQCode.java b/src/main/java/com/siliconvalley/domain/rabbitMQ/code/RabbitMQCode.java index e6d84f4..568c349 100644 --- a/src/main/java/com/siliconvalley/domain/rabbitMQ/code/RabbitMQCode.java +++ b/src/main/java/com/siliconvalley/domain/rabbitMQ/code/RabbitMQCode.java @@ -8,6 +8,7 @@ public enum RabbitMQCode implements ResponseCode { CONVERSION_REQUEST_FAILURE(400, "변환 요청에 실패하였습니다.", HttpStatus.BAD_REQUEST), CONVERSION_RESPONSE_SUCCESS(200, "변환 응답을 성공적으로 수신하였습니다.", HttpStatus.OK), CONVERSION_RESPONSE_FAILURE(500, "변환 응답 수신에 실패하였습니다.", HttpStatus.INTERNAL_SERVER_ERROR), + DEMO_CONVERSION_SUCCESS(200, "체험 변환 요청에 성공하였습니다.", HttpStatus.OK) ; private final int code; diff --git a/src/main/java/com/siliconvalley/domain/rabbitMQ/dto/DemoConversionRequest.java b/src/main/java/com/siliconvalley/domain/rabbitMQ/dto/DemoConversionRequest.java new file mode 100644 index 0000000..3870860 --- /dev/null +++ b/src/main/java/com/siliconvalley/domain/rabbitMQ/dto/DemoConversionRequest.java @@ -0,0 +1,17 @@ +package com.siliconvalley.domain.rabbitMQ.dto; + +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class DemoConversionRequest { + private String sketchUrl; + private String modelName; + + public DemoConversionRequest(String sketchUrl, String modelName){ + this.sketchUrl = sketchUrl; + this.modelName = modelName; + } +} diff --git a/src/main/java/com/siliconvalley/domain/rabbitMQ/dto/DemoConversionResponse.java b/src/main/java/com/siliconvalley/domain/rabbitMQ/dto/DemoConversionResponse.java new file mode 100644 index 0000000..89cfa4c --- /dev/null +++ b/src/main/java/com/siliconvalley/domain/rabbitMQ/dto/DemoConversionResponse.java @@ -0,0 +1,11 @@ +package com.siliconvalley.domain.rabbitMQ.dto; + +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class DemoConversionResponse { + private String canvasUrl; +} diff --git a/src/main/java/com/siliconvalley/domain/rabbitMQ/service/ConvertRequestSender.java b/src/main/java/com/siliconvalley/domain/rabbitMQ/service/ConvertRequestSender.java index 79f7253..0d31368 100644 --- a/src/main/java/com/siliconvalley/domain/rabbitMQ/service/ConvertRequestSender.java +++ b/src/main/java/com/siliconvalley/domain/rabbitMQ/service/ConvertRequestSender.java @@ -4,6 +4,7 @@ import com.siliconvalley.domain.item.subject.domain.Subject; import com.siliconvalley.domain.post.service.RankCachingService; import com.siliconvalley.domain.rabbitMQ.code.RabbitMQCode; +import com.siliconvalley.domain.rabbitMQ.dto.DemoConversionRequest; import com.siliconvalley.domain.rabbitMQ.dto.SketchConversionRequest; import com.siliconvalley.global.common.dto.Response; import lombok.RequiredArgsConstructor; @@ -28,4 +29,10 @@ public Response sendSketchConversionRequest(String sketchUrl, Long canvasId, Lon rabbitTemplate.convertAndSend(exchange, "sketch_conversion_request_queue" , request); return Response.of(RabbitMQCode.CONVERSION_REQUEST_SUCCESS, new CanvasConvertResponse(canvasId, rankCachingService.getTopPostThisWeek(subject.getId()))); } + + public Response sendDemoConversionRequest(String sketchUrl){ + DemoConversionRequest request = new DemoConversionRequest(sketchUrl, "panda"); + rabbitTemplate.convertAndSend(exchange, "demo_conversion_request_queue", request); + return Response.of(RabbitMQCode.CONVERSION_REQUEST_SUCCESS); + } } diff --git a/src/main/java/com/siliconvalley/domain/record/application/RecordCreateService.java b/src/main/java/com/siliconvalley/domain/record/application/RecordCreateService.java index 6dff7ba..38aae7a 100644 --- a/src/main/java/com/siliconvalley/domain/record/application/RecordCreateService.java +++ b/src/main/java/com/siliconvalley/domain/record/application/RecordCreateService.java @@ -36,7 +36,7 @@ public Response evaluateCanvasAndcreateRecord(Long profileId, Long stageId,Recor Profile profile = profileFindDao.findById(profileId); Stage stage = stageFindDao.findById(stageId); - if (recordFindDao.findByProfileId(profileId).isPresent()) { + if (recordFindDao.findByProfileIdAndStageId(profileId, stageId).isPresent()) { throw new RecordAlreadyExist(stage.getStageNum() + "번 스테이지 기록"); } diff --git a/src/main/java/com/siliconvalley/domain/record/dao/RecordFindDao.java b/src/main/java/com/siliconvalley/domain/record/dao/RecordFindDao.java index 02ead34..33de792 100644 --- a/src/main/java/com/siliconvalley/domain/record/dao/RecordFindDao.java +++ b/src/main/java/com/siliconvalley/domain/record/dao/RecordFindDao.java @@ -29,4 +29,5 @@ public Optional findByProfileId(Long profileId) { public Optional findByProfileIdAndStageId(Long profileId, Long stageId) { return recordRepository.findByProfileIdAndStageId(profileId, stageId); } + } diff --git a/src/main/java/com/siliconvalley/domain/sse/application/CanvasSseEmitterService.java b/src/main/java/com/siliconvalley/domain/sse/application/CanvasSseEmitterService.java index 3988746..4c6a4e1 100644 --- a/src/main/java/com/siliconvalley/domain/sse/application/CanvasSseEmitterService.java +++ b/src/main/java/com/siliconvalley/domain/sse/application/CanvasSseEmitterService.java @@ -12,7 +12,6 @@ public class CanvasSseEmitterService { private final CanvasSseEmitterRepository canvasSseEmitterRepository; private final CanvasSseEmitterCreater canvasSseEmitterCreater; - private final SseEmitterSender sseEmitterSender; public SseEmitter connect(Long profileId) { diff --git a/src/main/java/com/siliconvalley/global/config/RabbitMqConfig.java b/src/main/java/com/siliconvalley/global/config/RabbitMqConfig.java index ddb3e18..74868e7 100644 --- a/src/main/java/com/siliconvalley/global/config/RabbitMqConfig.java +++ b/src/main/java/com/siliconvalley/global/config/RabbitMqConfig.java @@ -31,6 +31,9 @@ Queue requestQueue() { return new Queue("sketch_conversion_request_queue", true); } + @Bean + Queue demoConversionRequestQueue() {return new Queue("demo_conversion_request_queue", true);} + @Bean Queue responseQueue() { return QueueBuilder.durable("sketch_conversion_response_queue") @@ -85,6 +88,11 @@ public Binding bindingRequestQueue(Queue requestQueue, TopicExchange topicExchan return BindingBuilder.bind(requestQueue).to(topicExchange).with("sketch_conversion_request_queue"); } + @Bean + public Binding bindingDemoRequestQueue(Queue demoConversionRequestQueue, TopicExchange topicExchange){ + return BindingBuilder.bind(demoConversionRequestQueue).to(topicExchange).with("demo_conversion_request_queue"); + } + @Bean public Binding bindingResponseQueue(Queue responseQueue, TopicExchange topicExchange) { return BindingBuilder.bind(responseQueue).to(topicExchange).with("sketch_conversion_response_queue"); diff --git a/src/test/java/com/siliconvalley/post/EmotionServiceTests.java b/src/test/java/com/siliconvalley/post/EmotionServiceTests.java new file mode 100644 index 0000000..77c4a04 --- /dev/null +++ b/src/test/java/com/siliconvalley/post/EmotionServiceTests.java @@ -0,0 +1,4 @@ +package com.siliconvalley.post; + +public class EmotionServiceTests { +} diff --git a/src/test/java/com/siliconvalley/profile/ProfileNameServiceTests.java b/src/test/java/com/siliconvalley/profile/ProfileNameServiceTests.java index 518a767..5aa22a9 100644 --- a/src/test/java/com/siliconvalley/profile/ProfileNameServiceTests.java +++ b/src/test/java/com/siliconvalley/profile/ProfileNameServiceTests.java @@ -1,12 +1,63 @@ package com.siliconvalley.profile; -import lombok.extern.slf4j.Slf4j; +import com.siliconvalley.domain.profile.dao.ProfileFindDao; +import com.siliconvalley.domain.profile.exception.ProfileNameDuplicateException; +import com.siliconvalley.domain.profile.exception.ProfileNameIncludeBadWordException; +import com.siliconvalley.domain.profile.application.ProfileNameFilterService; import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -@Slf4j +import static org.mockito.Mockito.when; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; + @ExtendWith(MockitoExtension.class) +@DisplayName("프로필 이름 생성 정책 테스트") public class ProfileNameServiceTests { + @InjectMocks + private ProfileNameFilterService profileNameFilterService; + + @Mock + private ProfileFindDao profileFindDao; + + @Test + @DisplayName("정책에 위반되지 않는 프로필 이름 생성") + void 유효한_프로필_이름_테스트() { + //given + String 유효한프로필이름 = "유효한이름"; + + //when + when(profileFindDao.existsByProfileName(유효한프로필이름)).thenReturn(false); + + //then + assertDoesNotThrow(() -> profileNameFilterService.profileNameFilter(유효한프로필이름)); + } + + @Test + @DisplayName("프로필 이름에 부적절한 단어 포함 시 예외 발생") + void 부적절한_단어_테스트() { + //given + String 부적절한단어포함프로필이름 = "지랄"; + + //then + assertThrows(ProfileNameIncludeBadWordException.class, () -> profileNameFilterService.profileNameFilter(부적절한단어포함프로필이름)); + } + + @Test + @DisplayName("이미 사용 중인 프로필 이름 제공 시 예외 발생") + void 중복_프로필_이름_테스트() { + //given + String 중복된프로필이름 = "중복이름"; + + //when + when(profileFindDao.existsByProfileName(중복된프로필이름)).thenReturn(true); + + //then + assertThrows(ProfileNameDuplicateException.class, () -> profileNameFilterService.profileNameFilter(중복된프로필이름)); + } } diff --git a/src/test/java/com/siliconvalley/vision/VisionDetectingServiceTests.java b/src/test/java/com/siliconvalley/vision/VisionDetectingServiceTests.java index 595bac2..79a719f 100644 --- a/src/test/java/com/siliconvalley/vision/VisionDetectingServiceTests.java +++ b/src/test/java/com/siliconvalley/vision/VisionDetectingServiceTests.java @@ -41,7 +41,7 @@ public class VisionDetectingServiceTests { Canvas mockCanvas = mock(Canvas.class, RETURNS_DEEP_STUBS); when(canvasFindDao.findById(canvasId)).thenReturn(mockCanvas); when(mockCanvas.getCanvas()).thenReturn("sampleCanvasData"); - when(visionService.detectObjects("sampleCanvasData")).thenReturn(Map.of("anotherModelName", 0.8f)); // 수정된 점수 + when(visionService.detectLabels("sampleCanvasData")).thenReturn(Map.of("anotherModelName", 0.8f)); // 수정된 점수 when(mockCanvas.getSubject().getPix2Pix().getModelName()).thenReturn("sampleModelName"); // When @@ -59,7 +59,7 @@ public class VisionDetectingServiceTests { Canvas mockCanvas = mock(Canvas.class, RETURNS_DEEP_STUBS); when(canvasFindDao.findById(canvasId)).thenReturn(mockCanvas); when(mockCanvas.getCanvas()).thenReturn("sampleCanvasData"); - when(visionService.detectObjects("sampleCanvasData")).thenReturn(Map.of("sampleModelName", 0.3f)); // 수정된 점수 + when(visionService.detectLabels("sampleCanvasData")).thenReturn(Map.of("sampleModelName", 0.3f)); // 수정된 점수 when(mockCanvas.getSubject().getPix2Pix().getModelName()).thenReturn("sampleModelName"); // When @@ -77,7 +77,7 @@ public class VisionDetectingServiceTests { Canvas mockCanvas = mock(Canvas.class, RETURNS_DEEP_STUBS); when(canvasFindDao.findById(canvasId)).thenReturn(mockCanvas); when(mockCanvas.getCanvas()).thenReturn("sampleCanvasData"); - when(visionService.detectObjects("sampleCanvasData")).thenReturn(Map.of("sampleModelName", 0.8f)); // 수정된 점수 + when(visionService.detectLabels("sampleCanvasData")).thenReturn(Map.of("sampleModelName", 0.8f)); // 수정된 점수 when(mockCanvas.getSubject().getPix2Pix().getModelName()).thenReturn("sampleModelName"); // When @@ -97,7 +97,7 @@ public class VisionDetectingServiceTests { when(mockCanvas.getCanvas()).thenReturn("sampleCanvasData"); // 탐지된 물체가 없을 경우 빈 Map 반환 - when(visionService.detectObjects("sampleCanvasData")).thenReturn(Map.of()); + when(visionService.detectLabels("sampleCanvasData")).thenReturn(Map.of()); // When Score result = visionDetectingService.calculateCanvasScore(canvasId); @@ -116,7 +116,7 @@ public class VisionDetectingServiceTests { when(mockCanvas.getCanvas()).thenReturn("sampleCanvasData"); // 탐지된 물체가 없을 경우 빈 Map 반환 - when(visionService.detectObjects("sampleCanvasData")).thenReturn(Map.of("Error", -1f)); + when(visionService.detectLabels("sampleCanvasData")).thenReturn(Map.of("Error", -1f)); // When Score result = visionDetectingService.calculateCanvasScore(canvasId); From 66cfc08027d4a8342004dbc50b3dc81ff186cccc Mon Sep 17 00:00:00 2001 From: Fishphobiagg Date: Wed, 27 Sep 2023 13:23:37 +0900 Subject: [PATCH 6/7] =?UTF-8?q?=EB=B9=8C=EB=93=9C=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/canvas/service/CanvasConvertService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/siliconvalley/domain/canvas/service/CanvasConvertService.java b/src/main/java/com/siliconvalley/domain/canvas/service/CanvasConvertService.java index dc5140b..5282434 100644 --- a/src/main/java/com/siliconvalley/domain/canvas/service/CanvasConvertService.java +++ b/src/main/java/com/siliconvalley/domain/canvas/service/CanvasConvertService.java @@ -12,6 +12,7 @@ import com.siliconvalley.domain.rabbitMQ.service.ConvertRequestSender; import com.siliconvalley.domain.sse.application.CanvasSseEmitterFInder; import com.siliconvalley.domain.sse.application.ConvertResultSender; +import com.siliconvalley.global.common.code.CommonCode; import com.siliconvalley.global.common.dto.Response; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -44,7 +45,7 @@ public Response convertSketchToCanvas(Long profileId, Long subjectId, String ske } public Response convertSketchToCanvasDemo(String sketch){ - + return Response.of(CommonCode.GOOD_REQUEST, null); } public Response updateSketchAndCanvas(Long profileId, Long canvasId, String sketch){ From 2321f625b77d632cf6baca6caf82987401f4beb5 Mon Sep 17 00:00:00 2001 From: ah9mon Date: Wed, 27 Sep 2023 14:36:45 +0900 Subject: [PATCH 7/7] =?UTF-8?q?Feat:=20Stage=20=EA=B8=B0=EB=A1=9D=20?= =?UTF-8?q?=EA=B0=B1=EC=8B=A0=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/record/code/RecordCode.java | 2 +- .../record/RecordCreateTest.java | 1 - .../record/RecordUpdateTest.java | 67 +++++++++++++++++++ 3 files changed, 68 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/siliconvalley/domain/record/code/RecordCode.java b/src/main/java/com/siliconvalley/domain/record/code/RecordCode.java index 21657d8..373f60e 100644 --- a/src/main/java/com/siliconvalley/domain/record/code/RecordCode.java +++ b/src/main/java/com/siliconvalley/domain/record/code/RecordCode.java @@ -6,7 +6,7 @@ public enum RecordCode implements ResponseCode { CREATE_SUCCESS(201, "스테이지 기록 생성 및 리워드 지급에 성공했습니다.", HttpStatus.CREATED), - UPDATE_SUCCESS(200, "스테이지 기록 변경 및 리워드 지급에 성공했습니다.", HttpStatus.NO_CONTENT); + UPDATE_SUCCESS(200, "스테이지 기록 변경 및 리워드 지급에 성공했습니다.", HttpStatus.OK); private final int code; private final String message; diff --git a/src/test/java/com/siliconvalley/record/RecordCreateTest.java b/src/test/java/com/siliconvalley/record/RecordCreateTest.java index 9d5377e..6f2c8b5 100644 --- a/src/test/java/com/siliconvalley/record/RecordCreateTest.java +++ b/src/test/java/com/siliconvalley/record/RecordCreateTest.java @@ -36,7 +36,6 @@ public class RecordCreateTest { @InjectMocks RecordCreateService recordCreateService; - @Mock RecordRepository recordRepository; @Mock RecordFindDao recordFindDao; @Mock ProfileFindDao profileFindDao; diff --git a/src/test/java/com/siliconvalley/record/RecordUpdateTest.java b/src/test/java/com/siliconvalley/record/RecordUpdateTest.java index a90e1de..9b93b18 100644 --- a/src/test/java/com/siliconvalley/record/RecordUpdateTest.java +++ b/src/test/java/com/siliconvalley/record/RecordUpdateTest.java @@ -1,4 +1,71 @@ package com.siliconvalley.record; +import com.siliconvalley.domain.google.service.VisionDetectingService; +import com.siliconvalley.domain.point.application.StageRewardApp; +import com.siliconvalley.domain.profile.domain.Profile; +import com.siliconvalley.domain.record.application.RecordUpdateService; +import com.siliconvalley.domain.record.dao.RecordFindDao; +import com.siliconvalley.domain.record.domain.Record; +import com.siliconvalley.domain.record.dto.RecordUpdateRequest; +import com.siliconvalley.domain.stage.domain.Score; +import com.siliconvalley.domain.stage.domain.Stage; +import com.siliconvalley.global.common.dto.Response; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +@DisplayName("기록 갱신 테스트") public class RecordUpdateTest { + + @InjectMocks + RecordUpdateService recordUpdateService; + + @Mock RecordFindDao recordFindDao; + @Mock StageRewardApp stageRewardApp; + @Mock VisionDetectingService visionDetectingService; + + @Test + @DisplayName("기록 갱신") + void 기록_갱신_테스트() { + // Given + // profile 생성 + Profile profile = Profile.builder().build(); + + // stage 생성 + Stage stage = Stage.builder() + .stageNum(1) + .point(100) + .timeLimit(120) + .build(); + + // record 생성 + Record record = Record.builder() + .score(3) + .profile(profile) + .stage(stage) + .build(); + + Long recordId = 1L; + Long canvasId = 1L; + RecordUpdateRequest dto = mock(RecordUpdateRequest.class); + when(recordFindDao.findById(recordId)).thenReturn(record); + when(dto.getCanvasId()).thenReturn(canvasId); + when(visionDetectingService.calculateCanvasScore(canvasId)).thenReturn(Score.HIGH); + + // When + Response response = recordUpdateService.evaluateCanvasAndupdateRecord(recordId, dto); + + // Then + Assertions.assertEquals(response.getStatus().getCode(), 200); + } + + }