Skip to content

Commit

Permalink
feat: 자기소개 조회 기능 구현 - #20
Browse files Browse the repository at this point in the history
  • Loading branch information
Dh3356 committed Feb 26, 2024
1 parent 8ecd4c3 commit 84fd862
Show file tree
Hide file tree
Showing 2 changed files with 91 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.mjulikelion.baker.service.introduce;

import org.mjulikelion.baker.dto.response.ResponseDto;
import org.mjulikelion.baker.dto.response.introduce.IntroduceGetResponseData;
import org.springframework.http.ResponseEntity;

public interface IntroduceQueryService {
ResponseEntity<ResponseDto<IntroduceGetResponseData>> getStudentIntroduce(String studentId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package org.mjulikelion.baker.service.introduce;

import static org.mjulikelion.baker.errorcode.ErrorCode.APPLICATION_INTRODUCE_NOT_FOUND_ERROR;
import static org.mjulikelion.baker.errorcode.ErrorCode.APPLICATION_NOT_FOUND_ERROR;

import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;
import lombok.AllArgsConstructor;
import org.mjulikelion.baker.dto.response.ResponseDto;
import org.mjulikelion.baker.dto.response.introduce.IntroduceGetResponseData;
import org.mjulikelion.baker.exception.ApplicationIntroduceNotFoundException;
import org.mjulikelion.baker.exception.ApplicationNotFoundException;
import org.mjulikelion.baker.model.Application;
import org.mjulikelion.baker.model.ApplicationIntroduce;
import org.mjulikelion.baker.model.Introduce;
import org.mjulikelion.baker.repository.ApplicationIntroduceRepository;
import org.mjulikelion.baker.repository.ApplicationRepository;
import org.mjulikelion.baker.vo.IntroduceDetailVO;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@AllArgsConstructor
public class IntroduceQueryServiceImpl implements IntroduceQueryService {
private final ApplicationRepository applicationRepository;
private final ApplicationIntroduceRepository applicationIntroduceRepository;

@Override
@Transactional(readOnly = true)
public ResponseEntity<ResponseDto<IntroduceGetResponseData>> getStudentIntroduce(String studentId) {
Application application = this.findApplicationByStudentId(studentId);
List<ApplicationIntroduce> applicationIntroduceList = this.findApplicationIntroduces(application.getId());
List<IntroduceDetailVO> introduceDetailVOList = this.buildIntroduceDetailVOList(applicationIntroduceList);

IntroduceGetResponseData introduceGetResponseData = IntroduceGetResponseData.builder()
.introduceDetailVOList(introduceDetailVOList)
.part(application.getPart())
.build();

return ResponseEntity.ok(ResponseDto.res(HttpStatus.OK, "OK", introduceGetResponseData));
}

private Application findApplicationByStudentId(String studentId) {
return this.applicationRepository.findByStudentId(studentId)
.orElseThrow(() -> new ApplicationNotFoundException(APPLICATION_NOT_FOUND_ERROR));
}

private List<ApplicationIntroduce> findApplicationIntroduces(UUID applicationId) {
List<ApplicationIntroduce> applicationIntroduceList = this.applicationIntroduceRepository.findByApplicationId(
applicationId);
if (applicationIntroduceList.isEmpty()) {
throw new ApplicationIntroduceNotFoundException(APPLICATION_INTRODUCE_NOT_FOUND_ERROR);
}
return applicationIntroduceList;
}

private List<IntroduceDetailVO> buildIntroduceDetailVOList(List<ApplicationIntroduce> applicationIntroduceList) {
Map<Introduce, String> introduceMap = applicationIntroduceList.stream()
.sorted(Comparator.comparingInt(a -> a.getIntroduce().getSequence()))
.collect(Collectors.toMap(
ApplicationIntroduce::getIntroduce,
ApplicationIntroduce::getContent,
(a, b) -> b,
LinkedHashMap::new
));

return introduceMap.keySet().stream()
.map(introduce -> IntroduceDetailVO.builder()
.sequence(introduce.getSequence())
.title(introduce.getTitle())
.content(introduceMap.get(introduce))
.build())
.collect(Collectors.toList());
}
}

0 comments on commit 84fd862

Please sign in to comment.