package com.gdsc_teamb.servertoyproject.domain.repository;
import com.gdsc_teamb.servertoyproject.domain.post.domain.PostEntity;
import com.gdsc_teamb.servertoyproject.domain.user.domain.UserEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional;
// PostEntity 관리하는 JPA 레포
// PostEntity 에 대한 CRUD 작업 제공
@Repository
public interface PostRepository extends JpaRepository<PostEntity, Long> {
//ID 기준으로 내림차순되게 쿼리 정의함
//@Query("SELECT p FROM PostEntity p ORDER BY p.id DESC")
List<PostEntity> findAllByOrderByIdDesc();
List<PostEntity> findAllByUser(UserEntity user);
}
3️⃣ RequestDto 생성
💚 BoardDto
게시글 제목이 공백이거나 . 50글자를 초과하지 못하도록 함
package com.gdsc_teamb.servertoyproject.dto.boardDto;
import com.gdsc_teamb.servertoyproject.domain.post.domain.PostEntity;
import com.gdsc_teamb.servertoyproject.domain.user.domain.UserEntity;
import lombok.*;
import org.apache.catalina.User;
import java.time.LocalDateTime;
// 게시글의 생성 및 수정에 사용도는 데이터 전송
@Getter
@Setter
@ToString
@NoArgsConstructor
public class BoardDto {
private String title; // 게시글 제목
private String content; // 게시글 내용
private String nickname; // 작성자 이름
//BoardDto 생성자
@Builder
public BoardDto(String title, String content, UserEntity user){
this.title=title;
this.content=content;
this.nickname=user.getNickname();
}
// BoardDto 를 PostEntity 로 변환하는 메서드
// 변환된 PostEntity 가 return
public PostEntity toEntity(UserEntity user){
PostEntity build = PostEntity.builder()
.user(user)
.title(title)
.content(content)
.build();
return build;
}
// 게시글 제목 관련 설정 메서드
// 제목이 공백이거나 50자 이상을 초과할 경우 IllegalArgumentException 발생됨
public void setTitle(String title) {
if (title == null || title.trim().isEmpty()) {
throw new IllegalArgumentException("게시판 제목은 공백일 수 없습니다.");
}
if (title.length() > 50) {
throw new IllegalArgumentException("게시판 제목은 " + 50 + "자 이하로 입력해야 합니다.");
}
this.title = title;
}
// 게시글 내용 관련 설정 메서드
// 내용이 공백일 경우 IllegalArgumentException 발생됨
public void setContent(String content) {
if (content == null || content.trim().isEmpty()) {
throw new IllegalArgumentException("게시판 내용은 공백일 수 없습니다.");
}
this.content = content;
}
}
💚BoardUpdateDto
package com.gdsc_teamb.servertoyproject.dto.boardDto;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
//게시글 수정 시 사용
//수정 할 게시글의 제목과 내용 담음
@Getter
@NoArgsConstructor
public class BoardUpdateDto {
private String title; // 수정할 게시글 제목
private String content; // 수정할 게시글 내용
//BoardUpdateDto 의 생성자
@Builder
public BoardUpdateDto(String title, String content){
this.title=title;
this.content=content;
}
}
package com.gdsc_teamb.servertoyproject.controller;
import com.gdsc_teamb.servertoyproject.dto.boardDto.BoardDto;
import com.gdsc_teamb.servertoyproject.dto.boardDto.BoardListDto;
import com.gdsc_teamb.servertoyproject.dto.boardDto.BoardReadDto;
import com.gdsc_teamb.servertoyproject.dto.boardDto.BoardUpdateDto;
import com.gdsc_teamb.servertoyproject.service.BoardService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequiredArgsConstructor
public class BoardController {
private final BoardService boardService;
// HTTP POST 요청을 통해 새로운 게시글을 생성
// 매개변수: 새로운 게시글을 생성하기 위한 데이터를 담은 DTO
// @RequestBody 어노테이션은 JSON 데이터를 BoardDto 객체로 변환
// 반환 값: 새로 생성된 게시글의 ID를 반환함
// 반환된 ID는 클라이언트에게 제공 (응답으로 전송) -> 클라이언트가 나중에 수정, 삭제할때 사용
@PostMapping("/api/boards")
public ResponseEntity<Object> save(@RequestBody BoardDto boardDto){
return boardService.save(boardDto);
}
// HTTP PUT 요청을 통해 특정 ID의 게시글을 수정
// 매개변수: 수정할 게시글의 ID, 수정할 내용이 담긴 DTO
// @PathVariable 을 통해 경로에서 추출된 게시글의 ID를 전달 받고, @RequestBody를 통해 클라이언트로부터 전달된 JSON 데이터를 변환하여 requestDto로 전달
// 반환 값: 수정이 완료된 게시글의 ID를 반환
@PutMapping("/api/boards/{id}")
public ResponseEntity<Object> update(@PathVariable Long id, @RequestBody BoardUpdateDto requestDto){
return boardService.update(id, requestDto);
}
}
📌 save()
HTTP POST 요청을 통해 새로운 게시글을 생성
매개변수: 새로운 게시글을 생성하기 위한 데이터를 담은 DTO
@RequestBody 어노테이션은 JSON 데이터를 BoardDto 객체로 변환
반환 값: 새로 생성된 게시글의 ID를 반환함
반환된 ID는 클라이언트에게 제공 (응답으로 전송) -> 클라이언트가 나중에 수정, 삭제할때 사용
📌 update()
HTTP PUT 요청을 통해 특정 ID의 게시글을 수정
매개변수: 수정할 게시글의 ID, 수정할 내용이 담긴 DTO
@PathVariable 을 통해 경로에서 추출된 게시글의 ID를 전달 받고, @RequestBody를 통해 클라이언트로부터 전달된 JSON 데이터를 변환하여 requestDto로 전달