From 8745bd5eb5c8d7aa110c490aadf7b5bcb1b1c1f5 Mon Sep 17 00:00:00 2001 From: seungzzok <123801984+seungzzok@users.noreply.github.com> Date: Tue, 10 Dec 2024 16:56:25 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=EC=9D=B4=EB=A9=94=EC=9D=BC=20?= =?UTF-8?q?=EC=A4=91=EB=B3=B5=EA=B2=80=EC=82=AC=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 리스트를 빠르게 비교하기 위해 Set 자료타입 사용 --- .../domain/service/ParticipationService.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/main/java/com/writon/admin/domain/service/ParticipationService.java b/src/main/java/com/writon/admin/domain/service/ParticipationService.java index b5cc913..4c28d80 100644 --- a/src/main/java/com/writon/admin/domain/service/ParticipationService.java +++ b/src/main/java/com/writon/admin/domain/service/ParticipationService.java @@ -16,10 +16,13 @@ import com.writon.admin.global.error.CustomException; import com.writon.admin.global.error.ErrorCode; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import software.amazon.awssdk.services.s3.endpoints.internal.Value.Bool; @Service @RequiredArgsConstructor @@ -126,4 +129,19 @@ public List participate(Long challengeId, List emailList) { return sendedEmailList.stream().map(Email::getEmail).toList(); } + + public Boolean isParticipated(Long challengeId, List emailList) { + List participatedEmailList = getEmailList(challengeId); + + // EmailList를 Set으로 변환하여 검색 속도 향상 + Set participatedEmailSet = new HashSet<>(participatedEmailList); + + for (String email : emailList) { + if (participatedEmailSet.contains(email)) { + return true; + } + } + + return false; + } } From b0422bc84d93fde1f602e463bf27857836569007 Mon Sep 17 00:00:00 2001 From: seungzzok <123801984+seungzzok@users.noreply.github.com> Date: Tue, 10 Dec 2024 16:57:00 +0900 Subject: [PATCH 2/3] =?UTF-8?q?refactor:=20=EC=9D=B4=EB=A9=94=EC=9D=BC=20?= =?UTF-8?q?=EC=A4=91=EB=B3=B5=20=EC=8B=9C=20=EC=97=90=EB=9F=AC=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - P01 에러코드 제작 --- .../controller/ParticipationController.java | 17 +++++++++++------ .../writon/admin/global/error/ErrorCode.java | 5 ++++- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/writon/admin/domain/controller/ParticipationController.java b/src/main/java/com/writon/admin/domain/controller/ParticipationController.java index 0343ab8..2c86f9b 100644 --- a/src/main/java/com/writon/admin/domain/controller/ParticipationController.java +++ b/src/main/java/com/writon/admin/domain/controller/ParticipationController.java @@ -3,6 +3,8 @@ import com.writon.admin.domain.entity.lcoal.ParticipationInfo; import com.writon.admin.domain.service.EmailService; import com.writon.admin.domain.service.ParticipationService; +import com.writon.admin.global.error.CustomException; +import com.writon.admin.global.error.ErrorCode; import com.writon.admin.global.response.SuccessDto; import java.util.List; import lombok.RequiredArgsConstructor; @@ -53,13 +55,16 @@ public SuccessDto> participate( @RequestParam Long challengeId, @RequestBody List emailList ) { + if (!participationService.isParticipated(challengeId, emailList)) { + List sendedEmailList = participationService.participate( + challengeId, + emailList + ); - List sendedEmailList = participationService.participate( - challengeId, - emailList - ); - - return new SuccessDto<>(sendedEmailList); + return new SuccessDto<>(sendedEmailList); + } else { + throw new CustomException(ErrorCode.EMAIL_DUPLICATION); + } } diff --git a/src/main/java/com/writon/admin/global/error/ErrorCode.java b/src/main/java/com/writon/admin/global/error/ErrorCode.java index caa8a8a..2d7f7f2 100644 --- a/src/main/java/com/writon/admin/global/error/ErrorCode.java +++ b/src/main/java/com/writon/admin/global/error/ErrorCode.java @@ -30,7 +30,10 @@ public enum ErrorCode { ORGANIZATION_NOT_FOUND(HttpStatus.NOT_FOUND, "O01", "조직 정보를 찾을 수 없습니다"), // challenge - CHALLENGE_NOT_FOUND(HttpStatus.NOT_FOUND, "C01", "챌린지 정보를 찾을 수 없습니다"); + CHALLENGE_NOT_FOUND(HttpStatus.NOT_FOUND, "C01", "챌린지 정보를 찾을 수 없습니다"), + + // participation + EMAIL_DUPLICATION(HttpStatus.BAD_REQUEST, "P01", "중복되는 이메일이 존재합니다"); private final HttpStatus httpStatus; private final String code; From 255f1462cdfd58d9ab1cf2b7928be1e185dc605d Mon Sep 17 00:00:00 2001 From: seungzzok <123801984+seungzzok@users.noreply.github.com> Date: Tue, 10 Dec 2024 16:57:14 +0900 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20build=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/writon/admin/global/config/RedisConfig.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/main/java/com/writon/admin/global/config/RedisConfig.java b/src/main/java/com/writon/admin/global/config/RedisConfig.java index c0440c6..2052fa2 100644 --- a/src/main/java/com/writon/admin/global/config/RedisConfig.java +++ b/src/main/java/com/writon/admin/global/config/RedisConfig.java @@ -1,24 +1,17 @@ package com.writon.admin.global.config; -import com.writon.admin.domain.repository.token.RefreshTokenRepository; import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.FilterType; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.RedisStandaloneConfiguration; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.repository.configuration.EnableRedisRepositories; import org.springframework.data.redis.serializer.StringRedisSerializer; @Configuration @EnableCaching -@EnableRedisRepositories(basePackages = "com.writon.admin.domain.repository.token", - includeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, - classes = {RefreshTokenRepository.class})) public class RedisConfig { @Value("${spring.data.redis.host}")