Skip to content

Commit 31bc15d

Browse files
feat: 페이징 기능 추가 (#72)
1 parent 7b8657b commit 31bc15d

19 files changed

Lines changed: 148 additions & 180 deletions

‎src/main/java/com/jobnote/domain/applicationform/api/ApplicationFormApi.java‎

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,20 @@
22

33
import com.jobnote.auth.config.LoginUser;
44
import com.jobnote.auth.dto.CustomUserDetails;
5-
import com.jobnote.domain.applicationform.dto.ApplicationFormListResponse;
65
import com.jobnote.domain.applicationform.dto.ApplicationFormRequest;
76
import com.jobnote.domain.applicationform.dto.ApplicationFormResponse;
87
import com.jobnote.global.annotation.swagger.ApiErrorResponseExplanation;
98
import com.jobnote.global.annotation.swagger.ApiResponseExplanations;
109
import com.jobnote.global.annotation.swagger.ApiSuccessResponseExplanation;
10+
import com.jobnote.global.annotation.swagger.PageableAsQueryParam;
1111
import com.jobnote.global.common.ApiResponse;
1212
import com.jobnote.global.common.ResponseCode;
1313
import io.swagger.v3.oas.annotations.Operation;
1414
import io.swagger.v3.oas.annotations.Parameter;
1515
import io.swagger.v3.oas.annotations.tags.Tag;
1616
import jakarta.validation.Valid;
17+
import org.springframework.data.domain.Page;
18+
import org.springframework.data.domain.Pageable;
1719
import org.springframework.http.ResponseEntity;
1820
import org.springframework.web.bind.annotation.PathVariable;
1921
import org.springframework.web.bind.annotation.RequestBody;
@@ -50,14 +52,10 @@ ResponseEntity<ApiResponse<ApplicationFormResponse>> getApplicationForm(
5052
);
5153

5254
@Operation(summary = "지원서 목록 조회")
53-
@ApiResponseExplanations(
54-
success = @ApiSuccessResponseExplanation(
55-
responseClass = ApplicationFormListResponse.class,
56-
description = "조회 성공"
57-
)
58-
)
59-
ResponseEntity<ApiResponse<ApplicationFormListResponse>> getAllApplicationForms(
60-
@Parameter(hidden = true) @LoginUser final CustomUserDetails principal
55+
@PageableAsQueryParam
56+
ResponseEntity<ApiResponse<Page<ApplicationFormResponse>>> getAllApplicationForms(
57+
@Parameter(hidden = true) @LoginUser final CustomUserDetails principal,
58+
@Parameter(hidden = true) Pageable pageable
6159
);
6260

6361
@Operation(summary = "지원서 업데이트",

‎src/main/java/com/jobnote/domain/applicationform/controller/ApplicationFormController.java‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,20 @@
33
import com.jobnote.auth.config.LoginUser;
44
import com.jobnote.auth.dto.CustomUserDetails;
55
import com.jobnote.domain.applicationform.api.ApplicationFormApi;
6-
import com.jobnote.domain.applicationform.dto.ApplicationFormListResponse;
76
import com.jobnote.domain.applicationform.dto.ApplicationFormRequest;
87
import com.jobnote.domain.applicationform.dto.ApplicationFormResponse;
98
import com.jobnote.domain.applicationform.service.ApplicationFormService;
109
import com.jobnote.global.common.ApiResponse;
1110
import com.jobnote.global.common.ResponseCode;
1211
import jakarta.validation.Valid;
1312
import lombok.RequiredArgsConstructor;
13+
import org.springframework.data.domain.Page;
14+
import org.springframework.data.domain.Pageable;
1415
import org.springframework.http.ResponseEntity;
1516
import org.springframework.web.bind.annotation.*;
1617
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
1718

1819
import java.net.URI;
19-
import java.util.List;
2020

2121
@RestController
2222
@RequestMapping("/api/v1/application-forms")
@@ -53,13 +53,13 @@ public ResponseEntity<ApiResponse<ApplicationFormResponse>> getApplicationForm(
5353

5454
@Override
5555
@GetMapping
56-
public ResponseEntity<ApiResponse<ApplicationFormListResponse>> getAllApplicationForms(
57-
@LoginUser final CustomUserDetails principal
56+
public ResponseEntity<ApiResponse<Page<ApplicationFormResponse>>> getAllApplicationForms(
57+
@LoginUser final CustomUserDetails principal,
58+
Pageable pageable
5859
) {
59-
List<ApplicationFormResponse> forms = applicationFormService.getAll(principal.getUserId());
60-
ApplicationFormListResponse listResponse = ApplicationFormListResponse.from(forms);
60+
Page<ApplicationFormResponse> forms = applicationFormService.getAll(principal.getUserId(), pageable);
6161

62-
return ResponseEntity.ok(ApiResponse.ofSuccess(ResponseCode.OK, listResponse));
62+
return ResponseEntity.ok(ApiResponse.ofSuccess(ResponseCode.OK, forms));
6363
}
6464

6565
/* UPDATE */

‎src/main/java/com/jobnote/domain/applicationform/dto/ApplicationFormListResponse.java‎

Lines changed: 0 additions & 17 deletions
This file was deleted.
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package com.jobnote.domain.applicationform.repository;
22

33
import com.jobnote.domain.applicationform.domain.ApplicationForm;
4+
import org.springframework.data.domain.Page;
5+
import org.springframework.data.domain.Pageable;
46
import org.springframework.data.jpa.repository.JpaRepository;
57

6-
import java.util.List;
7-
88
public interface ApplicationFormRepository extends JpaRepository<ApplicationForm, Long> {
9-
List<ApplicationForm> findAllByUserId(final Long id);
9+
Page<ApplicationForm> findAllByUserId(final Long id, final Pageable pageable);
1010
}

‎src/main/java/com/jobnote/domain/applicationform/service/ApplicationFormService.java‎

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import com.jobnote.domain.user.domain.User;
1616
import com.jobnote.domain.user.service.UserService;
1717
import lombok.RequiredArgsConstructor;
18+
import org.springframework.data.domain.Page;
19+
import org.springframework.data.domain.Pageable;
1820
import org.springframework.stereotype.Service;
1921
import org.springframework.transaction.annotation.Transactional;
2022

@@ -47,28 +49,24 @@ public ApplicationFormResponse getById(final Long userId, final Long formId) {
4749
return ApplicationFormResponse.from(form, schedules, documents);
4850
}
4951

50-
public List<ApplicationFormResponse> getAll(final Long userId) {
51-
List<ApplicationForm> forms = applicationFormRepository.findAllByUserId(userId);
52-
List<Long> formIds = forms.stream().map(ApplicationForm::getId).toList();
52+
public Page<ApplicationFormResponse> getAll(final Long userId, final Pageable pageable) {
53+
Page<ApplicationForm> forms = applicationFormRepository.findAllByUserId(userId, pageable);
54+
List<Long> formIds = forms.map(ApplicationForm::getId).toList();
5355

5456
Map<Long, List<ScheduleResponse>> schedulesByFormId = scheduleService.getAllGroupedByApplicationFormIds(userId, formIds);
5557
Map<Long, List<DocumentSimpleResponse>> documentsByFormId = applicationFormDocumentService.getSimpleResponsesGroupedByApplicationFormIds(userId, formIds);
5658

57-
return forms.stream()
58-
.map(form -> ApplicationFormResponse.from(
59-
form,
60-
schedulesByFormId.getOrDefault(form.getId(), List.of()),
61-
documentsByFormId.getOrDefault(form.getId(), List.of()))
62-
)
63-
.toList();
59+
return forms.map(form -> ApplicationFormResponse.from(
60+
form,
61+
schedulesByFormId.getOrDefault(form.getId(), List.of()),
62+
documentsByFormId.getOrDefault(form.getId(), List.of()))
63+
);
6464
}
6565

6666
public List<ApplicationFormSimpleResponse> getAllSimple(final Long userId) {
67-
List<ApplicationForm> forms = applicationFormRepository.findAllByUserId(userId);
67+
Page<ApplicationForm> forms = applicationFormRepository.findAllByUserId(userId, Pageable.unpaged());
6868

69-
return forms.stream()
70-
.map(ApplicationFormSimpleResponse::from)
71-
.toList();
69+
return forms.map(ApplicationFormSimpleResponse::from).toList();
7270
}
7371

7472
/* CREATE */

‎src/main/java/com/jobnote/domain/document/api/DocumentApi.java‎

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,15 @@
66
import com.jobnote.global.annotation.swagger.ApiErrorResponseExplanation;
77
import com.jobnote.global.annotation.swagger.ApiResponseExplanations;
88
import com.jobnote.global.annotation.swagger.ApiSuccessResponseExplanation;
9+
import com.jobnote.global.annotation.swagger.PageableAsQueryParam;
910
import com.jobnote.global.common.ApiResponse;
1011
import com.jobnote.global.common.ResponseCode;
1112
import io.swagger.v3.oas.annotations.Operation;
1213
import io.swagger.v3.oas.annotations.Parameter;
1314
import io.swagger.v3.oas.annotations.tags.Tag;
1415
import jakarta.validation.Valid;
16+
import org.springframework.data.domain.Page;
17+
import org.springframework.data.domain.Pageable;
1518
import org.springframework.http.ResponseEntity;
1619
import org.springframework.web.bind.annotation.PathVariable;
1720
import org.springframework.web.bind.annotation.RequestBody;
@@ -58,26 +61,18 @@ ResponseEntity<ApiResponse<Void>> uploadNewVersionDocument(
5861
);
5962

6063
@Operation(summary = "문서 목록 조회")
61-
@ApiResponseExplanations(
62-
success = @ApiSuccessResponseExplanation(
63-
responseClass = DocumentListResponse.class,
64-
description = "조회 성공"
65-
)
66-
)
67-
ResponseEntity<ApiResponse<DocumentListResponse>> getAllDocuments(
68-
@Parameter(hidden = true) @LoginUser final CustomUserDetails principal
64+
@PageableAsQueryParam
65+
ResponseEntity<ApiResponse<Page<DocumentResponse>>> getAllDocuments(
66+
@Parameter(hidden = true) @LoginUser final CustomUserDetails principal,
67+
@Parameter(hidden = true) Pageable pageable
6968
);
7069

7170
@Operation(summary = "문서의 모든 버전 목록 조회")
72-
@ApiResponseExplanations(
73-
success = @ApiSuccessResponseExplanation(
74-
responseClass = DocumentVersionListResponse.class,
75-
description = "조회 성공"
76-
)
77-
)
78-
ResponseEntity<ApiResponse<DocumentVersionListResponse>> getAllDocumentVersions(
71+
@PageableAsQueryParam
72+
ResponseEntity<ApiResponse<Page<DocumentVersionResponse>>> getAllDocumentVersions(
7973
@PathVariable final Long documentId,
80-
@Parameter(hidden = true) @LoginUser final CustomUserDetails principal
74+
@Parameter(hidden = true) @LoginUser final CustomUserDetails principal,
75+
@Parameter(hidden = true) Pageable pageable
8176
);
8277

8378
@Operation(summary = "문서 삭제")

‎src/main/java/com/jobnote/domain/document/controller/DocumentController.java‎

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@
99
import com.jobnote.global.common.ResponseCode;
1010
import jakarta.validation.Valid;
1111
import lombok.RequiredArgsConstructor;
12+
import org.springframework.data.domain.Page;
13+
import org.springframework.data.domain.Pageable;
1214
import org.springframework.http.ResponseEntity;
1315
import org.springframework.web.bind.annotation.*;
1416
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
1517

1618
import java.net.URI;
17-
import java.util.List;
1819

1920
@RestController
2021
@RequestMapping("/api/v1/documents")
@@ -54,25 +55,25 @@ public ResponseEntity<ApiResponse<Void>> uploadNewVersionDocument(
5455
/* READ */
5556
@Override
5657
@GetMapping
57-
public ResponseEntity<ApiResponse<DocumentListResponse>> getAllDocuments(
58-
@LoginUser final CustomUserDetails principal
58+
public ResponseEntity<ApiResponse<Page<DocumentResponse>>> getAllDocuments(
59+
@LoginUser final CustomUserDetails principal,
60+
Pageable pageable
5961
) {
60-
List<DocumentResponse> documents = documentService.getAll(principal.getUserId());
61-
DocumentListResponse listResponse = DocumentListResponse.from(documents);
62+
Page<DocumentResponse> documents = documentService.getAll(principal.getUserId(), pageable);
6263

63-
return ResponseEntity.ok(ApiResponse.ofSuccess(ResponseCode.OK, listResponse));
64+
return ResponseEntity.ok(ApiResponse.ofSuccess(ResponseCode.OK, documents));
6465
}
6566

6667
@Override
6768
@GetMapping("/{documentId}")
68-
public ResponseEntity<ApiResponse<DocumentVersionListResponse>> getAllDocumentVersions(
69+
public ResponseEntity<ApiResponse<Page<DocumentVersionResponse>>> getAllDocumentVersions(
6970
@PathVariable final Long documentId,
70-
@LoginUser final CustomUserDetails principal
71+
@LoginUser final CustomUserDetails principal,
72+
Pageable pageable
7173
) {
72-
List<DocumentVersionResponse> documents = documentService.getAllVersions(principal.getUserId(), documentId);
73-
DocumentVersionListResponse listResponse = DocumentVersionListResponse.from(documents);
74+
Page<DocumentVersionResponse> documents = documentService.getAllVersions(principal.getUserId(), documentId, pageable);
7475

75-
return ResponseEntity.ok(ApiResponse.ofSuccess(ResponseCode.OK, listResponse));
76+
return ResponseEntity.ok(ApiResponse.ofSuccess(ResponseCode.OK, documents));
7677
}
7778

7879
/* DELETE */

‎src/main/java/com/jobnote/domain/document/dto/DocumentListResponse.java‎

Lines changed: 0 additions & 17 deletions
This file was deleted.

‎src/main/java/com/jobnote/domain/document/dto/DocumentVersionListResponse.java‎

Lines changed: 0 additions & 17 deletions
This file was deleted.
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package com.jobnote.domain.document.repository;
22

33
import com.jobnote.domain.document.domain.Document;
4+
import org.springframework.data.domain.Page;
5+
import org.springframework.data.domain.Pageable;
46
import org.springframework.data.jpa.repository.JpaRepository;
57

6-
import java.util.List;
7-
88
public interface DocumentRepository extends JpaRepository<Document, Long> {
9-
List<Document> findAllByUserId(final Long userId);
9+
Page<Document> findAllByUserId(final Long userId, final Pageable pageable);
1010
}

0 commit comments

Comments
 (0)