From c9718f69d84fa994148a29a4e59b39d610a041cd Mon Sep 17 00:00:00 2001 From: jiminnimij <124450012+jiminnimij@users.noreply.github.com> Date: Fri, 15 Aug 2025 19:48:06 +0900 Subject: [PATCH 1/2] =?UTF-8?q?refactor:=20=ED=8A=B8=EB=9E=9C=EC=9E=AD?= =?UTF-8?q?=EC=85=98=20=EB=A1=9C=EA=B7=B8=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ApplicationService.java | 3 ++ .../common/annotation/TransactionLog.java | 10 ++++++ .../common/aop/TransactionLoggingAspect.java | 34 +++++++++++++++++++ 3 files changed, 47 insertions(+) create mode 100644 src/main/java/ceos/backend/global/common/annotation/TransactionLog.java create mode 100644 src/main/java/ceos/backend/global/common/aop/TransactionLoggingAspect.java diff --git a/src/main/java/ceos/backend/domain/application/service/ApplicationService.java b/src/main/java/ceos/backend/domain/application/service/ApplicationService.java index 80b69e6c..369cffa4 100644 --- a/src/main/java/ceos/backend/domain/application/service/ApplicationService.java +++ b/src/main/java/ceos/backend/domain/application/service/ApplicationService.java @@ -28,6 +28,7 @@ import ceos.backend.domain.recruitment.domain.Recruitment; import ceos.backend.domain.recruitment.helper.RecruitmentHelper; import ceos.backend.domain.recruitment.validator.RecruitmentValidator; +import ceos.backend.global.common.annotation.TransactionLog; import ceos.backend.global.common.dto.PageInfo; import ceos.backend.global.common.entity.Part; import ceos.backend.global.util.InterviewDateTimeConvertor; @@ -258,6 +259,7 @@ public GetInterviewAvailability getInterviewAvailability(Long applicationId) { @Transactional + @TransactionLog public void updateDocumentPassStatus(Long applicationId, UpdatePassStatus updatePassStatus) { recruitmentValidator.validateBetweenStartDateDocAndResultDateDoc(); // 기간 검증 applicationValidator.validateExistingApplicant(applicationId); // 유저 검증 @@ -267,6 +269,7 @@ public void updateDocumentPassStatus(Long applicationId, UpdatePassStatus update } @Transactional + @TransactionLog public void updateFinalPassStatus(Long applicationId, UpdatePassStatus updatePassStatus) { recruitmentValidator.validateBetweenResultDateDocAndResultDateFinal(); // 기간 검증 applicationValidator.validateExistingApplicant(applicationId); // 유저 검증 diff --git a/src/main/java/ceos/backend/global/common/annotation/TransactionLog.java b/src/main/java/ceos/backend/global/common/annotation/TransactionLog.java new file mode 100644 index 00000000..ca491348 --- /dev/null +++ b/src/main/java/ceos/backend/global/common/annotation/TransactionLog.java @@ -0,0 +1,10 @@ +package ceos.backend.global.common.annotation; + +import java.lang.annotation.*; + + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface TransactionLog { +} \ No newline at end of file diff --git a/src/main/java/ceos/backend/global/common/aop/TransactionLoggingAspect.java b/src/main/java/ceos/backend/global/common/aop/TransactionLoggingAspect.java new file mode 100644 index 00000000..b3bf3c40 --- /dev/null +++ b/src/main/java/ceos/backend/global/common/aop/TransactionLoggingAspect.java @@ -0,0 +1,34 @@ +package ceos.backend.global.common.aop; + +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.springframework.stereotype.Component; +import org.springframework.transaction.support.TransactionSynchronizationManager; + + +@Slf4j +@Aspect +@Component +public class TransactionLoggingAspect { + + @Around("@annotation(ceos.backend.global.common.annotation.TransactionLog)") + public Object logTxMethod(ProceedingJoinPoint joinPoint) throws Throwable { + String methodName = joinPoint.getSignature().toShortString(); + + log.info("[TX START] {}", methodName); + String txName = TransactionSynchronizationManager.getCurrentTransactionName(); + log.info("[TX NAME] = {}", txName); + + + try { + Object result = joinPoint.proceed(); + log.info("[TX COMMIT] {}", methodName); + return result; + } catch (Exception e) { + log.warn("[TX ROLLBACK] {} - Exception: {}", methodName, e.getMessage()); + throw e; + } + } +} From 221eb0ea155ff33d2b0e13674d75e8a3bbf2c690 Mon Sep 17 00:00:00 2001 From: limgahyun Date: Sun, 17 Aug 2025 01:22:18 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20recruitment=20-=20MT=20info=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/domain/recruitment/domain/Recruitment.java | 10 ++++++++++ .../backend/domain/recruitment/dto/RecruitmentDTO.java | 10 +++++++++- .../domain/recruitment/dto/UserRecruitmentDTO.java | 10 +++++++++- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/main/java/ceos/backend/domain/recruitment/domain/Recruitment.java b/src/main/java/ceos/backend/domain/recruitment/domain/Recruitment.java index 69e3436d..3f95c6f9 100644 --- a/src/main/java/ceos/backend/domain/recruitment/domain/Recruitment.java +++ b/src/main/java/ceos/backend/domain/recruitment/domain/Recruitment.java @@ -55,6 +55,10 @@ public class Recruitment extends BaseEntity { @NotNull private LocalDate demodayDate; + private LocalDate startMTDate; + + private LocalDate endMTDate; + private LocalDateTime applicationExcelCreatedAt; // 생성자 @@ -75,6 +79,8 @@ private Recruitment( LocalDate ideathonDate, LocalDate hackathonDate, LocalDate demodayDate, + LocalDate startMTDate, + LocalDate endMTDate, LocalDateTime applicationExcelCreatedAt) { this.generation = generation; this.prodStudyUrl = prodStudyUrl; @@ -91,6 +97,8 @@ private Recruitment( this.ideathonDate = ideathonDate; this.hackathonDate = hackathonDate; this.demodayDate = demodayDate; + this.startMTDate = startMTDate; + this.endMTDate = endMTDate; this.applicationExcelCreatedAt = applicationExcelCreatedAt; } @@ -110,6 +118,8 @@ public void updateRecruitment(RecruitmentDTO recruitmentDTO) { this.ideathonDate = recruitmentDTO.getIdeathonDate(); this.hackathonDate = recruitmentDTO.getHackathonDate(); this.demodayDate = recruitmentDTO.getDemodayDate(); + this.startMTDate = recruitmentDTO.getStartMTDate(); + this.endMTDate = recruitmentDTO.getEndMTDate(); } public void updateApplicationExcelCreatedAt(LocalDateTime createdAt) { diff --git a/src/main/java/ceos/backend/domain/recruitment/dto/RecruitmentDTO.java b/src/main/java/ceos/backend/domain/recruitment/dto/RecruitmentDTO.java index c177e48c..29071bcb 100644 --- a/src/main/java/ceos/backend/domain/recruitment/dto/RecruitmentDTO.java +++ b/src/main/java/ceos/backend/domain/recruitment/dto/RecruitmentDTO.java @@ -24,6 +24,8 @@ public class RecruitmentDTO { private LocalDate ideathonDate; private LocalDate hackathonDate; private LocalDate demodayDate; + private LocalDate startMTDate; + private LocalDate endMTDate; @Builder public RecruitmentDTO( @@ -41,7 +43,9 @@ public RecruitmentDTO( LocalDate otDate, LocalDate ideathonDate, LocalDate hackathonDate, - LocalDate demodayDate) { + LocalDate demodayDate, + LocalDate startMTDate, + LocalDate endMTDate) { this.generation = generation; this.prodStudyUrl = prodStudyUrl; this.designStudyUrl = designStudyUrl; @@ -57,6 +61,8 @@ public RecruitmentDTO( this.ideathonDate = ideathonDate; this.hackathonDate = hackathonDate; this.demodayDate = demodayDate; + this.startMTDate = startMTDate; + this.endMTDate = endMTDate; } public static RecruitmentDTO from(Recruitment recruitment) { @@ -76,6 +82,8 @@ public static RecruitmentDTO from(Recruitment recruitment) { .ideathonDate(recruitment.getIdeathonDate()) .hackathonDate(recruitment.getHackathonDate()) .demodayDate(recruitment.getDemodayDate()) + .startMTDate(recruitment.getStartMTDate()) + .endMTDate(recruitment.getEndMTDate()) .build(); } } diff --git a/src/main/java/ceos/backend/domain/recruitment/dto/UserRecruitmentDTO.java b/src/main/java/ceos/backend/domain/recruitment/dto/UserRecruitmentDTO.java index d13b1a6d..ac2e9fae 100644 --- a/src/main/java/ceos/backend/domain/recruitment/dto/UserRecruitmentDTO.java +++ b/src/main/java/ceos/backend/domain/recruitment/dto/UserRecruitmentDTO.java @@ -23,6 +23,8 @@ public class UserRecruitmentDTO { private LocalDate ideathonDate; private LocalDate hackathonDate; private LocalDate demodayDate; + private LocalDate startMTDate; + private LocalDate endMTDate; @Builder public UserRecruitmentDTO( @@ -39,7 +41,9 @@ public UserRecruitmentDTO( LocalDate otDate, LocalDate ideathonDate, LocalDate hackathonDate, - LocalDate demodayDate) { + LocalDate demodayDate, + LocalDate startMTDate, + LocalDate endMTDate) { this.generation = generation; this.prodStudyUrl = prodStudyUrl; this.designStudyUrl = designStudyUrl; @@ -54,6 +58,8 @@ public UserRecruitmentDTO( this.ideathonDate = ideathonDate; this.hackathonDate = hackathonDate; this.demodayDate = demodayDate; + this.startMTDate = startMTDate; + this.endMTDate = endMTDate; } public static UserRecruitmentDTO from(Recruitment recruitment) { @@ -72,6 +78,8 @@ public static UserRecruitmentDTO from(Recruitment recruitment) { .ideathonDate(recruitment.getIdeathonDate()) .hackathonDate(recruitment.getHackathonDate()) .demodayDate(recruitment.getDemodayDate()) + .startMTDate(recruitment.getStartMTDate()) + .endMTDate(recruitment.getEndMTDate()) .build(); } }