유저가 게시글을 작성하면 해당 유저를 확인하고 게시글을 올립니다.
dto.request.PostRequestDto
package com.second.spring_study.dto.request.ywoo;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
@Getter
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class PostRequestDto {
@NotNull
String postTitle;
@NotNull
String postContent;
}
유저가 작성한 게시글의 제목과 내용을 받습니다. 형식을 맞추기 위해 dto를 사용합니다.
controller.PostYwooController
package com.second.spring_study.controller;
import com.second.spring_study.dto.request.ywoo.PostRequestDto;
import com.second.spring_study.service.PostYwooService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
@RequiredArgsConstructor
@RestController
@RequestMapping("/post-ywoo")
public class PostYwooController {
private final PostYwooService postYwooService;
@PostMapping("/{userpk}")
public void createBoards(@PathVariable long userpk, @RequestBody PostRequestDto postRequestDto){
postYwooService.createBoards(postRequestDto,userpk);
}
}
공통인 도메인은 RequestMapping을 통해 빼줍니다. 해당 클래스 밑에 선언한 매핑들은 /post-ywoo를 가지게 됩니다. 따라서 createBoards의 URL은 /post-ywoo/{userpk}입니다.
userpk는 유저의 id를 의미합니다. 해당 기능에서는 글을 작성한 유저가 있는지 없는지 체크하는데 사용됩니다.
entity.boardYwoo.PostYwoo
package com.second.spring_study.entity.ywoo.boardYwoo;
import com.second.spring_study.entity.BaseEntity;
import com.second.spring_study.entity.ywoo.userYwoo.UserYwoo;
import lombok.Getter;
import javax.persistence.*;
@Entity
@Getter
@Table
public class PostYwoo extends BaseEntity {
...
public static PostYwoo createPost(UserYwoo userYwoo, String title, String content){
PostYwoo postYwoo = new PostYwoo();
postYwoo.userYwoo = userYwoo;
postYwoo.postTitle = title;
postYwoo.postContent = content;
return postYwoo;
}
}
게시글을 생성할 때 넘어온 정보를 가지고 게시글 객체를 생성합니다. 유저의 정보와 게시글의 제목, 내용을 생성한 객체에 담아 반환합니다.
service.PostYwooService
package com.second.spring_study.service;
import com.second.spring_study.dto.request.ywoo.PostRequestDto;
import com.second.spring_study.entity.ywoo.boardYwoo.PostYwoo;
import com.second.spring_study.entity.ywoo.boardYwoo.repository.PostYwooRepository;
import com.second.spring_study.entity.ywoo.userYwoo.UserYwoo;
import com.second.spring_study.entity.ywoo.userYwoo.repository.UserYwooRepository;
import com.second.spring_study.exception.ywoo.ApiExceptionYwoo;
import com.second.spring_study.exception.ywoo.ErrorCodeEnum;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@RequiredArgsConstructor
@Service
public class PostYwooService {
final PostYwooRepository postYwooRepository;
final UserYwooRepository userYwooRepository;
@Transactional
public void createPost(PostRequestDto postRequestDto, long userpk){
UserYwoo userYwoo = userYwooRepository.findById(userpk).orElseThrow(()->{
throw new ApiExceptionYwoo(ErrorCodeEnum.USER_NOT_FOUND);
});
PostYwoo boardYwoo = PostYwoo.createPost(userYwoo, postRequestDto.getPostTitle(), postRequestDto.getPostContent());
postYwooRepository.save(boardYwoo);
}
}
게시글을 작성할 때는 게시글의 정보와 유저의 정보 둘다 필요하기 때문에 둘의 리포지토리를 선언해줍니다.
먼저 userpk를 가진 유저를 찾습니다. 만약 없다면 USER_NOT_FOUND라는 커스텀 에러가 발생합니다.
createPost에 유저의 정보와 postRequestDto에서 제목과 내용을 가지고 와 새로운 게시글 객체에 넣습니다. 그런 다음
crudRepository에 있는 메서드인 save를 통해 게시글 객체를 저장합니다.
🔗 : Spring Study
'스프링 스터디' 카테고리의 다른 글
게시글 삭제 기능 및 수정 기능 구현 / 2022-02-17 (0) | 2022.02.18 |
---|---|
에러 고치기 한바탕 (0) | 2022.02.15 |
1주차 스프링 스터디 회고록 (0) | 2022.02.14 |
Controller 전역 예외 처리(Custom Exception) / 2022-02-10 (0) | 2022.02.11 |
회원 정보 수정 / 2022-02-09 (2) | 2022.02.10 |