diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/UserEntity.java b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/UserEntity.java deleted file mode 100644 index 7d2aa524..00000000 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/UserEntity.java +++ /dev/null @@ -1,106 +0,0 @@ -package com.kamco.cd.kamcoback.postgres.entity; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.SequenceGenerator; -import jakarta.persistence.Table; -import jakarta.persistence.UniqueConstraint; -import jakarta.validation.constraints.NotNull; -import jakarta.validation.constraints.Size; -import java.time.ZonedDateTime; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import org.hibernate.annotations.ColumnDefault; - -@Getter -@Setter -@Entity -@NoArgsConstructor(access = AccessLevel.PROTECTED) -@Table( - name = "tb_user", - uniqueConstraints = {@UniqueConstraint(name = "ux_tb_user_user_id", columnNames = "user_id")}) -public class UserEntity { - - @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "tb_user_id_gen") - @SequenceGenerator( - name = "tb_user_id_gen", - sequenceName = "tb_user_user_uid_seq", - allocationSize = 1) - @Column(name = "user_uid", nullable = false) - private Long id; - - @Size(max = 255) - @NotNull - @Column(name = "user_nm", nullable = false) - private String userNm; - - @Size(max = 255) - @NotNull - @Column(name = "user_id", nullable = false) - private String userId; - - @Size(max = 255) - @NotNull - @Column(name = "user_pw", nullable = false) - private String userPw; - - @Size(max = 255) - @NotNull - @ColumnDefault("'ACTIVE'") - @Column(name = "state", nullable = false) - private String state = "ACTIVE"; - - @Column(name = "date_withdrawal") - private ZonedDateTime dateWithdrawal; - - @ColumnDefault("now()") - @Column(name = "created_dttm") - private ZonedDateTime createdDttm; - - @ColumnDefault("now()") - @Column(name = "updated_dttm") - private ZonedDateTime updatedDttm; - - @Column(name = "created_uid") - private Long createdUid; - - @Column(name = "updated_uid") - private Long updatedUid; - - @Size(max = 255) - @Column(name = "user_email") - private String userEmail; - - @Size(max = 20) - @NotNull - @Column(name = "user_auth", nullable = false, length = 20) - private String userAuth; - - @Size(max = 255) - @NotNull - @Column(name = "emp_id", nullable = false) - private String empId; - - public UserEntity( - Long id, - String userAuth, - String userNm, - String userId, - String empId, - String userEmail, - String userPw) { - this.id = id; - this.userAuth = userAuth; - this.userNm = userNm; - this.userId = userId; - this.empId = empId; - this.userEmail = userEmail; - this.userPw = userPw; - } -} diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/log/AuditLogRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/log/AuditLogRepositoryImpl.java index d7ce97d0..8fdfc907 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/log/AuditLogRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/log/AuditLogRepositoryImpl.java @@ -2,8 +2,8 @@ package com.kamco.cd.kamcoback.postgres.repository.log; import static com.kamco.cd.kamcoback.postgres.entity.QAuditLogEntity.auditLogEntity; import static com.kamco.cd.kamcoback.postgres.entity.QErrorLogEntity.errorLogEntity; +import static com.kamco.cd.kamcoback.postgres.entity.QMemberEntity.memberEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMenuEntity.menuEntity; -import static com.kamco.cd.kamcoback.postgres.entity.QUserEntity.userEntity; import com.kamco.cd.kamcoback.log.dto.AuditLogDto; import com.kamco.cd.kamcoback.log.dto.ErrorLogDto; @@ -12,7 +12,11 @@ import com.kamco.cd.kamcoback.log.dto.EventType; import com.kamco.cd.kamcoback.postgres.entity.AuditLogEntity; import com.kamco.cd.kamcoback.postgres.entity.QMenuEntity; import com.querydsl.core.types.Projections; -import com.querydsl.core.types.dsl.*; +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.core.types.dsl.CaseBuilder; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberExpression; +import com.querydsl.core.types.dsl.StringExpression; import com.querydsl.jpa.impl.JPAQueryFactory; import io.micrometer.common.util.StringUtils; import java.time.LocalDate; @@ -26,7 +30,8 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport; public class AuditLogRepositoryImpl extends QuerydslRepositorySupport - implements AuditLogRepositoryCustom { + implements AuditLogRepositoryCustom { + private final JPAQueryFactory queryFactory; private final StringExpression NULL_STRING = Expressions.stringTemplate("cast(null as text)"); @@ -37,313 +42,313 @@ public class AuditLogRepositoryImpl extends QuerydslRepositorySupport @Override public Page findLogByDaily( - AuditLogDto.searchReq searchReq, LocalDate startDate, LocalDate endDate) { + AuditLogDto.searchReq searchReq, LocalDate startDate, LocalDate endDate) { StringExpression groupDateTime = - Expressions.stringTemplate("to_char({0}, 'YYYY-MM-DD')", auditLogEntity.createdDate); + Expressions.stringTemplate("to_char({0}, 'YYYY-MM-DD')", auditLogEntity.createdDate); Pageable pageable = searchReq.toPageable(); List foundContent = - queryFactory - .select( - Projections.constructor( - AuditLogDto.DailyAuditList.class, - readCount().as("readCount"), - cudCount().as("cudCount"), - printCount().as("printCount"), - downloadCount().as("downloadCount"), - auditLogEntity.count().as("totalCount"), - groupDateTime.as("baseDate"))) - .from(auditLogEntity) - .where(eventEndedAtBetween(startDate, endDate)) - .groupBy(groupDateTime) - .offset(pageable.getOffset()) - .limit(pageable.getPageSize()) - .orderBy(groupDateTime.desc()) - .fetch(); + queryFactory + .select( + Projections.constructor( + AuditLogDto.DailyAuditList.class, + readCount().as("readCount"), + cudCount().as("cudCount"), + printCount().as("printCount"), + downloadCount().as("downloadCount"), + auditLogEntity.count().as("totalCount"), + groupDateTime.as("baseDate"))) + .from(auditLogEntity) + .where(eventEndedAtBetween(startDate, endDate)) + .groupBy(groupDateTime) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize()) + .orderBy(groupDateTime.desc()) + .fetch(); Long countQuery = - queryFactory - .select(groupDateTime.countDistinct()) - .from(auditLogEntity) - .where(eventEndedAtBetween(startDate, endDate)) - .fetchOne(); + queryFactory + .select(groupDateTime.countDistinct()) + .from(auditLogEntity) + .where(eventEndedAtBetween(startDate, endDate)) + .fetchOne(); return new PageImpl<>(foundContent, pageable, countQuery); } @Override public Page findLogByMenu( - AuditLogDto.searchReq searchReq, String searchValue) { + AuditLogDto.searchReq searchReq, String searchValue) { Pageable pageable = searchReq.toPageable(); List foundContent = - queryFactory - .select( - Projections.constructor( - AuditLogDto.MenuAuditList.class, - auditLogEntity.menuUid.as("menuId"), - menuEntity.menuNm.max().as("menuName"), - readCount().as("readCount"), - cudCount().as("cudCount"), - printCount().as("printCount"), - downloadCount().as("downloadCount"), - auditLogEntity.count().as("totalCount"))) - .from(auditLogEntity) - .leftJoin(menuEntity) - .on(auditLogEntity.menuUid.eq(menuEntity.menuUid)) - .where(menuNameEquals(searchValue)) - .groupBy(auditLogEntity.menuUid) - .offset(pageable.getOffset()) - .limit(pageable.getPageSize()) - .orderBy(auditLogEntity.createdDate.max().desc()) - .fetch(); + queryFactory + .select( + Projections.constructor( + AuditLogDto.MenuAuditList.class, + auditLogEntity.menuUid.as("menuId"), + menuEntity.menuNm.max().as("menuName"), + readCount().as("readCount"), + cudCount().as("cudCount"), + printCount().as("printCount"), + downloadCount().as("downloadCount"), + auditLogEntity.count().as("totalCount"))) + .from(auditLogEntity) + .leftJoin(menuEntity) + .on(auditLogEntity.menuUid.eq(menuEntity.menuUid)) + .where(menuNameEquals(searchValue)) + .groupBy(auditLogEntity.menuUid) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize()) + .orderBy(auditLogEntity.createdDate.max().desc()) + .fetch(); // count query group by 를 지정하면 하나의 row 가 아니라 그룹핑된 여러 row 가 나올 수 있다. // select query 의 group by 대상의 컬럼을 count query 에선 select distinct 로 처리 한다. Long countQuery = - queryFactory - .select(auditLogEntity.menuUid.countDistinct()) - .from(auditLogEntity) - .leftJoin(menuEntity) - .on(auditLogEntity.menuUid.eq(menuEntity.menuUid)) - .where(menuNameEquals(searchValue)) - .fetchOne(); + queryFactory + .select(auditLogEntity.menuUid.countDistinct()) + .from(auditLogEntity) + .leftJoin(menuEntity) + .on(auditLogEntity.menuUid.eq(menuEntity.menuUid)) + .where(menuNameEquals(searchValue)) + .fetchOne(); return new PageImpl<>(foundContent, pageable, countQuery); } @Override public Page findLogByAccount( - AuditLogDto.searchReq searchReq, String searchValue) { + AuditLogDto.searchReq searchReq, String searchValue) { Pageable pageable = searchReq.toPageable(); List foundContent = - queryFactory - .select( - Projections.constructor( - AuditLogDto.UserAuditList.class, - auditLogEntity.userUid.as("accountId"), - userEntity.userId.as("loginId"), - userEntity.userNm.as("username"), - readCount().as("readCount"), - cudCount().as("cudCount"), - printCount().as("printCount"), - downloadCount().as("downloadCount"), - auditLogEntity.count().as("totalCount"))) - .from(auditLogEntity) - .leftJoin(userEntity) - .on(auditLogEntity.userUid.eq(userEntity.id)) - .where(loginIdOrUsernameContains(searchValue)) - .groupBy(auditLogEntity.userUid, userEntity.userId, userEntity.userNm) - .offset(pageable.getOffset()) - .limit(pageable.getPageSize()) - // .orderBy(auditLogEntity.eventEndedAt.max().desc()) - .fetch(); + queryFactory + .select( + Projections.constructor( + AuditLogDto.UserAuditList.class, + auditLogEntity.userUid.as("accountId"), + memberEntity.employeeNo.as("loginId"), + memberEntity.name.as("username"), + readCount().as("readCount"), + cudCount().as("cudCount"), + printCount().as("printCount"), + downloadCount().as("downloadCount"), + auditLogEntity.count().as("totalCount"))) + .from(auditLogEntity) + .leftJoin(memberEntity) + .on(auditLogEntity.userUid.eq(memberEntity.id)) + .where(loginIdOrUsernameContains(searchValue)) + .groupBy(auditLogEntity.userUid, memberEntity.employeeNo, memberEntity.name) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize()) + // .orderBy(auditLogEntity.eventEndedAt.max().desc()) + .fetch(); Long countQuery = - queryFactory - .select(auditLogEntity.userUid.countDistinct()) - .from(auditLogEntity) - .leftJoin(userEntity) - .on(auditLogEntity.userUid.eq(userEntity.id)) - .where(loginIdOrUsernameContains(searchValue)) - .fetchOne(); + queryFactory + .select(auditLogEntity.userUid.countDistinct()) + .from(auditLogEntity) + .leftJoin(memberEntity) + .on(auditLogEntity.userUid.eq(memberEntity.id)) + .where(loginIdOrUsernameContains(searchValue)) + .fetchOne(); return new PageImpl<>(foundContent, pageable, countQuery); } @Override public Page findLogByDailyResult( - AuditLogDto.searchReq searchReq, LocalDate logDate) { + AuditLogDto.searchReq searchReq, LocalDate logDate) { Pageable pageable = searchReq.toPageable(); QMenuEntity parent = new QMenuEntity("parent"); // 1depth menu name StringExpression parentMenuName = - new CaseBuilder() - .when(parent.menuUid.isNull()) - .then(menuEntity.menuNm) - .otherwise(parent.menuNm); + new CaseBuilder() + .when(parent.menuUid.isNull()) + .then(menuEntity.menuNm) + .otherwise(parent.menuNm); // 2depth menu name StringExpression menuName = - new CaseBuilder() - .when(parent.menuUid.isNull()) - .then(NULL_STRING) - .otherwise(menuEntity.menuNm); + new CaseBuilder() + .when(parent.menuUid.isNull()) + .then(NULL_STRING) + .otherwise(menuEntity.menuNm); List foundContent = - queryFactory - .select( - Projections.constructor( - AuditLogDto.DailyDetail.class, - auditLogEntity.id.as("logId"), - userEntity.userNm.as("userName"), - userEntity.userId.as("loginId"), - menuEntity.menuNm.as("menuName"), - auditLogEntity.eventType.as("eventType"), - Projections.constructor( - AuditLogDto.LogDetail.class, - Expressions.constant("한국자산관리공사"), // serviceName - parentMenuName.as("parentMenuName"), - menuName, - menuEntity.menuUrl.as("menuUrl"), - menuEntity.description.as("menuDescription"), - menuEntity.menuOrder.as("sortOrder"), - menuEntity.isUse.as("used")))) - .from(auditLogEntity) - .leftJoin(menuEntity) - .on(auditLogEntity.menuUid.eq(menuEntity.menuUid)) - .leftJoin(menuEntity.parent, parent) - .leftJoin(userEntity) - .on(auditLogEntity.userUid.eq(userEntity.id)) - .where(eventEndedAtEqDate(logDate)) - .offset(pageable.getOffset()) - .limit(pageable.getPageSize()) - .orderBy(auditLogEntity.createdDate.desc()) - .fetch(); + queryFactory + .select( + Projections.constructor( + AuditLogDto.DailyDetail.class, + auditLogEntity.id.as("logId"), + memberEntity.name.as("userName"), + memberEntity.employeeNo.as("loginId"), + menuEntity.menuNm.as("menuName"), + auditLogEntity.eventType.as("eventType"), + Projections.constructor( + AuditLogDto.LogDetail.class, + Expressions.constant("한국자산관리공사"), // serviceName + parentMenuName.as("parentMenuName"), + menuName, + menuEntity.menuUrl.as("menuUrl"), + menuEntity.description.as("menuDescription"), + menuEntity.menuOrder.as("sortOrder"), + menuEntity.isUse.as("used")))) + .from(auditLogEntity) + .leftJoin(menuEntity) + .on(auditLogEntity.menuUid.eq(menuEntity.menuUid)) + .leftJoin(menuEntity.parent, parent) + .leftJoin(memberEntity) + .on(auditLogEntity.userUid.eq(memberEntity.id)) + .where(eventEndedAtEqDate(logDate)) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize()) + .orderBy(auditLogEntity.createdDate.desc()) + .fetch(); Long countQuery = - queryFactory - .select(auditLogEntity.id.countDistinct()) - .from(auditLogEntity) - .leftJoin(menuEntity) - .on(auditLogEntity.menuUid.eq(menuEntity.menuUid)) - .leftJoin(menuEntity.parent, parent) - .leftJoin(userEntity) - .on(auditLogEntity.userUid.eq(userEntity.id)) - .where(eventEndedAtEqDate(logDate)) - .fetchOne(); + queryFactory + .select(auditLogEntity.id.countDistinct()) + .from(auditLogEntity) + .leftJoin(menuEntity) + .on(auditLogEntity.menuUid.eq(menuEntity.menuUid)) + .leftJoin(menuEntity.parent, parent) + .leftJoin(memberEntity) + .on(auditLogEntity.userUid.eq(memberEntity.id)) + .where(eventEndedAtEqDate(logDate)) + .fetchOne(); return new PageImpl<>(foundContent, pageable, countQuery); } @Override public Page findLogByMenuResult( - AuditLogDto.searchReq searchReq, String menuUid) { + AuditLogDto.searchReq searchReq, String menuUid) { Pageable pageable = searchReq.toPageable(); QMenuEntity parent = new QMenuEntity("parent"); // 1depth menu name StringExpression parentMenuName = - new CaseBuilder() - .when(parent.menuUid.isNull()) - .then(menuEntity.menuNm) - .otherwise(parent.menuNm); + new CaseBuilder() + .when(parent.menuUid.isNull()) + .then(menuEntity.menuNm) + .otherwise(parent.menuNm); // 2depth menu name StringExpression menuName = - new CaseBuilder() - .when(parent.menuUid.isNull()) - .then(NULL_STRING) - .otherwise(menuEntity.menuNm); + new CaseBuilder() + .when(parent.menuUid.isNull()) + .then(NULL_STRING) + .otherwise(menuEntity.menuNm); List foundContent = - queryFactory - .select( - Projections.constructor( - AuditLogDto.MenuDetail.class, - auditLogEntity.id.as("logId"), - Expressions.stringTemplate( - "to_char({0}, 'YYYY-MM-DD')", auditLogEntity.createdDate) - .as("logDateTime"), // ?? - userEntity.userNm.as("userName"), - userEntity.userId.as("loginId"), - auditLogEntity.eventType.as("eventType"), - Projections.constructor( - AuditLogDto.LogDetail.class, - Expressions.constant("한국자산관리공사"), // serviceName - parentMenuName.as("parentMenuName"), - menuName, - menuEntity.menuUrl.as("menuUrl"), - menuEntity.description.as("menuDescription"), - menuEntity.menuOrder.as("sortOrder"), - menuEntity.isUse.as("used")))) - .from(auditLogEntity) - .leftJoin(menuEntity) - .on(auditLogEntity.menuUid.eq(menuEntity.menuUid)) - .leftJoin(menuEntity.parent, parent) - .leftJoin(userEntity) - .on(auditLogEntity.userUid.eq(userEntity.id)) - .where(menuUidEq(menuUid)) - .offset(pageable.getOffset()) - .limit(pageable.getPageSize()) - .orderBy(auditLogEntity.createdDate.desc()) - .fetch(); + queryFactory + .select( + Projections.constructor( + AuditLogDto.MenuDetail.class, + auditLogEntity.id.as("logId"), + Expressions.stringTemplate( + "to_char({0}, 'YYYY-MM-DD')", auditLogEntity.createdDate) + .as("logDateTime"), // ?? + memberEntity.name.as("userName"), + memberEntity.employeeNo.as("loginId"), + auditLogEntity.eventType.as("eventType"), + Projections.constructor( + AuditLogDto.LogDetail.class, + Expressions.constant("한국자산관리공사"), // serviceName + parentMenuName.as("parentMenuName"), + menuName, + menuEntity.menuUrl.as("menuUrl"), + menuEntity.description.as("menuDescription"), + menuEntity.menuOrder.as("sortOrder"), + menuEntity.isUse.as("used")))) + .from(auditLogEntity) + .leftJoin(menuEntity) + .on(auditLogEntity.menuUid.eq(menuEntity.menuUid)) + .leftJoin(menuEntity.parent, parent) + .leftJoin(memberEntity) + .on(auditLogEntity.userUid.eq(memberEntity.id)) + .where(menuUidEq(menuUid)) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize()) + .orderBy(auditLogEntity.createdDate.desc()) + .fetch(); Long countQuery = - queryFactory - .select(auditLogEntity.id.countDistinct()) - .from(auditLogEntity) - .leftJoin(menuEntity) - .on(auditLogEntity.menuUid.eq(menuEntity.menuUid)) - .leftJoin(menuEntity.parent, parent) - .leftJoin(userEntity) - .on(auditLogEntity.userUid.eq(userEntity.id)) - .where(menuUidEq(menuUid)) - .fetchOne(); + queryFactory + .select(auditLogEntity.id.countDistinct()) + .from(auditLogEntity) + .leftJoin(menuEntity) + .on(auditLogEntity.menuUid.eq(menuEntity.menuUid)) + .leftJoin(menuEntity.parent, parent) + .leftJoin(memberEntity) + .on(auditLogEntity.userUid.eq(memberEntity.id)) + .where(menuUidEq(menuUid)) + .fetchOne(); return new PageImpl<>(foundContent, pageable, countQuery); } @Override public Page findLogByAccountResult( - AuditLogDto.searchReq searchReq, Long userUid) { + AuditLogDto.searchReq searchReq, Long userUid) { Pageable pageable = searchReq.toPageable(); QMenuEntity parent = new QMenuEntity("parent"); // 1depth menu name StringExpression parentMenuName = - new CaseBuilder() - .when(parent.menuUid.isNull()) - .then(menuEntity.menuNm) - .otherwise(parent.menuNm); + new CaseBuilder() + .when(parent.menuUid.isNull()) + .then(menuEntity.menuNm) + .otherwise(parent.menuNm); // 2depth menu name StringExpression menuName = - new CaseBuilder() - .when(parent.menuUid.isNull()) - .then(NULL_STRING) - .otherwise(menuEntity.menuNm); + new CaseBuilder() + .when(parent.menuUid.isNull()) + .then(NULL_STRING) + .otherwise(menuEntity.menuNm); List foundContent = - queryFactory - .select( - Projections.constructor( - AuditLogDto.UserDetail.class, - auditLogEntity.id.as("logId"), - Expressions.stringTemplate( - "to_char({0}, 'YYYY-MM-DD')", auditLogEntity.createdDate) - .as("logDateTime"), - menuEntity.menuNm.as("menuName"), - auditLogEntity.eventType.as("eventType"), - Projections.constructor( - AuditLogDto.LogDetail.class, - Expressions.constant("한국자산관리공사"), // serviceName - parentMenuName.as("parentMenuName"), - menuName, - menuEntity.menuUrl.as("menuUrl"), - menuEntity.description.as("menuDescription"), - menuEntity.menuOrder.as("sortOrder"), - menuEntity.isUse.as("used")))) - .from(auditLogEntity) - .leftJoin(menuEntity) - .on(auditLogEntity.menuUid.eq(menuEntity.menuUid)) - .leftJoin(menuEntity.parent, parent) - .leftJoin(userEntity) - .on(auditLogEntity.userUid.eq(userEntity.id)) - .where(userUidEq(userUid)) - .offset(pageable.getOffset()) - .limit(pageable.getPageSize()) - .orderBy(auditLogEntity.createdDate.desc()) - .fetch(); + queryFactory + .select( + Projections.constructor( + AuditLogDto.UserDetail.class, + auditLogEntity.id.as("logId"), + Expressions.stringTemplate( + "to_char({0}, 'YYYY-MM-DD')", auditLogEntity.createdDate) + .as("logDateTime"), + menuEntity.menuNm.as("menuName"), + auditLogEntity.eventType.as("eventType"), + Projections.constructor( + AuditLogDto.LogDetail.class, + Expressions.constant("한국자산관리공사"), // serviceName + parentMenuName.as("parentMenuName"), + menuName, + menuEntity.menuUrl.as("menuUrl"), + menuEntity.description.as("menuDescription"), + menuEntity.menuOrder.as("sortOrder"), + menuEntity.isUse.as("used")))) + .from(auditLogEntity) + .leftJoin(menuEntity) + .on(auditLogEntity.menuUid.eq(menuEntity.menuUid)) + .leftJoin(menuEntity.parent, parent) + .leftJoin(memberEntity) + .on(auditLogEntity.userUid.eq(memberEntity.id)) + .where(userUidEq(userUid)) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize()) + .orderBy(auditLogEntity.createdDate.desc()) + .fetch(); Long countQuery = - queryFactory - .select(auditLogEntity.id.countDistinct()) - .from(auditLogEntity) - .leftJoin(menuEntity) - .on(auditLogEntity.menuUid.eq(menuEntity.menuUid)) - .leftJoin(menuEntity.parent, parent) - .leftJoin(userEntity) - .on(auditLogEntity.userUid.eq(userEntity.id)) - .where(userUidEq(userUid)) - .fetchOne(); + queryFactory + .select(auditLogEntity.id.countDistinct()) + .from(auditLogEntity) + .leftJoin(menuEntity) + .on(auditLogEntity.menuUid.eq(menuEntity.menuUid)) + .leftJoin(menuEntity.parent, parent) + .leftJoin(memberEntity) + .on(auditLogEntity.userUid.eq(memberEntity.id)) + .where(userUidEq(userUid)) + .fetchOne(); return new PageImpl<>(foundContent, pageable, countQuery); } @@ -355,9 +360,9 @@ public class AuditLogRepositoryImpl extends QuerydslRepositorySupport LocalDateTime startDateTime = startDate.atStartOfDay(); LocalDateTime endDateTime = endDate.plusDays(1).atStartOfDay(); return auditLogEntity - .createdDate - .goe(ZonedDateTime.from(startDateTime)) - .and(auditLogEntity.createdDate.lt(ZonedDateTime.from(endDateTime))); + .createdDate + .goe(ZonedDateTime.from(startDateTime)) + .and(auditLogEntity.createdDate.lt(ZonedDateTime.from(endDateTime))); } private BooleanExpression menuNameEquals(String searchValue) { @@ -371,7 +376,7 @@ public class AuditLogRepositoryImpl extends QuerydslRepositorySupport if (StringUtils.isBlank(searchValue)) { return null; } - return userEntity.userId.contains(searchValue).or(userEntity.userNm.contains(searchValue)); + return memberEntity.employeeNo.contains(searchValue).or(memberEntity.name.contains(searchValue)); } private BooleanExpression eventStatusEqFailed() { @@ -394,7 +399,7 @@ public class AuditLogRepositoryImpl extends QuerydslRepositorySupport private BooleanExpression eventEndedAtEqDate(LocalDate logDate) { StringExpression eventEndedDate = - Expressions.stringTemplate("to_char({0}, 'YYYY-MM-DD')", auditLogEntity.createdDate); + Expressions.stringTemplate("to_char({0}, 'YYYY-MM-DD')", auditLogEntity.createdDate); LocalDateTime comparisonDate = logDate.atStartOfDay(); return eventEndedDate.eq(comparisonDate.toString()); @@ -410,33 +415,33 @@ public class AuditLogRepositoryImpl extends QuerydslRepositorySupport private NumberExpression readCount() { return new CaseBuilder() - .when(auditLogEntity.eventType.eq(EventType.READ)) - .then(1) - .otherwise(0) - .sum(); + .when(auditLogEntity.eventType.eq(EventType.READ)) + .then(1) + .otherwise(0) + .sum(); } private NumberExpression cudCount() { return new CaseBuilder() - .when(auditLogEntity.eventType.in(EventType.CREATE, EventType.UPDATE, EventType.DELETE)) - .then(1) - .otherwise(0) - .sum(); + .when(auditLogEntity.eventType.in(EventType.CREATE, EventType.UPDATE, EventType.DELETE)) + .then(1) + .otherwise(0) + .sum(); } private NumberExpression printCount() { return new CaseBuilder() - .when(auditLogEntity.eventType.eq(EventType.PRINT)) - .then(1) - .otherwise(0) - .sum(); + .when(auditLogEntity.eventType.eq(EventType.PRINT)) + .then(1) + .otherwise(0) + .sum(); } private NumberExpression downloadCount() { return new CaseBuilder() - .when(auditLogEntity.eventType.eq(EventType.DOWNLOAD)) - .then(1) - .otherwise(0) - .sum(); + .when(auditLogEntity.eventType.eq(EventType.DOWNLOAD)) + .then(1) + .otherwise(0) + .sum(); } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/log/ErrorLogRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/log/ErrorLogRepositoryImpl.java index 0efa6bc6..af13cd2c 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/log/ErrorLogRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/log/ErrorLogRepositoryImpl.java @@ -2,8 +2,8 @@ package com.kamco.cd.kamcoback.postgres.repository.log; import static com.kamco.cd.kamcoback.postgres.entity.QAuditLogEntity.auditLogEntity; import static com.kamco.cd.kamcoback.postgres.entity.QErrorLogEntity.errorLogEntity; +import static com.kamco.cd.kamcoback.postgres.entity.QMemberEntity.memberEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMenuEntity.menuEntity; -import static com.kamco.cd.kamcoback.postgres.entity.QUserEntity.userEntity; import com.kamco.cd.kamcoback.log.dto.ErrorLogDto; import com.kamco.cd.kamcoback.log.dto.EventStatus; @@ -25,7 +25,8 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport; public class ErrorLogRepositoryImpl extends QuerydslRepositorySupport - implements ErrorLogRepositoryCustom { + implements ErrorLogRepositoryCustom { + private final JPAQueryFactory queryFactory; private final StringExpression NULL_STRING = Expressions.stringTemplate("cast(null as text)"); @@ -38,57 +39,57 @@ public class ErrorLogRepositoryImpl extends QuerydslRepositorySupport public Page findLogByError(ErrorLogDto.ErrorSearchReq searchReq) { Pageable pageable = searchReq.toPageable(); List foundContent = - queryFactory - .select( - Projections.constructor( - ErrorLogDto.Basic.class, - errorLogEntity.id.as("logId"), - Expressions.stringTemplate("{0}", "한국자산관리공사"), // serviceName - menuEntity.menuNm.as("menuName"), - userEntity.userId.as("loginId"), - userEntity.userNm.as("userName"), - errorLogEntity.errorType.as("eventType"), - errorLogEntity.errorMessage.as( - "errorName"), // 기존에는 errorName 값이 있었는데 신규 테이블에는 없음. 에러 메세지와 동일 - errorLogEntity.errorLevel.as("errorLevel"), - errorLogEntity.errorCode.as("errorCode"), - errorLogEntity.errorMessage.as("errorMessage"), - errorLogEntity.stackTrace.as("errorDetail"), - Expressions.stringTemplate( - "to_char({0}, 'YYYY-MM-DD')", errorLogEntity.createdDate))) - .from(errorLogEntity) - .leftJoin(auditLogEntity) - .on(errorLogEntity.id.eq(auditLogEntity.errorLogUid)) - .leftJoin(menuEntity) - .on(auditLogEntity.menuUid.eq(menuEntity.menuUid)) - .leftJoin(userEntity) - .on(errorLogEntity.handlerUid.eq(userEntity.id)) - .where( - eventStatusEqFailed(), - eventEndedAtBetween(searchReq.getStartDate(), searchReq.getEndDate()), - eventTypeEq(searchReq.getEventType()), - errorLevelEq(searchReq.getErrorLevel())) - .offset(pageable.getOffset()) - .limit(pageable.getPageSize()) - .orderBy(errorLogEntity.createdDate.desc()) - .fetch(); + queryFactory + .select( + Projections.constructor( + ErrorLogDto.Basic.class, + errorLogEntity.id.as("logId"), + Expressions.stringTemplate("{0}", "한국자산관리공사"), // serviceName + menuEntity.menuNm.as("menuName"), + memberEntity.employeeNo.as("loginId"), + memberEntity.name.as("userName"), + errorLogEntity.errorType.as("eventType"), + errorLogEntity.errorMessage.as( + "errorName"), // 기존에는 errorName 값이 있었는데 신규 테이블에는 없음. 에러 메세지와 동일 + errorLogEntity.errorLevel.as("errorLevel"), + errorLogEntity.errorCode.as("errorCode"), + errorLogEntity.errorMessage.as("errorMessage"), + errorLogEntity.stackTrace.as("errorDetail"), + Expressions.stringTemplate( + "to_char({0}, 'YYYY-MM-DD')", errorLogEntity.createdDate))) + .from(errorLogEntity) + .leftJoin(auditLogEntity) + .on(errorLogEntity.id.eq(auditLogEntity.errorLogUid)) + .leftJoin(menuEntity) + .on(auditLogEntity.menuUid.eq(menuEntity.menuUid)) + .leftJoin(memberEntity) + .on(errorLogEntity.handlerUid.eq(memberEntity.id)) + .where( + eventStatusEqFailed(), + eventEndedAtBetween(searchReq.getStartDate(), searchReq.getEndDate()), + eventTypeEq(searchReq.getEventType()), + errorLevelEq(searchReq.getErrorLevel())) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize()) + .orderBy(errorLogEntity.createdDate.desc()) + .fetch(); Long countQuery = - queryFactory - .select(errorLogEntity.id.countDistinct()) - .from(errorLogEntity) - .leftJoin(auditLogEntity) - .on(errorLogEntity.id.eq(auditLogEntity.errorLogUid)) - .leftJoin(menuEntity) - .on(auditLogEntity.menuUid.eq(menuEntity.menuUid)) - .leftJoin(userEntity) - .on(errorLogEntity.handlerUid.eq(userEntity.id)) - .where( - eventStatusEqFailed(), - eventEndedAtBetween(searchReq.getStartDate(), searchReq.getEndDate()), - eventTypeEq(searchReq.getEventType()), - errorLevelEq(searchReq.getErrorLevel())) - .fetchOne(); + queryFactory + .select(errorLogEntity.id.countDistinct()) + .from(errorLogEntity) + .leftJoin(auditLogEntity) + .on(errorLogEntity.id.eq(auditLogEntity.errorLogUid)) + .leftJoin(menuEntity) + .on(auditLogEntity.menuUid.eq(menuEntity.menuUid)) + .leftJoin(memberEntity) + .on(errorLogEntity.handlerUid.eq(memberEntity.id)) + .where( + eventStatusEqFailed(), + eventEndedAtBetween(searchReq.getStartDate(), searchReq.getEndDate()), + eventTypeEq(searchReq.getEventType()), + errorLevelEq(searchReq.getErrorLevel())) + .fetchOne(); return new PageImpl<>(foundContent, pageable, countQuery); } @@ -100,9 +101,9 @@ public class ErrorLogRepositoryImpl extends QuerydslRepositorySupport LocalDateTime startDateTime = startDate.atStartOfDay(); LocalDateTime endDateTime = endDate.plusDays(1).atStartOfDay(); return auditLogEntity - .createdDate - .goe(ZonedDateTime.from(startDateTime)) - .and(auditLogEntity.createdDate.lt(ZonedDateTime.from(endDateTime))); + .createdDate + .goe(ZonedDateTime.from(startDateTime)) + .and(auditLogEntity.createdDate.lt(ZonedDateTime.from(endDateTime))); } private BooleanExpression eventStatusEqFailed() {