Skip to content

Commit

Permalink
[refact] application 전체 보기 정렬 분리 (#94)
Browse files Browse the repository at this point in the history
* [refac] 지원서 전체 불러오기 sorting 추가

* [refac] sorting 추가 #91

* [refac] part 분류 mapper로 정리
  • Loading branch information
wjdtkdgns authored Jul 20, 2023
1 parent 6350a0b commit 5e0d7c9
Show file tree
Hide file tree
Showing 6 changed files with 102 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

import ceos.backend.domain.application.dto.request.*;
import ceos.backend.domain.application.dto.response.*;
import ceos.backend.domain.application.enums.SortType;
import ceos.backend.domain.application.enums.SortPartType;
import ceos.backend.domain.application.enums.SortPassType;
import ceos.backend.domain.application.service.ApplicationService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
Expand All @@ -27,11 +28,13 @@ public class ApplicationController {

@Operation(summary = "지원자 목록 보기")
@GetMapping
public GetApplications getApplications(@RequestParam("sort")SortType sortType,
public GetApplications getApplications(@RequestParam("part") SortPartType part,
@RequestParam("docPass") SortPassType docPass,
@RequestParam("finalPass") SortPassType finalPass,
@RequestParam("pageNum") int pageNum,
@RequestParam("limit") int limit) {
log.info("지원자 목록 보기");
return applicationService.getApplications(pageNum, limit, sortType);
return applicationService.getApplications(pageNum, limit, part, docPass, finalPass);
}

@Operation(summary = "지원하기")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
package ceos.backend.domain.application.enums;

public enum SortType {
public enum SortPartType {
ALL,
FRONTEND,
BACKEND,
PRODUCT,
DESIGN,
FINALPASS,
FINALFAIL,
DOCPASS,
DOCFAIL
DESIGN
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package ceos.backend.domain.application.enums;

public enum SortPassType {
ALL,
PASS,
FAIL
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import ceos.backend.domain.application.dto.request.CreateApplicationRequest;
import ceos.backend.domain.application.dto.request.UpdateApplicationQuestion;
import ceos.backend.domain.application.dto.response.*;
import ceos.backend.domain.application.enums.SortPartType;
import ceos.backend.domain.application.enums.SortPassType;
import ceos.backend.domain.application.exception.InterviewNotFound;
import ceos.backend.domain.application.exception.QuestionNotFound;
import ceos.backend.domain.application.vo.*;
Expand Down Expand Up @@ -232,4 +234,30 @@ public GetApplications toGetApplications(Page<Application> pageManagements, Page
.toList();
return GetApplications.of(applicationBriefInfoVos, pageInfo);
}

public Pass toPass(SortPassType passType) {
Pass pass = Pass.FAIL;
if (passType == SortPassType.PASS) {
pass = Pass.PASS;
}
return pass;
}

public Part toPart(SortPartType sortType) {
switch (sortType) {
case DESIGN -> {
return Part.DESIGN;
}
case BACKEND -> {
return Part.BACKEND;
}
case PRODUCT -> {
return Part.PRODUCT;
}
case FRONTEND -> {
return Part.FRONTEND;
}
}
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,30 @@ Optional<Application> findByUuidAndEmail(@Param("uuid") String uuid,

@Query("select a from Application a" +
" where a.applicationDetail.part = :part")
Page<Application> findAllByPart(@Param("part")Part part, PageRequest pageRequest);
Page<Application> findAllByPart(@Param("part") Part part, PageRequest pageRequest);

Page<Application> findAllByFinalPass(Pass fail, PageRequest pageRequest);

Page<Application> findAllByDocumentPass(Pass fail, PageRequest pageRequest);

@Query("select a from Application a" +
" where a.applicationDetail.part = :part" +
" and a.documentPass = :pass")
Page<Application> findAllByPartAndDocumentPass(@Param("part") Part backend, @Param("pass") Pass pass, PageRequest pageRequest);

@Query("select a from Application a" +
" where a.applicationDetail.part = :part" +
" and a.finalPass = :pass")
Page<Application> findAllByPartAndFinalPass(@Param("part") Part product, @Param("pass") Pass pass, PageRequest pageRequest);

Page<Application> findAllByDocumentPassAndFinalPass(Pass documentPass, Pass finalPass, PageRequest pageRequest);

@Query("select a from Application a" +
" where a.applicationDetail.part = :part" +
" and a.documentPass = :convertedDocPass" +
" and a.finalPass = :convertedFinalPass")
Page<Application> findAllByPartAndDocumentPassAndFinalPass(@Param("part") Part backend,
@Param("convertedDocPass") Pass convertedDocPass,
@Param("convertedFinalPass") Pass convertedFinalPass,
PageRequest pageRequest);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
import ceos.backend.domain.application.domain.*;
import ceos.backend.domain.application.dto.request.*;
import ceos.backend.domain.application.dto.response.*;
import ceos.backend.domain.application.enums.SortType;
import ceos.backend.domain.application.enums.SortPartType;
import ceos.backend.domain.application.enums.SortPassType;
import ceos.backend.domain.application.exception.FileCreationFailed;
import ceos.backend.domain.application.helper.ApplicationExcelHelper;
import ceos.backend.domain.application.helper.ApplicationHelper;
Expand Down Expand Up @@ -56,24 +57,47 @@ public class ApplicationService {


@Transactional(readOnly = true)
public GetApplications getApplications(int pageNum, int limit, SortType sortType) {
public GetApplications getApplications(int pageNum, int limit, SortPartType sortType,
SortPassType docPass, SortPassType finalPass) {
//페이징 요청 정보
PageRequest pageRequest = PageRequest.of(pageNum, limit);

Page<Application> pageManagements = null;
switch (sortType) {
case ALL -> pageManagements = applicationRepository.findAll(pageRequest);
case BACKEND -> pageManagements = applicationRepository.findAllByPart(Part.BACKEND, pageRequest);
case FRONTEND -> pageManagements = applicationRepository.findAllByPart(Part.FRONTEND, pageRequest);
case DESIGN -> pageManagements = applicationRepository.findAllByPart(Part.DESIGN, pageRequest);
case PRODUCT -> pageManagements = applicationRepository.findAllByPart(Part.PRODUCT, pageRequest);
case FINALFAIL -> pageManagements = applicationRepository.findAllByFinalPass(Pass.FAIL, pageRequest);
case FINALPASS -> pageManagements = applicationRepository.findAllByFinalPass(Pass.PASS, pageRequest);
case DOCFAIL -> pageManagements = applicationRepository.findAllByDocumentPass(Pass.FAIL, pageRequest);
case DOCPASS -> pageManagements = applicationRepository.findAllByDocumentPass(Pass.PASS, pageRequest);
Part part = applicationMapper.toPart(sortType);
if (docPass == SortPassType.ALL && finalPass == SortPassType.ALL) {
switch (sortType) {
case ALL -> pageManagements = applicationRepository.findAll(pageRequest);
default -> pageManagements = applicationRepository
.findAllByPart(applicationMapper.toPart(sortType), pageRequest);
}
} else if (docPass != SortPassType.ALL && finalPass == SortPassType.ALL) {
Pass pass = applicationMapper.toPass(docPass);
switch (sortType) {
case ALL -> pageManagements = applicationRepository.findAllByDocumentPass(pass, pageRequest);
default -> pageManagements = applicationRepository
.findAllByPartAndDocumentPass(applicationMapper.toPart(sortType), pass, pageRequest);
}
} else if (docPass == SortPassType.ALL && finalPass != SortPassType.ALL){
Pass pass = applicationMapper.toPass(finalPass);
switch (sortType) {
case ALL -> pageManagements = applicationRepository.findAllByFinalPass(pass, pageRequest);
default -> pageManagements = applicationRepository
.findAllByPartAndFinalPass(applicationMapper.toPart(sortType), pass, pageRequest);
}
} else {
Pass convertedDocPass = applicationMapper.toPass(docPass);
Pass convertedFinalPass = applicationMapper.toPass(finalPass);
switch (sortType) {
case ALL -> pageManagements = applicationRepository
.findAllByDocumentPassAndFinalPass(convertedDocPass, convertedFinalPass, pageRequest);
default -> pageManagements = applicationRepository
.findAllByPartAndDocumentPassAndFinalPass(applicationMapper.toPart(sortType),
convertedDocPass,
convertedFinalPass,
pageRequest);
}
}


//페이징 정보
PageInfo pageInfo = PageInfo.of(pageNum, limit, pageManagements.getTotalPages(), pageManagements.getTotalElements());

Expand Down

0 comments on commit 5e0d7c9

Please sign in to comment.