From cfa90acd928ed902a06aa29ea2dba94d93760915 Mon Sep 17 00:00:00 2001 From: hocaron Date: Fri, 24 May 2024 11:53:14 +0900 Subject: [PATCH 01/18] =?UTF-8?q?feat:=20=EA=B0=9C=EB=B0=9C=20DB=20URL=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mashup-domain/src/main/resources/application-develop.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mashup-domain/src/main/resources/application-develop.yml b/mashup-domain/src/main/resources/application-develop.yml index 9bbc7255..929b3992 100644 --- a/mashup-domain/src/main/resources/application-develop.yml +++ b/mashup-domain/src/main/resources/application-develop.yml @@ -1,8 +1,8 @@ spring: datasource: - url: ENC(xJnOCYnlvwRdA1+cD5XZdfsQWqNlmIiEi0My50QO6cjj+HE+yR5wT8meZS8gdXJPW78zkyPf/dk6VMwGCc9hCKWz2JQ6n6YDVntkRWFzn0yvi043MT79iGMY56DIcv4jSDcggZ0AZqaFujDlmIA6u2Ti1hd1dOO6069kvvS1OrmnWbaZ3lacMQbNhfm3ZyZ7zfUD5YDEmBA/MpKM/FsH120Pd+3ZSbOMw1xjq/zCNmjBLmneCeueSrECtcjGztEboxeVqetID6iAT+BXWER0s31ah1smUbmjYVDpH3xAEJH45TShfCX2GubzA2UXU6VjaL9JNZPlSsEBAszOBctkyY0zlO3i5/zP5DQHaNnlisCe34JfYrWXrMmeYCGh8W8V) + url: ENC(rJj/5VqynLEV/vjI25Km9iW837lY+cG9yFXTutHlKDhbCqYIvZa7rmvdfKYYuwkd+lDRj8uJ+RUsc11RBu8YWG+R6e587sUhiGLj4HbZSO4nm3iuwmbs5+X36iYDKIUp6v3JNaPjZorv7qkupCs7adBFzQLkh+zo5VNjocq/UPO1de8Ux9nJWrDUsWX47eomBdmpI49cM2zFAFgfkYD5KFEAfRomUsp+kPXnzRCTtFr7c43xvfY00HlJQzlryGUgPQ4/VxIIzYZm6YPCxRuZ69MNDkuF4I/y1lPV7lVOgps6hHQBrrBkUDuamfYo/0Fgceg77kN4OR7xqXAMjk3Z6M9J0LCtolKjhxSTrkJZyzla5+CNezfDmevjXPsvEJFH) username: ENC(L6CNxJcaxJhR6xn+BaBbe+XlLT8GCYnLHIEOcZqF3QWl8uiaZumx4K/PcCcxTfgR) - password: ENC(eUHoqXv2Z8lUGrSQZJgZ9U7vhcOrtvnc04CxgC5Uo9PUpQz5ZoGEA7d2Ui2MsLNx) + password: ENC(fxWrJBvyF3X7SoFrGYKbeA4nLuchRIXTbaMahilpJFBSRc28VSLo6BN6PV+W/DVF) jpa: properties: hibernate: From e0d05868d623196a61067c043b40ae0d8dc06271 Mon Sep 17 00:00:00 2001 From: hocaron Date: Mon, 10 Jun 2024 23:28:00 +0900 Subject: [PATCH 02/18] =?UTF-8?q?feat:=20=EC=B6=9C=EC=84=9D=EC=A0=90?= =?UTF-8?q?=EC=88=98=20=EC=A7=91=EA=B3=84=20=EB=B0=B0=EC=B9=98=EB=A5=BC=20?= =?UTF-8?q?=EC=8A=A4=EC=BC=80=EC=A4=84=EB=9F=AC=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20=EB=B0=8F=20=EC=88=98=EB=8F=99=20api=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../branding/MashupAdminApplication.java | 2 + .../scorehistory/ScoreHistoryProcessor.java | 26 ++++---- .../scorehistory/ScoreHistoryController.java | 11 ++-- .../ScoreHistoryCreateConfig.java | 60 ------------------- .../ScoreHistoryCreateTasklet.java | 31 ---------- .../ScoreHistoryDeleteConfig.java | 60 ------------------- .../ScoreHistoryDeleteTasklet.java | 36 ----------- 7 files changed, 24 insertions(+), 202 deletions(-) rename mashup-batch/src/main/java/kr/mashup/branding/facade/ScoreHistoryFacadeService.java => mashup-admin/src/main/java/kr/mashup/branding/facade/scorehistory/ScoreHistoryProcessor.java (81%) delete mode 100644 mashup-batch/src/main/java/kr/mashup/branding/job/scorehistory/ScoreHistoryCreateConfig.java delete mode 100644 mashup-batch/src/main/java/kr/mashup/branding/job/scorehistory/ScoreHistoryCreateTasklet.java delete mode 100644 mashup-batch/src/main/java/kr/mashup/branding/job/scorehistory/ScoreHistoryDeleteConfig.java delete mode 100644 mashup-batch/src/main/java/kr/mashup/branding/job/scorehistory/ScoreHistoryDeleteTasklet.java diff --git a/mashup-admin/src/main/java/kr/mashup/branding/MashupAdminApplication.java b/mashup-admin/src/main/java/kr/mashup/branding/MashupAdminApplication.java index 3964216e..18df6472 100644 --- a/mashup-admin/src/main/java/kr/mashup/branding/MashupAdminApplication.java +++ b/mashup-admin/src/main/java/kr/mashup/branding/MashupAdminApplication.java @@ -2,8 +2,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication +@EnableScheduling public class MashupAdminApplication { public static void main(String[] args) { System.setProperty("spring.config.name", "application,admin"); diff --git a/mashup-batch/src/main/java/kr/mashup/branding/facade/ScoreHistoryFacadeService.java b/mashup-admin/src/main/java/kr/mashup/branding/facade/scorehistory/ScoreHistoryProcessor.java similarity index 81% rename from mashup-batch/src/main/java/kr/mashup/branding/facade/ScoreHistoryFacadeService.java rename to mashup-admin/src/main/java/kr/mashup/branding/facade/scorehistory/ScoreHistoryProcessor.java index a24ab996..50825a63 100644 --- a/mashup-batch/src/main/java/kr/mashup/branding/facade/ScoreHistoryFacadeService.java +++ b/mashup-admin/src/main/java/kr/mashup/branding/facade/scorehistory/ScoreHistoryProcessor.java @@ -1,16 +1,20 @@ -package kr.mashup.branding.facade; +package kr.mashup.branding.facade.scorehistory; import kr.mashup.branding.domain.attendance.Attendance; import kr.mashup.branding.domain.member.Member; +import kr.mashup.branding.domain.pushnoti.vo.SeminarAttendanceAppliedVo; import kr.mashup.branding.domain.schedule.Schedule; import kr.mashup.branding.domain.schedule.ScheduleType; import kr.mashup.branding.domain.scorehistory.ScoreHistory; import kr.mashup.branding.domain.scorehistory.ScoreType; +import kr.mashup.branding.infrastructure.pushnoti.PushNotiEventPublisher; import kr.mashup.branding.service.attendance.AttendanceService; import kr.mashup.branding.service.member.MemberService; import kr.mashup.branding.service.schedule.ScheduleService; import kr.mashup.branding.service.scorehistory.ScoreHistoryService; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -19,20 +23,22 @@ @Service @RequiredArgsConstructor -public class ScoreHistoryFacadeService { +@Slf4j +public class ScoreHistoryProcessor { private final ScheduleService scheduleService; private final AttendanceService attendanceService; private final ScoreHistoryService scoreHistoryService; private final MemberService memberService; + private final PushNotiEventPublisher pushNotiEventPublisher; + /** * 출석점수 집계를 실행합니다. - * - * @return 출석점수가 업데이트된 member 리스트 */ + @Scheduled(cron = "0 0 17 ? * SUN") // 매주 일요일 오후 5시 @Transactional - public List create() { + public void create() { List schedules = scheduleService.findEndedScheduleByIsCountedAndScheduleType(false, ScheduleType.ALL); Set updatedMember = new HashSet<>(); @@ -47,15 +53,14 @@ public List create() { schedule.changeIsCounted(true); }); - - return List.copyOf(updatedMember); + pushNotiEventPublisher.publishPushNotiSendEvent(new SeminarAttendanceAppliedVo(List.copyOf(updatedMember))); } /** * attendance 가 있는 member 의 출석점수를 계산합니다. * * @param schedule 출석점수 집계할 스케줄 - * @param members 출석체크한 멤버 + * @param members 출석체크한 멤버 * @return 출석점수 리스트 */ private List getCheckedAttendance(Schedule schedule, List members) { @@ -73,7 +78,7 @@ private List getCheckedAttendance(Schedule schedule, List * attendance 가 없는 member 의 출석점수(결석처리)를 계산합니다. * * @param schedule 출석점수 집계할 스케줄 - * @param members 출석체크를 한번도 하지않은 멤버 + * @param members 출석체크를 한번도 하지않은 멤버 * @return 출석점수 리스트 */ private List getUnCheckedAttendance(Schedule schedule, List members) { @@ -84,11 +89,10 @@ private List getUnCheckedAttendance(Schedule schedule, List cancelScore( scoreHistoryFacadeService.cancelScore(request.getScoreHistoryId(), request.getMemo()); return ApiResponse.success(EmptyResponse.of()); } + + @PostMapping() + public void createScore() { + scoreHistoryProcessor.create(); + } } diff --git a/mashup-batch/src/main/java/kr/mashup/branding/job/scorehistory/ScoreHistoryCreateConfig.java b/mashup-batch/src/main/java/kr/mashup/branding/job/scorehistory/ScoreHistoryCreateConfig.java deleted file mode 100644 index 6902b228..00000000 --- a/mashup-batch/src/main/java/kr/mashup/branding/job/scorehistory/ScoreHistoryCreateConfig.java +++ /dev/null @@ -1,60 +0,0 @@ -package kr.mashup.branding.job.scorehistory; - -import kr.mashup.branding.config.BatchConfig; -import kr.mashup.branding.facade.ScoreHistoryFacadeService; -import kr.mashup.branding.infrastructure.pushnoti.PushNotiEventPublisher; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.core.Job; -import org.springframework.batch.core.Step; -import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; -import org.springframework.batch.core.configuration.annotation.JobScope; -import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; -import org.springframework.batch.core.configuration.annotation.StepScope; -import org.springframework.batch.core.repository.JobRepository; -import org.springframework.batch.core.step.tasklet.Tasklet; -import org.springframework.batch.support.transaction.ResourcelessTransactionManager; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@ConditionalOnProperty( - value = BatchConfig.SPRING_BATCH_JOB_NAMES, - havingValue = ScoreHistoryCreateConfig.JOB_NAME -) -@Configuration -@RequiredArgsConstructor -@Slf4j -public class ScoreHistoryCreateConfig { - static final String JOB_NAME = "score-history-create"; - private static final String STEP_NAME = JOB_NAME + "-step"; - - private final JobBuilderFactory jobBuilderFactory; - private final JobRepository jobRepository; - private final StepBuilderFactory stepBuilderFactory; - private final ScoreHistoryFacadeService scoreHistoryFacadeService; - private final PushNotiEventPublisher pushNotiEventPublisher; - - @Bean - public Job CreateScoreHistoryJob() { - return jobBuilderFactory.get(JOB_NAME) - .repository(jobRepository) - .start(CreateScoreHistoryStep()) - .build(); - } - - @Bean - @JobScope - public Step CreateScoreHistoryStep() { - return stepBuilderFactory.get(STEP_NAME) - .tasklet(CreateScoreHistoryTasklet(scoreHistoryFacadeService, pushNotiEventPublisher)) - .transactionManager(new ResourcelessTransactionManager()) - .build(); - } - - @Bean - @StepScope - public Tasklet CreateScoreHistoryTasklet(ScoreHistoryFacadeService scoreHistoryFacadeService, PushNotiEventPublisher pushNotiEventPublisher) { - return new ScoreHistoryCreateTasklet(scoreHistoryFacadeService, pushNotiEventPublisher); - } -} diff --git a/mashup-batch/src/main/java/kr/mashup/branding/job/scorehistory/ScoreHistoryCreateTasklet.java b/mashup-batch/src/main/java/kr/mashup/branding/job/scorehistory/ScoreHistoryCreateTasklet.java deleted file mode 100644 index 9cfb0f9c..00000000 --- a/mashup-batch/src/main/java/kr/mashup/branding/job/scorehistory/ScoreHistoryCreateTasklet.java +++ /dev/null @@ -1,31 +0,0 @@ -package kr.mashup.branding.job.scorehistory; - -import kr.mashup.branding.domain.member.Member; -import kr.mashup.branding.domain.pushnoti.vo.SeminarAttendanceAppliedVo; -import kr.mashup.branding.facade.ScoreHistoryFacadeService; -import kr.mashup.branding.infrastructure.pushnoti.PushNotiEventPublisher; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.core.StepContribution; -import org.springframework.batch.core.scope.context.ChunkContext; -import org.springframework.batch.core.step.tasklet.Tasklet; -import org.springframework.batch.repeat.RepeatStatus; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -@Slf4j -@RequiredArgsConstructor -public class ScoreHistoryCreateTasklet implements Tasklet { - - private final ScoreHistoryFacadeService scoreHistoryFacadeService; - private final PushNotiEventPublisher pushNotiEventPublisher; - - @Override - @Transactional - public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) { - List pushNotiTargetMembers = scoreHistoryFacadeService.create(); - pushNotiEventPublisher.publishPushNotiSendEvent(new SeminarAttendanceAppliedVo(pushNotiTargetMembers)); - return RepeatStatus.FINISHED; - } -} diff --git a/mashup-batch/src/main/java/kr/mashup/branding/job/scorehistory/ScoreHistoryDeleteConfig.java b/mashup-batch/src/main/java/kr/mashup/branding/job/scorehistory/ScoreHistoryDeleteConfig.java deleted file mode 100644 index 1212cd87..00000000 --- a/mashup-batch/src/main/java/kr/mashup/branding/job/scorehistory/ScoreHistoryDeleteConfig.java +++ /dev/null @@ -1,60 +0,0 @@ -package kr.mashup.branding.job.scorehistory; - -import kr.mashup.branding.config.BatchConfig; -import kr.mashup.branding.facade.ScoreHistoryFacadeService; -import kr.mashup.branding.infrastructure.pushnoti.PushNotiEventPublisher; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.core.Job; -import org.springframework.batch.core.Step; -import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; -import org.springframework.batch.core.configuration.annotation.JobScope; -import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; -import org.springframework.batch.core.configuration.annotation.StepScope; -import org.springframework.batch.core.repository.JobRepository; -import org.springframework.batch.core.step.tasklet.Tasklet; -import org.springframework.batch.support.transaction.ResourcelessTransactionManager; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@ConditionalOnProperty( - value = BatchConfig.SPRING_BATCH_JOB_NAMES, - havingValue = ScoreHistoryDeleteConfig.JOB_NAME -) -@Configuration -@RequiredArgsConstructor -@Slf4j -public class ScoreHistoryDeleteConfig { - static final String JOB_NAME = "score-history-delete"; - private static final String STEP_NAME = JOB_NAME + "-step"; - - private final JobBuilderFactory jobBuilderFactory; - private final JobRepository jobRepository; - private final StepBuilderFactory stepBuilderFactory; - private final ScoreHistoryFacadeService scoreHistoryFacadeService; - private final PushNotiEventPublisher pushNotiEventPublisher; - - @Bean - public Job scoreHistoryDeleteJob() { - return jobBuilderFactory.get(JOB_NAME) - .repository(jobRepository) - .start(scoreHistoryDeleteStep()) - .build(); - } - - @Bean - @JobScope - public Step scoreHistoryDeleteStep() { - return stepBuilderFactory.get(STEP_NAME) - .tasklet(scoreHistoryDeleteTasklet(scoreHistoryFacadeService)) - .transactionManager(new ResourcelessTransactionManager()) - .build(); - } - - @Bean - @StepScope - public Tasklet scoreHistoryDeleteTasklet(ScoreHistoryFacadeService scoreHistoryFacadeService) { - return new ScoreHistoryDeleteTasklet(scoreHistoryFacadeService); - } -} diff --git a/mashup-batch/src/main/java/kr/mashup/branding/job/scorehistory/ScoreHistoryDeleteTasklet.java b/mashup-batch/src/main/java/kr/mashup/branding/job/scorehistory/ScoreHistoryDeleteTasklet.java deleted file mode 100644 index 926f485b..00000000 --- a/mashup-batch/src/main/java/kr/mashup/branding/job/scorehistory/ScoreHistoryDeleteTasklet.java +++ /dev/null @@ -1,36 +0,0 @@ -package kr.mashup.branding.job.scorehistory; - -import kr.mashup.branding.facade.ScoreHistoryFacadeService; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.core.StepContribution; -import org.springframework.batch.core.scope.context.ChunkContext; -import org.springframework.batch.core.step.tasklet.Tasklet; -import org.springframework.batch.repeat.RepeatStatus; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.transaction.annotation.Transactional; - -import java.security.InvalidParameterException; -import java.time.LocalDate; -import java.time.format.DateTimeParseException; - -@Slf4j -@RequiredArgsConstructor -public class ScoreHistoryDeleteTasklet implements Tasklet { - - @Value("#{jobParameters['scheduleStartDate']}") - private String scheduleStartDate; - - private final ScoreHistoryFacadeService scoreHistoryFacadeService; - - @Override - @Transactional - public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) { - try { - scoreHistoryFacadeService.delete(LocalDate.parse(scheduleStartDate)); - return RepeatStatus.FINISHED; - } catch (DateTimeParseException e) { - throw new InvalidParameterException("날짜 형식이 올바르지 않습니다.(YYYY-MM-DD)"); - } - } -} From cda4549e2f3bec87ae81ca8a16c7d1a6c793fbce Mon Sep 17 00:00:00 2001 From: hocaron Date: Tue, 11 Jun 2024 00:02:38 +0900 Subject: [PATCH 03/18] =?UTF-8?q?chore:=20TODO=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../branding/ui/scorehistory/ScoreHistoryController.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mashup-admin/src/main/java/kr/mashup/branding/ui/scorehistory/ScoreHistoryController.java b/mashup-admin/src/main/java/kr/mashup/branding/ui/scorehistory/ScoreHistoryController.java index a47ac57f..35ca7264 100644 --- a/mashup-admin/src/main/java/kr/mashup/branding/ui/scorehistory/ScoreHistoryController.java +++ b/mashup-admin/src/main/java/kr/mashup/branding/ui/scorehistory/ScoreHistoryController.java @@ -40,7 +40,8 @@ public ApiResponse cancelScore( return ApiResponse.success(EmptyResponse.of()); } - @PostMapping() + // TODO: 추후 프로세스 타입 추가 + @PostMapping("process") public void createScore() { scoreHistoryProcessor.create(); } From e89ae6c06910ca1045a44ed4d3f16d05e524cb88 Mon Sep 17 00:00:00 2001 From: hocaron Date: Sat, 27 Jul 2024 15:12:37 +0900 Subject: [PATCH 04/18] =?UTF-8?q?feat:=20=EB=A1=9C=EA=B9=85=EC=9D=84=20?= =?UTF-8?q?=EC=9C=84=ED=95=B4=20=ED=9A=8C=EC=9B=90=EB=B2=88=ED=98=B8=20mdc?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/filter/MDCLoggingFilter.java | 25 +++++++++++++++++++ .../web/MemberAuthArgumentResolver.java | 6 +++++ .../main/resources/logback/logback-spring.xml | 8 +++--- 3 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 mashup-member/src/main/java/kr/mashup/branding/config/filter/MDCLoggingFilter.java diff --git a/mashup-member/src/main/java/kr/mashup/branding/config/filter/MDCLoggingFilter.java b/mashup-member/src/main/java/kr/mashup/branding/config/filter/MDCLoggingFilter.java new file mode 100644 index 00000000..0f9f5956 --- /dev/null +++ b/mashup-member/src/main/java/kr/mashup/branding/config/filter/MDCLoggingFilter.java @@ -0,0 +1,25 @@ +package kr.mashup.branding.config.filter; + +import org.slf4j.MDC; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import javax.servlet.*; +import java.io.IOException; + +import static kr.mashup.branding.config.web.MemberAuthArgumentResolver.MDC_MEMBER_ID; + +@Component +@Order(Ordered.HIGHEST_PRECEDENCE) +public class MDCLoggingFilter implements Filter { + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + try { + chain.doFilter(request, response); + } finally { + MDC.remove(MDC_MEMBER_ID); + } + } +} diff --git a/mashup-member/src/main/java/kr/mashup/branding/config/web/MemberAuthArgumentResolver.java b/mashup-member/src/main/java/kr/mashup/branding/config/web/MemberAuthArgumentResolver.java index c65ecd08..5265ebd3 100644 --- a/mashup-member/src/main/java/kr/mashup/branding/config/web/MemberAuthArgumentResolver.java +++ b/mashup-member/src/main/java/kr/mashup/branding/config/web/MemberAuthArgumentResolver.java @@ -4,6 +4,8 @@ import kr.mashup.branding.security.JwtService; import kr.mashup.branding.security.MemberAuth; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.MDC; import org.springframework.core.MethodParameter; import org.springframework.stereotype.Component; import org.springframework.web.bind.support.WebDataBinderFactory; @@ -15,9 +17,11 @@ @Component @RequiredArgsConstructor +@Slf4j public class MemberAuthArgumentResolver implements HandlerMethodArgumentResolver { private final JwtService jwtService; + public static final String MDC_MEMBER_ID = "memberId"; @Override public boolean supportsParameter(MethodParameter parameter) { @@ -38,6 +42,8 @@ public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer m if (memberId == null || memberGenerationId == null) { throw new UnauthorizedException(); } + + MDC.put(MDC_MEMBER_ID, String.valueOf(memberId)); return MemberAuth.of(memberId, memberGenerationId); } } diff --git a/mashup-member/src/main/resources/logback/logback-spring.xml b/mashup-member/src/main/resources/logback/logback-spring.xml index c1f04ef3..3c988a39 100644 --- a/mashup-member/src/main/resources/logback/logback-spring.xml +++ b/mashup-member/src/main/resources/logback/logback-spring.xml @@ -8,13 +8,13 @@ - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [%file:%line]- %msg%n + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [%file:%line] [memberId: %X{memberId}] - %msg%n - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [%file:%line]- %msg%n + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [%file:%line] [memberId: %X{memberId}] - %msg%n MashUp-Server-Dev member @@ -27,7 +27,7 @@ - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [%file:%line]- %msg%n + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [%file:%line] [memberId: %X{memberId}] - %msg%n MashUp-Server-Real member @@ -63,4 +63,4 @@ - \ No newline at end of file + From 8290dfcf083dc96fbfb4409ebb4ee8623477c331 Mon Sep 17 00:00:00 2001 From: Jung Jongmin Date: Sat, 27 Jul 2024 15:26:04 +0900 Subject: [PATCH 05/18] Feature/issues with mashong days (#451) * add with mashong days * add with mashong days --------- Co-authored-by: jongmin.jung --- .../branding/facade/mashong/MashongFacadeService.java | 11 +++++++++++ .../mashup/branding/ui/mashong/MashongController.java | 7 +++++++ 2 files changed, 18 insertions(+) diff --git a/mashup-member/src/main/java/kr/mashup/branding/facade/mashong/MashongFacadeService.java b/mashup-member/src/main/java/kr/mashup/branding/facade/mashong/MashongFacadeService.java index 1798cd8b..345ea3e1 100644 --- a/mashup-member/src/main/java/kr/mashup/branding/facade/mashong/MashongFacadeService.java +++ b/mashup-member/src/main/java/kr/mashup/branding/facade/mashong/MashongFacadeService.java @@ -14,6 +14,9 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; + @Service @RequiredArgsConstructor public class MashongFacadeService { @@ -149,4 +152,12 @@ public PlatformMashongStatusResponse readCurrentStatus(Long memberGenerationId) return PlatformMashongStatusResponse.of(platformMashong, mashongPopcorn); } + + @Transactional(readOnly = true) + public Long withMashongDaysCount(Long memberGenerationId) { + LocalDate now = LocalDate.now(); + MemberGeneration memberGeneration = memberService.findByMemberGenerationId(memberGenerationId); + LocalDate generationStartedAt = memberGeneration.getGeneration().getStartedAt(); + return ChronoUnit.DAYS.between(generationStartedAt, now); + } } diff --git a/mashup-member/src/main/java/kr/mashup/branding/ui/mashong/MashongController.java b/mashup-member/src/main/java/kr/mashup/branding/ui/mashong/MashongController.java index c264a1f7..475fb77f 100644 --- a/mashup-member/src/main/java/kr/mashup/branding/ui/mashong/MashongController.java +++ b/mashup-member/src/main/java/kr/mashup/branding/ui/mashong/MashongController.java @@ -89,4 +89,11 @@ public ApiResponse readStatus(@ApiIgnore MemberAu PlatformMashongStatusResponse result = mashongFacadeService.readCurrentStatus(memberAuth.getMemberGenerationId()); return ApiResponse.success(result); } + + @ApiOperation(value = "매숑이와 함께한 날 Days count") + @GetMapping("/with-mashong-days") + public ApiResponse withMashongDays(@ApiIgnore MemberAuth memberAuth) { + Long withMashongDays = mashongFacadeService.withMashongDaysCount(memberAuth.getMemberGenerationId()); + return ApiResponse.success(withMashongDays); + } } From 93f3046a0fe268015cb794ae51223bc4248e2dc4 Mon Sep 17 00:00:00 2001 From: hocaron Date: Sat, 27 Jul 2024 15:41:47 +0900 Subject: [PATCH 06/18] =?UTF-8?q?feat:=20=EC=97=90=EB=9F=AC=20=EB=A9=94?= =?UTF-8?q?=EC=8B=9C=EC=A7=80=EC=97=90=20=EC=B4=88=EA=B3=BC=ED=95=9C=20?= =?UTF-8?q?=EC=8B=9C=EA=B0=84=EC=9D=84=20=EC=B6=94=EA=B0=80=ED=95=98?= =?UTF-8?q?=EB=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../branding/aop/cipher/ApiCipherAspect.java | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/mashup-domain/src/main/java/kr/mashup/branding/aop/cipher/ApiCipherAspect.java b/mashup-domain/src/main/java/kr/mashup/branding/aop/cipher/ApiCipherAspect.java index 3046c545..33cae9cc 100644 --- a/mashup-domain/src/main/java/kr/mashup/branding/aop/cipher/ApiCipherAspect.java +++ b/mashup-domain/src/main/java/kr/mashup/branding/aop/cipher/ApiCipherAspect.java @@ -1,10 +1,10 @@ package kr.mashup.branding.aop.cipher; +import kr.mashup.branding.domain.ResultCode; import kr.mashup.branding.domain.exception.BadRequestException; import kr.mashup.branding.util.CipherUtil; import kr.mashup.branding.util.DateUtil; import lombok.extern.slf4j.Slf4j; -import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.springframework.beans.factory.annotation.Value; @@ -29,32 +29,31 @@ public class ApiCipherAspect { private String cipherTime; @Before(value = "@annotation(checkApiCipherTime)") - public void checkApiCipherTime(CheckApiCipherTime checkApiCipherTime){ + public void checkApiCipherTime(CheckApiCipherTime checkApiCipherTime) { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String encryptedKey = request.getHeader("cipher"); - if(checkApiCipherTime.alwaysRequired()){ - if(!StringUtils.hasText(encryptedKey)){ - throw new BadRequestException(); + if (checkApiCipherTime.alwaysRequired()) { + if (!StringUtils.hasText(encryptedKey)) { + throw new BadRequestException(ResultCode.BAD_REQUEST); } checkClientTimeDifference(encryptedKey); - }else{ - if(StringUtils.hasText(encryptedKey)){ + } else { + if (StringUtils.hasText(encryptedKey)) { checkClientTimeDifference(encryptedKey); } } } - private void checkClientTimeDifference(String auth){ + private void checkClientTimeDifference(String auth) { final String clientEpochTime = CipherUtil.decryptAES128(auth, cipherKey); final LocalDateTime clientTime = DateUtil.fromEpochString(clientEpochTime); final LocalDateTime serverTime = LocalDateTime.now(); final Long timeDifference = ChronoUnit.SECONDS.between(clientTime, serverTime); log.info(timeDifference.toString()); - if(timeDifference > Long.parseLong(cipherTime)) { - throw new BadRequestException(); + if (timeDifference > Long.parseLong(cipherTime)) { + throw new BadRequestException(ResultCode.BAD_REQUEST, String.format("클라이언트 시간 차이가 허용된 범위를 초과했습니다. (%d초)", timeDifference)); } } - } From b2a311a98ae69c8933484438308f0f592a811cb0 Mon Sep 17 00:00:00 2001 From: hocaron Date: Mon, 5 Aug 2024 22:23:48 +0900 Subject: [PATCH 07/18] =?UTF-8?q?feat:=20=EB=82=B4=EB=A6=BC=EC=B0=A8?= =?UTF-8?q?=EC=88=9C=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../branding/ui/member/response/MemberBirthdaysResponse.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mashup-member/src/main/java/kr/mashup/branding/ui/member/response/MemberBirthdaysResponse.java b/mashup-member/src/main/java/kr/mashup/branding/ui/member/response/MemberBirthdaysResponse.java index 20cfded2..194d36e0 100644 --- a/mashup-member/src/main/java/kr/mashup/branding/ui/member/response/MemberBirthdaysResponse.java +++ b/mashup-member/src/main/java/kr/mashup/branding/ui/member/response/MemberBirthdaysResponse.java @@ -57,7 +57,7 @@ private static MemberBirthdayResponse extractTodayBirthday(LocalDate today, List private static List sortUpcomingBirthdays(LocalDate today, List responses) { return responses.stream() .filter(response -> !today.equals(response.getDate())) - .sorted(Comparator.comparing(MemberBirthdayResponse::getDate).reversed()) + .sorted(Comparator.comparing(MemberBirthdayResponse::getDate)) .collect(Collectors.toList()); } } From 1b383517f0c5c82e3d68a9a2e650c3a6741f865a Mon Sep 17 00:00:00 2001 From: hocaron Date: Mon, 5 Aug 2024 23:33:05 +0900 Subject: [PATCH 08/18] =?UTF-8?q?fix:=20=EC=9B=94=20=EC=9D=BC=EB=A7=8C=20?= =?UTF-8?q?=EB=B9=84=EA=B5=90=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/MemberProfileRepositoryCustom.java | 4 ++-- .../MemberProfileRepositoryCustomImpl.java | 20 +++++++++++++++---- .../service/member/MemberBirthdayDto.java | 16 +++++++++++---- .../service/member/MemberProfileService.java | 3 ++- .../birthday/BirthdayFacadeService.java | 15 +++++++------- .../response/MemberBirthdayResponse.java | 6 ++++-- .../response/MemberBirthdaysResponse.java | 11 +++++----- 7 files changed, 50 insertions(+), 25 deletions(-) diff --git a/mashup-domain/src/main/java/kr/mashup/branding/repository/member/MemberProfileRepositoryCustom.java b/mashup-domain/src/main/java/kr/mashup/branding/repository/member/MemberProfileRepositoryCustom.java index f7b23b67..71eb0dcf 100644 --- a/mashup-domain/src/main/java/kr/mashup/branding/repository/member/MemberProfileRepositoryCustom.java +++ b/mashup-domain/src/main/java/kr/mashup/branding/repository/member/MemberProfileRepositoryCustom.java @@ -3,10 +3,10 @@ import kr.mashup.branding.domain.generation.Generation; import kr.mashup.branding.service.member.MemberBirthdayDto; -import java.time.LocalDate; +import java.time.MonthDay; import java.util.List; public interface MemberProfileRepositoryCustom { - List retrieveByBirthDateBetween(LocalDate startDate, LocalDate endDate, Generation generation); + List retrieveByBirthDateBetween(MonthDay startDate, MonthDay endDate, Generation generation); } diff --git a/mashup-domain/src/main/java/kr/mashup/branding/repository/member/MemberProfileRepositoryCustomImpl.java b/mashup-domain/src/main/java/kr/mashup/branding/repository/member/MemberProfileRepositoryCustomImpl.java index 5879e0e9..212ac491 100644 --- a/mashup-domain/src/main/java/kr/mashup/branding/repository/member/MemberProfileRepositoryCustomImpl.java +++ b/mashup-domain/src/main/java/kr/mashup/branding/repository/member/MemberProfileRepositoryCustomImpl.java @@ -1,12 +1,13 @@ package kr.mashup.branding.repository.member; import com.querydsl.core.types.Projections; +import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; import kr.mashup.branding.domain.generation.Generation; import kr.mashup.branding.service.member.MemberBirthdayDto; import lombok.RequiredArgsConstructor; -import java.time.LocalDate; +import java.time.MonthDay; import java.util.List; import static kr.mashup.branding.domain.member.QMember.member; @@ -18,9 +19,9 @@ public class MemberProfileRepositoryCustomImpl implements MemberProfileRepositor private final JPAQueryFactory queryFactory; @Override - public List retrieveByBirthDateBetween(LocalDate startDate, LocalDate endDate, Generation generation) { + public List retrieveByBirthDateBetween(MonthDay startDate, MonthDay endDate, Generation generation) { return queryFactory - .select(Projections.fields( + .select(Projections.constructor( MemberBirthdayDto.class, member.id.as("memberId"), member.name.as("name"), @@ -30,7 +31,18 @@ public List retrieveByBirthDateBetween(LocalDate startDate, L .from(memberProfile) .join(member).on(member.id.eq(memberProfile.memberId)) .join(memberGeneration).on(member.id.eq(memberGeneration.member.id)) - .where(memberProfile.birthDate.between(startDate, endDate).and(memberGeneration.generation.eq(generation))) + .where( + birthDateBetween(startDate, endDate) + .and(memberGeneration.generation.eq(generation)) + ) .fetch(); } + + private BooleanExpression birthDateBetween(MonthDay startDate, MonthDay endDate) { + + return memberProfile.birthDate.month().gt(startDate.getMonthValue()) + .or(memberProfile.birthDate.month().eq(startDate.getMonthValue()).and(memberProfile.birthDate.dayOfMonth().goe(startDate.getDayOfMonth()))) + .and(memberProfile.birthDate.month().lt(endDate.getMonthValue()) + .or(memberProfile.birthDate.month().eq(endDate.getMonthValue()).and(memberProfile.birthDate.dayOfMonth().loe(endDate.getDayOfMonth())))); + } } diff --git a/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberBirthdayDto.java b/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberBirthdayDto.java index 79433655..35d32432 100644 --- a/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberBirthdayDto.java +++ b/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberBirthdayDto.java @@ -4,12 +4,20 @@ import lombok.Getter; import java.time.LocalDate; +import java.time.MonthDay; @Getter public class MemberBirthdayDto { - private Long memberId; - private String name; - private Platform platform; - private LocalDate birthDate; + private final Long memberId; + private final String name; + private final Platform platform; + private final MonthDay birthDate; + + public MemberBirthdayDto(Long memberId, String name, Platform platform, LocalDate birthDate) { + this.memberId = memberId; + this.name = name; + this.platform = platform; + this.birthDate = MonthDay.from(birthDate); + } } diff --git a/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberProfileService.java b/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberProfileService.java index 527ae785..9d269a94 100644 --- a/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberProfileService.java +++ b/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberProfileService.java @@ -8,6 +8,7 @@ import org.springframework.stereotype.Service; import java.time.LocalDate; +import java.time.MonthDay; import java.util.List; @Service @@ -51,7 +52,7 @@ public MemberProfile findOrSave(Long memberId) { .orElseGet(() -> memberProfileRepository.save(MemberProfile.from(memberId))); } - public List findByBirthDateBetween(LocalDate startDate, LocalDate endDate, Generation generation) { + public List findByBirthDateBetween(MonthDay startDate, MonthDay endDate, Generation generation) { return memberProfileRepository.retrieveByBirthDateBetween(startDate, endDate, generation); } diff --git a/mashup-member/src/main/java/kr/mashup/branding/facade/birthday/BirthdayFacadeService.java b/mashup-member/src/main/java/kr/mashup/branding/facade/birthday/BirthdayFacadeService.java index d850647e..cf8910a2 100644 --- a/mashup-member/src/main/java/kr/mashup/branding/facade/birthday/BirthdayFacadeService.java +++ b/mashup-member/src/main/java/kr/mashup/branding/facade/birthday/BirthdayFacadeService.java @@ -17,9 +17,9 @@ import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; +import java.time.MonthDay; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.stream.Collectors; @Service @@ -45,16 +45,17 @@ public MemberBirthdaysResponse getUpcomingBirthdays(Long memberId, Integer days) Member member = memberService.findMemberById(memberId); Generation generation = generationService.getCurrentGeneration(member); - boolean isBirthdayToday = memberProfileService.isBirthdayToday(memberId); - Map> upcomingBirthdays = calculateUpcomingBirthdays(member, days, generation); - Set sentMemberIds = birthdayService.getSentBirthdayCardMemberIds(memberId, generation.getId()); + var isBirthdayToday = memberProfileService.isBirthdayToday(memberId); + var upcomingBirthdays = calculateUpcomingBirthdays(member, days, generation); + var sentMemberIds = birthdayService.getSentBirthdayCardMemberIds(memberId, generation.getId()); return MemberBirthdaysResponse.of(isBirthdayToday, sentMemberIds, upcomingBirthdays); } - private Map> calculateUpcomingBirthdays(Member member, Integer days, Generation generation) { - LocalDate now = LocalDate.now(); - return memberProfileService.findByBirthDateBetween(now, now.plusDays(days), generation) + private Map> calculateUpcomingBirthdays(Member member, Integer days, Generation generation) { + MonthDay today = MonthDay.from(LocalDate.now()); + MonthDay endDay = MonthDay.from(LocalDate.now().plusDays(days)); + return memberProfileService.findByBirthDateBetween(today, endDay, generation) .stream() .filter(birthdayDto -> birthdayDto.getMemberId() != member.getId()) .collect(Collectors.groupingBy(MemberBirthdayDto::getBirthDate)); diff --git a/mashup-member/src/main/java/kr/mashup/branding/ui/member/response/MemberBirthdayResponse.java b/mashup-member/src/main/java/kr/mashup/branding/ui/member/response/MemberBirthdayResponse.java index 0fd5b6e1..c8926af8 100644 --- a/mashup-member/src/main/java/kr/mashup/branding/ui/member/response/MemberBirthdayResponse.java +++ b/mashup-member/src/main/java/kr/mashup/branding/ui/member/response/MemberBirthdayResponse.java @@ -1,16 +1,18 @@ package kr.mashup.branding.ui.member.response; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Getter; import lombok.RequiredArgsConstructor; -import java.time.LocalDate; +import java.time.MonthDay; import java.util.List; @Getter @RequiredArgsConstructor public class MemberBirthdayResponse { - private final LocalDate date; + @JsonFormat(pattern = "MM-dd") + private final MonthDay date; private final List members; @Getter diff --git a/mashup-member/src/main/java/kr/mashup/branding/ui/member/response/MemberBirthdaysResponse.java b/mashup-member/src/main/java/kr/mashup/branding/ui/member/response/MemberBirthdaysResponse.java index 194d36e0..ede7706e 100644 --- a/mashup-member/src/main/java/kr/mashup/branding/ui/member/response/MemberBirthdaysResponse.java +++ b/mashup-member/src/main/java/kr/mashup/branding/ui/member/response/MemberBirthdaysResponse.java @@ -5,6 +5,7 @@ import lombok.RequiredArgsConstructor; import java.time.LocalDate; +import java.time.MonthDay; import java.util.Comparator; import java.util.List; import java.util.Map; @@ -21,17 +22,17 @@ public class MemberBirthdaysResponse { private final List upcomingBirthdays; - public static MemberBirthdaysResponse of(boolean isBirthdayToday, Set sentMemberIds, Map> upcomingBirthdays) { + public static MemberBirthdaysResponse of(boolean isBirthdayToday, Set sentMemberIds, Map> upcomingBirthdays) { List responses = createResponses(sentMemberIds, upcomingBirthdays); - LocalDate today = LocalDate.now(); + MonthDay today = MonthDay.from(LocalDate.now()); MemberBirthdayResponse todayBirthday = extractTodayBirthday(today, responses); List sortedResponses = sortUpcomingBirthdays(today, responses); return new MemberBirthdaysResponse(isBirthdayToday, todayBirthday, sortedResponses); } - private static List createResponses(Set sentMemberIds, Map> birthdayDtos) { + private static List createResponses(Set sentMemberIds, Map> birthdayDtos) { return birthdayDtos.entrySet().stream() .map(entry -> new MemberBirthdayResponse( entry.getKey(), @@ -47,14 +48,14 @@ private static List createResponses(Set sentMember .collect(Collectors.toList()); } - private static MemberBirthdayResponse extractTodayBirthday(LocalDate today, List responses) { + private static MemberBirthdayResponse extractTodayBirthday(MonthDay today, List responses) { return responses.stream() .filter(response -> today.equals(response.getDate())) .findFirst() .orElse(null); } - private static List sortUpcomingBirthdays(LocalDate today, List responses) { + private static List sortUpcomingBirthdays(MonthDay today, List responses) { return responses.stream() .filter(response -> !today.equals(response.getDate())) .sorted(Comparator.comparing(MemberBirthdayResponse::getDate)) From 48d9514bc82c605f42301a7566c7fc561b0ea846 Mon Sep 17 00:00:00 2001 From: hocaron Date: Fri, 9 Aug 2024 11:27:18 +0900 Subject: [PATCH 09/18] =?UTF-8?q?fix:=20=EC=9B=94=20=EC=9D=BC=EB=A7=8C=20?= =?UTF-8?q?=EB=B9=84=EA=B5=90=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/mashup/branding/service/member/MemberProfileService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberProfileService.java b/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberProfileService.java index 9d269a94..f3aa4dbb 100644 --- a/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberProfileService.java +++ b/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberProfileService.java @@ -58,7 +58,7 @@ public List findByBirthDateBetween(MonthDay startDate, MonthD public boolean isBirthdayToday(long memberId) { return memberProfileRepository.findByMemberId(memberId) - .filter(memberProfile -> LocalDate.now().equals(memberProfile.getBirthDate())) + .filter(memberProfile -> MonthDay.from(LocalDate.now()).equals(MonthDay.from(memberProfile.getBirthDate()))) .isPresent(); } } From cf929a273dbcf37d0f5f939be4ace43cb4e05163 Mon Sep 17 00:00:00 2001 From: hocaron Date: Wed, 14 Aug 2024 22:55:33 +0900 Subject: [PATCH 10/18] =?UTF-8?q?fix:=20=EC=83=9D=EC=9D=BC=EC=9E=90?= =?UTF-8?q?=EA=B0=80=20=EC=97=86=EB=8A=94=20=EA=B2=BD=EC=9A=B0=EB=8A=94=20?= =?UTF-8?q?=ED=91=B8=EC=8B=9C=EC=95=8C=EB=A6=BC=20=EB=B3=B4=EB=82=B4?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/member/MemberRepositoryCustom.java | 3 ++- .../repository/member/MemberRepositoryCustomImpl.java | 10 +++++++--- .../branding/service/member/MemberProfileService.java | 2 +- .../mashup/branding/service/member/MemberService.java | 10 ++++++++-- .../facade/birthday/BirthdayFacadeService.java | 2 +- .../ui/member/response/MemberBirthdaysResponse.java | 3 +-- 6 files changed, 20 insertions(+), 10 deletions(-) diff --git a/mashup-domain/src/main/java/kr/mashup/branding/repository/member/MemberRepositoryCustom.java b/mashup-domain/src/main/java/kr/mashup/branding/repository/member/MemberRepositoryCustom.java index 91025a3b..4aeacad0 100644 --- a/mashup-domain/src/main/java/kr/mashup/branding/repository/member/MemberRepositoryCustom.java +++ b/mashup-domain/src/main/java/kr/mashup/branding/repository/member/MemberRepositoryCustom.java @@ -7,6 +7,7 @@ import org.springframework.data.domain.Pageable; import java.time.LocalDate; +import java.time.MonthDay; import java.util.List; import static kr.mashup.branding.repository.member.MemberRepositoryCustomImpl.MemberScoreQueryResult; @@ -23,5 +24,5 @@ public interface MemberRepositoryCustom { List findAllActiveByGeneration(Generation generation); - List retrieveByBirthDate(Generation generation, LocalDate birthDate); + List retrieveByBirthDate(Generation generation, MonthDay monthDay); } diff --git a/mashup-domain/src/main/java/kr/mashup/branding/repository/member/MemberRepositoryCustomImpl.java b/mashup-domain/src/main/java/kr/mashup/branding/repository/member/MemberRepositoryCustomImpl.java index e064760f..47e70e23 100644 --- a/mashup-domain/src/main/java/kr/mashup/branding/repository/member/MemberRepositoryCustomImpl.java +++ b/mashup-domain/src/main/java/kr/mashup/branding/repository/member/MemberRepositoryCustomImpl.java @@ -23,6 +23,7 @@ import org.springframework.data.domain.Sort; import java.time.LocalDate; +import java.time.MonthDay; import java.util.ArrayList; import java.util.List; @@ -148,12 +149,15 @@ public List findAllActiveByGeneration(Generation generation) { } @Override - public List retrieveByBirthDate(Generation generation, LocalDate birthDate) { + public List retrieveByBirthDate(Generation generation, MonthDay monthDay) { return queryFactory .selectFrom(member) .innerJoin(memberProfile).on(memberProfile.memberId.eq(member.id)) - .innerJoin(memberGeneration).on(memberGeneration.generation.eq(generation)) - .where(memberProfile.birthDate.eq(birthDate)) + .innerJoin(memberGeneration).on(memberGeneration.member.eq(member)) + .where( + memberProfile.birthDate.month().eq(monthDay.getMonthValue()) + .and(memberProfile.birthDate.dayOfMonth().eq(monthDay.getDayOfMonth())) + ) .fetch(); } } diff --git a/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberProfileService.java b/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberProfileService.java index f3aa4dbb..71b081b9 100644 --- a/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberProfileService.java +++ b/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberProfileService.java @@ -58,7 +58,7 @@ public List findByBirthDateBetween(MonthDay startDate, MonthD public boolean isBirthdayToday(long memberId) { return memberProfileRepository.findByMemberId(memberId) - .filter(memberProfile -> MonthDay.from(LocalDate.now()).equals(MonthDay.from(memberProfile.getBirthDate()))) + .filter(memberProfile -> MonthDay.now().equals(MonthDay.from(memberProfile.getBirthDate()))) .isPresent(); } } diff --git a/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberService.java b/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberService.java index 27c375a6..b7b12a47 100644 --- a/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberService.java +++ b/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberService.java @@ -35,6 +35,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.MonthDay; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; @@ -349,14 +350,19 @@ public MemberGeneration getCurrentMemberGeneration(Member member) { @Transactional(readOnly = true) public List getAllByBirthdayRecipient(Generation generation) { - return memberRepository.retrieveByBirthDate(generation, LocalDate.now()); + return memberRepository.retrieveByBirthDate(generation, MonthDay.now()); } @Transactional(readOnly = true) public List getAllByBirthdaySender(Generation generation) { + // 생일자가 없는 경우는 푸시 알림을 보내지 않음 + List recipients = memberRepository.retrieveByBirthDate(generation, MonthDay.now()); + if (recipients.isEmpty()) { + return List.of(); + } + List senders = memberRepository.findAllActiveByGeneration(generation); - List recipients = memberRepository.retrieveByBirthDate(generation, LocalDate.now()); senders.removeAll(recipients); return senders; diff --git a/mashup-member/src/main/java/kr/mashup/branding/facade/birthday/BirthdayFacadeService.java b/mashup-member/src/main/java/kr/mashup/branding/facade/birthday/BirthdayFacadeService.java index cf8910a2..02a6f4c5 100644 --- a/mashup-member/src/main/java/kr/mashup/branding/facade/birthday/BirthdayFacadeService.java +++ b/mashup-member/src/main/java/kr/mashup/branding/facade/birthday/BirthdayFacadeService.java @@ -53,7 +53,7 @@ public MemberBirthdaysResponse getUpcomingBirthdays(Long memberId, Integer days) } private Map> calculateUpcomingBirthdays(Member member, Integer days, Generation generation) { - MonthDay today = MonthDay.from(LocalDate.now()); + MonthDay today = MonthDay.now(); MonthDay endDay = MonthDay.from(LocalDate.now().plusDays(days)); return memberProfileService.findByBirthDateBetween(today, endDay, generation) .stream() diff --git a/mashup-member/src/main/java/kr/mashup/branding/ui/member/response/MemberBirthdaysResponse.java b/mashup-member/src/main/java/kr/mashup/branding/ui/member/response/MemberBirthdaysResponse.java index ede7706e..7733461b 100644 --- a/mashup-member/src/main/java/kr/mashup/branding/ui/member/response/MemberBirthdaysResponse.java +++ b/mashup-member/src/main/java/kr/mashup/branding/ui/member/response/MemberBirthdaysResponse.java @@ -4,7 +4,6 @@ import lombok.Getter; import lombok.RequiredArgsConstructor; -import java.time.LocalDate; import java.time.MonthDay; import java.util.Comparator; import java.util.List; @@ -25,7 +24,7 @@ public class MemberBirthdaysResponse { public static MemberBirthdaysResponse of(boolean isBirthdayToday, Set sentMemberIds, Map> upcomingBirthdays) { List responses = createResponses(sentMemberIds, upcomingBirthdays); - MonthDay today = MonthDay.from(LocalDate.now()); + MonthDay today = MonthDay.now(); MemberBirthdayResponse todayBirthday = extractTodayBirthday(today, responses); List sortedResponses = sortUpcomingBirthdays(today, responses); From 6bd12dfac6db9937da2d373fbe327a32015366c5 Mon Sep 17 00:00:00 2001 From: hocaron Date: Wed, 14 Aug 2024 23:14:57 +0900 Subject: [PATCH 11/18] =?UTF-8?q?fix:=20=EC=83=9D=EC=9D=BC=EC=9E=90?= =?UTF-8?q?=EA=B0=80=20=ED=95=9C=EB=AA=85=EC=9D=B8=20=EA=B2=BD=EC=9A=B0?= =?UTF-8?q?=EB=A7=8C=20=EC=83=9D=EC=9D=BC=20=ED=91=B8=EC=8B=9C=20=EC=A0=9C?= =?UTF-8?q?=EC=99=B8=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/mashup/branding/service/member/MemberService.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberService.java b/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberService.java index b7b12a47..08d569c0 100644 --- a/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberService.java +++ b/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberService.java @@ -363,12 +363,14 @@ public List getAllByBirthdaySender(Generation generation) { } List senders = memberRepository.findAllActiveByGeneration(generation); - senders.removeAll(recipients); + // 오늘 생일인 멤버가 한 명뿐인 경우, 그 멤버를 발신자 목록에서 제외 + if (recipients.size() == 1) { + senders.removeAll(recipients); + } return senders; } - @Transactional public void updatePushCheckTime(final Member member) { member.updatePushCheckTime(LocalDateTime.now()); From a0a550b9d901d00790c7070c5e95d22acf7a1821 Mon Sep 17 00:00:00 2001 From: hocaron Date: Thu, 15 Aug 2024 09:44:17 +0900 Subject: [PATCH 12/18] =?UTF-8?q?fix:=20=EC=9E=98=EB=AA=BB=EB=90=9C=20?= =?UTF-8?q?=EC=9D=91=EB=8B=B5=EA=B0=92=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../branding/facade/birthday/BirthdayCardFacadeService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mashup-member/src/main/java/kr/mashup/branding/facade/birthday/BirthdayCardFacadeService.java b/mashup-member/src/main/java/kr/mashup/branding/facade/birthday/BirthdayCardFacadeService.java index ac545113..c5a95f7d 100644 --- a/mashup-member/src/main/java/kr/mashup/branding/facade/birthday/BirthdayCardFacadeService.java +++ b/mashup-member/src/main/java/kr/mashup/branding/facade/birthday/BirthdayCardFacadeService.java @@ -57,7 +57,7 @@ public BirthdayCardsResponse getMy(Long memberId) { birthdayCard.getSenderMemberName(), birthdayCard.getSenderMemberPlatform().getName(), birthdayCard.getMessage(), - birthdayCard.getMessage() + birthdayCard.getImageUrl() )) .collect(Collectors.toList()); From eb67d4c13465feab911e6ae0f6de4fbed665689e Mon Sep 17 00:00:00 2001 From: hocaron Date: Thu, 15 Aug 2024 10:17:53 +0900 Subject: [PATCH 13/18] =?UTF-8?q?fix:=20=EC=83=9D=EC=9D=BC=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=ED=95=B4=EB=86=93=EC=A7=80=20=EC=95=8A=EC=9D=80=20?= =?UTF-8?q?=EC=BC=80=EC=9D=B4=EC=8A=A4=20=EB=8C=80=EC=9D=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/mashup/branding/service/member/MemberProfileService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberProfileService.java b/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberProfileService.java index 71b081b9..482b0fc6 100644 --- a/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberProfileService.java +++ b/mashup-domain/src/main/java/kr/mashup/branding/service/member/MemberProfileService.java @@ -58,6 +58,7 @@ public List findByBirthDateBetween(MonthDay startDate, MonthD public boolean isBirthdayToday(long memberId) { return memberProfileRepository.findByMemberId(memberId) + .filter(memberProfile -> memberProfile.getBirthDate() != null) .filter(memberProfile -> MonthDay.now().equals(MonthDay.from(memberProfile.getBirthDate()))) .isPresent(); } From cdac7f191a7082412f0f80dff6cd55abbaf8b2c1 Mon Sep 17 00:00:00 2001 From: hocaron Date: Thu, 15 Aug 2024 12:17:37 +0900 Subject: [PATCH 14/18] =?UTF-8?q?fix:=20=EB=8B=B9=EA=B7=BC=20=EB=9E=AD?= =?UTF-8?q?=ED=82=B9=201=EC=9C=84=20=EB=A9=A4=EB=B2=84=20=EC=8A=A4?= =?UTF-8?q?=EC=BC=80=EC=A4=84=EB=9F=AC=20=EB=B2=84=EA=B7=B8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/mashup/branding/service/popup/MemberPopupService.java | 4 ---- .../facade/danggn/DanggnRankingSchedulerFacadeService.java | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/mashup-domain/src/main/java/kr/mashup/branding/service/popup/MemberPopupService.java b/mashup-domain/src/main/java/kr/mashup/branding/service/popup/MemberPopupService.java index 648abd57..0702333f 100644 --- a/mashup-domain/src/main/java/kr/mashup/branding/service/popup/MemberPopupService.java +++ b/mashup-domain/src/main/java/kr/mashup/branding/service/popup/MemberPopupService.java @@ -31,8 +31,4 @@ public Boolean isEnabledMemberPopup(Member member, PopupType popupType) { // 페이지에 방문하지 않은 경우(팝업 상태 활성화) && 마지막으로 본 일자가 현재 보다 과거인 경우 return memberPopup.get().getIsEnabled() && memberPopup.get().getLastViewedAt().toLocalDate().isBefore(LocalDate.now()); } - - public void save(Member member, PopupType popupType) { - memberPopupRepository.save(MemberPopup.of(true, LocalDateTime.now().minusDays(1), member, popupType)); - } } diff --git a/mashup-member/src/main/java/kr/mashup/branding/facade/danggn/DanggnRankingSchedulerFacadeService.java b/mashup-member/src/main/java/kr/mashup/branding/facade/danggn/DanggnRankingSchedulerFacadeService.java index e2fb323d..29433d79 100644 --- a/mashup-member/src/main/java/kr/mashup/branding/facade/danggn/DanggnRankingSchedulerFacadeService.java +++ b/mashup-member/src/main/java/kr/mashup/branding/facade/danggn/DanggnRankingSchedulerFacadeService.java @@ -52,7 +52,7 @@ public void updateFirstMember() { Member firstScoredMember = firstScore.getMemberGeneration().getMember(); DanggnRankingReward danggnRankingReward = DanggnRankingReward.from(firstScoredMember.getId(), currentGeneration.getId()); danggnRankingRewardService.save(danggnRankingReward); - memberPopupService.save(firstScoredMember, PopupType.DANGGN_REWARD); + memberPopupService.findOrSaveMemberPopupByMemberAndType(firstScoredMember, PopupType.DANGGN_REWARD); } } }); From 7007c52af637c36f55b17c8ccdcf751fe0d2f559 Mon Sep 17 00:00:00 2001 From: hocaron Date: Sat, 17 Aug 2024 15:25:52 +0900 Subject: [PATCH 15/18] =?UTF-8?q?feat:=20=ED=8C=9D=EC=97=85=20=EC=B4=88?= =?UTF-8?q?=EA=B8=B0=ED=99=94=20api=20=EB=A5=BC=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=ED=95=98=EB=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/popup/MemberPopupService.java | 4 + .../popup/MemberPopupFacadeService.java | 9 ++ .../ui/popup/MemberPopupController.java | 117 ++++++++++-------- 3 files changed, 78 insertions(+), 52 deletions(-) diff --git a/mashup-domain/src/main/java/kr/mashup/branding/service/popup/MemberPopupService.java b/mashup-domain/src/main/java/kr/mashup/branding/service/popup/MemberPopupService.java index 0702333f..19dcd901 100644 --- a/mashup-domain/src/main/java/kr/mashup/branding/service/popup/MemberPopupService.java +++ b/mashup-domain/src/main/java/kr/mashup/branding/service/popup/MemberPopupService.java @@ -31,4 +31,8 @@ public Boolean isEnabledMemberPopup(Member member, PopupType popupType) { // 페이지에 방문하지 않은 경우(팝업 상태 활성화) && 마지막으로 본 일자가 현재 보다 과거인 경우 return memberPopup.get().getIsEnabled() && memberPopup.get().getLastViewedAt().toLocalDate().isBefore(LocalDate.now()); } + + public void deleteMemberPopup(Member member) { + memberPopupRepository.deleteByMember(member); + } } diff --git a/mashup-member/src/main/java/kr/mashup/branding/facade/popup/MemberPopupFacadeService.java b/mashup-member/src/main/java/kr/mashup/branding/facade/popup/MemberPopupFacadeService.java index 8eaa75d7..eb4413e6 100644 --- a/mashup-member/src/main/java/kr/mashup/branding/facade/popup/MemberPopupFacadeService.java +++ b/mashup-member/src/main/java/kr/mashup/branding/facade/popup/MemberPopupFacadeService.java @@ -1,9 +1,11 @@ package kr.mashup.branding.facade.popup; +import kr.mashup.branding.domain.member.Member; import kr.mashup.branding.domain.member.MemberGeneration; import kr.mashup.branding.domain.member.exception.InactiveGenerationException; import kr.mashup.branding.domain.popup.MemberPopup; import kr.mashup.branding.domain.popup.PopupType; +import kr.mashup.branding.repository.member.MemberRepository; import kr.mashup.branding.security.MemberAuth; import kr.mashup.branding.service.danggn.DanggnRankingRoundService; import kr.mashup.branding.service.member.MemberProfileService; @@ -27,6 +29,7 @@ public class MemberPopupFacadeService { private final MemberService memberService; private final DanggnRankingRoundService danggnRankingRoundService; private final MemberProfileService memberProfileService; + private final MemberRepository memberRepository; public List getEnabledPopupTypes( MemberAuth memberAuth @@ -91,4 +94,10 @@ private MemberPopup getUpdatableByMemberGenerationAndType( return memberPopupService.findOrSaveMemberPopupByMemberAndType(memberGeneration.getMember(), popupType); } + + @Transactional + public void deleteMemberPopup(Long memberId) { + Member member = memberService.findMemberById(memberId); + memberPopupService.deleteMemberPopup(member); + } } diff --git a/mashup-member/src/main/java/kr/mashup/branding/ui/popup/MemberPopupController.java b/mashup-member/src/main/java/kr/mashup/branding/ui/popup/MemberPopupController.java index 87ee5d25..c1b87546 100644 --- a/mashup-member/src/main/java/kr/mashup/branding/ui/popup/MemberPopupController.java +++ b/mashup-member/src/main/java/kr/mashup/branding/ui/popup/MemberPopupController.java @@ -7,6 +7,7 @@ import kr.mashup.branding.ui.ApiResponse; import kr.mashup.branding.ui.EmptyResponse; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import springfox.documentation.annotations.ApiIgnore; @@ -17,62 +18,74 @@ @RequiredArgsConstructor public class MemberPopupController { - private final MemberPopupFacadeService memberPopupFacadeService; + private final MemberPopupFacadeService memberPopupFacadeService; - @ApiOperation( - value = "멤버가 볼 수 있는 팝업 조회", - notes = - "

Error Code

" + - "

" + - "MEMBER_GENERATION_NOT_FOUND
" + - "STORAGE_NOT_FOUND
" + - "

" + @ApiOperation( + value = "멤버가 볼 수 있는 팝업 조회", + notes = + "

Error Code

" + + "

" + + "MEMBER_GENERATION_NOT_FOUND
" + + "STORAGE_NOT_FOUND
" + + "

" - ) - @GetMapping - public ApiResponse> getEnabledPopupTypes( - @ApiIgnore MemberAuth memberAuth - ) { - return ApiResponse.success(memberPopupFacadeService.getEnabledPopupTypes(memberAuth)); - } + ) + @GetMapping + public ApiResponse> getEnabledPopupTypes( + @ApiIgnore MemberAuth memberAuth + ) { + return ApiResponse.success(memberPopupFacadeService.getEnabledPopupTypes(memberAuth)); + } - @ApiOperation( - value = "팝업 비활성화", - notes = - "

Error Code

" + - "

" + - "MEMBER_GENERATION_NOT_FOUND
" + - "STORAGE_NOT_FOUND
" + - "INACTIVE_GENERATION
" + - "

" + @ApiOperation( + value = "팝업 비활성화", + notes = + "

Error Code

" + + "

" + + "MEMBER_GENERATION_NOT_FOUND
" + + "STORAGE_NOT_FOUND
" + + "INACTIVE_GENERATION
" + + "

" - ) - @PatchMapping("/{popupType}/disabled") - public ApiResponse updateDisabled( - @ApiIgnore MemberAuth memberAuth, - @PathVariable PopupType popupType - ) { - memberPopupFacadeService.updateDisabled(memberAuth.getMemberGenerationId(), popupType); - return ApiResponse.success(); - } + ) + @PatchMapping("/{popupType}/disabled") + public ApiResponse updateDisabled( + @ApiIgnore MemberAuth memberAuth, + @PathVariable PopupType popupType + ) { + memberPopupFacadeService.updateDisabled(memberAuth.getMemberGenerationId(), popupType); + return ApiResponse.success(); + } - @ApiOperation( - value = "팝업 마지막 본 시간 업데이트", - notes = - "

Error Code

" + - "

" + - "MEMBER_GENERATION_NOT_FOUND
" + - "STORAGE_NOT_FOUND
" + - "INACTIVE_GENERATION
" + - "

" + @ApiOperation( + value = "팝업 마지막 본 시간 업데이트", + notes = + "

Error Code

" + + "

" + + "MEMBER_GENERATION_NOT_FOUND
" + + "STORAGE_NOT_FOUND
" + + "INACTIVE_GENERATION
" + + "

" - ) - @PatchMapping("/{popupType}/last-viewed") - public ApiResponse updateLastViewedAt( - @ApiIgnore MemberAuth memberAuth, - @PathVariable PopupType popupType - ) { - memberPopupFacadeService.updateLastViewedAt(memberAuth.getMemberGenerationId(), popupType); - return ApiResponse.success(); - } + ) + @PatchMapping("/{popupType}/last-viewed") + public ApiResponse updateLastViewedAt( + @ApiIgnore MemberAuth memberAuth, + @PathVariable PopupType popupType + ) { + memberPopupFacadeService.updateLastViewedAt(memberAuth.getMemberGenerationId(), popupType); + return ApiResponse.success(); + } + + @ApiOperation(value = "팝업 초기화(개발용)") + @DeleteMapping + public ApiResponse delete( + @ApiIgnore MemberAuth memberAuth, + @Value("${spring.profiles.active}") String activeProfile + ) { + if (!activeProfile.equals("production")) { + memberPopupFacadeService.deleteMemberPopup(memberAuth.getMemberId()); + } + return ApiResponse.success(); + } } From 1a5dee0801cd1646d257aaf8e96d9fc8d732a477 Mon Sep 17 00:00:00 2001 From: hocaron Date: Sat, 17 Aug 2024 15:29:33 +0900 Subject: [PATCH 16/18] =?UTF-8?q?feat:=20apiginore=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/kr/mashup/branding/ui/popup/MemberPopupController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mashup-member/src/main/java/kr/mashup/branding/ui/popup/MemberPopupController.java b/mashup-member/src/main/java/kr/mashup/branding/ui/popup/MemberPopupController.java index c1b87546..d6ca33ee 100644 --- a/mashup-member/src/main/java/kr/mashup/branding/ui/popup/MemberPopupController.java +++ b/mashup-member/src/main/java/kr/mashup/branding/ui/popup/MemberPopupController.java @@ -81,7 +81,7 @@ public ApiResponse updateLastViewedAt( @DeleteMapping public ApiResponse delete( @ApiIgnore MemberAuth memberAuth, - @Value("${spring.profiles.active}") String activeProfile + @ApiIgnore @Value("${spring.profiles.active}") String activeProfile ) { if (!activeProfile.equals("production")) { memberPopupFacadeService.deleteMemberPopup(memberAuth.getMemberId()); From 47955f0595933d3d68e0abdd8e92fd2d48039e7d Mon Sep 17 00:00:00 2001 From: hocaron Date: Fri, 23 Aug 2024 22:30:01 +0900 Subject: [PATCH 17/18] =?UTF-8?q?fix:=20=ED=9A=8C=EC=9B=90=20=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EB=B9=84=EA=B5=90=20=EC=97=B0=EC=82=B0=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mashup/branding/facade/birthday/BirthdayFacadeService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mashup-member/src/main/java/kr/mashup/branding/facade/birthday/BirthdayFacadeService.java b/mashup-member/src/main/java/kr/mashup/branding/facade/birthday/BirthdayFacadeService.java index 02a6f4c5..d6c47027 100644 --- a/mashup-member/src/main/java/kr/mashup/branding/facade/birthday/BirthdayFacadeService.java +++ b/mashup-member/src/main/java/kr/mashup/branding/facade/birthday/BirthdayFacadeService.java @@ -20,6 +20,7 @@ import java.time.MonthDay; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.stream.Collectors; @Service @@ -57,7 +58,7 @@ private Map> calculateUpcomingBirthdays(Member MonthDay endDay = MonthDay.from(LocalDate.now().plusDays(days)); return memberProfileService.findByBirthDateBetween(today, endDay, generation) .stream() - .filter(birthdayDto -> birthdayDto.getMemberId() != member.getId()) + .filter(birthdayDto -> !Objects.equals(birthdayDto.getMemberId(), member.getId())) .collect(Collectors.groupingBy(MemberBirthdayDto::getBirthDate)); } From 5442b2c5a195a280a83236d2f64bf04433295cc5 Mon Sep 17 00:00:00 2001 From: Jung Jongmin Date: Sat, 24 Aug 2024 09:50:38 +0900 Subject: [PATCH 18/18] synchronize (#457) Co-authored-by: jongmin.jung --- .../mashong/MashongMissionFacadeService.java | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/mashup-member/src/main/java/kr/mashup/branding/facade/mashong/MashongMissionFacadeService.java b/mashup-member/src/main/java/kr/mashup/branding/facade/mashong/MashongMissionFacadeService.java index e155721e..55b0cc6e 100644 --- a/mashup-member/src/main/java/kr/mashup/branding/facade/mashong/MashongMissionFacadeService.java +++ b/mashup-member/src/main/java/kr/mashup/branding/facade/mashong/MashongMissionFacadeService.java @@ -32,16 +32,24 @@ public class MashongMissionFacadeService { public void apply(MissionStrategyType missionStrategyType, MemberGeneration memberGeneration, Double value) { MashongMission mission = mashongMissionService.findMissionByStrategyType(missionStrategyType); if (mission.getMissionType() == MissionType.INDIVIDUAL) { - MashongMissionLevel latestMissionLevel = getLatestMissionLevel(memberGeneration, mission); - MashongMissionLog mashongMissionLog = mashongMissionLogService.getMissionLog(latestMissionLevel, memberGeneration.getId()); - mashongMissionLog.incrementCurrentStatus(value); + applyIndividual(memberGeneration, mission, value); } else { - MashongMissionLevel latestMissionLevel = getLatestMissionLevel(memberGeneration.getPlatform(), memberGeneration.getGeneration().getId(), mission); - MashongMissionTeamLog mashongMissionLog = mashongMissionTeamLogService.getMissionLog(latestMissionLevel, memberGeneration.getPlatform(), memberGeneration.getGeneration().getId()); - mashongMissionLog.incrementCurrentStatus(value); + applyTeam(memberGeneration, mission, value); } } + private void applyIndividual(MemberGeneration memberGeneration, MashongMission mission, Double value) { + MashongMissionLevel latestMissionLevel = getLatestMissionLevel(memberGeneration, mission); + MashongMissionLog mashongMissionLog = mashongMissionLogService.getMissionLog(latestMissionLevel, memberGeneration.getId()); + mashongMissionLog.incrementCurrentStatus(value); + } + + synchronized private void applyTeam(MemberGeneration memberGeneration, MashongMission mission, Double value) { + MashongMissionLevel latestMissionLevel = getLatestMissionLevel(memberGeneration.getPlatform(), memberGeneration.getGeneration().getId(), mission); + MashongMissionTeamLog mashongMissionLog = mashongMissionTeamLogService.getMissionLog(latestMissionLevel, memberGeneration.getPlatform(), memberGeneration.getGeneration().getId()); + mashongMissionLog.incrementCurrentStatus(value); + } + @Transactional public void setToValue(MissionStrategyType missionStrategyType, MemberGeneration memberGeneration, Double value) { MashongMission mission = mashongMissionService.findMissionByStrategyType(missionStrategyType);