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 |