forked from kookmin-sw/cap-template
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
11 changed files
with
208 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
9 changes: 9 additions & 0 deletions
9
backend/src/main/java/com/project/capstone/book/domain/BookRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package com.project.capstone.book.domain; | ||
|
||
import org.springframework.data.jpa.repository.JpaRepository; | ||
|
||
import java.util.Optional; | ||
|
||
public interface BookRepository extends JpaRepository<Book, Long> { | ||
Optional<Book> findBookById(Long id); | ||
} |
10 changes: 10 additions & 0 deletions
10
backend/src/main/java/com/project/capstone/book/exception/BookException.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
package com.project.capstone.book.exception; | ||
|
||
import com.project.capstone.common.exception.BaseException; | ||
import com.project.capstone.common.exception.ExceptionType; | ||
|
||
public class BookException extends BaseException { | ||
public BookException(ExceptionType exceptionType) { | ||
super(exceptionType); | ||
} | ||
} |
33 changes: 33 additions & 0 deletions
33
backend/src/main/java/com/project/capstone/book/exception/BookExceptionType.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
package com.project.capstone.book.exception; | ||
|
||
import com.project.capstone.common.exception.ExceptionType; | ||
import lombok.AllArgsConstructor; | ||
import org.springframework.http.HttpStatus; | ||
|
||
import static org.springframework.http.HttpStatus.NOT_FOUND; | ||
|
||
@AllArgsConstructor | ||
public enum BookExceptionType implements ExceptionType { | ||
|
||
BOOK_NOT_FOUND(NOT_FOUND, 801, "해당 책을 찾을 수 없습니다.") | ||
; | ||
|
||
private final HttpStatus status; | ||
private final int exceptionCode; | ||
private final String message; | ||
|
||
@Override | ||
public HttpStatus httpStatus() { | ||
return status; | ||
} | ||
|
||
@Override | ||
public int exceptionCode() { | ||
return exceptionCode; | ||
} | ||
|
||
@Override | ||
public String message() { | ||
return message; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
25 changes: 25 additions & 0 deletions
25
backend/src/main/java/com/project/capstone/content/controller/ContentController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
package com.project.capstone.content.controller; | ||
|
||
import com.project.capstone.auth.domain.PrincipalDetails; | ||
import com.project.capstone.content.controller.dto.ContentCreateRequest; | ||
import com.project.capstone.content.service.ContentService; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.http.ResponseEntity; | ||
import org.springframework.security.core.annotation.AuthenticationPrincipal; | ||
import org.springframework.web.bind.annotation.*; | ||
|
||
@RestController | ||
@RequiredArgsConstructor | ||
@RequestMapping("/content") | ||
public class ContentController { | ||
|
||
private final ContentService contentService; | ||
|
||
@PostMapping("/create") | ||
public ResponseEntity<?> createContent(@AuthenticationPrincipal PrincipalDetails details, | ||
@RequestBody ContentCreateRequest request, | ||
@RequestParam Long bookId, @RequestParam(required = false) Long clubId) { | ||
contentService.createContent(details.getUserId(), request, bookId, clubId); | ||
return ResponseEntity.ok().body("컨텐츠 생성 완료"); | ||
} | ||
} |
10 changes: 10 additions & 0 deletions
10
backend/src/main/java/com/project/capstone/content/controller/dto/ContentCreateRequest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
package com.project.capstone.content.controller.dto; | ||
|
||
import com.project.capstone.content.domain.ContentType; | ||
|
||
public record ContentCreateRequest( | ||
ContentType contentType, | ||
String title, | ||
String body | ||
) { | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
7 changes: 7 additions & 0 deletions
7
backend/src/main/java/com/project/capstone/content/domain/ContentRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package com.project.capstone.content.domain; | ||
|
||
import org.springframework.data.jpa.repository.JpaRepository; | ||
|
||
public interface ContentRepository extends JpaRepository<Content, Long> { | ||
|
||
} |
28 changes: 28 additions & 0 deletions
28
backend/src/main/java/com/project/capstone/content/domain/ContentType.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
package com.project.capstone.content.domain; | ||
|
||
import com.fasterxml.jackson.annotation.JsonCreator; | ||
import lombok.AllArgsConstructor; | ||
import lombok.Getter; | ||
import lombok.extern.slf4j.Slf4j; | ||
|
||
@AllArgsConstructor | ||
@Getter | ||
@Slf4j | ||
public enum ContentType { | ||
|
||
Review("독후감"), | ||
Quotation("인용구"), | ||
ShortReview("한줄평"); | ||
|
||
private final String type; | ||
|
||
@JsonCreator(mode = JsonCreator.Mode.DELEGATING) | ||
public static ContentType from(String type) { | ||
for (ContentType contentType : ContentType.values()) { | ||
if (contentType.getType().equals(type)) { | ||
return contentType; | ||
} | ||
} | ||
throw new RuntimeException("잘못된 컨텐츠 타입 입니다."); | ||
} | ||
} |
72 changes: 72 additions & 0 deletions
72
backend/src/main/java/com/project/capstone/content/service/ContentService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
package com.project.capstone.content.service; | ||
|
||
import com.project.capstone.book.domain.Book; | ||
import com.project.capstone.book.domain.BookRepository; | ||
import com.project.capstone.book.exception.BookException; | ||
import com.project.capstone.book.exception.BookExceptionType; | ||
import com.project.capstone.club.domain.Club; | ||
import com.project.capstone.club.domain.ClubRepository; | ||
import com.project.capstone.club.exception.ClubException; | ||
import com.project.capstone.club.exception.ClubExceptionType; | ||
import com.project.capstone.content.controller.dto.ContentCreateRequest; | ||
import com.project.capstone.content.domain.Content; | ||
import com.project.capstone.content.domain.ContentRepository; | ||
import com.project.capstone.member.domain.Member; | ||
import com.project.capstone.member.domain.MemberRepository; | ||
import com.project.capstone.member.exception.MemberException; | ||
import com.project.capstone.member.exception.MemberExceptionType; | ||
import lombok.RequiredArgsConstructor; | ||
import lombok.extern.slf4j.Slf4j; | ||
import org.springframework.stereotype.Service; | ||
|
||
import java.util.UUID; | ||
|
||
import static com.project.capstone.book.exception.BookExceptionType.BOOK_NOT_FOUND; | ||
import static com.project.capstone.club.exception.ClubExceptionType.CLUB_NOT_FOUND; | ||
import static com.project.capstone.member.exception.MemberExceptionType.MEMBER_NOT_FOUND; | ||
|
||
@Service | ||
@RequiredArgsConstructor | ||
@Slf4j | ||
public class ContentService { | ||
|
||
private final ContentRepository contentRepository; | ||
private final BookRepository bookRepository; | ||
private final ClubRepository clubRepository; | ||
private final MemberRepository memberRepository; | ||
|
||
public void createContent(String userId, ContentCreateRequest request, Long bookId, Long clubId) { | ||
Member member = memberRepository.findMemberById(UUID.fromString(userId)).orElseThrow( | ||
() -> new MemberException(MEMBER_NOT_FOUND) | ||
); | ||
Book book = bookRepository.findBookById(bookId).orElseThrow( | ||
() -> new BookException(BOOK_NOT_FOUND) | ||
); | ||
Club club; | ||
if (clubId == null) { | ||
club = null; | ||
} | ||
else { | ||
club = clubRepository.findClubById(clubId).orElseThrow( | ||
() -> new ClubException(CLUB_NOT_FOUND) | ||
); | ||
} | ||
Content saved = contentRepository.save( | ||
Content.builder() | ||
.type(request.contentType()) | ||
.title(request.title()) | ||
.body(request.body()) | ||
.likes(0) | ||
.member(member) | ||
.book(book) | ||
.club(club) | ||
.build() | ||
); | ||
|
||
member.getContents().add(saved); | ||
book.getContents().add(saved); | ||
if (club != null) { | ||
club.getContents().add(saved); | ||
} | ||
} | ||
} |