From 2352c2abd19380847bac55517c2843034e54a83a Mon Sep 17 00:00:00 2001 From: chaechaen Date: Sun, 12 Jan 2025 01:07:00 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20groupKey=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../springboot/apiPayload/code/status/ErrorStatus.java | 3 +++ .../java/banban/springboot/domain/entity/News.java | 4 ++++ .../domain/entity/{Group.java => TeamGroup.java} | 2 +- .../banban/springboot/repository/GroupRepository.java | 10 ++++++++++ .../java/banban/springboot/service/NewsService.java | 9 ++++++++- .../springboot/web/controller/NewsController.java | 6 +++--- 6 files changed, 29 insertions(+), 5 deletions(-) rename src/main/java/banban/springboot/domain/entity/{Group.java => TeamGroup.java} (92%) create mode 100644 src/main/java/banban/springboot/repository/GroupRepository.java diff --git a/src/main/java/banban/springboot/apiPayload/code/status/ErrorStatus.java b/src/main/java/banban/springboot/apiPayload/code/status/ErrorStatus.java index 966c766..919d2a6 100644 --- a/src/main/java/banban/springboot/apiPayload/code/status/ErrorStatus.java +++ b/src/main/java/banban/springboot/apiPayload/code/status/ErrorStatus.java @@ -20,6 +20,9 @@ public enum ErrorStatus implements BaseErrorCode { MEMBER_NOT_FOUND(HttpStatus.BAD_REQUEST, "MEMBER4001", "사용자가 없습니다."), NICKNAME_NOT_EXIST(HttpStatus.BAD_REQUEST, "MEMBER4002", "닉네임은 필수 입니다."), + // 그룹 에러 + TEAMGROUP_NOT_FOUND(HttpStatus.BAD_REQUEST, "TEAMGroup4001", "그룹이 없습니다."), + // 예시,,, ARTICLE_NOT_FOUND(HttpStatus.NOT_FOUND, "ARTICLE4001", "게시글이 없습니다."), diff --git a/src/main/java/banban/springboot/domain/entity/News.java b/src/main/java/banban/springboot/domain/entity/News.java index 0e02d12..f55b71f 100644 --- a/src/main/java/banban/springboot/domain/entity/News.java +++ b/src/main/java/banban/springboot/domain/entity/News.java @@ -20,6 +20,10 @@ public class News { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "group_id", nullable = false) + private TeamGroup teamGroup; + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id", nullable = false) private Member member; diff --git a/src/main/java/banban/springboot/domain/entity/Group.java b/src/main/java/banban/springboot/domain/entity/TeamGroup.java similarity index 92% rename from src/main/java/banban/springboot/domain/entity/Group.java rename to src/main/java/banban/springboot/domain/entity/TeamGroup.java index fd8baf0..75b5a33 100644 --- a/src/main/java/banban/springboot/domain/entity/Group.java +++ b/src/main/java/banban/springboot/domain/entity/TeamGroup.java @@ -9,7 +9,7 @@ @Builder @NoArgsConstructor @AllArgsConstructor -public class Group { +public class TeamGroup { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/banban/springboot/repository/GroupRepository.java b/src/main/java/banban/springboot/repository/GroupRepository.java new file mode 100644 index 0000000..7a4dfdc --- /dev/null +++ b/src/main/java/banban/springboot/repository/GroupRepository.java @@ -0,0 +1,10 @@ +package banban.springboot.repository; + +import banban.springboot.domain.entity.TeamGroup; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface GroupRepository extends JpaRepository { + Optional findByGroupKey(String groupKey); +} diff --git a/src/main/java/banban/springboot/service/NewsService.java b/src/main/java/banban/springboot/service/NewsService.java index 09fdce0..203c948 100644 --- a/src/main/java/banban/springboot/service/NewsService.java +++ b/src/main/java/banban/springboot/service/NewsService.java @@ -5,6 +5,8 @@ import banban.springboot.apiPayload.exception.handler.NewsHandler; import banban.springboot.domain.entity.Member; import banban.springboot.domain.entity.News; +import banban.springboot.domain.entity.TeamGroup; +import banban.springboot.repository.GroupRepository; import banban.springboot.repository.MemberRepository; import banban.springboot.repository.NewsRepository; import banban.springboot.web.dto.request.NewsRequestDTO; @@ -20,15 +22,20 @@ public class NewsService { private final NewsRepository newsRepository; private final MemberRepository memberRepository; + private final GroupRepository groupRepository; @Transactional - public NewsResponseDTO.NewsCreateResponseDTO createNews(Long groupId, Long memberId, NewsRequestDTO newsRequestDTO) { + public NewsResponseDTO.NewsCreateResponseDTO createNews(String groupKey, Long memberId, NewsRequestDTO newsRequestDTO) { + + TeamGroup teamGroup = groupRepository.findByGroupKey(groupKey) + .orElseThrow(() -> new GeneralException(ErrorStatus.TEAMGROUP_NOT_FOUND)); Member member = memberRepository.findById(memberId) .orElseThrow(() -> new GeneralException(ErrorStatus.MEMBER_NOT_FOUND)); News news = News.builder() + .teamGroup(teamGroup) .member(member) .headline(newsRequestDTO.getHeadline()) .content(newsRequestDTO.getContent()) diff --git a/src/main/java/banban/springboot/web/controller/NewsController.java b/src/main/java/banban/springboot/web/controller/NewsController.java index 4c4014d..f98d05a 100644 --- a/src/main/java/banban/springboot/web/controller/NewsController.java +++ b/src/main/java/banban/springboot/web/controller/NewsController.java @@ -26,9 +26,9 @@ public class NewsController { private final NewsService newsService; @Operation(summary = "뉴스 생성") - @PostMapping("/{groupId}/users/news/{memberId}") - public ApiResponse createNews(@PathVariable Long groupId, @PathVariable Long memberId, @Valid @RequestBody NewsRequestDTO newsRequestDTO) { - NewsResponseDTO.NewsCreateResponseDTO news = newsService.createNews(groupId, memberId, newsRequestDTO); + @PostMapping("/{groupKey}/users/news/{memberId}") + public ApiResponse createNews(@PathVariable String groupKey, @PathVariable Long memberId, @Valid @RequestBody NewsRequestDTO newsRequestDTO) { + NewsResponseDTO.NewsCreateResponseDTO news = newsService.createNews(groupKey, memberId, newsRequestDTO); return ApiResponse.onSuccess(news); } // 뉴스 공감 누르기