diff --git a/src/main/java/com/first/flash/account/member/domain/Gender.java b/src/main/java/com/first/flash/account/member/domain/Gender.java index 527f5a47..9e398be5 100644 --- a/src/main/java/com/first/flash/account/member/domain/Gender.java +++ b/src/main/java/com/first/flash/account/member/domain/Gender.java @@ -1,5 +1,8 @@ package com.first.flash.account.member.domain; +import lombok.ToString; + +@ToString public enum Gender { MALE, FEMALE; diff --git a/src/main/java/com/first/flash/account/member/domain/Member.java b/src/main/java/com/first/flash/account/member/domain/Member.java index 775af071..7e5c0170 100644 --- a/src/main/java/com/first/flash/account/member/domain/Member.java +++ b/src/main/java/com/first/flash/account/member/domain/Member.java @@ -10,12 +10,14 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.ToString; @Entity @NoArgsConstructor(access = lombok.AccessLevel.PROTECTED) @AllArgsConstructor @Builder @Getter +@ToString public class Member { @Id diff --git a/src/main/java/com/first/flash/account/member/domain/MemberBlock.java b/src/main/java/com/first/flash/account/member/domain/MemberBlock.java index 114d4bb0..62e71dcb 100644 --- a/src/main/java/com/first/flash/account/member/domain/MemberBlock.java +++ b/src/main/java/com/first/flash/account/member/domain/MemberBlock.java @@ -11,10 +11,12 @@ import jakarta.persistence.ManyToOne; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.ToString; @Entity @Getter @NoArgsConstructor +@ToString public class MemberBlock extends BaseEntity { @Id diff --git a/src/main/java/com/first/flash/account/member/domain/MemberReport.java b/src/main/java/com/first/flash/account/member/domain/MemberReport.java index be06c4cd..729ecb6c 100644 --- a/src/main/java/com/first/flash/account/member/domain/MemberReport.java +++ b/src/main/java/com/first/flash/account/member/domain/MemberReport.java @@ -11,10 +11,12 @@ import jakarta.persistence.ManyToOne; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.ToString; @Entity @Getter @NoArgsConstructor +@ToString public class MemberReport extends BaseEntity { @Id diff --git a/src/main/java/com/first/flash/account/member/domain/Role.java b/src/main/java/com/first/flash/account/member/domain/Role.java index f01b8b71..0671d593 100644 --- a/src/main/java/com/first/flash/account/member/domain/Role.java +++ b/src/main/java/com/first/flash/account/member/domain/Role.java @@ -1,8 +1,10 @@ package com.first.flash.account.member.domain; import lombok.AllArgsConstructor; +import lombok.ToString; @AllArgsConstructor +@ToString public enum Role { ROLE_ADMIN("ROLE_ADMIN"), ROLE_USER("ROLE_USER"); diff --git a/src/main/java/com/first/flash/climbing/gym/domian/ClimbingGym.java b/src/main/java/com/first/flash/climbing/gym/domian/ClimbingGym.java index 5907bf3f..8161d331 100644 --- a/src/main/java/com/first/flash/climbing/gym/domian/ClimbingGym.java +++ b/src/main/java/com/first/flash/climbing/gym/domian/ClimbingGym.java @@ -15,11 +15,13 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.ToString; @Entity @NoArgsConstructor @AllArgsConstructor @Getter +@ToString public class ClimbingGym { @Id diff --git a/src/main/java/com/first/flash/climbing/gym/domian/vo/Difficulty.java b/src/main/java/com/first/flash/climbing/gym/domian/vo/Difficulty.java index 92195570..94acd187 100644 --- a/src/main/java/com/first/flash/climbing/gym/domian/vo/Difficulty.java +++ b/src/main/java/com/first/flash/climbing/gym/domian/vo/Difficulty.java @@ -6,11 +6,13 @@ import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.ToString; @Embeddable @NoArgsConstructor @EqualsAndHashCode @Getter +@ToString public class Difficulty { @NotEmpty(message = "난이도 이름은 필수입니다.") diff --git a/src/main/java/com/first/flash/climbing/problem/domain/Problem.java b/src/main/java/com/first/flash/climbing/problem/domain/Problem.java index 148a0306..d92d92ff 100644 --- a/src/main/java/com/first/flash/climbing/problem/domain/Problem.java +++ b/src/main/java/com/first/flash/climbing/problem/domain/Problem.java @@ -10,12 +10,14 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.ToString; @Entity @NoArgsConstructor @AllArgsConstructor(access = AccessLevel.PROTECTED) @Builder @Getter +@ToString public class Problem { private static final Long DEFAULT_OPTIONAL_WEIGHT = 0L; diff --git a/src/main/java/com/first/flash/climbing/problem/domain/QueryProblem.java b/src/main/java/com/first/flash/climbing/problem/domain/QueryProblem.java index 619561dd..a0cc384c 100644 --- a/src/main/java/com/first/flash/climbing/problem/domain/QueryProblem.java +++ b/src/main/java/com/first/flash/climbing/problem/domain/QueryProblem.java @@ -12,6 +12,7 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.ToString; @Entity @NoArgsConstructor @@ -27,6 +28,7 @@ columnList = "isExpired, recommendationValue, id") } ) +@ToString public class QueryProblem { private static final Boolean DEFAULT_HAS_SOLUTION = false; diff --git a/src/main/java/com/first/flash/climbing/problem/domain/vo/DifficultyInfo.java b/src/main/java/com/first/flash/climbing/problem/domain/vo/DifficultyInfo.java index 3c83b3f2..82446b62 100644 --- a/src/main/java/com/first/flash/climbing/problem/domain/vo/DifficultyInfo.java +++ b/src/main/java/com/first/flash/climbing/problem/domain/vo/DifficultyInfo.java @@ -4,11 +4,13 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.ToString; @Embeddable @Getter @NoArgsConstructor @AllArgsConstructor +@ToString public class DifficultyInfo { private String difficultyName; diff --git a/src/main/java/com/first/flash/climbing/sector/domain/Sector.java b/src/main/java/com/first/flash/climbing/sector/domain/Sector.java index c2a7eb56..a40ccd64 100644 --- a/src/main/java/com/first/flash/climbing/sector/domain/Sector.java +++ b/src/main/java/com/first/flash/climbing/sector/domain/Sector.java @@ -11,11 +11,13 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.ToString; @Entity @NoArgsConstructor @AllArgsConstructor @Getter +@ToString public class Sector { @Id diff --git a/src/main/java/com/first/flash/climbing/sector/domain/vo/RemovalInfo.java b/src/main/java/com/first/flash/climbing/sector/domain/vo/RemovalInfo.java index 4df1d6ee..22b47dfd 100644 --- a/src/main/java/com/first/flash/climbing/sector/domain/vo/RemovalInfo.java +++ b/src/main/java/com/first/flash/climbing/sector/domain/vo/RemovalInfo.java @@ -5,11 +5,13 @@ import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.ToString; @Embeddable @NoArgsConstructor @EqualsAndHashCode @Getter +@ToString public class RemovalInfo { private static final int FAKE_SECTOR_LIFETIME_DAYS = 30; diff --git a/src/main/java/com/first/flash/climbing/sector/domain/vo/SectorName.java b/src/main/java/com/first/flash/climbing/sector/domain/vo/SectorName.java index 8e4137d2..10e11c24 100644 --- a/src/main/java/com/first/flash/climbing/sector/domain/vo/SectorName.java +++ b/src/main/java/com/first/flash/climbing/sector/domain/vo/SectorName.java @@ -4,11 +4,13 @@ import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.ToString; @Embeddable @NoArgsConstructor @EqualsAndHashCode @Getter +@ToString public class SectorName { private String name; private String adminName; diff --git a/src/main/java/com/first/flash/climbing/solution/domain/Solution.java b/src/main/java/com/first/flash/climbing/solution/domain/Solution.java index 9ecbfe0a..3f60a430 100644 --- a/src/main/java/com/first/flash/climbing/solution/domain/Solution.java +++ b/src/main/java/com/first/flash/climbing/solution/domain/Solution.java @@ -12,11 +12,13 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.ToString; @Entity @NoArgsConstructor @AllArgsConstructor @Getter +@ToString public class Solution extends BaseEntity { private static final Long DEFAULT_OPTIONAL_WEIGHT = 0L; diff --git a/src/main/java/com/first/flash/climbing/solution/domain/vo/SolutionDetail.java b/src/main/java/com/first/flash/climbing/solution/domain/vo/SolutionDetail.java index 110837d9..0d464125 100644 --- a/src/main/java/com/first/flash/climbing/solution/domain/vo/SolutionDetail.java +++ b/src/main/java/com/first/flash/climbing/solution/domain/vo/SolutionDetail.java @@ -4,11 +4,13 @@ import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.ToString; @Embeddable @NoArgsConstructor @EqualsAndHashCode @Getter +@ToString public class SolutionDetail { private String review; diff --git a/src/main/java/com/first/flash/climbing/solution/domain/vo/UploaderDetail.java b/src/main/java/com/first/flash/climbing/solution/domain/vo/UploaderDetail.java index 4e3ca333..01018fea 100644 --- a/src/main/java/com/first/flash/climbing/solution/domain/vo/UploaderDetail.java +++ b/src/main/java/com/first/flash/climbing/solution/domain/vo/UploaderDetail.java @@ -6,11 +6,13 @@ import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.ToString; @Embeddable @NoArgsConstructor @EqualsAndHashCode @Getter +@ToString public class UploaderDetail { @Column(columnDefinition = "BINARY(16)") diff --git a/src/main/java/com/first/flash/global/aspect/LoggingAspect.java b/src/main/java/com/first/flash/global/aspect/LoggingAspect.java new file mode 100644 index 00000000..3a0572c8 --- /dev/null +++ b/src/main/java/com/first/flash/global/aspect/LoggingAspect.java @@ -0,0 +1,104 @@ +package com.first.flash.global.aspect; + +import com.first.flash.global.util.AuthUtil; +import jakarta.servlet.http.HttpServletRequest; +import java.lang.reflect.Method; +import java.util.Enumeration; +import java.util.Objects; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +@Aspect +@Slf4j +@Component +@RequiredArgsConstructor +public class LoggingAspect { + + @Before("com.first.flash.global.aspect.PointCuts.allController()") + public void doBeforeController() { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()) + .getRequest(); + + log.info("======= Controller Start ======="); + log.info("Request URI: {}", request.getRequestURI()); + log.info("HTTP Method: {}", request.getMethod()); + + Enumeration headerNames = request.getHeaderNames(); + while (headerNames.hasMoreElements()) { + String headerName = headerNames.nextElement(); + log.info("Header: {} = {}", headerName, request.getHeader(headerName)); + } + + Enumeration parameterNames = request.getParameterNames(); + while (parameterNames.hasMoreElements()) { + String parameterName = parameterNames.nextElement(); + log.info("Parameter: {} = {}", parameterName, request.getParameter(parameterName)); + } + } + + @Before("com.first.flash.global.aspect.PointCuts.verifiedControllers()") + public void doBeforeVerifiedController() { + log.info("user id: {}", AuthUtil.getId()); + } + + @AfterReturning(value = "com.first.flash.global.aspect.PointCuts.allController()", returning = "result") + public void afterReturnController(final Object result) { + if (result instanceof ResponseEntity responseEntity) { + int statusCode = responseEntity.getStatusCode().value(); + Object responseBody = responseEntity.getBody(); + + log.info("Response Status Code: {}", statusCode); + if (!Objects.isNull(responseBody)) { + log.info("Response Body: {}", responseBody); + } else { + log.info("no Response Body"); + } + } else { + if (!Objects.isNull(result)) { + log.info("Response: {}", result); + } else { + log.info("no Response"); + } + } + log.info("======= Controller End ======="); + } + + @Before("com.first.flash.global.aspect.PointCuts.allService() || com.first.flash.global.aspect.PointCuts.allRepository()") + public void doBefore(final JoinPoint joinPoint) { + Method method = getMethod(joinPoint); + String objectName = joinPoint.getTarget() + .getClass() + .getSimpleName(); + log.info("======= {} Start =======", objectName); + log.info("method name = {}", method.getName()); + Object[] args = joinPoint.getArgs(); + for (Object arg : args) { + log.info("parameter type = {}", arg.getClass().getSimpleName()); + log.info("parameter value = {}", arg); + } + } + + @AfterReturning(value = "com.first.flash.global.aspect.PointCuts.allService() || com.first.flash.global.aspect.PointCuts.allRepository()", returning = "result") + public void afterReturnLog(final JoinPoint joinPoint, final Object result) { + log.info("return type = {}", result.getClass().getSimpleName()); + log.info("return value = {}", result); + String objectName = joinPoint.getTarget() + .getClass() + .getSimpleName(); + log.info("======= {} End =======", objectName); + } + + private Method getMethod(final JoinPoint joinPoint) { + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + return signature.getMethod(); + } +} diff --git a/src/main/java/com/first/flash/global/aspect/PointCuts.java b/src/main/java/com/first/flash/global/aspect/PointCuts.java new file mode 100644 index 00000000..a3ee2ae1 --- /dev/null +++ b/src/main/java/com/first/flash/global/aspect/PointCuts.java @@ -0,0 +1,23 @@ +package com.first.flash.global.aspect; + +import org.aspectj.lang.annotation.Pointcut; + +public class PointCuts { + + @Pointcut("execution(* com.first.flash..*Controller.*(..))") + public void allController() { + } + + @Pointcut("execution(* com.first.flash..*Service*.*(..))") + public void allService() { + } + + @Pointcut("execution(* com.first.flash..*Repository*.*(..))") + public void allRepository() { + } + + @Pointcut("execution(* com.first.flash.climbing..*Controller.*(..))") + public void verifiedControllers() { + + } +}