Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
a9b4b12
feat: 엔티티 생성
dowon0113 Apr 1, 2025
cc22b0a
chore: PostgreSQL 설정 추가
dowon0113 Apr 1, 2025
f6e35f5
feat: post 생성자에 builder, 정적 팩토리 메서드 추가
dowon0113 Apr 1, 2025
d88a923
feat: dto 생성
dowon0113 Apr 1, 2025
c088e70
feat: 게시판 생성 비즈니스 로직 구현
dowon0113 Apr 1, 2025
06665ca
feat: repository 분리
dowon0113 Apr 1, 2025
30d7d36
feat: 게시글 생성 api 구현
dowon0113 Apr 1, 2025
2ff4c8a
test: 게시글 생성 api test
dowon0113 Apr 1, 2025
a70aa1f
feat: comment 생성자에 builder, 정적 팩토리 메서드 추가
dowon0113 Apr 1, 2025
9203430
feat: dto 생성
dowon0113 Apr 1, 2025
0096693
feat: 댓글 생성 비즈니스로직 구현
dowon0113 Apr 1, 2025
025a6ab
feat: comment - repository 분리
dowon0113 Apr 1, 2025
314b6f8
feat: comment - dto 변환
dowon0113 Apr 1, 2025
20deaa6
feat: comment 생성 api 구현
dowon0113 Apr 1, 2025
ea05a66
test: comment 생성 api 테스트
dowon0113 Apr 1, 2025
de1471d
feat: comment 생성 위한 db 메서드 추가
dowon0113 Apr 1, 2025
a7aeab3
feat: Post 단건 조회 api 구현
dowon0113 Apr 1, 2025
ee161aa
feat: dto 생성 및 매핑 작업
dowon0113 Apr 1, 2025
0eb1897
feat: post 조회 비즈니스 로직 구현
dowon0113 Apr 1, 2025
0f1fdf8
test: post 조회 api 테스트
dowon0113 Apr 1, 2025
da07e0f
feat: post 수정 api 구현
dowon0113 Apr 1, 2025
760c856
feat: post 수정 - 비즈니스 로직 구현
dowon0113 Apr 1, 2025
746b3f0
feat: post 수정 - dto 및 변환
dowon0113 Apr 1, 2025
959f601
test: post 수정 api 테스트
dowon0113 Apr 1, 2025
25fc50c
feat: comment 수정 api 구현
dowon0113 Apr 1, 2025
bfcda2f
feat: comment 수정 - 비즈니스 로직 구현
dowon0113 Apr 1, 2025
8368246
feat: comment 수정 - dto 생성
dowon0113 Apr 1, 2025
56932d4
feat: comment 수정 - repository 분리 및 findById 추가
dowon0113 Apr 1, 2025
615c982
feat: comment 수정 - dto 변환작업 추가
dowon0113 Apr 1, 2025
3cb8f92
test: comment 수정 api test
dowon0113 Apr 1, 2025
b99e1c2
feat: post 삭제 api 구현
dowon0113 Apr 1, 2025
924839f
feat: post 삭제 - 비즈니스 로직 구현
dowon0113 Apr 1, 2025
156ae6f
feat: post 삭제 - dto 변환
dowon0113 Apr 1, 2025
b5a2185
test: post 삭제 api
dowon0113 Apr 1, 2025
f603303
feat: comment 삭제 api 구현
dowon0113 Apr 1, 2025
4d6ff09
feat: comment 삭제 api - 비즈니스로직 구현
dowon0113 Apr 1, 2025
9ae0de2
feat: comment 삭제 api - dto 생성
dowon0113 Apr 1, 2025
541ebd4
test: comment 삭제 api test
dowon0113 Apr 1, 2025
1798560
refactor: dto 분리
dowon0113 Apr 1, 2025
dd10536
chore: yml ddl-auto 수정
dowon0113 Apr 2, 2025
8332d47
fix: http client test 삭제
dowon0113 Apr 2, 2025
e975f0a
docs: README.md 작성
dowon0113 Apr 2, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
## TODO List
- [x] 게시글 작성 API 구현
- [x] controller, dto, repository 생성
- [x] 비즈니스 로직 구현
- [x] 제목, 내용 not null
- [x] 게시글 일자 자동 기록

- [x] 게시글 수정 API 구현
- [x] controller, dto, repository 생성
- [x] 비즈니스 로직 구현 (삭제된 게시글 예외처리)
- [x] 제목과 내용만 수정 가능
- [x] 게시글 수정 일자 자동 기록

- [x] 게시글 삭제 API 구현
- [x] controller, dto, repository 생성
- [ ] 삭제 시 게시글과 함께 해당 게시글의 모든 댓글도 삭제 처리
- [x] 삭제 후 복구 불가능
- [x] 게시글 삭제 시 삭제 상태에 대한 변경만 처리(soft-delete)

- [x] 게시글 단건 조회 API 구현
- [x] controller, dto, repository 생성
- [x] 비즈니스 로직 구현 (삭제된 게시글 예외처리)
- [x] 게시글에 포함된 모든 댓글 목록 조회
- [ ] 게시글에 댓글 목록 페이징 처리
- [x] 삭제된 데이터는 조회 불가

- [x] 댓글 등록 API 구현
- [x] controller, dto, repository 생성
- [x] 비즈니스 로직 구현
- [x] 댓글 내용 not null
- [x] 댓글 등록 일자 자동 기록

- [x] 댓글 수정 API 구현
- [x] controller, dto, repository 생성
- [x] 비즈니스 로직 구현 (삭제된 댓글 예외처리)
- [x] 댓글 내용만 수정 가능
- [x] 댓글 수정 일자 자동 기록

- [x] 댓글 삭제 API 구현
- [x] controller, dto, repository 생성
- [x] 비즈니스 로직 구현 (삭제된 댓글 예외처리)
- [x] 삭제 후 복구 불가능
- [x] 댓글 삭제 시 삭제 상태에 대한 변경만 처리(soft-delete)

## 추후 학습 & 이해가지 않는 부분
- [ ] 조회된 게시글에 댓글만 페이징 처리 학습 필요
- [ ] 게시글이 삭제 메서드에 댓글 삭제 로직 추가 필요
- [ ] QueryDsl 내부 동작 원리 이해 필요
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ repositories {
}

dependencies {
runtimeOnly 'org.postgresql:postgresql'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/io/sparta/board/BoardApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@EnableJpaAuditing
@SpringBootApplication
public class BoardApplication {

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package io.sparta.board.application.dto.mapper;

import io.sparta.board.application.dto.response.comment.CommentCreateResponseDto;
import io.sparta.board.application.dto.response.comment.CommentDeleteResponseDto;
import io.sparta.board.application.dto.response.comment.CommentUpdateResponseDto;
import io.sparta.board.domain.entity.Comment;

public class CommentMapper {

public static CommentCreateResponseDto toCommentCreateResponseDto(Comment comment){
return CommentCreateResponseDto.builder()
.id(comment.getId())
.content(comment.getContent())
.build();
}

public static CommentUpdateResponseDto toCommentUpdateResponseDto(Comment comment){
return CommentUpdateResponseDto.builder()
.content(comment.getContent())
.build();
}

public static CommentDeleteResponseDto toCommentDeleteResponseDto(Comment comment){
return CommentDeleteResponseDto.builder()
.id(comment.getId())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package io.sparta.board.application.dto.mapper;

import io.sparta.board.application.dto.response.comment.CommentResponseDto;
import io.sparta.board.application.dto.response.post.PostCreateResponseDto;
import io.sparta.board.application.dto.response.post.PostGetResponseDto;
import io.sparta.board.application.dto.response.post.PostDeleteResponseDto;
import io.sparta.board.application.dto.response.post.PostUpdateResponseDto;
import io.sparta.board.domain.entity.Comment;
import io.sparta.board.domain.entity.Post;

import java.util.List;
import java.util.stream.Collectors;

public class PostMapper {

public static PostCreateResponseDto toPostCreateResponseDto(Post post) {
return PostCreateResponseDto.builder()
.id(post.getId())
.title(post.getTitle())
.content(post.getContent())
.build();
}

public static PostGetResponseDto toPostGetResponseDto(Post post) {
return PostGetResponseDto.builder()
.id(post.getId())
.title(post.getTitle())
.content(post.getContent())
.createdAt(post.getCreatedAt())
.commentList(toCommentResponseList(post.getCommentList()))
.build();
}

private static List<CommentResponseDto> toCommentResponseList(List<Comment> commentList) {
return commentList.stream()
.map(PostMapper::toCommentResponse)
.collect(Collectors.toList());
}

private static CommentResponseDto toCommentResponse(Comment comment) {
return CommentResponseDto.builder()
.id(comment.getId())
.content(comment.getContent())
.createdAt(comment.getCreatedAt())
.build();
}

public static PostUpdateResponseDto toPostUpdateResponseDto(Post post) {
return PostUpdateResponseDto.builder()
.title(post.getTitle())
.content(post.getContent())
.build();
}

public static PostDeleteResponseDto toPostDeleteResponseDto(Post post) {
return PostDeleteResponseDto.builder()
.id(post.getId())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package io.sparta.board.application.dto.request.comment;

import io.sparta.board.domain.entity.Comment;
import io.sparta.board.domain.entity.Post;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class CommentCreateRequestDto {
private String content;

public Comment toEntity(Post post) {
return Comment.create(content, post);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package io.sparta.board.application.dto.request.comment;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class CommentUpdateRequestDto {
private String content;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package io.sparta.board.application.dto.request.post;

import io.sparta.board.domain.entity.Post;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class PostCreateRequestDto {
private String title;
private String content;

public Post toEntity() {
return Post.create(
title,
content
);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package io.sparta.board.application.dto.request.post;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class PostUpdateRequestDto {
private String title;
private String content;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package io.sparta.board.application.dto.response.comment;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.util.UUID;

@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class CommentCreateResponseDto {
private UUID id;
private String content;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package io.sparta.board.application.dto.response.comment;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.util.UUID;

@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class CommentDeleteResponseDto {
private UUID id;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package io.sparta.board.application.dto.response.comment;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.util.UUID;

@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class CommentResponseDto {
private UUID id;
private String content;
private LocalDateTime createdAt;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package io.sparta.board.application.dto.response.comment;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class CommentUpdateResponseDto {
private String content;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package io.sparta.board.application.dto.response.post;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.util.UUID;

@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class PostCreateResponseDto {
private UUID id;
private String title;
private String content;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package io.sparta.board.application.dto.response.post;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.util.UUID;

@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class PostDeleteResponseDto {
private UUID id;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package io.sparta.board.application.dto.response.post;

import io.sparta.board.application.dto.response.comment.CommentResponseDto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.util.List;
import java.util.UUID;

@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class PostGetResponseDto {
private UUID id;
private String title;
private String content;
private LocalDateTime createdAt;
private List<CommentResponseDto> commentList;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package io.sparta.board.application.dto.response.post;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class PostUpdateResponseDto {
private String title;
private String content;
}
Loading