From fc9eb0a674a326416813f67fd3cfd4256be0165a Mon Sep 17 00:00:00 2001 From: eeddiinn Date: Tue, 9 Jan 2024 15:00:06 +0900 Subject: [PATCH 01/11] =?UTF-8?q?=E2=9C=A8=20[FEAT]=20=EB=A0=88=ED=81=90?= =?UTF-8?q?=EB=B6=81=20=EC=82=AD=EC=A0=9C=20api=20=EA=B5=AC=ED=98=84=20#14?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/sopt/lequuServer/InitDb.java | 4 +-- .../book/controller/BookController.java | 13 +++++--- .../domain/book/service/BookService.java | 32 +++++++++++++++++++ .../global/exception/enums/SuccessType.java | 8 +++-- 4 files changed, 49 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/sopt/lequuServer/InitDb.java b/src/main/java/org/sopt/lequuServer/InitDb.java index bfffa30..c6bc1df 100644 --- a/src/main/java/org/sopt/lequuServer/InitDb.java +++ b/src/main/java/org/sopt/lequuServer/InitDb.java @@ -111,7 +111,7 @@ public void dbInit() { } for (int i = 0; i < 2; i++) { Sticker sticker = Sticker.builder() - .bookId(7L) + .bookId(1L) .category(ALPHABET) .stickerImage("https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/8d83b1c1-1e2c-437b-a2f5-e3ce96ce6d35.jpg") .build(); @@ -119,7 +119,7 @@ public void dbInit() { } for (int i = 0; i < 3; i++) { Sticker sticker = Sticker.builder() - .bookId(7L) + .bookId(1L) .category(BIRTHDAY) .stickerImage("https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/8d83b1c1-1e2c-437b-a2f5-e3ce96ce6d35.jpg") .build(); diff --git a/src/main/java/org/sopt/lequuServer/domain/book/controller/BookController.java b/src/main/java/org/sopt/lequuServer/domain/book/controller/BookController.java index 71c2526..bff7cb0 100644 --- a/src/main/java/org/sopt/lequuServer/domain/book/controller/BookController.java +++ b/src/main/java/org/sopt/lequuServer/domain/book/controller/BookController.java @@ -5,13 +5,11 @@ import org.sopt.lequuServer.domain.book.dto.request.BookCreateRequestDto; import org.sopt.lequuServer.domain.book.dto.response.BookCreateResponseDto; import org.sopt.lequuServer.domain.book.facade.BookFacade; +import org.sopt.lequuServer.domain.book.service.BookService; import org.sopt.lequuServer.global.auth.jwt.JwtProvider; import org.sopt.lequuServer.global.common.dto.ApiResponse; import org.sopt.lequuServer.global.exception.enums.SuccessType; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.security.Principal; @@ -21,9 +19,16 @@ public class BookController { private final BookFacade bookFacade; + private final BookService bookService; @PostMapping public ApiResponse createBook(@Valid @RequestBody BookCreateRequestDto request, Principal principal) { return ApiResponse.success(SuccessType.BOOK_CREATE_SUCCESS, bookFacade.createBook(request, JwtProvider.getUserFromPrincial(principal))); } + + @DeleteMapping("/{bookId}") + public ApiResponse createBook(@PathVariable Long bookId) { + bookService.deleteBook(bookId); + return ApiResponse.success(SuccessType.BOOK_DELETE_SUCCESS); + } } \ No newline at end of file diff --git a/src/main/java/org/sopt/lequuServer/domain/book/service/BookService.java b/src/main/java/org/sopt/lequuServer/domain/book/service/BookService.java index a3ef2b7..15eec30 100644 --- a/src/main/java/org/sopt/lequuServer/domain/book/service/BookService.java +++ b/src/main/java/org/sopt/lequuServer/domain/book/service/BookService.java @@ -5,19 +5,51 @@ import org.sopt.lequuServer.domain.book.model.Book; import org.sopt.lequuServer.domain.book.repository.BookRepository; import org.sopt.lequuServer.domain.member.model.Member; +import org.sopt.lequuServer.domain.note.model.Note; +import org.sopt.lequuServer.domain.note.repository.NoteRepository; +import org.sopt.lequuServer.domain.sticker.model.PostedSticker; +import org.sopt.lequuServer.domain.sticker.repository.PostedStickerRepository; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + @Service @RequiredArgsConstructor @Transactional(readOnly = true) public class BookService { private final BookRepository bookRepository; + private final NoteRepository noteRepository; + private final PostedStickerRepository postedStickerRepository; @Transactional public BookCreateResponseDto createBook(Book book, Member member) { member.addBook(book); return BookCreateResponseDto.of(bookRepository.save(book)); } + + @Transactional + public void deleteBook(Long bookId) { + + // bookId가 올바른건지 검증 + Book book = bookRepository.findByIdOrThrow(bookId); + + // 레큐북 id에 속하는 레큐노트 삭제 + List notes = book.getNotes(); + noteRepository.deleteAllInBatch(notes); + + /** 순회 돌면서 삭제할 때 이용 + for (Note note : notes) { + note.getId() + } + */ + + // 레큐북 id에 속하는 붙여진 스티커 삭제 + List postedStickers = book.getPostedStickers(); + postedStickerRepository.deleteAllInBatch(postedStickers); + + // 정상적인 book id가 전송되면 + bookRepository.deleteById(bookId); + } } diff --git a/src/main/java/org/sopt/lequuServer/global/exception/enums/SuccessType.java b/src/main/java/org/sopt/lequuServer/global/exception/enums/SuccessType.java index 7e190fc..eaa3507 100644 --- a/src/main/java/org/sopt/lequuServer/global/exception/enums/SuccessType.java +++ b/src/main/java/org/sopt/lequuServer/global/exception/enums/SuccessType.java @@ -29,8 +29,12 @@ public enum SuccessType { */ BOOK_CREATE_SUCCESS(HttpStatus.CREATED, "레큐북이 성공적으로 생성됐습니다."), STICKER_POST_SUCCESS(HttpStatus.CREATED, "스티커 부착에 성공했습니다."), - CREATE_NOTE_SUCCESS(HttpStatus.CREATED, "레큐노트를 성공적으로 생성했습니다.") - ; + CREATE_NOTE_SUCCESS(HttpStatus.CREATED, "레큐노트를 성공적으로 생성했습니다."), + + /** + * 204 NO CONTENT + */ + BOOK_DELETE_SUCCESS(HttpStatus.NO_CONTENT, "레큐북을 성공적으로 삭제했습니다."); private final HttpStatus httpStatus; private final String message; From 7f5f63d2c8f7f8e6ec6dc998723c0a3fd2028591 Mon Sep 17 00:00:00 2001 From: eeddiinn Date: Tue, 9 Jan 2024 15:29:07 +0900 Subject: [PATCH 02/11] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20=20[FEAT]=20Facade?= =?UTF-8?q?=20=ED=8C=A8=ED=84=B4=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?#14?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../book/controller/BookController.java | 2 +- .../domain/book/facade/BookFacade.java | 32 +++++++++++++++++++ .../domain/book/service/BookService.java | 32 ------------------- 3 files changed, 33 insertions(+), 33 deletions(-) diff --git a/src/main/java/org/sopt/lequuServer/domain/book/controller/BookController.java b/src/main/java/org/sopt/lequuServer/domain/book/controller/BookController.java index bff7cb0..d23e741 100644 --- a/src/main/java/org/sopt/lequuServer/domain/book/controller/BookController.java +++ b/src/main/java/org/sopt/lequuServer/domain/book/controller/BookController.java @@ -28,7 +28,7 @@ public ApiResponse createBook(@Valid @RequestBody BookCre @DeleteMapping("/{bookId}") public ApiResponse createBook(@PathVariable Long bookId) { - bookService.deleteBook(bookId); + bookFacade.deleteBook(bookId); return ApiResponse.success(SuccessType.BOOK_DELETE_SUCCESS); } } \ No newline at end of file diff --git a/src/main/java/org/sopt/lequuServer/domain/book/facade/BookFacade.java b/src/main/java/org/sopt/lequuServer/domain/book/facade/BookFacade.java index 745bc66..a7e6703 100644 --- a/src/main/java/org/sopt/lequuServer/domain/book/facade/BookFacade.java +++ b/src/main/java/org/sopt/lequuServer/domain/book/facade/BookFacade.java @@ -4,13 +4,19 @@ import org.sopt.lequuServer.domain.book.dto.request.BookCreateRequestDto; import org.sopt.lequuServer.domain.book.dto.response.BookCreateResponseDto; import org.sopt.lequuServer.domain.book.model.Book; +import org.sopt.lequuServer.domain.book.repository.BookRepository; import org.sopt.lequuServer.domain.book.service.BookService; import org.sopt.lequuServer.domain.member.model.Member; import org.sopt.lequuServer.domain.member.repository.MemberRepository; +import org.sopt.lequuServer.domain.note.model.Note; +import org.sopt.lequuServer.domain.note.repository.NoteRepository; +import org.sopt.lequuServer.domain.sticker.model.PostedSticker; +import org.sopt.lequuServer.domain.sticker.repository.PostedStickerRepository; import org.sopt.lequuServer.global.s3.service.S3Service; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; import java.util.UUID; import static org.sopt.lequuServer.global.s3.enums.ImageFolderName.BOOK_FAVORITE_IMAGE_FOLDER_NAME; @@ -23,6 +29,9 @@ public class BookFacade { private final BookService bookService; private final MemberRepository memberRepository; private final S3Service s3Service; + private final NoteRepository noteRepository; + private final PostedStickerRepository postedStickerRepository; + private final BookRepository bookRepository; public BookCreateResponseDto createBook(BookCreateRequestDto request, Long memberId) { @@ -53,4 +62,27 @@ public BookCreateResponseDto createBook(BookCreateRequestDto request, Long membe return bookService.createBook(book, member); } + + @Transactional + public void deleteBook(Long bookId) { + // bookId가 올바른건지 검증 + Book book = bookRepository.findByIdOrThrow(bookId); + + // 레큐북 id에 속하는 레큐노트 삭제 + List notes = book.getNotes(); + noteRepository.deleteAllInBatch(notes); + + /** 순회 돌면서 삭제할 때 이용 + for (Note note : notes) { + note.getId() + } + */ + + // 레큐북 id에 속하는 붙여진 스티커 삭제 + List postedStickers = book.getPostedStickers(); + postedStickerRepository.deleteAllInBatch(postedStickers); + + // 정상적인 book id가 전송되면 + bookRepository.deleteById(bookId); + } } diff --git a/src/main/java/org/sopt/lequuServer/domain/book/service/BookService.java b/src/main/java/org/sopt/lequuServer/domain/book/service/BookService.java index 15eec30..a3ef2b7 100644 --- a/src/main/java/org/sopt/lequuServer/domain/book/service/BookService.java +++ b/src/main/java/org/sopt/lequuServer/domain/book/service/BookService.java @@ -5,51 +5,19 @@ import org.sopt.lequuServer.domain.book.model.Book; import org.sopt.lequuServer.domain.book.repository.BookRepository; import org.sopt.lequuServer.domain.member.model.Member; -import org.sopt.lequuServer.domain.note.model.Note; -import org.sopt.lequuServer.domain.note.repository.NoteRepository; -import org.sopt.lequuServer.domain.sticker.model.PostedSticker; -import org.sopt.lequuServer.domain.sticker.repository.PostedStickerRepository; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.List; - @Service @RequiredArgsConstructor @Transactional(readOnly = true) public class BookService { private final BookRepository bookRepository; - private final NoteRepository noteRepository; - private final PostedStickerRepository postedStickerRepository; @Transactional public BookCreateResponseDto createBook(Book book, Member member) { member.addBook(book); return BookCreateResponseDto.of(bookRepository.save(book)); } - - @Transactional - public void deleteBook(Long bookId) { - - // bookId가 올바른건지 검증 - Book book = bookRepository.findByIdOrThrow(bookId); - - // 레큐북 id에 속하는 레큐노트 삭제 - List notes = book.getNotes(); - noteRepository.deleteAllInBatch(notes); - - /** 순회 돌면서 삭제할 때 이용 - for (Note note : notes) { - note.getId() - } - */ - - // 레큐북 id에 속하는 붙여진 스티커 삭제 - List postedStickers = book.getPostedStickers(); - postedStickerRepository.deleteAllInBatch(postedStickers); - - // 정상적인 book id가 전송되면 - bookRepository.deleteById(bookId); - } } From ac967279a406fa37c81a78f59f07fe391fda2276 Mon Sep 17 00:00:00 2001 From: eeddiinn Date: Tue, 9 Jan 2024 15:29:45 +0900 Subject: [PATCH 03/11] =?UTF-8?q?=E2=9C=8F=F0=9F=90=9B=20=20=20[FIX]=20@Re?= =?UTF-8?q?sponseStatus=20=EC=B6=94=EA=B0=80=20#14?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sopt/lequuServer/domain/book/controller/BookController.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/org/sopt/lequuServer/domain/book/controller/BookController.java b/src/main/java/org/sopt/lequuServer/domain/book/controller/BookController.java index d23e741..d97d3d8 100644 --- a/src/main/java/org/sopt/lequuServer/domain/book/controller/BookController.java +++ b/src/main/java/org/sopt/lequuServer/domain/book/controller/BookController.java @@ -9,6 +9,7 @@ import org.sopt.lequuServer.global.auth.jwt.JwtProvider; import org.sopt.lequuServer.global.common.dto.ApiResponse; import org.sopt.lequuServer.global.exception.enums.SuccessType; +import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; import java.security.Principal; @@ -22,6 +23,7 @@ public class BookController { private final BookService bookService; @PostMapping + @ResponseStatus(HttpStatus.CREATED) public ApiResponse createBook(@Valid @RequestBody BookCreateRequestDto request, Principal principal) { return ApiResponse.success(SuccessType.BOOK_CREATE_SUCCESS, bookFacade.createBook(request, JwtProvider.getUserFromPrincial(principal))); } From 22e26fc2a4ce9db9054061dc5c566e31a298e415 Mon Sep 17 00:00:00 2001 From: eeddiinn Date: Tue, 9 Jan 2024 15:36:51 +0900 Subject: [PATCH 04/11] =?UTF-8?q?=F0=9F=90=9B=20[FIX]=20Book=20Controller?= =?UTF-8?q?=EC=A0=9C=EC=99=B8=ED=95=9C=20Controller=EC=97=90=20@ResponseSt?= =?UTF-8?q?atus=20=EC=B6=94=EA=B0=80=20#14?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/common/controller/CommonController.java | 7 ++++++- .../lequuServer/domain/note/controller/NoteController.java | 6 +++++- .../domain/sticker/controller/StickerController.java | 3 +++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/sopt/lequuServer/domain/common/controller/CommonController.java b/src/main/java/org/sopt/lequuServer/domain/common/controller/CommonController.java index 4242969..24b3703 100644 --- a/src/main/java/org/sopt/lequuServer/domain/common/controller/CommonController.java +++ b/src/main/java/org/sopt/lequuServer/domain/common/controller/CommonController.java @@ -1,16 +1,19 @@ package org.sopt.lequuServer.domain.common.controller; -import java.util.List; import lombok.RequiredArgsConstructor; import org.sopt.lequuServer.domain.common.dto.response.PopularBookResponseDto; import org.sopt.lequuServer.domain.common.dto.response.SplashDto; import org.sopt.lequuServer.domain.common.facade.CommonFacade; import org.sopt.lequuServer.global.common.dto.ApiResponse; import org.sopt.lequuServer.global.exception.enums.SuccessType; +import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + @RestController @RequiredArgsConstructor @RequestMapping("/api/common") @@ -19,11 +22,13 @@ public class CommonController { private final CommonFacade commonFacade; @GetMapping("/splash") + @ResponseStatus(HttpStatus.OK) public ApiResponse getSplash() { return ApiResponse.success(SuccessType.GET_SPLASH_SUCCESS, commonFacade.getSplash()); } @GetMapping("/home") + @ResponseStatus(HttpStatus.OK) public ApiResponse> getHome() { return ApiResponse.success(SuccessType.GET_HOME_SUCCESS, commonFacade.getHome()); } diff --git a/src/main/java/org/sopt/lequuServer/domain/note/controller/NoteController.java b/src/main/java/org/sopt/lequuServer/domain/note/controller/NoteController.java index 59278b7..ab2b0ad 100644 --- a/src/main/java/org/sopt/lequuServer/domain/note/controller/NoteController.java +++ b/src/main/java/org/sopt/lequuServer/domain/note/controller/NoteController.java @@ -3,17 +3,20 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; -import java.security.Principal; import lombok.RequiredArgsConstructor; import org.sopt.lequuServer.domain.note.dto.request.NoteCreateDto; import org.sopt.lequuServer.domain.note.facade.NoteFacade; import org.sopt.lequuServer.global.auth.jwt.JwtProvider; import org.sopt.lequuServer.global.common.dto.ApiResponse; import org.sopt.lequuServer.global.exception.enums.SuccessType; +import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; +import java.security.Principal; + @RestController @RequiredArgsConstructor @RequestMapping("/api/note") @@ -25,6 +28,7 @@ public class NoteController { @Operation(summary = "레큐 노트 생성") @PostMapping + @ResponseStatus(HttpStatus.CREATED) public ApiResponse createNote(Principal principal, NoteCreateDto noteCreateDto) { return ApiResponse.success(SuccessType.CREATE_NOTE_SUCCESS, noteFacade.createNote(JwtProvider.getUserFromPrincial(principal), noteCreateDto)); } diff --git a/src/main/java/org/sopt/lequuServer/domain/sticker/controller/StickerController.java b/src/main/java/org/sopt/lequuServer/domain/sticker/controller/StickerController.java index 04b3b15..57a31f6 100644 --- a/src/main/java/org/sopt/lequuServer/domain/sticker/controller/StickerController.java +++ b/src/main/java/org/sopt/lequuServer/domain/sticker/controller/StickerController.java @@ -8,6 +8,7 @@ import org.sopt.lequuServer.domain.sticker.service.StickerService; import org.sopt.lequuServer.global.auth.jwt.JwtProvider; import org.sopt.lequuServer.global.common.dto.ApiResponse; +import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; import java.security.Principal; @@ -24,11 +25,13 @@ public class StickerController { private final StickerFacade stickerFacade; @GetMapping("/{bookId}") + @ResponseStatus(HttpStatus.OK) public ApiResponse> getStickerPackList(@PathVariable Long bookId) { return ApiResponse.success(STICKER_PACK_LIST_SUCCESS, stickerService.getStickerPackList(bookId)); } @PostMapping + @ResponseStatus(HttpStatus.CREATED) public ApiResponse postSticker(Principal principal, @RequestBody StickerPostRequestDto request) { return ApiResponse.success(STICKER_POST_SUCCESS, stickerFacade.postSticker(JwtProvider.getUserFromPrincial(principal), request)); } From 9ccd804f36dfa14fdc3cdf954a6f154b0e102250 Mon Sep 17 00:00:00 2001 From: eeddiinn Date: Tue, 9 Jan 2024 15:54:51 +0900 Subject: [PATCH 05/11] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20[REFACTOR]=20bookId?= =?UTF-8?q?=EC=97=90=20=EC=86=8D=ED=95=9C=20=EC=8A=A4=ED=8B=B0=EC=BB=A4?= =?UTF-8?q?=EB=8F=84=20=EA=B0=99=EC=9D=B4=20=EC=82=AD=EC=A0=9C=20=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95=20#14?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/sopt/lequuServer/domain/book/facade/BookFacade.java | 5 +++++ .../domain/sticker/repository/StickerRepository.java | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/src/main/java/org/sopt/lequuServer/domain/book/facade/BookFacade.java b/src/main/java/org/sopt/lequuServer/domain/book/facade/BookFacade.java index a7e6703..b033e6d 100644 --- a/src/main/java/org/sopt/lequuServer/domain/book/facade/BookFacade.java +++ b/src/main/java/org/sopt/lequuServer/domain/book/facade/BookFacade.java @@ -12,6 +12,7 @@ import org.sopt.lequuServer.domain.note.repository.NoteRepository; import org.sopt.lequuServer.domain.sticker.model.PostedSticker; import org.sopt.lequuServer.domain.sticker.repository.PostedStickerRepository; +import org.sopt.lequuServer.domain.sticker.repository.StickerRepository; import org.sopt.lequuServer.global.s3.service.S3Service; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -32,6 +33,7 @@ public class BookFacade { private final NoteRepository noteRepository; private final PostedStickerRepository postedStickerRepository; private final BookRepository bookRepository; + private final StickerRepository stickerRepository; public BookCreateResponseDto createBook(BookCreateRequestDto request, Long memberId) { @@ -82,6 +84,9 @@ public void deleteBook(Long bookId) { List postedStickers = book.getPostedStickers(); postedStickerRepository.deleteAllInBatch(postedStickers); + // 레큐북 id에 속하는 스티커 삭제 + stickerRepository.deleteStickersByBookId(bookId); + // 정상적인 book id가 전송되면 bookRepository.deleteById(bookId); } diff --git a/src/main/java/org/sopt/lequuServer/domain/sticker/repository/StickerRepository.java b/src/main/java/org/sopt/lequuServer/domain/sticker/repository/StickerRepository.java index 6a103c0..c925e85 100644 --- a/src/main/java/org/sopt/lequuServer/domain/sticker/repository/StickerRepository.java +++ b/src/main/java/org/sopt/lequuServer/domain/sticker/repository/StickerRepository.java @@ -4,6 +4,7 @@ import org.sopt.lequuServer.global.exception.enums.ErrorType; import org.sopt.lequuServer.global.exception.model.CustomException; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -13,6 +14,10 @@ public interface StickerRepository extends JpaRepository { @Query("SELECT s FROM Sticker s WHERE s.bookId IN :bookIds") List findStickersByBookIds(@Param("bookIds") List bookIds); + + @Modifying + @Query("DELETE FROM Sticker s WHERE s.bookId = :bookId") + void deleteStickersByBookId(@Param("bookId") Long bookId); default Sticker findByIdOrThrow(Long id) { return findById(id).orElseThrow( From b3f807072e14c1abe11376ea3bd5bbb263554e86 Mon Sep 17 00:00:00 2001 From: eeddiinn Date: Tue, 9 Jan 2024 16:34:48 +0900 Subject: [PATCH 06/11] =?UTF-8?q?=F0=9F=90=9B=20[FIX]=20=EC=B5=9C=EC=95=A0?= =?UTF-8?q?=20=EC=9D=B4=EB=A6=84,=20=EB=A0=88=ED=81=90=EB=B6=81=20?= =?UTF-8?q?=EC=A0=9C=EB=AA=A9,=20=EB=A0=88=ED=81=90=EB=B6=81=20=EC=86=8C?= =?UTF-8?q?=EA=B0=9C=20=EA=B8=80=EC=9E=90=20=EC=88=98=20=EC=A0=9C=ED=95=9C?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20#14?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/book/dto/request/BookCreateRequestDto.java | 6 +++--- .../domain/member/controller/MemberController.java | 11 +++++------ 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/sopt/lequuServer/domain/book/dto/request/BookCreateRequestDto.java b/src/main/java/org/sopt/lequuServer/domain/book/dto/request/BookCreateRequestDto.java index 8b60366..cad300f 100644 --- a/src/main/java/org/sopt/lequuServer/domain/book/dto/request/BookCreateRequestDto.java +++ b/src/main/java/org/sopt/lequuServer/domain/book/dto/request/BookCreateRequestDto.java @@ -6,17 +6,17 @@ public record BookCreateRequestDto( @NotBlank - @Size(min = 1, max = 12, message = "최애 이름은 1자 이상 12자 이하여야합니다.") + @Size(min = 1, max = 15, message = "최애 이름은 1자 이상 15자 이하여야합니다.") String favoriteName, String favoriteImage, @NotBlank - @Size(min = 1, max = 12, message = "레큐북 제목은 1자 이상 12자 이하여야합니다.") + @Size(min = 1, max = 25, message = "레큐북 제목은 1자 이상 25자 이하여야합니다.") String title, @NotBlank - @Size(min = 1, max = 100, message = "레큐북 소개는 1자 이상 100자 이하여야합니다.") + @Size(min = 1, max = 65, message = "레큐북 소개는 1자 이상 65자 이하여야합니다.") String description, // TODO 숫자 1 or 2로 제한할 수 있는 것 추가 diff --git a/src/main/java/org/sopt/lequuServer/domain/member/controller/MemberController.java b/src/main/java/org/sopt/lequuServer/domain/member/controller/MemberController.java index abf222a..19a10ec 100644 --- a/src/main/java/org/sopt/lequuServer/domain/member/controller/MemberController.java +++ b/src/main/java/org/sopt/lequuServer/domain/member/controller/MemberController.java @@ -8,13 +8,12 @@ import org.sopt.lequuServer.global.auth.jwt.JwtProvider; import org.sopt.lequuServer.global.auth.jwt.TokenDto; import org.sopt.lequuServer.global.common.dto.ApiResponse; +import org.sopt.lequuServer.global.exception.enums.SuccessType; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; import java.security.Principal; -import static org.sopt.lequuServer.global.exception.enums.SuccessType.*; - @RestController @RequestMapping("/api") @RequiredArgsConstructor @@ -29,7 +28,7 @@ public ApiResponse login( @RequestHeader("Authorization") String socialAccessToken, @RequestBody SocialLoginRequestDto request) { - return ApiResponse.success(LOGIN_SUCCESS, memberService.login(socialAccessToken, request)); + return ApiResponse.success(SuccessType.LOGIN_SUCCESS, memberService.login(socialAccessToken, request)); } @GetMapping("/reissue") @@ -37,7 +36,7 @@ public ApiResponse login( public ApiResponse reissue( @RequestHeader("Authorization") String refreshToken) { - return ApiResponse.success(REISSUE_SUCCESS, memberService.reissueToken(refreshToken)); + return ApiResponse.success(SuccessType.REISSUE_SUCCESS, memberService.reissueToken(refreshToken)); } @PatchMapping("/log-out") // Spring Security 자체의 logout과 겹치지 않기 위해 이렇게 설정 @@ -45,7 +44,7 @@ public ApiResponse reissue( public ApiResponse logout(Principal principal) { memberService.logout(JwtProvider.getUserFromPrincial(principal)); - return ApiResponse.success(LOGOUT_SUCCESS); + return ApiResponse.success(SuccessType.LOGOUT_SUCCESS); } @GetMapping("/kakao") @@ -53,6 +52,6 @@ public ApiResponse logout(Principal principal) { public ApiResponse kakaoAccessToken( @RequestHeader("Authorization") String code) { - return ApiResponse.success(KAKAO_ACCESS_TOKEN_SUCCESS, kakaoLoginService.getKakaoAccessToken(code)); + return ApiResponse.success(SuccessType.KAKAO_ACCESS_TOKEN_SUCCESS, kakaoLoginService.getKakaoAccessToken(code)); } } From 84bbc2576045e4a32fb556de31c15ac5e47e863a Mon Sep 17 00:00:00 2001 From: eeddiinn Date: Tue, 9 Jan 2024 16:50:52 +0900 Subject: [PATCH 07/11] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20[FIX]=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=EB=AA=85=20createBook=20->=20deleteBook?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=88=98=EC=A0=95=20#14?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lequuServer/domain/book/controller/BookController.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/org/sopt/lequuServer/domain/book/controller/BookController.java b/src/main/java/org/sopt/lequuServer/domain/book/controller/BookController.java index d97d3d8..3d8b45c 100644 --- a/src/main/java/org/sopt/lequuServer/domain/book/controller/BookController.java +++ b/src/main/java/org/sopt/lequuServer/domain/book/controller/BookController.java @@ -5,7 +5,6 @@ import org.sopt.lequuServer.domain.book.dto.request.BookCreateRequestDto; import org.sopt.lequuServer.domain.book.dto.response.BookCreateResponseDto; import org.sopt.lequuServer.domain.book.facade.BookFacade; -import org.sopt.lequuServer.domain.book.service.BookService; import org.sopt.lequuServer.global.auth.jwt.JwtProvider; import org.sopt.lequuServer.global.common.dto.ApiResponse; import org.sopt.lequuServer.global.exception.enums.SuccessType; @@ -20,7 +19,6 @@ public class BookController { private final BookFacade bookFacade; - private final BookService bookService; @PostMapping @ResponseStatus(HttpStatus.CREATED) @@ -29,7 +27,7 @@ public ApiResponse createBook(@Valid @RequestBody BookCre } @DeleteMapping("/{bookId}") - public ApiResponse createBook(@PathVariable Long bookId) { + public ApiResponse deleteBook(@PathVariable Long bookId) { bookFacade.deleteBook(bookId); return ApiResponse.success(SuccessType.BOOK_DELETE_SUCCESS); } From 3845e59c75f22103c5706ab92fb85a1039e43963 Mon Sep 17 00:00:00 2001 From: dong2ast Date: Tue, 9 Jan 2024 17:09:17 +0900 Subject: [PATCH 08/11] =?UTF-8?q?=F0=9F=90=9B=20[FIX]=20=EC=BB=A8=ED=8A=B8?= =?UTF-8?q?=EB=A1=A4=EB=9F=AC=20=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4?= =?UTF-8?q?=EC=85=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lequuServer/domain/note/controller/NoteController.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/sopt/lequuServer/domain/note/controller/NoteController.java b/src/main/java/org/sopt/lequuServer/domain/note/controller/NoteController.java index ab2b0ad..cc29f50 100644 --- a/src/main/java/org/sopt/lequuServer/domain/note/controller/NoteController.java +++ b/src/main/java/org/sopt/lequuServer/domain/note/controller/NoteController.java @@ -3,6 +3,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.sopt.lequuServer.domain.note.dto.request.NoteCreateDto; import org.sopt.lequuServer.domain.note.facade.NoteFacade; @@ -11,6 +12,7 @@ import org.sopt.lequuServer.global.exception.enums.SuccessType; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; @@ -29,7 +31,7 @@ public class NoteController { @Operation(summary = "레큐 노트 생성") @PostMapping @ResponseStatus(HttpStatus.CREATED) - public ApiResponse createNote(Principal principal, NoteCreateDto noteCreateDto) { + public ApiResponse createNote(Principal principal, @RequestBody @Valid NoteCreateDto noteCreateDto) { return ApiResponse.success(SuccessType.CREATE_NOTE_SUCCESS, noteFacade.createNote(JwtProvider.getUserFromPrincial(principal), noteCreateDto)); } } From 36fc681b4f1103ca820b71fe7ff9678bae681c4e Mon Sep 17 00:00:00 2001 From: dong2ast Date: Tue, 9 Jan 2024 17:15:00 +0900 Subject: [PATCH 09/11] =?UTF-8?q?=F0=9F=93=9D=20[DOCS]=20Swagger=20?= =?UTF-8?q?=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lequuServer/domain/book/controller/BookController.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/org/sopt/lequuServer/domain/book/controller/BookController.java b/src/main/java/org/sopt/lequuServer/domain/book/controller/BookController.java index 3d8b45c..305c6f8 100644 --- a/src/main/java/org/sopt/lequuServer/domain/book/controller/BookController.java +++ b/src/main/java/org/sopt/lequuServer/domain/book/controller/BookController.java @@ -1,5 +1,8 @@ package org.sopt.lequuServer.domain.book.controller; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.sopt.lequuServer.domain.book.dto.request.BookCreateRequestDto; @@ -16,17 +19,21 @@ @RestController @RequestMapping("/api/books") @RequiredArgsConstructor +@Tag(name = "Book", description = "레큐 북 API") +@SecurityRequirement(name = "JWT Auth") public class BookController { private final BookFacade bookFacade; @PostMapping @ResponseStatus(HttpStatus.CREATED) + @Operation(description = "레큐 북 생성") public ApiResponse createBook(@Valid @RequestBody BookCreateRequestDto request, Principal principal) { return ApiResponse.success(SuccessType.BOOK_CREATE_SUCCESS, bookFacade.createBook(request, JwtProvider.getUserFromPrincial(principal))); } @DeleteMapping("/{bookId}") + @Operation(description = "레큐 북 삭제") public ApiResponse deleteBook(@PathVariable Long bookId) { bookFacade.deleteBook(bookId); return ApiResponse.success(SuccessType.BOOK_DELETE_SUCCESS); From f47fbf431418ee846b093f4d7a089e17caa6087d Mon Sep 17 00:00:00 2001 From: dong2ast Date: Tue, 9 Jan 2024 17:16:19 +0900 Subject: [PATCH 10/11] =?UTF-8?q?=F0=9F=93=9D=20[MEMO]=20Swagger=20summary?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lequuServer/domain/book/controller/BookController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/sopt/lequuServer/domain/book/controller/BookController.java b/src/main/java/org/sopt/lequuServer/domain/book/controller/BookController.java index 305c6f8..1798e2d 100644 --- a/src/main/java/org/sopt/lequuServer/domain/book/controller/BookController.java +++ b/src/main/java/org/sopt/lequuServer/domain/book/controller/BookController.java @@ -27,13 +27,13 @@ public class BookController { @PostMapping @ResponseStatus(HttpStatus.CREATED) - @Operation(description = "레큐 북 생성") + @Operation(summary = "레큐 북 생성") public ApiResponse createBook(@Valid @RequestBody BookCreateRequestDto request, Principal principal) { return ApiResponse.success(SuccessType.BOOK_CREATE_SUCCESS, bookFacade.createBook(request, JwtProvider.getUserFromPrincial(principal))); } @DeleteMapping("/{bookId}") - @Operation(description = "레큐 북 삭제") + @Operation(summary = "레큐 북 삭제") public ApiResponse deleteBook(@PathVariable Long bookId) { bookFacade.deleteBook(bookId); return ApiResponse.success(SuccessType.BOOK_DELETE_SUCCESS); From 14259550c122bda4318892e14e0afdf91c38ea2e Mon Sep 17 00:00:00 2001 From: eeddiinn Date: Tue, 9 Jan 2024 20:04:50 +0900 Subject: [PATCH 11/11] =?UTF-8?q?=F0=9F=90=9B=20[FIX]=20SuccessType=20?= =?UTF-8?q?=EC=A4=91=EB=B3=B5=20=EB=AC=B8=EA=B5=AC=20=EC=A0=9C=EA=B1=B0=20?= =?UTF-8?q?#14?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/sopt/lequuServer/global/exception/enums/SuccessType.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/org/sopt/lequuServer/global/exception/enums/SuccessType.java b/src/main/java/org/sopt/lequuServer/global/exception/enums/SuccessType.java index eaa3507..697d626 100644 --- a/src/main/java/org/sopt/lequuServer/global/exception/enums/SuccessType.java +++ b/src/main/java/org/sopt/lequuServer/global/exception/enums/SuccessType.java @@ -29,7 +29,6 @@ public enum SuccessType { */ BOOK_CREATE_SUCCESS(HttpStatus.CREATED, "레큐북이 성공적으로 생성됐습니다."), STICKER_POST_SUCCESS(HttpStatus.CREATED, "스티커 부착에 성공했습니다."), - CREATE_NOTE_SUCCESS(HttpStatus.CREATED, "레큐노트를 성공적으로 생성했습니다."), /** * 204 NO CONTENT