Skip to content

Commit fb13a49

Browse files
authored
�feat: community-board 수정 기능 (#59)
* test(community): CommunityBoard 수정 기능 테스트 작성 * feat(community): RequestDto 및 엔티티에 updateWith 메서드 추가 * feat(community): Usecase 추가 및 Service 구현 * refactor(community): ExceptionMessage 수정 * refactor(community): 불필요한 import, public 제거 * refactor(community): 패키지 구조 변경 - command/query 패키지 삭제
1 parent 238a66a commit fb13a49

15 files changed

+198
-17
lines changed

src/main/java/com/somemore/community/domain/CommunityBoard.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.somemore.community.domain;
22

3+
import com.somemore.community.dto.request.CommunityBoardUpdateRequestDto;
34
import com.somemore.global.common.BaseEntity;
45
import static lombok.AccessLevel.PROTECTED;
56

@@ -52,4 +53,10 @@ public CommunityBoard(UUID writerId, String title, String content, String imgUrl
5253
public boolean isWriter(UUID writerId) {
5354
return this.writerId.equals(writerId);
5455
}
56+
57+
public void updateWith(CommunityBoardUpdateRequestDto dto, String imgUrl) {
58+
this.title = dto.title();
59+
this.content = dto.content();
60+
this.imgUrl = imgUrl;
61+
}
5562
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.somemore.community.dto.request;
2+
3+
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
4+
import com.fasterxml.jackson.databind.annotation.JsonNaming;
5+
import io.swagger.v3.oas.annotations.media.Schema;
6+
import jakarta.validation.constraints.NotBlank;
7+
import lombok.Builder;
8+
9+
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
10+
@Builder
11+
public record CommunityBoardUpdateRequestDto(
12+
@Schema(description = "커뮤니티 게시글 제목", example = "11/29 OO도서관 봉사 같이 갈 사람 모집합니다.")
13+
@NotBlank(message = "게시글 제목은 필수 값입니다.")
14+
String title,
15+
@Schema(description = "커뮤니티 게시글 내용", example = "저 포함 5명이 같이 가면 좋을 거 같아요")
16+
@NotBlank(message = "게시글 내용은 필수 값입니다.")
17+
String content
18+
) {}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
package com.somemore.community.service.query;
1+
package com.somemore.community.service;
22

33
import com.somemore.center.usecase.query.CenterQueryUseCase;
44
import com.somemore.community.domain.CommunityBoard;
55
import com.somemore.community.dto.response.CommunityBoardGetDetailResponseDto;
66
import com.somemore.community.dto.response.CommunityBoardGetResponseDto;
77
import com.somemore.community.dto.response.WriterDetailDto;
88
import com.somemore.community.repository.CommunityBoardRepository;
9-
import com.somemore.community.usecase.query.CommunityBoardQueryUseCase;
9+
import com.somemore.community.usecase.CommunityBoardQueryUseCase;
1010
import com.somemore.global.exception.BadRequestException;
1111
import com.somemore.volunteer.dto.response.VolunteerForCommunityResponseDto;
1212
import com.somemore.volunteer.usecase.query.FindVolunteerIdUseCase;
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
package com.somemore.community.service.command;
1+
package com.somemore.community.service;
22

33
import com.somemore.community.domain.CommunityBoard;
44
import com.somemore.community.dto.request.CommunityBoardCreateRequestDto;
55
import com.somemore.community.repository.CommunityBoardRepository;
6-
import com.somemore.community.usecase.command.CreateCommunityBoardUseCase;
6+
import com.somemore.community.usecase.CreateCommunityBoardUseCase;
77
import lombok.RequiredArgsConstructor;
88
import org.springframework.stereotype.Service;
99
import org.springframework.transaction.annotation.Transactional;
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
package com.somemore.community.service.command;
1+
package com.somemore.community.service;
22

33
import com.somemore.community.domain.CommunityBoard;
44
import com.somemore.community.repository.CommunityBoardRepository;
5-
import com.somemore.community.usecase.command.DeleteCommunityBoardUseCase;
5+
import com.somemore.community.usecase.DeleteCommunityBoardUseCase;
66
import com.somemore.global.exception.BadRequestException;
77
import lombok.RequiredArgsConstructor;
88
import org.springframework.stereotype.Service;
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.somemore.community.service;
2+
3+
import com.somemore.community.domain.CommunityBoard;
4+
import com.somemore.community.dto.request.CommunityBoardUpdateRequestDto;
5+
import com.somemore.community.repository.CommunityBoardRepository;
6+
import com.somemore.community.usecase.UpdateCommunityBoardUseCase;
7+
import com.somemore.global.exception.BadRequestException;
8+
9+
import java.util.UUID;
10+
import lombok.RequiredArgsConstructor;
11+
import org.springframework.stereotype.Service;
12+
import org.springframework.transaction.annotation.Transactional;
13+
14+
import static com.somemore.global.exception.ExceptionMessage.*;
15+
16+
17+
@RequiredArgsConstructor
18+
@Transactional
19+
@Service
20+
public class UpdateCommunityBoardService implements UpdateCommunityBoardUseCase {
21+
22+
private final CommunityBoardRepository communityBoardRepository;
23+
24+
@Override
25+
public void updateCommunityBoard(CommunityBoardUpdateRequestDto requestDto, Long communityBoardId, UUID writerId, String imgUrl) {
26+
CommunityBoard communityBoard = getCommunityBoardById(communityBoardId);
27+
validateWriter(communityBoard, writerId);
28+
communityBoard.updateWith(requestDto, imgUrl);
29+
30+
communityBoardRepository.save(communityBoard);
31+
}
32+
33+
private CommunityBoard getCommunityBoardById(Long id) {
34+
return communityBoardRepository.findById(id)
35+
.orElseThrow(() -> new BadRequestException(NOT_EXISTS_COMMUNITY_BOARD.getMessage()));
36+
}
37+
38+
private void validateWriter(CommunityBoard communityBoard, UUID writerId) {
39+
if (communityBoard.isWriter(writerId)) {
40+
return;
41+
}
42+
43+
throw new BadRequestException(UNAUTHORIZED_COMMUNITY_BOARD.getMessage());
44+
}
45+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.somemore.community.usecase.query;
1+
package com.somemore.community.usecase;
22

33
import com.somemore.community.dto.response.CommunityBoardGetDetailResponseDto;
44
import com.somemore.community.dto.response.CommunityBoardGetResponseDto;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.somemore.community.usecase.command;
1+
package com.somemore.community.usecase;
22

33
import com.somemore.community.dto.request.CommunityBoardCreateRequestDto;
44

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.somemore.community.usecase.command;
1+
package com.somemore.community.usecase;
22

33
import java.util.UUID;
44

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.somemore.community.usecase;
2+
3+
import com.somemore.community.dto.request.CommunityBoardUpdateRequestDto;
4+
5+
import java.util.UUID;
6+
7+
public interface UpdateCommunityBoardUseCase {
8+
void updateCommunityBoard(
9+
CommunityBoardUpdateRequestDto requestDto,
10+
Long communityBoardId,
11+
UUID writerId,
12+
String imgUrl);
13+
}

0 commit comments

Comments
 (0)