실무 프로젝트로 배우는 Kotlin & Spring/이슈 관리 서비스 개발하기

이슈 목록 조회/ 이슈 상세 조회

webmaster 2022. 11. 27. 19:07
728x90

이슈 목록 조회

IssueController

@GetMapping
fun getAll(
    authUser: AuthUser,
    @RequestParam(required = false, defaultValue = "TODO") status: IssueStatus,
) = issueService.getAll(status)
  • parameter로 status를 받는다(필수로 입력받지 않아도 기본값은 TODO로 입력받게 한다)

IssueService

@Transactional(readOnly = true)
fun getAll(status: IssueStatus) =
    issueRepository.findAllByStatusOrderByCreatedAtDesc(status)
        ?.map { IssueResponse(it) }
  • repository를 통해 가지고 온 값을 map을 통해, 하나씩  IssueResponse로 변경한다

IssueRepository

interface IssueRepository : JpaRepository<Issue, Long> {
    fun findAllByStatusOrderByCreatedAtDesc(status: IssueStatus): List<Issue>?
}
  • 메서드 명을 SpringDataJPA에서 의도하는 데로 만들게 되면, 자동으로 JPQL을 만들어준다.
  • 쿼리 결과가 없을 수도 있으므로, nullable한 값을 반환하도록 한다.

이슈 상세 조회

IssueController

@GetMapping("/{id}")
fun get(
   authUser: AuthUser,
   @PathVariable id: Long,
) = issueService.get(id)
  • @PathVariable 어노테이션을 통해 상세조회할 id를 입력받는다

IssueService

@Transactional(readOnly = true)
fun get(id: Long): IssueResponse{
    val issue = issueRepository.findByIdOrNull(id) ?: throw NotFoundException("이슈가 존재하지 않습니다.")
    return IssueResponse(issue)
}
  • CRUD Repository를 확장함수를 통해 만든 메서드인 findByIdOrNull을 통해, Optional이 아닌 issue? 를 반환받고, 값이 없다면 엘비스 연산자를 통해 커스텀한 오류를 반환한다.

 

728x90

'실무 프로젝트로 배우는 Kotlin & Spring > 이슈 관리 서비스 개발하기' 카테고리의 다른 글

코멘트 등록  (0) 2022.11.27
이슈 수정 / 이슈 삭제  (0) 2022.11.27
이슈 등록  (0) 2022.11.27
공통 에러 처리  (0) 2022.11.26
API 스펙 정의  (0) 2022.11.26