diff --git a/.github/workflows/kkinikong-be-cd.yml b/.github/workflows/kkinikong-be-cd.yml index 0d4aeeca..6954ecc5 100644 --- a/.github/workflows/kkinikong-be-cd.yml +++ b/.github/workflows/kkinikong-be-cd.yml @@ -61,34 +61,34 @@ jobs: echo "๐Ÿณ ์ตœ์‹  develop ์ด๋ฏธ์ง€ pull" docker pull chaeeunkim/kkini-kong-be:develop - echo "๐Ÿงฒ docker-compose pull ๋กœ ์˜์กด ์ด๋ฏธ์ง€ ์ตœ์‹ ํ™”" - docker-compose pull + echo "๐Ÿงฒ docker compose pull ๋กœ ์˜์กด ์ด๋ฏธ์ง€ ์ตœ์‹ ํ™”" + docker compose pull if [ "$RUNNING" = "spring-blue" ]; then echo "โœ… ํ˜„์žฌ blue๊ฐ€ ์šด์˜ ์ค‘ -> green ๋ฐฐํฌ ์‹œ์ž‘" - docker-compose stop spring-green || true - docker-compose rm -f spring-green || true - docker-compose up -d spring-green + docker compose stop spring-green || true + docker compose rm -f spring-green || true + docker compose up -d spring-green echo "๐Ÿ”ง nginx ์„ค์ •์„ green(8081)์œผ๋กœ ๋ณ€๊ฒฝ" sudo sed -i 's/proxy_pass http:\/\/localhost:8080;/proxy_pass http:\/\/localhost:8081;/g' /etc/nginx/sites-available/default sudo nginx -s reload echo "๐Ÿงน ๊ธฐ์กด blue ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€" - docker-compose stop spring-blue || true + docker compose stop spring-blue || true else echo "โœ… ํ˜„์žฌ green์ด ์šด์˜ ์ค‘ -> blue ๋ฐฐํฌ ์‹œ์ž‘" - docker-compose stop spring-blue || true - docker-compose rm -f spring-blue || true - docker-compose up -d spring-blue + docker compose stop spring-blue || true + docker compose rm -f spring-blue || true + docker compose up -d spring-blue echo "๐Ÿ”ง nginx ์„ค์ •์„ blue(8080)์œผ๋กœ ๋ณ€๊ฒฝ" sudo sed -i 's/proxy_pass http:\/\/localhost:8081;/proxy_pass http:\/\/localhost:8080;/g' /etc/nginx/sites-available/default sudo nginx -s reload echo "๐Ÿงน ๊ธฐ์กด green ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€" - docker-compose stop spring-green || true + docker compose stop spring-green || true fi echo "๐Ÿฉบ Redis ์ƒํƒœ ํ™•์ธ ์ค‘..." diff --git a/src/main/java/com/kkinikong/be/feedback/controller/FeedbackController.java b/src/main/java/com/kkinikong/be/feedback/controller/FeedbackController.java index f14814ff..1e464022 100644 --- a/src/main/java/com/kkinikong/be/feedback/controller/FeedbackController.java +++ b/src/main/java/com/kkinikong/be/feedback/controller/FeedbackController.java @@ -23,7 +23,12 @@ public class FeedbackController { private final FeedbackService feedbackService; - @Operation(summary = "์˜๊ฒฌ ๋‚จ๊ธฐ๊ธฐ") + @Operation( + summary = "์˜๊ฒฌ ๋‚จ๊ธฐ๊ธฐ", + description = + "type์— SEARCH_FOOD(\"์Œ์‹๊ฒฐ๊ณผ์—†์Œ\")" + + " SEARCH_RESTAURANT(\"์‹๋‹น๊ฒฐ๊ณผ์—†์Œ\")," + + " SEARCH_COMMUNITY(\"์ปค๋ฎค๋‹ˆํ‹ฐ๊ฒฐ๊ณผ์—†์Œ\") ์ค‘ ํ•˜๋‚˜๋กœ ์˜๊ฒฌ์„ ๋‚จ๊น๋‹ˆ๋‹ค.") @PostMapping("") public ResponseEntity> addFeedback(@RequestBody FeedbackRequest request) { feedbackService.addFeedback(request); diff --git a/src/main/java/com/kkinikong/be/feedback/domain/Feedback.java b/src/main/java/com/kkinikong/be/feedback/domain/Feedback.java index 37571158..a15ab5f3 100644 --- a/src/main/java/com/kkinikong/be/feedback/domain/Feedback.java +++ b/src/main/java/com/kkinikong/be/feedback/domain/Feedback.java @@ -5,6 +5,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; +import com.kkinikong.be.feedback.domain.type.FeedbackType; import com.kkinikong.be.global.entity.BaseEntity; @Table(name = "feedbacks") @@ -24,9 +25,14 @@ public class Feedback extends BaseEntity { @Column(name = "content", length = 6000) private String content; + @Column(name = "type") + @Enumerated(EnumType.STRING) + private FeedbackType type; + @Builder - public Feedback(int rating, String content) { + public Feedback(int rating, String content, FeedbackType type) { this.rating = rating; this.content = content; + this.type = type; } } diff --git a/src/main/java/com/kkinikong/be/feedback/domain/type/FeedbackType.java b/src/main/java/com/kkinikong/be/feedback/domain/type/FeedbackType.java new file mode 100644 index 00000000..21216cfe --- /dev/null +++ b/src/main/java/com/kkinikong/be/feedback/domain/type/FeedbackType.java @@ -0,0 +1,16 @@ +package com.kkinikong.be.feedback.domain.type; + +import lombok.Getter; + +@Getter +public enum FeedbackType { + SEARCH_FOOD("์Œ์‹๊ฒฐ๊ณผ์—†์Œ"), + SEARCH_RESTAURANT("์‹๋‹น๊ฒฐ๊ณผ์—†์Œ"), + SEARCH_COMMUNITY("์ปค๋ฎค๋‹ˆํ‹ฐ๊ฒฐ๊ณผ์—†์Œ"); + + private final String label; + + FeedbackType(String label) { + this.label = label; + } +} diff --git a/src/main/java/com/kkinikong/be/feedback/dto/request/FeedbackRequest.java b/src/main/java/com/kkinikong/be/feedback/dto/request/FeedbackRequest.java index bfa9a4ac..cbb392de 100644 --- a/src/main/java/com/kkinikong/be/feedback/dto/request/FeedbackRequest.java +++ b/src/main/java/com/kkinikong/be/feedback/dto/request/FeedbackRequest.java @@ -4,4 +4,7 @@ import jakarta.validation.constraints.Min; import jakarta.validation.constraints.Size; -public record FeedbackRequest(@Min(1) @Max(5) int rating, @Size(max = 6000) String content) {} +import com.kkinikong.be.feedback.domain.type.FeedbackType; + +public record FeedbackRequest( + @Min(1) @Max(5) int rating, @Size(max = 6000) String content, FeedbackType type) {} diff --git a/src/main/java/com/kkinikong/be/feedback/service/FeedbackService.java b/src/main/java/com/kkinikong/be/feedback/service/FeedbackService.java index 615b5af8..11dd2c1a 100644 --- a/src/main/java/com/kkinikong/be/feedback/service/FeedbackService.java +++ b/src/main/java/com/kkinikong/be/feedback/service/FeedbackService.java @@ -20,7 +20,12 @@ public class FeedbackService { @Transactional public void addFeedback(FeedbackRequest request) { Feedback feedback = - Feedback.builder().rating(request.rating()).content(request.content()).build(); + Feedback.builder() + .rating(request.rating()) + .content(request.content()) + .type(request.type()) + .build(); + feedbackRepository.save(feedback); } } diff --git a/src/test/java/com/kkinikong/be/community/service/CommunityServiceTest.java b/src/test/java/com/kkinikong/be/community/service/CommunityServiceTest.java index 11fcb146..a721e6b2 100644 --- a/src/test/java/com/kkinikong/be/community/service/CommunityServiceTest.java +++ b/src/test/java/com/kkinikong/be/community/service/CommunityServiceTest.java @@ -4,20 +4,15 @@ import java.util.ArrayList; import java.util.List; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.kkinikong.be.community.domain.CommunityPost; import com.kkinikong.be.community.repository.communityPost.CommunityPostRepository; import com.kkinikong.be.user.domain.User; import com.kkinikong.be.user.repository.UserRepository; @@ -50,33 +45,33 @@ void setUp() { } } - @Test - @DisplayName("์„œ๋กœ ๋‹ค๋ฅธ ์œ ์ €๋“ค์ด ๋™์‹œ์— ์ข‹์•„์š” ๋ˆ„๋ฅด๋Š” ๊ฒฝ์šฐ") - void testConcurrentLikeToggleWithDifferentUsers() throws InterruptedException { - // given - final long postId = 24; // ํ…Œ์ŠคํŠธ์šฉ ๊ฒŒ์‹œ๊ธ€ ID - ExecutorService executorService = Executors.newFixedThreadPool(THREAD_COUNT); - CountDownLatch countDownLatch = new CountDownLatch(THREAD_COUNT); - - // when - for (int i = 0; i < THREAD_COUNT; i++) { - Long userId = userIds.get(i); - executorService.execute( - () -> { - try { - communityService.postCommunityPostLike(postId, userId); - } finally { - countDownLatch.countDown(); - } - }); - } - - countDownLatch.await(); // ๋ชจ๋“  ์Šค๋ ˆ๋“œ ์ž‘์—… ๋๋‚  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ - - // then - CommunityPost post = communityPostRepository.findById(postId).orElseThrow(); - System.out.println("์ตœ์ข… ์ข‹์•„์š” ์ˆ˜: " + post.getLikeCount()); - - assertThat(post.getLikeCount()).isEqualTo(THREAD_COUNT); // ์ข‹์•„์š” 100๊ฐœ๊ฐ€ ๋˜์–ด์•ผ ํ•จ - } + // @Test + // @DisplayName("์„œ๋กœ ๋‹ค๋ฅธ ์œ ์ €๋“ค์ด ๋™์‹œ์— ์ข‹์•„์š” ๋ˆ„๋ฅด๋Š” ๊ฒฝ์šฐ") + // void testConcurrentLikeToggleWithDifferentUsers() throws InterruptedException { + // // given + // final long postId = 24; // ํ…Œ์ŠคํŠธ์šฉ ๊ฒŒ์‹œ๊ธ€ ID + // ExecutorService executorService = Executors.newFixedThreadPool(THREAD_COUNT); + // CountDownLatch countDownLatch = new CountDownLatch(THREAD_COUNT); + // + // // when + // for (int i = 0; i < THREAD_COUNT; i++) { + // Long userId = userIds.get(i); + // executorService.execute( + // () -> { + // try { + // communityService.postCommunityPostLike(postId, userId); + // } finally { + // countDownLatch.countDown(); + // } + // }); + // } + // + // countDownLatch.await(); // ๋ชจ๋“  ์Šค๋ ˆ๋“œ ์ž‘์—… ๋๋‚  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ + // + // // then + // CommunityPost post = communityPostRepository.findById(postId).orElseThrow(); + // System.out.println("์ตœ์ข… ์ข‹์•„์š” ์ˆ˜: " + post.getLikeCount()); + // + // assertThat(post.getLikeCount()).isEqualTo(THREAD_COUNT); // ์ข‹์•„์š” 100๊ฐœ๊ฐ€ ๋˜์–ด์•ผ ํ•จ + // } }