Skip to content

Commit a9545b2

Browse files
committed
feat: 공통 응답 규격 적용
1 parent 903ea87 commit a9545b2

File tree

5 files changed

+108
-59
lines changed

5 files changed

+108
-59
lines changed
Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
package com.example.template.admin;
22

3-
import java.util.List;
4-
53
import org.springframework.data.domain.Pageable;
6-
import org.springframework.http.HttpStatus;
74
import org.springframework.http.ResponseEntity;
85
import org.springframework.web.bind.annotation.GetMapping;
96
import org.springframework.web.bind.annotation.RequestMapping;
107
import org.springframework.web.bind.annotation.RequestParam;
118
import org.springframework.web.bind.annotation.RestController;
129

10+
import com.example.template.common.ApiResponse;
1311
import com.example.template.common.dto.AdminDto;
1412
import com.example.template.common.dto.OffsetBasedPageRequest;
1513

@@ -37,13 +35,14 @@ public class AdminController {
3735
* SQL 을 이용한 회원 목록 조회 API
3836
*/
3937
@GetMapping("/v1")
40-
public ResponseEntity<List<AdminDto.AdminResponse>> getVocQuestionsVer1(
41-
AdminDto.AdminListRequest condition,
42-
@RequestParam(name="offset") @NotNull long offset,
43-
@RequestParam(name="limit") @NotNull int limit) {
44-
Pageable pageable = new OffsetBasedPageRequest(offset, limit);
45-
return new ResponseEntity<>(adminService.getAdminListV1(pageable, condition), HttpStatus.OK);
46-
}
38+
public ResponseEntity<ApiResponse<ApiResponse.ListResponse<AdminDto.AdminResponse>>> getV1(
39+
AdminDto.AdminListRequest condition,
40+
@RequestParam(name="offset") @NotNull long offset,
41+
@RequestParam(name="limit") @NotNull int limit
42+
) {
43+
Pageable pageable = new OffsetBasedPageRequest(offset, limit);
44+
return ApiResponse.success(adminService.getAdminListV1(pageable, condition));
45+
}
4746

4847
/**
4948
* @param AdminListRequest 회원 조회에 사용되는 요청 정보
@@ -52,13 +51,15 @@ public ResponseEntity<List<AdminDto.AdminResponse>> getVocQuestionsVer1(
5251
* JPA 를 이용한 회원 목록 조회 API
5352
*/
5453
@GetMapping("/v2")
55-
public ResponseEntity<List<AdminDto.AdminResponse>> getVocQuestionsVer2(
56-
AdminDto.AdminListRequest condition,
57-
@RequestParam(name="offset") @NotNull long offset,
58-
@RequestParam(name="limit") @NotNull int limit) {
59-
Pageable pageable = new OffsetBasedPageRequest(offset, limit);
60-
return new ResponseEntity<>(adminService.getAdminListV2(pageable, condition), HttpStatus.OK);
61-
}
54+
public ResponseEntity<ApiResponse<ApiResponse.ListResponse<AdminDto.AdminResponse>>> getV2(
55+
AdminDto.AdminListRequest condition,
56+
@RequestParam(name="offset") @NotNull long offset,
57+
@RequestParam(name="limit") @NotNull int limit
58+
) {
59+
Pageable pageable = new OffsetBasedPageRequest(offset, limit);
60+
return ApiResponse.success(adminService.getAdminListV2(pageable, condition));
61+
}
62+
6263

6364
/**
6465
* @param AdminListRequest 회원 조회에 사용되는 요청 정보
@@ -67,13 +68,15 @@ public ResponseEntity<List<AdminDto.AdminResponse>> getVocQuestionsVer2(
6768
* QueryDSL 을 이용한 회원 목록 조회 API
6869
*/
6970
@GetMapping("/v3")
70-
public ResponseEntity<List<AdminDto.AdminResponse>> getVocQuestionsVer3(
71-
AdminDto.AdminListRequest condition,
72-
@RequestParam(name="offset") @NotNull long offset,
73-
@RequestParam(name="limit") @NotNull int limit) {
74-
Pageable pageable = new OffsetBasedPageRequest(offset, limit);
75-
return new ResponseEntity<>(adminService.getAdminListV3(pageable, condition), HttpStatus.OK);
76-
}
71+
public ResponseEntity<ApiResponse<ApiResponse.ListResponse<AdminDto.AdminResponse>>> getV3(
72+
AdminDto.AdminListRequest condition,
73+
@RequestParam(name="offset") @NotNull long offset,
74+
@RequestParam(name="limit") @NotNull int limit
75+
) {
76+
Pageable pageable = new OffsetBasedPageRequest(offset, limit);
77+
return ApiResponse.success(adminService.getAdminListV3(pageable, condition));
78+
}
79+
7780
}
7881

7982

src/main/java/com/example/template/admin/AdminRepository.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,17 @@ List<AdminEntity> findAdminListV1(@Param("loginId") String loginId,
3939
@Param("offset") long offset,
4040
@Param("limit") int limit);
4141

42+
@Query(value = "SELECT COUNT(*) FROM admin " +
43+
"WHERE (:loginId IS NULL OR login_id = :loginId) " +
44+
"AND (:name IS NULL OR name = :name) " +
45+
"AND (:email IS NULL OR email = :email) " +
46+
"AND (:phoneNumber IS NULL OR phone_number = :phoneNumber)",
47+
nativeQuery = true)
48+
long countAdminListV1(@Param("loginId") String loginId,
49+
@Param("name") String name,
50+
@Param("email") String email,
51+
@Param("phoneNumber") String phoneNumber);
52+
4253

4354
/**
4455
* V2: Spring Data JPA의 Pageable을 활용한 회원 목록 조회
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
package com.example.template.admin;
22

3-
import java.util.List;
4-
53
import org.springframework.data.domain.Pageable;
64
import org.springframework.transaction.annotation.Transactional;
75

6+
import com.example.template.common.ApiResponse;
87
import com.example.template.common.dto.AdminDto;
98

109
@Transactional(readOnly = true)
1110
public interface AdminService {
12-
List<AdminDto.AdminResponse> getAdminListV1(Pageable pageable, AdminDto.AdminListRequest condition);
13-
List<AdminDto.AdminResponse> getAdminListV2(Pageable pageable, AdminDto.AdminListRequest condition);
14-
List<AdminDto.AdminResponse> getAdminListV3(Pageable pageable, AdminDto.AdminListRequest condition);
11+
ApiResponse.ListResponse<AdminDto.AdminResponse> getAdminListV1(Pageable pageable, AdminDto.AdminListRequest condition);
12+
long countAdminListV1(AdminDto.AdminListRequest condition);
13+
ApiResponse.ListResponse<AdminDto.AdminResponse> getAdminListV2(Pageable pageable, AdminDto.AdminListRequest condition);
14+
ApiResponse.ListResponse<AdminDto.AdminResponse> getAdminListV3(Pageable pageable, AdminDto.AdminListRequest condition);
1515

1616
}
Lines changed: 49 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package com.example.template.admin;
22

33
import java.util.List;
4-
import java.util.stream.Collectors;
54

65
import org.springframework.data.domain.Page;
76
import org.springframework.data.domain.Pageable;
87
import org.springframework.stereotype.Service;
98

9+
import com.example.template.common.ApiResponse;
1010
import com.example.template.common.dto.AdminDto;
1111
import com.example.template.model.entity.AdminEntity;
1212

@@ -19,38 +19,58 @@ public class AdminServiceImpl implements AdminService {
1919
private final AdminRepository adminRepository;
2020
private final AdminRepositoryCustom adminRepositoryCustom;
2121

22-
@Override
23-
public List<AdminDto.AdminResponse> getAdminListV1(Pageable pageable, AdminDto.AdminListRequest condition) {
24-
25-
List<AdminEntity> adminEntities = adminRepository.findAdminListV1(
22+
public ApiResponse.ListResponse<AdminDto.AdminResponse> getAdminListV1(Pageable pageable, AdminDto.AdminListRequest condition) {
23+
List<AdminEntity> adminEntities = adminRepository.findAdminListV1(
24+
condition.getLoginId(),
25+
condition.getName(),
26+
condition.getEmail(),
27+
condition.getPhoneNumber(),
28+
pageable.getOffset(),
29+
pageable.getPageSize()
30+
);
31+
32+
List<AdminDto.AdminResponse> list = adminEntities.stream()
33+
.map(AdminEntity::toAdminResponse)
34+
.toList();
35+
36+
long totalCount = adminRepository.countAdminListV1(
37+
condition.getLoginId(),
38+
condition.getName(),
39+
condition.getEmail(),
40+
condition.getPhoneNumber()
41+
);
42+
43+
return ApiResponse.ListResponse.of(totalCount, list);
44+
}
45+
46+
47+
@Override
48+
public long countAdminListV1(AdminDto.AdminListRequest condition) {
49+
return adminRepository.countAdminListV1(
2650
condition.getLoginId(),
2751
condition.getName(),
2852
condition.getEmail(),
29-
condition.getPhoneNumber(),
30-
pageable.getOffset(),
31-
pageable.getPageSize()
53+
condition.getPhoneNumber()
3254
);
33-
34-
return adminEntities.stream()
35-
.map(AdminEntity::toAdminResponse)
36-
.collect(Collectors.toList());
37-
}
38-
39-
@Override
40-
public List<AdminDto.AdminResponse> getAdminListV2(Pageable pageable, AdminDto.AdminListRequest condition) {
41-
Page<AdminEntity> adminEntities = adminRepository.findAllByOrderByCreatedAtDescIdDesc(pageable);
42-
43-
return adminEntities.getContent().stream()
44-
.map(AdminEntity::toAdminResponse)
45-
.collect(Collectors.toList());
46-
}
47-
48-
@Override
49-
public List<AdminDto.AdminResponse> getAdminListV3(Pageable pageable, AdminDto.AdminListRequest condition) {
50-
Page<AdminDto.AdminResponse> result = adminRepositoryCustom.searchAdmin(condition, pageable);
51-
return result.getContent();
52-
53-
}
55+
}
56+
57+
@Override
58+
public ApiResponse.ListResponse<AdminDto.AdminResponse> getAdminListV2(Pageable pageable, AdminDto.AdminListRequest condition) {
59+
Page<AdminEntity> adminEntities = adminRepository.findAllByOrderByCreatedAtDescIdDesc(pageable);
60+
61+
List<AdminDto.AdminResponse> list = adminEntities.getContent().stream()
62+
.map(AdminEntity::toAdminResponse)
63+
.toList();
64+
65+
return ApiResponse.ListResponse.of(adminEntities.getTotalElements(), list);
66+
}
67+
68+
@Override
69+
public ApiResponse.ListResponse<AdminDto.AdminResponse> getAdminListV3(Pageable pageable, AdminDto.AdminListRequest condition) {
70+
Page<AdminDto.AdminResponse> result = adminRepositoryCustom.searchAdmin(condition, pageable);
71+
return ApiResponse.ListResponse.of(result.getTotalElements(), result.getContent());
72+
}
73+
5474

5575
}
5676

src/main/java/com/example/template/common/ApiResponse.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.example.template.common;
22

33
import java.time.LocalDateTime;
4+
import java.util.List;
45

56
import org.springframework.http.ResponseEntity;
67

@@ -51,7 +52,7 @@ public static <T> ResponseEntity<ApiResponse<T>> success(T data) {
5152
.build()
5253
);
5354
}
54-
55+
5556
public static <T> ResponseEntity<ApiResponse<T>> error(ResponseCode responseCode) {
5657
return ResponseEntity.status(responseCode.getHttpStatus())
5758
.body(ApiResponse.<T>builder()
@@ -69,4 +70,18 @@ public static <T> ApiResponse<T> error(ResponseCode responseCode, String message
6970
.data(null)
7071
.build();
7172
}
73+
74+
@Getter
75+
@Builder
76+
public static class ListResponse<T> {
77+
private final long totalCount;
78+
private final List<T> list;
79+
80+
public static <T> ListResponse<T> of(long totalCount, List<T> list) {
81+
return ListResponse.<T>builder()
82+
.totalCount(totalCount)
83+
.list(list)
84+
.build();
85+
}
86+
}
7287
}

0 commit comments

Comments
 (0)