Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,20 @@

import com.jobnote.auth.config.LoginUser;
import com.jobnote.auth.dto.CustomUserDetails;
import com.jobnote.domain.applicationform.dto.ApplicationFormListResponse;
import com.jobnote.domain.applicationform.dto.ApplicationFormRequest;
import com.jobnote.domain.applicationform.dto.ApplicationFormResponse;
import com.jobnote.global.annotation.swagger.ApiErrorResponseExplanation;
import com.jobnote.global.annotation.swagger.ApiResponseExplanations;
import com.jobnote.global.annotation.swagger.ApiSuccessResponseExplanation;
import com.jobnote.global.annotation.swagger.PageableAsQueryParam;
import com.jobnote.global.common.ApiResponse;
import com.jobnote.global.common.ResponseCode;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
Expand Down Expand Up @@ -50,14 +52,10 @@ ResponseEntity<ApiResponse<ApplicationFormResponse>> getApplicationForm(
);

@Operation(summary = "지원서 목록 조회")
@ApiResponseExplanations(
success = @ApiSuccessResponseExplanation(
responseClass = ApplicationFormListResponse.class,
description = "조회 성공"
)
)
ResponseEntity<ApiResponse<ApplicationFormListResponse>> getAllApplicationForms(
@Parameter(hidden = true) @LoginUser final CustomUserDetails principal
@PageableAsQueryParam
ResponseEntity<ApiResponse<Page<ApplicationFormResponse>>> getAllApplicationForms(
@Parameter(hidden = true) @LoginUser final CustomUserDetails principal,
@Parameter(hidden = true) Pageable pageable
);

@Operation(summary = "지원서 업데이트",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,20 @@
import com.jobnote.auth.config.LoginUser;
import com.jobnote.auth.dto.CustomUserDetails;
import com.jobnote.domain.applicationform.api.ApplicationFormApi;
import com.jobnote.domain.applicationform.dto.ApplicationFormListResponse;
import com.jobnote.domain.applicationform.dto.ApplicationFormRequest;
import com.jobnote.domain.applicationform.dto.ApplicationFormResponse;
import com.jobnote.domain.applicationform.service.ApplicationFormService;
import com.jobnote.global.common.ApiResponse;
import com.jobnote.global.common.ResponseCode;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;

import java.net.URI;
import java.util.List;

@RestController
@RequestMapping("/api/v1/application-forms")
Expand Down Expand Up @@ -53,13 +53,13 @@ public ResponseEntity<ApiResponse<ApplicationFormResponse>> getApplicationForm(

@Override
@GetMapping
public ResponseEntity<ApiResponse<ApplicationFormListResponse>> getAllApplicationForms(
@LoginUser final CustomUserDetails principal
public ResponseEntity<ApiResponse<Page<ApplicationFormResponse>>> getAllApplicationForms(
@LoginUser final CustomUserDetails principal,
Pageable pageable
) {
List<ApplicationFormResponse> forms = applicationFormService.getAll(principal.getUserId());
ApplicationFormListResponse listResponse = ApplicationFormListResponse.from(forms);
Page<ApplicationFormResponse> forms = applicationFormService.getAll(principal.getUserId(), pageable);

return ResponseEntity.ok(ApiResponse.ofSuccess(ResponseCode.OK, listResponse));
return ResponseEntity.ok(ApiResponse.ofSuccess(ResponseCode.OK, forms));
}

/* UPDATE */
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package com.jobnote.domain.applicationform.repository;

import com.jobnote.domain.applicationform.domain.ApplicationForm;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface ApplicationFormRepository extends JpaRepository<ApplicationForm, Long> {
List<ApplicationForm> findAllByUserId(final Long id);
Page<ApplicationForm> findAllByUserId(final Long id, final Pageable pageable);
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
import com.jobnote.domain.user.domain.User;
import com.jobnote.domain.user.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

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

public List<ApplicationFormResponse> getAll(final Long userId) {
List<ApplicationForm> forms = applicationFormRepository.findAllByUserId(userId);
List<Long> formIds = forms.stream().map(ApplicationForm::getId).toList();
public Page<ApplicationFormResponse> getAll(final Long userId, final Pageable pageable) {
Page<ApplicationForm> forms = applicationFormRepository.findAllByUserId(userId, pageable);
List<Long> formIds = forms.map(ApplicationForm::getId).toList();

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

return forms.stream()
.map(form -> ApplicationFormResponse.from(
form,
schedulesByFormId.getOrDefault(form.getId(), List.of()),
documentsByFormId.getOrDefault(form.getId(), List.of()))
)
.toList();
return forms.map(form -> ApplicationFormResponse.from(
form,
schedulesByFormId.getOrDefault(form.getId(), List.of()),
documentsByFormId.getOrDefault(form.getId(), List.of()))
);
}

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

return forms.stream()
.map(ApplicationFormSimpleResponse::from)
.toList();
return forms.map(ApplicationFormSimpleResponse::from).toList();
}

/* CREATE */
Expand Down
27 changes: 11 additions & 16 deletions src/main/java/com/jobnote/domain/document/api/DocumentApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,15 @@
import com.jobnote.global.annotation.swagger.ApiErrorResponseExplanation;
import com.jobnote.global.annotation.swagger.ApiResponseExplanations;
import com.jobnote.global.annotation.swagger.ApiSuccessResponseExplanation;
import com.jobnote.global.annotation.swagger.PageableAsQueryParam;
import com.jobnote.global.common.ApiResponse;
import com.jobnote.global.common.ResponseCode;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
Expand Down Expand Up @@ -58,26 +61,18 @@ ResponseEntity<ApiResponse<Void>> uploadNewVersionDocument(
);

@Operation(summary = "문서 목록 조회")
@ApiResponseExplanations(
success = @ApiSuccessResponseExplanation(
responseClass = DocumentListResponse.class,
description = "조회 성공"
)
)
ResponseEntity<ApiResponse<DocumentListResponse>> getAllDocuments(
@Parameter(hidden = true) @LoginUser final CustomUserDetails principal
@PageableAsQueryParam
ResponseEntity<ApiResponse<Page<DocumentResponse>>> getAllDocuments(
@Parameter(hidden = true) @LoginUser final CustomUserDetails principal,
@Parameter(hidden = true) Pageable pageable
);

@Operation(summary = "문서의 모든 버전 목록 조회")
@ApiResponseExplanations(
success = @ApiSuccessResponseExplanation(
responseClass = DocumentVersionListResponse.class,
description = "조회 성공"
)
)
ResponseEntity<ApiResponse<DocumentVersionListResponse>> getAllDocumentVersions(
@PageableAsQueryParam
ResponseEntity<ApiResponse<Page<DocumentVersionResponse>>> getAllDocumentVersions(
@PathVariable final Long documentId,
@Parameter(hidden = true) @LoginUser final CustomUserDetails principal
@Parameter(hidden = true) @LoginUser final CustomUserDetails principal,
@Parameter(hidden = true) Pageable pageable
);

@Operation(summary = "문서 삭제")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,13 @@
import com.jobnote.global.common.ResponseCode;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;

import java.net.URI;
import java.util.List;

@RestController
@RequestMapping("/api/v1/documents")
Expand Down Expand Up @@ -54,25 +55,25 @@ public ResponseEntity<ApiResponse<Void>> uploadNewVersionDocument(
/* READ */
@Override
@GetMapping
public ResponseEntity<ApiResponse<DocumentListResponse>> getAllDocuments(
@LoginUser final CustomUserDetails principal
public ResponseEntity<ApiResponse<Page<DocumentResponse>>> getAllDocuments(
@LoginUser final CustomUserDetails principal,
Pageable pageable
) {
List<DocumentResponse> documents = documentService.getAll(principal.getUserId());
DocumentListResponse listResponse = DocumentListResponse.from(documents);
Page<DocumentResponse> documents = documentService.getAll(principal.getUserId(), pageable);

return ResponseEntity.ok(ApiResponse.ofSuccess(ResponseCode.OK, listResponse));
return ResponseEntity.ok(ApiResponse.ofSuccess(ResponseCode.OK, documents));
}

@Override
@GetMapping("/{documentId}")
public ResponseEntity<ApiResponse<DocumentVersionListResponse>> getAllDocumentVersions(
public ResponseEntity<ApiResponse<Page<DocumentVersionResponse>>> getAllDocumentVersions(
@PathVariable final Long documentId,
@LoginUser final CustomUserDetails principal
@LoginUser final CustomUserDetails principal,
Pageable pageable
) {
List<DocumentVersionResponse> documents = documentService.getAllVersions(principal.getUserId(), documentId);
DocumentVersionListResponse listResponse = DocumentVersionListResponse.from(documents);
Page<DocumentVersionResponse> documents = documentService.getAllVersions(principal.getUserId(), documentId, pageable);

return ResponseEntity.ok(ApiResponse.ofSuccess(ResponseCode.OK, listResponse));
return ResponseEntity.ok(ApiResponse.ofSuccess(ResponseCode.OK, documents));
}

/* DELETE */
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package com.jobnote.domain.document.repository;

import com.jobnote.domain.document.domain.Document;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface DocumentRepository extends JpaRepository<Document, Long> {
List<Document> findAllByUserId(final Long userId);
Page<Document> findAllByUserId(final Long userId, final Pageable pageable);
}
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
package com.jobnote.domain.document.repository;

import com.jobnote.domain.document.domain.DocumentVersion;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;

import java.util.List;
import java.util.Optional;

public interface DocumentVersionRepository extends JpaRepository<DocumentVersion, Long> {
@Query("select MAX(v.version) from DocumentVersion v where v.document.id = :documentId")
Optional<Integer> findMaxVersionByDocumentId(final Long documentId);

@Query("select v from DocumentVersion v join fetch v.document d join d.user u where u.id = :userId and d.id = :documentId order by v.version desc")
List<DocumentVersion> findAllByUserIdAndDocumentId(final Long userId, final Long documentId);
Page<DocumentVersion> findAllByUserIdAndDocumentId(final Long userId, final Long documentId, final Pageable pageable);

@Query("select COALESCE(SUM(v.fileSize), 0) from DocumentVersion v join v.document d where d.user.id = :userId")
Long getTotalFileSizeByUserId(final Long userId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@
import com.jobnote.global.exception.JobNoteException;
import com.jobnote.infra.s3.service.S3Service;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

import static com.jobnote.global.common.ResponseCode.NOT_FOUND_DOCUMENT;

@Service
Expand Down Expand Up @@ -52,16 +52,15 @@ public Long uploadNewVersionDocument(final Long userId, final Long documentId, f
return saveDocumentVersion(userId, document, request, version);
}

public List<DocumentResponse> getAll(final Long userId) {
return documentRepository.findAllByUserId(userId).stream()
.map(document -> DocumentResponse.from(document, applicationFormService.getAllSimple(userId))).toList();
public Page<DocumentResponse> getAll(final Long userId, final Pageable pageable) {
return documentRepository.findAllByUserId(userId, pageable)
.map(document -> DocumentResponse.from(document, applicationFormService.getAllSimple(userId)));
}

public List<DocumentVersionResponse> getAllVersions(final Long userId, final Long documentId) {
return documentVersionRepository.findAllByUserIdAndDocumentId(userId, documentId).stream()
public Page<DocumentVersionResponse> getAllVersions(final Long userId, final Long documentId, final Pageable pageable) {
return documentVersionRepository.findAllByUserIdAndDocumentId(userId, documentId, pageable)
.map(docVer ->
DocumentVersionResponse.of(docVer, s3Service.generateFileUrl(docVer.getFileKey())))
.toList();
DocumentVersionResponse.of(docVer, s3Service.generateFileUrl(docVer.getFileKey())));
}

@Transactional
Expand All @@ -70,7 +69,7 @@ public void delete(final Long userId, final Long documentId) {
document.validateOwner(userId);

// s3에서 삭제
List<DocumentVersion> allByDocumentId = documentVersionRepository.findAllByUserIdAndDocumentId(userId, documentId);
Page<DocumentVersion> allByDocumentId = documentVersionRepository.findAllByUserIdAndDocumentId(userId, documentId, Pageable.unpaged());
for (DocumentVersion documentVersion : allByDocumentId) {
s3Service.deleteFile(documentVersion.getFileKey());
}
Expand All @@ -83,7 +82,7 @@ public void delete(final Long userId, final Long documentId) {

@Transactional
public void deleteAllDocuments(final Long userId) {
List<Document> documents = documentRepository.findAllByUserId(userId);
Page<Document> documents = documentRepository.findAllByUserId(userId, Pageable.unpaged());
for (Document document : documents) {
delete(userId, document.getId());
}
Expand Down
Loading
Loading