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/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; + } } 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}") 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;