diff --git a/src/main/java/org/ezcode/codetest/application/problem/dto/request/ProblemCreateRequest.java b/src/main/java/org/ezcode/codetest/application/problem/dto/request/ProblemCreateRequest.java index 6cd34636..a1565e18 100644 --- a/src/main/java/org/ezcode/codetest/application/problem/dto/request/ProblemCreateRequest.java +++ b/src/main/java/org/ezcode/codetest/application/problem/dto/request/ProblemCreateRequest.java @@ -1,5 +1,7 @@ package org.ezcode.codetest.application.problem.dto.request; +import java.util.List; + import org.ezcode.codetest.domain.problem.model.entity.Problem; import org.ezcode.codetest.domain.problem.model.enums.Category; import org.ezcode.codetest.domain.problem.model.enums.Difficulty; @@ -14,7 +16,7 @@ public record ProblemCreateRequest( @NotNull(message = "카테고리를 설정해야 합니다.") @Schema(description = "카테고리", example = "FOR_BEGINNER") - Category category, + List categories, @NotBlank(message = "문제 제목을 입력하세요.") @Schema(description = "제목", example = "A+B") @@ -47,10 +49,10 @@ public static Problem toEntity(ProblemCreateRequest request, User user) { return Problem.builder() .creator(user) - .category(request.category) + .categories(request.categories) .title(request.title) .description(request.description) - .difficulty(request.difficulty.getDifficulty()) + .difficulty(request.difficulty) .score(request.difficulty.getScore()) .memoryLimit(request.memoryLimit) .timeLimit(request.timeLimit) diff --git a/src/main/java/org/ezcode/codetest/application/problem/dto/request/ProblemUpdateRequest.java b/src/main/java/org/ezcode/codetest/application/problem/dto/request/ProblemUpdateRequest.java index f9ffebf9..e9a8c3e0 100644 --- a/src/main/java/org/ezcode/codetest/application/problem/dto/request/ProblemUpdateRequest.java +++ b/src/main/java/org/ezcode/codetest/application/problem/dto/request/ProblemUpdateRequest.java @@ -1,5 +1,7 @@ package org.ezcode.codetest.application.problem.dto.request; +import java.util.List; + import org.ezcode.codetest.domain.problem.model.entity.Problem; import org.ezcode.codetest.domain.problem.model.enums.Category; import org.ezcode.codetest.domain.problem.model.enums.Difficulty; @@ -11,7 +13,7 @@ public record ProblemUpdateRequest( @Schema(description = "카테고리", example = "FOR_BEGINNER") - Category category, + List categories, @Schema(description = "제목", example = "A+B") String title, @@ -37,10 +39,10 @@ public static Problem from(ProblemUpdateRequest request, User user) { return Problem.builder() .creator(user) - .category(request.category) + .categories(request.categories) .title(request.title) .description(request.description) - .difficulty(request.difficulty.getDifficulty()) + .difficulty(request.difficulty) .score(request.difficulty.getScore()) .memoryLimit(request.memoryLimit) .timeLimit(request.timeLimit) diff --git a/src/main/java/org/ezcode/codetest/application/problem/dto/response/ProblemDetailResponse.java b/src/main/java/org/ezcode/codetest/application/problem/dto/response/ProblemDetailResponse.java index eb154f22..6184066d 100644 --- a/src/main/java/org/ezcode/codetest/application/problem/dto/response/ProblemDetailResponse.java +++ b/src/main/java/org/ezcode/codetest/application/problem/dto/response/ProblemDetailResponse.java @@ -1,9 +1,11 @@ package org.ezcode.codetest.application.problem.dto.response; import java.time.LocalDateTime; +import java.util.List; import org.ezcode.codetest.domain.problem.model.entity.Problem; import org.ezcode.codetest.domain.problem.model.enums.Category; +import org.ezcode.codetest.domain.problem.model.enums.Difficulty; import org.ezcode.codetest.domain.problem.model.enums.Reference; import io.swagger.v3.oas.annotations.media.Schema; @@ -19,7 +21,7 @@ public record ProblemDetailResponse( String creator, @Schema(description = "카테고리", example = "FOR_BEGINNER") - Category category, + List categories, @Schema(description = "제목", example = "A+B") String title, @@ -31,7 +33,7 @@ public record ProblemDetailResponse( int score, @Schema(description = "난이도", example = "BRONZE") - String difficulty, + Difficulty difficulty, @Schema(description = "메모리 제한(KB)", example = "30000") Long memoryLimit, @@ -55,7 +57,7 @@ public static ProblemDetailResponse from(Problem problem) { return ProblemDetailResponse.builder() .id(problem.getId()) .creator(problem.getCreator().getNickname()) - .category(problem.getCategory()) + .categories(problem.getCategories()) .title(problem.getTitle()) .description(problem.getDescription()) .score(problem.getScore()) diff --git a/src/main/java/org/ezcode/codetest/application/problem/dto/response/ProblemResponse.java b/src/main/java/org/ezcode/codetest/application/problem/dto/response/ProblemResponse.java index 9a35fe02..3a7c27cf 100644 --- a/src/main/java/org/ezcode/codetest/application/problem/dto/response/ProblemResponse.java +++ b/src/main/java/org/ezcode/codetest/application/problem/dto/response/ProblemResponse.java @@ -1,7 +1,10 @@ package org.ezcode.codetest.application.problem.dto.response; +import java.util.List; + import org.ezcode.codetest.domain.problem.model.entity.Problem; import org.ezcode.codetest.domain.problem.model.enums.Category; +import org.ezcode.codetest.domain.problem.model.enums.Difficulty; import org.ezcode.codetest.domain.problem.model.enums.Reference; import io.swagger.v3.oas.annotations.media.Schema; @@ -17,7 +20,7 @@ public record ProblemResponse( String creator, @Schema(description = "카테고리", example = "FOR_BEGINNER") - Category category, + List categories, @Schema(description = "제목", example = "A+B") String title, @@ -26,7 +29,7 @@ public record ProblemResponse( int score, @Schema(description = "난이도", example = "BRONZE") - String difficulty, + Difficulty difficulty, @Schema(description = "출처", example = "ORIGINAL") Reference reference @@ -42,7 +45,7 @@ public static ProblemResponse from(Problem problem) { return ProblemResponse.builder() .id(problem.getId()) .creator(problem.getCreator() != null ? problem.getCreator().getNickname() : "존재하지 않는 이름.") - .category(problem.getCategory()) + .categories(problem.getCategories()) .title(problem.getTitle()) .score(problem.getScore()) .difficulty(problem.getDifficulty()) diff --git a/src/main/java/org/ezcode/codetest/application/problem/dto/response/ProblemSearchResponse.java b/src/main/java/org/ezcode/codetest/application/problem/dto/response/ProblemSearchResponse.java index 19217084..15b104f8 100644 --- a/src/main/java/org/ezcode/codetest/application/problem/dto/response/ProblemSearchResponse.java +++ b/src/main/java/org/ezcode/codetest/application/problem/dto/response/ProblemSearchResponse.java @@ -1,5 +1,7 @@ package org.ezcode.codetest.application.problem.dto.response; +import java.util.List; + import org.ezcode.codetest.domain.problem.model.entity.ProblemSearchDocument; import lombok.Builder; @@ -11,7 +13,7 @@ public record ProblemSearchResponse( String title, - String category, + List category, String difficulty, @@ -27,7 +29,7 @@ public static ProblemSearchResponse from(ProblemSearchDocument document) { return ProblemSearchResponse.builder() .id(document.getId()) .title(document.getTitle()) - .category(document.getCategory().toString()) + .category(document.getCategories().stream().map(Enum::toString).toList()) .difficulty(document.getDifficulty()) .reference(document.getReference().toString()) .description(document.getDescription()) diff --git a/src/main/java/org/ezcode/codetest/application/problem/service/ProblemSearchService.java b/src/main/java/org/ezcode/codetest/application/problem/service/ProblemSearchService.java index bf16f95b..8846a24d 100644 --- a/src/main/java/org/ezcode/codetest/application/problem/service/ProblemSearchService.java +++ b/src/main/java/org/ezcode/codetest/application/problem/service/ProblemSearchService.java @@ -1,5 +1,6 @@ package org.ezcode.codetest.application.problem.service; +import java.util.Collection; import java.util.List; import java.util.Optional; import java.util.Set; @@ -21,20 +22,39 @@ public class ProblemSearchService { public Set getProblemSuggestions(String keyword) { - Set result = searchDomainService.getSuggestionsByKeyword(keyword); - - return result.stream() - .flatMap(doc -> Stream.of( - Optional.ofNullable(doc.getTitle()), - Optional.ofNullable(doc.getReference()).map(Enum::toString), - Optional.ofNullable(doc.getDifficulty()), - Optional.ofNullable(doc.getCategory()).map(Enum::toString), - Optional.ofNullable(doc.getDescription()), - Optional.ofNullable(doc.getCategoryKor()), - Optional.ofNullable(doc.getDifficultyEn()).map(Enum::toString), + return searchDomainService + .getSuggestionsByKeyword(keyword) + .stream() + .flatMap(doc -> { + Stream.Builder searchedKeyword = Stream.builder(); + + Optional.ofNullable(doc.getTitle()).ifPresent(searchedKeyword::add); + Optional.ofNullable(doc.getReference()) + .map(Enum::toString) + .ifPresent(searchedKeyword::add); + Optional.ofNullable(doc.getDifficulty()) + .ifPresent(searchedKeyword::add); + Optional.ofNullable(doc.getDescription()) + .ifPresent(searchedKeyword::add); + Optional.ofNullable(doc.getDifficultyEn()) + .map(Enum::toString) + .ifPresent(searchedKeyword::add); Optional.ofNullable(doc.getReferenceKor()) - )) - .flatMap(Optional::stream) + .ifPresent(searchedKeyword::add); + + Optional.ofNullable(doc.getCategories()) + .stream() + .flatMap(Collection::stream) + .map(Enum::toString) + .forEach(searchedKeyword::add); + + Optional.ofNullable(doc.getCategoriesKor()) + .stream() + .flatMap(Collection::stream) + .forEach(searchedKeyword::add); + + return searchedKeyword.build(); + }) .map(String::toUpperCase) .collect(Collectors.toSet()); } diff --git a/src/main/java/org/ezcode/codetest/application/problem/service/ProblemService.java b/src/main/java/org/ezcode/codetest/application/problem/service/ProblemService.java index 20481e19..c0ac82ac 100644 --- a/src/main/java/org/ezcode/codetest/application/problem/service/ProblemService.java +++ b/src/main/java/org/ezcode/codetest/application/problem/service/ProblemService.java @@ -75,7 +75,7 @@ public ProblemDetailResponse modifyProblem(Long problemId, ProblemUpdateRequest findProblem.update( findProblem.getCreator(), - request.category(), + request.categories(), request.title(), request.description(), request.difficulty(), diff --git a/src/main/java/org/ezcode/codetest/domain/game/service/CharacterStatusDomainService.java b/src/main/java/org/ezcode/codetest/domain/game/service/CharacterStatusDomainService.java index 3304c83b..bddece12 100644 --- a/src/main/java/org/ezcode/codetest/domain/game/service/CharacterStatusDomainService.java +++ b/src/main/java/org/ezcode/codetest/domain/game/service/CharacterStatusDomainService.java @@ -5,6 +5,7 @@ import java.util.Collection; import java.util.List; import java.util.Map; +import java.util.concurrent.ThreadLocalRandom; import java.util.stream.Stream; import org.ezcode.codetest.domain.game.exception.GameException; @@ -56,12 +57,14 @@ public GameCharacter getGameCharacter(Long userId) { .orElseThrow(() -> new GameException(GameExceptionCode.CHARACTER_NOT_FOUND)); } - public void gameCharacterLevelUp(Long userId, boolean isProblemSolved, String problemCategory) { + public void gameCharacterLevelUp(Long userId, boolean isProblemSolved, List problemCategory) { if (!isProblemSolved) return; - Map increaseStatRate = statUpdateUtil.getStatIncreasePerProblem(problemCategory); + int randomIndex = ThreadLocalRandom.current().nextInt(problemCategory.size()); + + Map increaseStatRate = statUpdateUtil.getStatIncreasePerProblem(problemCategory.get(randomIndex)); GameCharacter character = characterRepository.findByUserId(userId) .orElseThrow(() -> new GameException(GameExceptionCode.CHARACTER_NOT_FOUND)); diff --git a/src/main/java/org/ezcode/codetest/domain/problem/model/entity/Problem.java b/src/main/java/org/ezcode/codetest/domain/problem/model/entity/Problem.java index 2395fdc3..2d361261 100644 --- a/src/main/java/org/ezcode/codetest/domain/problem/model/entity/Problem.java +++ b/src/main/java/org/ezcode/codetest/domain/problem/model/entity/Problem.java @@ -10,6 +10,7 @@ import org.ezcode.codetest.domain.user.model.entity.User; import jakarta.persistence.CascadeType; +import jakarta.persistence.CollectionTable; import jakarta.persistence.Column; import jakarta.persistence.ElementCollection; import jakarta.persistence.Entity; @@ -40,10 +41,6 @@ public class Problem extends BaseEntity { @JoinColumn(name = "creator_id", nullable = false) private User creator; - @Enumerated(EnumType.STRING) - @Column(nullable = false) - private Category category; - @Column(nullable = false) private String title; @@ -53,8 +50,9 @@ public class Problem extends BaseEntity { @Column(nullable = false) private int score; + @Enumerated(EnumType.STRING) @Column(nullable = false) - private String difficulty; + private Difficulty difficulty; @Column(nullable = false) private Long memoryLimit; @@ -81,11 +79,21 @@ public class Problem extends BaseEntity { @ElementCollection(fetch = FetchType.LAZY) private List imageUrl = new ArrayList<>(); + @ElementCollection(fetch = FetchType.LAZY) + @CollectionTable( + name = "problem_categories", + joinColumns = @JoinColumn(name = "problem_id") + ) + @Column(name = "category") + @Enumerated(EnumType.STRING) + private List categories = new ArrayList<>(); + @Builder - public Problem(User creator, Category category, String title, String description, int score, String difficulty, + public Problem(User creator, List categories, String title, String description, int score, + Difficulty difficulty, Long memoryLimit, Long timeLimit, Reference reference) { this.creator = creator; - this.category = category; + this.categories = categories; this.title = title; this.description = description; this.score = score; @@ -99,12 +107,13 @@ public Problem(User creator, Category category, String title, String description } // 여러개를 하나의 객체로 만드는 것 - public static Problem of(User creator, Category category, String title, String description, int score, String difficulty, + public static Problem of(User creator, List categories, String title, String description, int score, + Difficulty difficulty, Long memoryLimit, Long timeLimit, Reference reference) { return Problem.builder() .creator(creator) - .category(category) + .categories(categories) .title(title) .description(description) .score(score) @@ -116,20 +125,27 @@ public static Problem of(User creator, Category category, String title, String d } // 문제 수정 로직 - public void update(User creator, Category category, String title, String description, Difficulty difficulty, + public void update(User creator, List categories, String title, String description, Difficulty difficulty, Long memoryLimit, Long timeLimit, Reference reference) { - if (creator != null) this.creator = creator; - if (category != null) this.category = category; - if (title != null) this.title = title; - if (description != null) this.description = description; + if (creator != null) + this.creator = creator; + if (categories != null) + this.categories = categories; + if (title != null) + this.title = title; + if (description != null) + this.description = description; if (difficulty != null) { - this.difficulty = difficulty.getDifficulty(); + this.difficulty = difficulty; this.score = difficulty.getScore(); } - if (memoryLimit != null)this.memoryLimit = memoryLimit; - if (timeLimit != null) this.timeLimit = timeLimit; - if (reference != null) this.reference = reference; + if (memoryLimit != null) + this.memoryLimit = memoryLimit; + if (timeLimit != null) + this.timeLimit = timeLimit; + if (reference != null) + this.reference = reference; } public void softDelete() { @@ -145,7 +161,6 @@ public void addImage(String image) { if (imageUrl.contains(image)) { return; // 중복된 URL 무시 } - imageUrl.add(image); } diff --git a/src/main/java/org/ezcode/codetest/domain/problem/model/entity/ProblemSearchDocument.java b/src/main/java/org/ezcode/codetest/domain/problem/model/entity/ProblemSearchDocument.java index 43fee700..31c7299b 100644 --- a/src/main/java/org/ezcode/codetest/domain/problem/model/entity/ProblemSearchDocument.java +++ b/src/main/java/org/ezcode/codetest/domain/problem/model/entity/ProblemSearchDocument.java @@ -1,5 +1,7 @@ package org.ezcode.codetest.domain.problem.model.entity; +import java.util.*; + import org.ezcode.codetest.domain.problem.model.enums.Category; import org.ezcode.codetest.domain.problem.model.enums.Difficulty; import org.ezcode.codetest.domain.problem.model.enums.Reference; @@ -56,7 +58,7 @@ public class ProblemSearchDocument { ) } ) - private Category category; + private List categories; @MultiField( mainField = @Field( @@ -71,7 +73,7 @@ public class ProblemSearchDocument { ) } ) - private String categoryKor; + private List categoriesKor; @MultiField( mainField = @Field( @@ -153,11 +155,11 @@ public class ProblemSearchDocument { public ProblemSearchDocument( Long id, String title, - Category category, + List categories, String difficulty, Reference reference, String description, - String categoryKor, + List categoriesKor, Difficulty difficultyEn, String referenceKor, int score, @@ -165,11 +167,11 @@ public ProblemSearchDocument( ) { this.id = id; this.title = title; - this.category = category; + this.categories = categories; this.difficulty = difficulty; this.reference = reference; this.description = description; - this.categoryKor = categoryKor; + this.categoriesKor = categoriesKor; this.difficultyEn = difficultyEn; this.referenceKor = referenceKor; this.score = score; @@ -180,13 +182,13 @@ public static ProblemSearchDocument from(Problem problem) { return ProblemSearchDocument.builder() .id(problem.getId()) .title(problem.getTitle()) - .category(problem.getCategory()) - .difficulty(problem.getDifficulty()) + .categories(problem.getCategories()) + .difficulty(problem.getDifficulty().getDifficulty()) .reference(problem.getReference()) .description(problem.getDescription()) .score(problem.getScore()) - .categoryKor(problem.getCategory().getDescription()) - .difficultyEn(Difficulty.getDifficultyFromKor(problem.getDifficulty())) + .categoriesKor(problem.getCategories().stream().map(Category::getDescription).toList()) + .difficultyEn(problem.getDifficulty()) .referenceKor(problem.getReference().getDescription()) .isDeleted(problem.getIsDeleted()) .build(); @@ -199,9 +201,12 @@ public void softDelete() { public void update(Problem problem) { if (problem.getId().equals(this.id)) { this.title = problem.getTitle(); - this.category = problem.getCategory(); - this.difficulty = problem.getDifficulty(); + this.categories = problem.getCategories(); + this.categoriesKor = problem.getCategories().stream().map(Category::getDescription).toList(); + this.difficulty = problem.getDifficulty().getDifficulty(); + this.difficultyEn = problem.getDifficulty(); this.reference = problem.getReference(); + this.referenceKor = problem.getReference().getDescription(); this.description = problem.getDescription(); this.score = problem.getScore(); } diff --git a/src/main/java/org/ezcode/codetest/domain/problem/model/enums/Difficulty.java b/src/main/java/org/ezcode/codetest/domain/problem/model/enums/Difficulty.java index 8b7e9872..2d9d6808 100644 --- a/src/main/java/org/ezcode/codetest/domain/problem/model/enums/Difficulty.java +++ b/src/main/java/org/ezcode/codetest/domain/problem/model/enums/Difficulty.java @@ -9,13 +9,13 @@ @Getter public enum Difficulty { - LV1("1", 10), - LV2("2", 20), - LV3("3", 40), - LV4("4", 80), - LV5("5", 160), - LV6("6", 320), - LV7("7", 640); + LV1("레벨1", 10), + LV2("레벨2", 20), + LV3("레벨3", 40), + LV4("레벨4", 80), + LV5("레벨5", 160), + LV6("레벨6", 320), + LV7("레벨7", 640); private final String difficulty; diff --git a/src/main/java/org/ezcode/codetest/domain/submission/model/SubmissionResult.java b/src/main/java/org/ezcode/codetest/domain/submission/model/SubmissionResult.java index 51f3fa3e..c74b53b6 100644 --- a/src/main/java/org/ezcode/codetest/domain/submission/model/SubmissionResult.java +++ b/src/main/java/org/ezcode/codetest/domain/submission/model/SubmissionResult.java @@ -1,5 +1,7 @@ package org.ezcode.codetest.domain.submission.model; +import java.util.List; + import org.ezcode.codetest.domain.submission.model.entity.UserProblemResult; import lombok.Builder; @@ -9,7 +11,7 @@ public record SubmissionResult( Long userId, - String problemCategory, + List problemCategory, boolean isSolved, diff --git a/src/main/java/org/ezcode/codetest/domain/submission/model/entity/UserProblemResult.java b/src/main/java/org/ezcode/codetest/domain/submission/model/entity/UserProblemResult.java index a6fff671..66bb8767 100644 --- a/src/main/java/org/ezcode/codetest/domain/submission/model/entity/UserProblemResult.java +++ b/src/main/java/org/ezcode/codetest/domain/submission/model/entity/UserProblemResult.java @@ -2,6 +2,8 @@ import org.ezcode.codetest.common.base.entity.BaseEntity; import org.ezcode.codetest.domain.problem.model.entity.Problem; +import java.util.List; + import org.ezcode.codetest.domain.problem.model.enums.Category; import org.ezcode.codetest.domain.user.model.entity.User; @@ -50,9 +52,9 @@ public void updateResult(boolean isCorrect) { this.isCorrect = isCorrect; } - public String getProblemCategoryDescription() { + public List getProblemCategoryDescription() { - return this.problem.getCategory().getDescription(); + return this.problem.getCategories().stream().map(Category::getDescription).toList(); } } diff --git a/src/main/java/org/ezcode/codetest/infrastructure/elasticsearch/repository/ProblemElasticsearchAdapter.java b/src/main/java/org/ezcode/codetest/infrastructure/elasticsearch/repository/ProblemElasticsearchAdapter.java index 8e63e48f..bcf40619 100644 --- a/src/main/java/org/ezcode/codetest/infrastructure/elasticsearch/repository/ProblemElasticsearchAdapter.java +++ b/src/main/java/org/ezcode/codetest/infrastructure/elasticsearch/repository/ProblemElasticsearchAdapter.java @@ -32,6 +32,10 @@ private String getElement(List list) { return (list != null && !list.isEmpty()) ? list.get(0) : null; } + private List getElementList(List list) { + return (list != null && !list.isEmpty()) ? list : null; + } + public Set findDocumentContainingKeyword(String keyword) { SearchHits hits = searchRepository.findFieldsContainingKeyword(keyword); @@ -41,20 +45,20 @@ public Set findDocumentContainingKeyword(String keyword) Map> hitHighlightFields = hit.getHighlightFields(); String titleStr = getElement(hitHighlightFields.get("title")); - String categoryStr = getElement(hitHighlightFields.get("category")); + List categoryStr = getElementList(hitHighlightFields.get("categories")); String referenceStr = getElement(hitHighlightFields.get("reference")); String difficulty = getElement(hitHighlightFields.get("difficulty")); String descHighlight = getElement(hitHighlightFields.get("description")); - String categoryKorStr = getElement(hitHighlightFields.get("categoryKor")); + List categoryKorStr = getElementList(hitHighlightFields.get("categoriesKor")); String referenceKorStr = getElement(hitHighlightFields.get("referenceKor")); String difficultyEn = getElement(hitHighlightFields.get("difficultyEn")); ProblemSearchDocument.ProblemSearchDocumentBuilder builder = ProblemSearchDocument.builder() .title(titleStr) - .category(categoryStr != null ? Category.valueOf(categoryStr) : null) + .categories(categoryStr != null ? categoryStr.stream().map(Category::valueOf).toList() : null) .reference(referenceStr != null ? Reference.valueOf(referenceStr) : null) .difficulty(difficulty) - .categoryKor(categoryKorStr) + .categoriesKor(categoryKorStr) .referenceKor(referenceKorStr) .difficultyEn(difficultyEn != null ? Difficulty.valueOf(difficultyEn) : null); diff --git a/src/main/java/org/ezcode/codetest/infrastructure/event/dto/GameLevelUpEvent.java b/src/main/java/org/ezcode/codetest/infrastructure/event/dto/GameLevelUpEvent.java index d0093381..479bedc8 100644 --- a/src/main/java/org/ezcode/codetest/infrastructure/event/dto/GameLevelUpEvent.java +++ b/src/main/java/org/ezcode/codetest/infrastructure/event/dto/GameLevelUpEvent.java @@ -1,12 +1,14 @@ package org.ezcode.codetest.infrastructure.event.dto; +import java.util.List; + public record GameLevelUpEvent( Long userId, boolean isSolved, - String problemCategory + List problemCategory ) { } diff --git a/src/main/java/org/ezcode/codetest/infrastructure/event/publisher/ProblemEventPublisher.java b/src/main/java/org/ezcode/codetest/infrastructure/event/publisher/ProblemEventPublisher.java index 7a5568bc..57f63606 100644 --- a/src/main/java/org/ezcode/codetest/infrastructure/event/publisher/ProblemEventPublisher.java +++ b/src/main/java/org/ezcode/codetest/infrastructure/event/publisher/ProblemEventPublisher.java @@ -4,6 +4,7 @@ import org.ezcode.codetest.domain.submission.model.SubmissionResult; import org.ezcode.codetest.infrastructure.event.dto.GameLevelUpEvent; import org.springframework.context.ApplicationEventPublisher; +import java.util.List; import org.springframework.stereotype.Component; import lombok.RequiredArgsConstructor; @@ -19,7 +20,7 @@ public void publishProblemSolveEvent(SubmissionResult event) { if(event.hasBeenSolved()) return; Long userId = event.userId(); - String problemCategory = event.problemCategory(); + List problemCategory = event.problemCategory(); boolean isSolved = event.isSolved(); publisher.publishEvent(new GameLevelUpEvent(userId, isSolved, problemCategory)); diff --git a/src/main/java/org/ezcode/codetest/infrastructure/persistence/repository/problem/ProblemQueryRepositoryImpl.java b/src/main/java/org/ezcode/codetest/infrastructure/persistence/repository/problem/ProblemQueryRepositoryImpl.java index 9c15ae65..04fc80e9 100644 --- a/src/main/java/org/ezcode/codetest/infrastructure/persistence/repository/problem/ProblemQueryRepositoryImpl.java +++ b/src/main/java/org/ezcode/codetest/infrastructure/persistence/repository/problem/ProblemQueryRepositoryImpl.java @@ -5,6 +5,7 @@ import org.ezcode.codetest.domain.problem.model.ProblemSearchCondition; import org.ezcode.codetest.domain.problem.model.entity.Problem; import org.ezcode.codetest.domain.problem.model.entity.QProblem; +import org.ezcode.codetest.domain.problem.model.enums.Difficulty; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; @@ -32,11 +33,11 @@ public Page searchByCondition(Pageable pageable, ProblemSearchCondition builder.and(problem.isDeleted.isFalse()); if(searchCondition.category() != null) { - builder.and(problem.category.eq(searchCondition.category())); + builder.and(problem.categories.contains(searchCondition.category())); } if(searchCondition.difficulty() != null) { - builder.and(problem.difficulty.eq(searchCondition.difficulty())); + builder.and(problem.difficulty.eq(Difficulty.valueOf(searchCondition.difficulty()))); } List content = jpaQueryFactory diff --git a/src/main/java/org/ezcode/codetest/presentation/game/play/TestGamePlayController.java b/src/main/java/org/ezcode/codetest/presentation/game/play/TestGamePlayController.java index 5bfe086f..75b8b25a 100644 --- a/src/main/java/org/ezcode/codetest/presentation/game/play/TestGamePlayController.java +++ b/src/main/java/org/ezcode/codetest/presentation/game/play/TestGamePlayController.java @@ -10,6 +10,7 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; import lombok.RequiredArgsConstructor; @@ -28,7 +29,7 @@ public ResponseEntity CharacterLevelUpTest( Category randomCat = Category.values()[java.util.concurrent.ThreadLocalRandom.current().nextInt(Category.values().length)]; - statusDomainService.gameCharacterLevelUp(authUser.getId(), true, randomCat.getDescription()); + statusDomainService.gameCharacterLevelUp(authUser.getId(), true, List.of(randomCat.getDescription())); System.out.println(randomCat.getDescription() + "레벨업"); diff --git a/src/main/resources/elasticsearch/my_index-settings.json b/src/main/resources/elasticsearch/my_index-settings.json index 62355e21..06df97cb 100644 --- a/src/main/resources/elasticsearch/my_index-settings.json +++ b/src/main/resources/elasticsearch/my_index-settings.json @@ -108,7 +108,7 @@ "analyzer": "nori_ko_with_en", "search_analyzer": "nori_ko_with_en" }, - "category": { + "categories": { "type": "text", "analyzer": "uppercase_analyzer", "search_analyzer": "uppercase_standard", @@ -119,7 +119,7 @@ } } }, - "categoryKor": { + "categoriesKor": { "type": "text", "analyzer": "nori_ko_with_en", "search_analyzer": "nori_ko_with_en",