Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,10 @@ public record Save(
@NotNull String title,
@NotNull String content,
@NotNull Category category,
@NotNull String studyName,
@NotNull int week,
String studyName,
int week,
@NotNull Part part,
@NotNull Integer cardinalNumber,
@Valid List<@NotNull FileSaveRequest> files
){}

Expand All @@ -30,14 +32,28 @@ public record SaveEducation(
@NotNull String title,
@NotNull String content,
@NotNull List<Part> parts,
@NotNull Integer cardinalNumber,
@Valid List<@NotNull FileSaveRequest> files
){}

@Builder
public record Update(
@NotNull String title,
@NotNull String content,
@Valid List<@NotNull FileSaveRequest> files
String title,
String content,
String studyName,
Integer week,
Part part,
Integer cardinalNumber,
@Valid List<FileSaveRequest> files
){}

@Builder
public record UpdateEducation(
String title,
String content,
List<Part> parts,
Integer cardinalNumber,
@Valid List<FileSaveRequest> files
){}

@Builder
Expand All @@ -48,7 +64,12 @@ public record Response(
Role role,
String title,
String content,
LocalDateTime time,//modifiedAt
String studyName,
Integer week,
Integer cardinalNumber,
Part part,
List<Part> parts,
LocalDateTime time,
Integer commentCount,
List<CommentDTO.Response> comments,
List<FileResponse> fileUrls
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import leets.weeth.domain.comment.application.dto.CommentDTO;
import leets.weeth.domain.comment.application.mapper.CommentMapper;
import leets.weeth.domain.file.application.dto.response.FileResponse;
import leets.weeth.domain.user.domain.entity.Cardinal;
import leets.weeth.domain.user.domain.entity.User;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
Expand All @@ -22,21 +21,21 @@ public interface PostMapper {
@Mapping(target = "createdAt", ignore = true),
@Mapping(target = "modifiedAt", ignore = true),
@Mapping(target = "user", source = "user"),
@Mapping(target = "part", expression = "java(user.getUserPart())"),
@Mapping(target = "parts", expression = "java(List.of(user.getUserPart()))"),
@Mapping(target = "cardinalNumber", expression = "java(latest.getCardinalNumber())")
@Mapping(target = "part", source = "dto.part"),
@Mapping(target = "parts", expression = "java(List.of(dto.part()))"),
@Mapping(target = "cardinalNumber", source = "dto.cardinalNumber")
})
Post fromPostDto(PostDTO.Save dto, User user, Cardinal latest);
Post fromPostDto(PostDTO.Save dto, User user);

@Mapping(target = "id", ignore = true)
@Mapping(target = "createdAt", ignore = true)
@Mapping(target = "modifiedAt", ignore = true)
@Mapping(target = "user", source = "user")
@Mapping(target = "part", ignore = true)
@Mapping(target = "parts", source = "dto.parts")
@Mapping(target = "cardinalNumber", expression = "java(latest.getCardinalNumber())")
@Mapping(target = "cardinalNumber", source = "dto.cardinalNumber")
@Mapping(target = "category", constant = "Education")
Post fromEducationDto(PostDTO.SaveEducation dto, User user, Cardinal latest);
Post fromEducationDto(PostDTO.SaveEducation dto, User user);

@Mappings({
@Mapping(target = "name", source = "post.user.name"),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package leets.weeth.domain.board.application.usecase;

import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import leets.weeth.domain.board.application.dto.PartPostDTO;
import leets.weeth.domain.board.application.dto.PostDTO;
import leets.weeth.domain.board.application.exception.CategoryAccessDeniedException;
Expand All @@ -22,7 +26,6 @@
import leets.weeth.domain.file.domain.service.FileGetService;
import leets.weeth.domain.file.domain.service.FileSaveService;
import leets.weeth.domain.user.application.exception.UserNotMatchException;
import leets.weeth.domain.user.domain.entity.Cardinal;
import leets.weeth.domain.user.domain.entity.User;
import leets.weeth.domain.user.domain.entity.enums.Role;
import leets.weeth.domain.user.domain.service.CardinalGetService;
Expand Down Expand Up @@ -70,8 +73,8 @@ public void save(PostDTO.Save request, Long userId) {
throw new CategoryAccessDeniedException();
}

Cardinal latest = cardinalGetService.findLatestInProgress();
Post post = mapper.fromPostDto(request, user, latest);
cardinalGetService.findByUserSide(request.cardinalNumber());
Post post = mapper.fromPostDto(request, user);
postSaveService.save(post);

List<File> files = fileMapper.toFileList(request.files(), post);
Expand All @@ -83,11 +86,7 @@ public void save(PostDTO.Save request, Long userId) {
public void saveEducation(PostDTO.SaveEducation request, Long userId) {
User user = userGetService.find(userId);

Cardinal latest = cardinalGetService.findInProgress().stream()
.max(Comparator.comparing(Cardinal::getCardinalNumber))
.orElseThrow();

Post post = mapper.fromEducationDto(request, user, latest);
Post post = mapper.fromEducationDto(request, user);

postSaveService.save(post);

Expand Down Expand Up @@ -174,15 +173,33 @@ public Slice<PostDTO.ResponseAll> searchPost(String keyword, int pageNumber, int
public void update(Long postId, PostDTO.Update dto, Long userId) {
Post post = validateOwner(postId, userId);

List<File> fileList = getFiles(postId);
fileDeleteService.delete(fileList);
if (dto.files() != null) {
List<File> fileList = getFiles(postId);
fileDeleteService.delete(fileList);

List<File> files = fileMapper.toFileList(dto.files(), post);
fileSaveService.save(files);
List<File> files = fileMapper.toFileList(dto.files(), post);
fileSaveService.save(files);
}

postUpdateService.update(post, dto);
}

@Override
@Transactional
public void updateEducation(Long postId, PostDTO.UpdateEducation dto, Long userId) {
Post post = validateOwner(postId, userId);

if (dto.files() != null) {
List<File> fileList = getFiles(postId);
fileDeleteService.delete(fileList);

List<File> files = fileMapper.toFileList(dto.files(), post);
fileSaveService.save(files);
}

postUpdateService.updateEducation(post, dto);
}

@Override
@Transactional
public void delete(Long postId, Long userId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ public interface PostUsecase {

void update(Long postId, PostDTO.Update dto, Long userId) throws UserNotMatchException;

void updateEducation(Long postId, PostDTO.UpdateEducation dto, Long userId) throws UserNotMatchException;

void delete(Long postId, Long userId) throws UserNotMatchException;

Slice<PostDTO.ResponseAll> searchPost(String keyword, int pageNumber, int pageSize);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,12 @@ public void updateUpperClass(NoticeDTO.Update dto) {
}

public void updateUpperClass(PostDTO.Update dto) {
this.title = dto.title();
this.content = dto.content();
if (dto.title() != null) this.title = dto.title();
if (dto.content() != null) this.content = dto.content();
}

public void updateUpperClass(PostDTO.UpdateEducation dto) {
if (dto.title() != null) this.title = dto.title();
if (dto.content() != null) this.content = dto.content();
}
}
17 changes: 16 additions & 1 deletion src/main/java/leets/weeth/domain/board/domain/entity/Post.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.OneToMany;
import java.util.ArrayList;
import java.util.List;
import leets.weeth.domain.board.application.dto.PostDTO;
import leets.weeth.domain.board.domain.converter.PartListConverter;
Expand Down Expand Up @@ -38,7 +39,7 @@ public class Post extends Board {

@Column(nullable = false, columnDefinition = "varchar(255)")
@Convert(converter = PartListConverter.class)
private List<Part> parts;
private List<Part> parts = new ArrayList<>();

@Enumerated(EnumType.STRING)
private Category category;
Expand All @@ -57,5 +58,19 @@ public void addComment(Comment comment) {

public void update(PostDTO.Update dto) {
this.updateUpperClass(dto);
if (dto.studyName() != null) this.studyName = dto.studyName();
if (dto.week() != null) this.week = dto.week();
if (dto.part() != null) {
this.part = dto.part();
this.parts = List.of(dto.part());
}
if (dto.cardinalNumber() != null) this.cardinalNumber = dto.cardinalNumber();
}

public void updateEducation(PostDTO.UpdateEducation dto) {
this.updateUpperClass(dto);
this.part = null;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

원래 교육용 자료에서는 part가 쓰이지 않는 컬럼인데 null로 업데이트한 이유가 있을까요?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

교육자료에서는 part 미사용이라는 도메인 규칙을 재확인하려는 의도로 설계했습니다 !
정상적인 플로우는 아니지만 교육자료를 여러번 업데이트할때 옛 값이 남을 수 있는 경우를 방지하고자
업데이트시에도 null값으로 명시적으로 지정해줬다고 생각해주심 될거같아요

if (dto.parts() != null) this.parts = dto.parts();
if (dto.cardinalNumber() != null) this.cardinalNumber = dto.cardinalNumber();
}
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,10 @@
package leets.weeth.domain.board.domain.service;

import jakarta.transaction.Transactional;
import leets.weeth.domain.board.application.dto.PostDTO;
import leets.weeth.domain.board.application.mapper.PostMapper;
import leets.weeth.domain.board.domain.entity.Post;
import leets.weeth.domain.board.domain.repository.PostRepository;
import leets.weeth.domain.user.domain.entity.User;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@RequiredArgsConstructor
public class PostUpdateService {
Expand All @@ -19,4 +13,7 @@ public void update(Post post, PostDTO.Update dto){
post.update(dto);
}

public void updateEducation(Post post, PostDTO.UpdateEducation dto){
post.updateEducation(dto);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package leets.weeth.domain.board.presentation;

import static leets.weeth.domain.board.presentation.ResponseMessage.EDUCATION_UPDATED_SUCCESS;
import static leets.weeth.domain.board.presentation.ResponseMessage.POST_CREATED_SUCCESS;

import io.swagger.v3.oas.annotations.Operation;
Expand All @@ -8,9 +9,12 @@
import jakarta.validation.Valid;
import leets.weeth.domain.board.application.dto.PostDTO;
import leets.weeth.domain.board.application.usecase.PostUsecase;
import leets.weeth.domain.user.application.exception.UserNotMatchException;
import leets.weeth.global.auth.annotation.CurrentUser;
import leets.weeth.global.common.response.CommonResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
Expand All @@ -30,4 +34,13 @@ public CommonResponse<String> saveEducation(@RequestBody @Valid PostDTO.SaveEduc

return CommonResponse.createSuccess(POST_CREATED_SUCCESS.getMessage());
}

@PatchMapping(value = "/{boardId}")
@Operation(summary="교육자료 게시글 수정")
public CommonResponse<String> update(@PathVariable Long boardId,
@RequestBody @Valid PostDTO.UpdateEducation dto,
@Parameter(hidden = true) @CurrentUser Long userId) throws UserNotMatchException {
postUsecase.updateEducation(boardId, dto, userId);
return CommonResponse.createSuccess(EDUCATION_UPDATED_SUCCESS.getMessage());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,8 @@ public CommonResponse<Slice<PostDTO.ResponseAll>> findPost(@RequestParam String
return CommonResponse.createSuccess(POST_FIND_BY_ID_SUCCESS.getMessage(),postUsecase.searchPost(keyword, pageNumber, pageSize));
}

@PatchMapping(value = "/{boardId}")
@Operation(summary="특정 게시글 수정")
@PatchMapping(value = "/{boardId}/part")
@Operation(summary="파트 게시글 수정")
public CommonResponse<String> update(@PathVariable Long boardId,
@RequestBody @Valid PostDTO.Update dto,
@Parameter(hidden = true) @CurrentUser Long userId) throws UserNotMatchException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,14 @@ public enum ResponseMessage {
NOTICE_FIND_BY_ID_SUCCESS("공지사항이 성공적으로 조회되었습니다."),
//PostController 관련
POST_CREATED_SUCCESS("게시글이 성공적으로 생성되었습니다."),
POST_UPDATED_SUCCESS("게시글이 성공적으로 수정되었습니다."),
POST_UPDATED_SUCCESS("파트 게시글이 성공적으로 수정되었습니다."),
POST_DELETED_SUCCESS("게시글이 성공적으로 삭제되었습니다."),
POST_FIND_ALL_SUCCESS("게시글 목록이 성공적으로 조회되었습니다."),
POST_PART_FIND_ALL_SUCCESS("파트별 게시글 목록이 성공적으로 조회되었습니다."),
POST_EDU_FIND_SUCCESS("교육 게시글 목록이 성공적으로 조회되었습니다."),
POST_FIND_BY_ID_SUCCESS("게시글이 성공적으로 조회되었습니다.");
POST_FIND_BY_ID_SUCCESS("게시글이 성공적으로 조회되었습니다."),

EDUCATION_UPDATED_SUCCESS("교육자료가 성공적으로 수정되었습니다.");

private final String message;
}