코드를 짜고 깃허브에 commit했는데 모르고 message를 잘못 적었다.
그래서 메세지 수정을 어떻게 할까 검색을 해봤는데
git commit --amend << 로 수정을 할 수 있다
git commit --amend -m "commit message"를 적으면 바로 바뀐다 !
숙련주차 개인과제를 진행했다
오늘은 1단계 까지만 했다
1️⃣단계 - 일정과 댓글의 연관 관계
각 일정에 댓글을 작성할 수 있도록 관련 클래스를 추가하고 연관 관계를 설정합니다
매핑 관계를 설정합니다. (1:1 or N:1 or N:M)
댓글 필드 | 데이터 유형 |
아이디 (고유번호) | bigint |
댓글 내용 | varchar |
사용자 아이디 | varchar |
일정 아이디 | bigint |
작성일자 | timestamp |
CommentRequestDto
@Getter
public class CommentRequestDto {
private String content;
private String userId;
private Long scheduleId;
}
클라이언트는 CommentRequestDto를 통해 댓글 생성 요청을 보낸다
CommentResponseDto
@Getter
public class CommentResponseDto {
private Long id;
private String content;
private String userId;
private Long scheduleId;
private String createdAt;
public CommentResponseDto(Comment comment) {
this.id = comment.getId();
this.content = comment.getContent();
this.userId = comment.getUserId();
this.scheduleId = comment.getSchedule().getId();
this.createdAt = comment.getCreatedAt().toString();
}
}
저장된 댓글을 CommentResponseDto로 변환하여 클라이언트에게 반환한다
클라이언트는 CommentResponseDto를 통해 댓글 조회 요청을 보낸다
Comment 엔티티
@Getter
@Setter
@NoArgsConstructor
@Entity
@Table(name = "commenttable")
public class Comment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String content;
private String userId;
@ManyToOne
@JoinColumn(name = "schedule_id")
private Schedule schedule;
private LocalDateTime createdAt;
public Comment(String content, String userId, Schedule schedule) {
this.content = content;
this.userId = userId;
this.schedule = schedule;
this.createdAt = LocalDateTime.now();
}
}
CommentRepository
@Repository
public interface CommentRepository extends JpaRepository<Comment, Long> {
List<Comment> findByScheduleId(Long scheduleId);
}
CommentService
@Service
@RequiredArgsConstructor
public class CommentService {
private final CommentRepository commentRepository;
private final ScheduleRepository scheduleRepository;
public CommentResponseDto createComment(CommentRequestDto commentRequestDto) {
Schedule schedule = scheduleRepository.findById(commentRequestDto.getScheduleId())
.orElseThrow(() -> new IllegalArgumentException("일정이 존재하지 않습니다"));
Comment comment = new Comment(commentRequestDto.getContent(), commentRequestDto.getUserId(), schedule);
Comment savedComment = commentRepository.save(comment);
return new CommentResponseDto(savedComment);
}
public List<CommentResponseDto> getCommentsByScheduleId(Long scheduleId) {
List<Comment> comments = commentRepository.findByScheduleId(scheduleId);
return comments.stream()
.map(CommentResponseDto::new)
.collect(Collectors.toList());
}
}
CommentService는 일정 ID를 사용해 해당 일정을 찾고, 댓글을 생성한 뒤 CommentRepository를 통해 저장한다
CommentService는 일정 ID를 사용해 해당 일정에 연관된 모든 댓글을 조회하고,
CommentResponseDto로 변환하여 클라이언트에게 반환한다
CommentController
@RestController
@RequestMapping("/api/comments")
@AllArgsConstructor
public class CommentController {
private final CommentService commentService;
@PostMapping
public ResponseEntity<CommonResponse<CommentResponseDto>> createComment(@RequestBody CommentRequestDto commentRequestDto) {
CommentResponseDto comment = commentService.createComment(commentRequestDto);
return ResponseEntity.ok(
CommonResponse.<CommentResponseDto>builder()
.statusCode(HttpStatus.OK.value())
.msg("댓글이 성공적으로 추가되었습니다.")
.data(comment)
.build()
);
}
@GetMapping("/schedule/{scheduleId}")
public ResponseEntity<CommonResponse<List<CommentResponseDto>>> getCommentsByScheduleId(@PathVariable Long scheduleId) {
List<CommentResponseDto> comments = commentService.getCommentsByScheduleId(scheduleId);
return ResponseEntity.ok(
CommonResponse.<List<CommentResponseDto>>builder()
.statusCode(HttpStatus.OK.value())
.msg("댓글 목록 조회가 완료되었습니다.")
.data(comments)
.build()
);
}
}
CommentController는 요청을 받아 CommentService로 전달한다
Schedule 엔티티도 수정을 해준다!
@Getter
@Setter
@NoArgsConstructor
@Entity
@Table(name = "scheduletable")
public class Schedule {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private String contents;
private String manager;
private String password;
private String date;
@OneToMany(mappedBy = "schedule", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Comment> comments;
public Schedule(ScheduleRequestDto scheduleRequestDto) {
this.title = scheduleRequestDto.getTitle();
this.contents = scheduleRequestDto.getContents();
this.manager = scheduleRequestDto.getManager();
this.password = scheduleRequestDto.getPassword();
this.date = scheduleRequestDto.getDate();
}
}
'TIL' 카테고리의 다른 글
TIL - 2024/05/31 (0) | 2024.05.31 |
---|---|
TIL - 2024/05/30 (0) | 2024.05.30 |
TIL - 2024/05/28 (0) | 2024.05.28 |
TIL - 2024/05/27 (0) | 2024.05.27 |
TIL - 2024/05/24 (0) | 2024.05.24 |