SPRING

[Spring Boot + JPA] LV.2

도원좀비 2025. 3. 28. 14:48

1️⃣ 요구사항 정리

  • 유저를 생성, 조회, 수정, 삭제할 수 있습니다.
  • 유저는 아래와 같은 필드를 가집니다.
  • 유저명, 이메일, 작성일 , 수정일 필드
  • 작성일, 수정일 필드는 JPA Auditing을 활용합니다.
  • 일정은 이제 작성 유저명 필드 대신 유저 고유 식별자 필드를 가집니다.

2️⃣ API 명세

Method URL 설명
POST /authors/signup 작성자 등록
GET /authors/{authorId} 작성자 조회
PATCH /authors/{authorId} 작성자 수정
DELETE /authors/{authorId} 작성자 삭제

3️⃣ ERD

 

4️⃣ 주요 코드(작성자 조회)

더보기

(AuthorController.java)

@RestController
@RequestMapping("/authors")
@RequiredArgsConstructor
public class AuthorController {
    @GetMapping("/{authorId}")
    public ResponseEntity<AuthorResponseDto> findAllAuthor(@PathVariable Long authorId) {
        AuthorResponseDto author = authorService.findByauthorId(authorId);

        return new ResponseEntity<>(author, HttpStatus.OK);
    }
 
 }

(AuthorService.java)

    @Override
    public AuthorResponseDto findByauthorId(Long authorId) {
        Author author = authorRepository.findByIdOrElseThrow(authorId);

        return new AuthorResponseDto(author.getLoginId(), author.getName(), author.getUpdatedDate());
    }

(AuthorRepository.java)

public interface AuthorRepository extends JpaRepository<Author, Long> {
    Optional<Author> findByLoginId(String loginId);

    default Author findByLoginIdOrElseThrow(String loginId){
        return findByLoginId(loginId).orElseThrow(() -> new CustomException(ExceptionCode.AUTHOR_ID_MISMATCH));
    };

    default Author findByIdOrElseThrow(Long authorId) {
        return findById(authorId).orElseThrow(() -> new CustomException(ExceptionCode.AUTHOR_NOT_FOUND));
    }
}

(Author.java)

@Getter
@Entity
@Table(name = "author")
public class Author extends BaseEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long authorId;

    @Column(name = "login_id", unique = true)
    private String loginId;

    private String name;
    private String password;

    public Author() {

    }
 }

(AuthorResponseDto.java)

@Getter
@AllArgsConstructor
public class AuthorResponseDto {
    private final String loginId;
    private final String name;
    private final LocalDateTime updatedDate;
}

📌 GitHub 저장소: https://github.com/sukh115/schedulerJpa/lv2

 

GitHub - sukh115/schedulerJpa

Contribute to sukh115/schedulerJpa development by creating an account on GitHub.

github.com

 

'SPRING' 카테고리의 다른 글

[Spring Boot + JPA] LV.5+ Lv.6  (1) 2025.03.28
[Spring Boot + JPA] LV.3 + LV.4  (1) 2025.03.28
SPRING[Spring Boot + JPA] LV.1  (1) 2025.03.28
[Spring Boot + JPA] 트러블 슈팅  (2) 2025.03.28
Spring JPA 영속성 컨텍스트  (0) 2025.03.26