2023.11.12 - [웹/Spring vue 웹 개발] - spring vue 댓글 완료
이번에 게시판과 댓글을 추가 하면서 몇가지 어드민쪽 코드도 수정중에 있습니다. 코드는 좀더 수정한후에 블로그에 넣어도록 하겠습니다.
영상 :
ui는 조금 나중에 수정하겠습니다. 일단 댓글 수정,삭제 그리고 게시판들을 어드민에서 관리하도록 하고요.
그리고 어드민 코드 정리한후에 상품쪽이랑 장바구니 주문쪽 다시 작성해도록 하겠습니다.
사진:
댓글 controller
import kr.co.kshproject.webDemo.Applicaiton.Comment.CommentService;
import kr.co.kshproject.webDemo.Domain.Comment.Comment;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Optional;
@Slf4j
@RestController
@RequestMapping("/comment")
public class CommentController {
private final CommentService commentService;
@Autowired
public CommentController(CommentService commentService){
this.commentService=commentService;
}
@PostMapping("/{page}/{id}")
public ResponseEntity<Comment> save(@PathVariable int page, @PathVariable Long id, @RequestBody Comment comment) {
return ResponseEntity.ok(commentService.save(page,id,comment));
}
@GetMapping
public ResponseEntity<List<Comment>> findAll(){
return ResponseEntity.ok( commentService.findAll());
}
@GetMapping("/{id}")
public Optional<Comment> findById(@PathVariable Long id){
return commentService.findById(id);
}
@PutMapping("/{id}")
public ResponseEntity<Comment> update(@PathVariable Long id, @RequestBody Comment comment){
return ResponseEntity.ok(commentService.update(id,comment));
}
@DeleteMapping("/{id}")
public ResponseEntity<?> deleteById(@PathVariable Long id) {
commentService.deleteById(id);
return ResponseEntity.noContent().build();
}
@DeleteMapping
public void deleteAll(){
commentService.deleteAll();
}
}
서비스
package kr.co.kshproject.webDemo.Applicaiton.Comment;
import kr.co.kshproject.webDemo.Domain.Comment.Comment;
import kr.co.kshproject.webDemo.Domain.Comment.CommentRepository;
import kr.co.kshproject.webDemo.Domain.Notice.Notice;
import kr.co.kshproject.webDemo.Domain.Notice.NoticeCustomRepository;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.util.List;
import java.util.Optional;
@Slf4j
@Service
@AllArgsConstructor
public class CommentServiceImpl implements CommentService{
private static final Logger logger = LoggerFactory.getLogger(CommentServiceImpl.class);
private final CommentRepository commentRepository;
private final NoticeCustomRepository noticeCustomRepository;
@Override
public Comment save(int page, Long noticeId, Comment comment) {
LocalDate now = LocalDate.now();
Optional<Notice> notice =noticeCustomRepository.findWithCommentsById(page,noticeId);
Notice tmpNotice= notice.get();
//TODO
comment.setUserName("admin");// 유저변경할것
comment.setNotice(tmpNotice);
comment.setCreatedDate(now.toString());
return commentRepository.save(comment);
}
@Override
public List<Comment> findAll() {
return commentRepository.findAll();
}
@Override
public Optional<Comment> findById(Long id) {
return commentRepository.findById(id);
}
@Override
public Comment update(Long id, Comment saveComment) {
Optional<Comment> findComment =commentRepository.findById(id);
if(findComment.isPresent()==false){
return null;
}
Comment comment=findComment.get();
comment.setContents(saveComment.getContents());
return commentRepository.save(comment);
}
@Override
public void deleteById(Long id) {
commentRepository.deleteById(id);
}
@Override
public void deleteAll() {
commentRepository.deleteAll();
}
}
레파지토리
package kr.co.kshproject.webDemo.Domain.Comment;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface CommentRepository extends JpaRepository<Comment,Long> {
}
DTO
package kr.co.kshproject.webDemo.Domain.Comment;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class CommentDTO {
private Long id;
private Long noticeId; // 대신 Notice 엔티티의 ID를 저장
private String userName;
private String contents;
private String createdDate;
public CommentDTO(Comment comment) {
this.id = comment.getId();
this.noticeId = comment.getNotice().getId(); // Notice의 ID를 가져옵니다.
this.userName = comment.getUserName();
this.contents = comment.getContents();
this.createdDate = comment.getCreatedDate();
}
}
테이블
package kr.co.kshproject.webDemo.Domain.Comment;
import com.fasterxml.jackson.annotation.JsonBackReference;
import kr.co.kshproject.webDemo.Domain.Notice.Notice;
import lombok.*;
import javax.persistence.*;
import javax.validation.constraints.NotEmpty;
@Entity
@Table(name = "Comment")
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Comment {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "COMMENT_SEQ")
@SequenceGenerator(name = "COMMENT_SEQ", sequenceName = "COMMENT_SEQ", allocationSize = 1)
private Long id;
@JsonBackReference
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="notice_id")
@Setter
private Notice notice;
@NotEmpty
@Setter
private String userName;
@NotEmpty
@Setter
private String contents;
@NotEmpty
@Setter
@Column(name = "created_date")
private String createdDate;
}
'웹 > Spring vue 웹 개발' 카테고리의 다른 글
spring vue jpa repository 테스트코드 (1) | 2023.11.26 |
---|---|
spring vue entity 변경 (2) | 2023.11.25 |
spring vue 댓글 완료 (0) | 2023.11.12 |
spring vue 댓글 05 (1) | 2023.11.11 |
spring vue 댓글04 (1) | 2023.11.11 |