Skip to content

Commit 5babe14

Browse files
authored
Merge pull request #219 from TaskFlow-CLAP/CLAP-215
2 parents 4daabf7 + 3ec5a05 commit 5babe14

File tree

3 files changed

+58
-8
lines changed

3 files changed

+58
-8
lines changed

src/main/java/clap/server/adapter/inbound/web/log/LogController.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,13 @@
1111
import io.swagger.v3.oas.annotations.tags.Tag;
1212
import jakarta.validation.Valid;
1313
import lombok.RequiredArgsConstructor;
14-
import org.springframework.data.domain.Page;
1514
import org.springframework.data.domain.PageRequest;
1615
import org.springframework.data.domain.Pageable;
16+
import org.springframework.data.domain.Sort;
1717
import org.springframework.http.ResponseEntity;
1818
import org.springframework.security.access.annotation.Secured;
1919
import org.springframework.security.core.annotation.AuthenticationPrincipal;
2020
import org.springframework.web.bind.annotation.*;
21-
2221
import java.util.List;
2322

2423
@Tag(name = "05. Admin [로깅]")
@@ -36,9 +35,15 @@ public class LogController {
3635
public ResponseEntity<PageResponse<AnonymousLogResponse>> getLoginAttempts(
3736
@RequestParam(defaultValue = "0") int page,
3837
@RequestParam(defaultValue = "20") int pageSize,
38+
@RequestParam(defaultValue = "requestAt") String sortBy,
39+
@RequestParam(defaultValue = "desc") String sortDirection,
3940
@ModelAttribute @Valid FilterLogRequest anonymousLogRequest,
4041
@AuthenticationPrincipal SecurityUserDetails userInfo) {
41-
Pageable pageable = PageRequest.of(page, pageSize);
42+
Pageable pageable = PageRequest.of(
43+
page,
44+
pageSize,
45+
"asc".equalsIgnoreCase(sortDirection) ? Sort.by(sortBy).ascending() : Sort.by(sortBy).descending()
46+
);
4247
return ResponseEntity.ok(findApiLogsUsecase.filterAnonymousLogs(anonymousLogRequest, pageable));
4348
}
4449

@@ -48,9 +53,15 @@ public ResponseEntity<PageResponse<AnonymousLogResponse>> getLoginAttempts(
4853
public ResponseEntity<PageResponse<MemberLogResponse>> getApiCalls(
4954
@RequestParam(defaultValue = "0") int page,
5055
@RequestParam(defaultValue = "20") int pageSize,
56+
@RequestParam(defaultValue = "requestAt") String sortBy,
57+
@RequestParam(defaultValue = "desc") String sortDirection,
5158
@ModelAttribute @Valid FilterLogRequest memberLogRequest,
5259
@AuthenticationPrincipal SecurityUserDetails userInfo) {
53-
Pageable pageable = PageRequest.of(page, pageSize);
60+
Pageable pageable = PageRequest.of(
61+
page,
62+
pageSize,
63+
"asc".equalsIgnoreCase(sortDirection) ? Sort.by(sortBy).ascending() : Sort.by(sortBy).descending()
64+
);
5465
return ResponseEntity.ok(findApiLogsUsecase.filterMemberLogs(memberLogRequest, pageable));
5566
}
5667
}

src/main/java/clap/server/adapter/outbound/persistense/repository/log/AnonymousLogCustomRepositoryImpl.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import clap.server.adapter.inbound.web.dto.log.FilterLogRequest;
44
import clap.server.adapter.outbound.persistense.entity.log.AnonymousLogEntity;
55
import com.querydsl.core.BooleanBuilder;
6+
import com.querydsl.core.types.OrderSpecifier;
67
import com.querydsl.jpa.impl.JPAQueryFactory;
78
import lombok.RequiredArgsConstructor;
89
import org.springframework.data.domain.Page;
@@ -11,9 +12,11 @@
1112
import org.springframework.stereotype.Repository;
1213

1314
import java.time.LocalDateTime;
15+
import java.util.ArrayList;
1416
import java.util.List;
1517

1618
import static clap.server.adapter.outbound.persistense.entity.log.QAnonymousLogEntity.anonymousLogEntity;
19+
import static clap.server.adapter.outbound.persistense.entity.log.QMemberLogEntity.memberLogEntity;
1720

1821
@Repository
1922
@RequiredArgsConstructor
@@ -26,7 +29,7 @@ public Page<AnonymousLogEntity> filterAnonymousLogs(FilterLogRequest request, Pa
2629

2730
if (request.term() != null) {
2831
LocalDateTime fromDate = LocalDateTime.now().minusHours(request.term());
29-
builder.and(anonymousLogEntity.createdAt.after(fromDate));
32+
builder.and(anonymousLogEntity.requestAt.after(fromDate));
3033
}
3134
if (!request.logStatus().isEmpty()) {
3235
builder.and(anonymousLogEntity.logStatus.in(request.logStatus()));
@@ -41,7 +44,7 @@ public Page<AnonymousLogEntity> filterAnonymousLogs(FilterLogRequest request, Pa
4144
List<AnonymousLogEntity> result = queryFactory
4245
.selectFrom(anonymousLogEntity)
4346
.where(builder)
44-
.orderBy(anonymousLogEntity.createdAt.desc())
47+
.orderBy(getOrderSpecifiers(pageable))
4548
.offset(pageable.getOffset())
4649
.limit(pageable.getPageSize())
4750
.fetch();
@@ -51,4 +54,21 @@ public Page<AnonymousLogEntity> filterAnonymousLogs(FilterLogRequest request, Pa
5154
.fetch().size();
5255
return new PageImpl<>(result, pageable, total);
5356
}
57+
58+
// Pageable의 Sort 조건을 확인하여 동적으로 OrderSpecifier를 생성
59+
private OrderSpecifier<?>[] getOrderSpecifiers(Pageable pageable) {
60+
if (!pageable.getSort().isSorted()) {
61+
// 정렬 조건이 없으면 requestAt 내림차순
62+
return new OrderSpecifier[]{ anonymousLogEntity.requestAt.desc() };
63+
}
64+
List<OrderSpecifier<?>> orderSpecifiers = new ArrayList<>();
65+
pageable.getSort().forEach(order -> {
66+
if ("requestAt".equalsIgnoreCase(order.getProperty())) {
67+
orderSpecifiers.add(order.isAscending()
68+
? anonymousLogEntity.requestAt.asc()
69+
: anonymousLogEntity.requestAt.desc());
70+
}
71+
});
72+
return orderSpecifiers.toArray(new OrderSpecifier[0]);
73+
}
5474
}

src/main/java/clap/server/adapter/outbound/persistense/repository/log/MemberLogCustomRepositoryImpl.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import clap.server.adapter.inbound.web.dto.log.FilterLogRequest;
55
import clap.server.adapter.outbound.persistense.entity.log.MemberLogEntity;
66
import com.querydsl.core.BooleanBuilder;
7+
import com.querydsl.core.types.OrderSpecifier;
78
import com.querydsl.jpa.impl.JPAQueryFactory;
89
import lombok.RequiredArgsConstructor;
910
import org.springframework.data.domain.Page;
@@ -12,6 +13,7 @@
1213
import org.springframework.stereotype.Repository;
1314

1415
import java.time.LocalDateTime;
16+
import java.util.ArrayList;
1517
import java.util.List;
1618

1719
import static clap.server.adapter.outbound.persistense.entity.log.QMemberLogEntity.memberLogEntity;
@@ -30,7 +32,7 @@ public Page<MemberLogEntity> filterMemberLogs(FilterLogRequest request, Pageable
3032

3133
if (request.term() != null) {
3234
LocalDateTime fromDate = LocalDateTime.now().minusHours(request.term());
33-
builder.and(memberLogEntity.createdAt.after(fromDate));
35+
builder.and(memberLogEntity.requestAt.after(fromDate));
3436
}
3537
if (!request.logStatus().isEmpty()) {
3638
builder.and(memberLogEntity.logStatus.in(request.logStatus()));
@@ -46,7 +48,7 @@ public Page<MemberLogEntity> filterMemberLogs(FilterLogRequest request, Pageable
4648
.selectFrom(memberLogEntity)
4749
.where(builder)
4850
.leftJoin(memberLogEntity.member, memberEntity)
49-
.orderBy(memberLogEntity.createdAt.desc())
51+
.orderBy(getOrderSpecifiers(pageable))
5052
.offset(pageable.getOffset())
5153
.limit(pageable.getPageSize())
5254
.fetch();
@@ -56,4 +58,21 @@ public Page<MemberLogEntity> filterMemberLogs(FilterLogRequest request, Pageable
5658
.fetch().size();
5759
return new PageImpl<>(result, pageable, total);
5860
}
61+
62+
// Pageable의 Sort 조건을 확인하여 동적으로 OrderSpecifier를 생성
63+
private OrderSpecifier<?>[] getOrderSpecifiers(Pageable pageable) {
64+
if (!pageable.getSort().isSorted()) {
65+
// 정렬 조건이 없으면 requestAt 내림차순
66+
return new OrderSpecifier[]{ memberLogEntity.requestAt.desc() };
67+
}
68+
List<OrderSpecifier<?>> orderSpecifiers = new ArrayList<>();
69+
pageable.getSort().forEach(order -> {
70+
if ("requestAt".equalsIgnoreCase(order.getProperty())) {
71+
orderSpecifiers.add(order.isAscending()
72+
? memberLogEntity.requestAt.asc()
73+
: memberLogEntity.requestAt.desc());
74+
}
75+
});
76+
return orderSpecifiers.toArray(new OrderSpecifier[0]);
77+
}
5978
}

0 commit comments

Comments
 (0)