diff --git a/.github/workflows/CD.yml b/.github/workflows/CD.yml index 364822c..b9281dd 100644 --- a/.github/workflows/CD.yml +++ b/.github/workflows/CD.yml @@ -71,5 +71,4 @@ jobs: key: ${{ secrets.RELEASE_SERVER_KEY }} script: | cd ~ - ./deploy.sh - docker image prune -f \ No newline at end of file + ./deploy.sh \ No newline at end of file diff --git a/src/main/java/org/sopt/lequuServer/InitDb.java b/src/main/java/org/sopt/lequuServer/InitDb.java index d01ce21..c6bc1df 100644 --- a/src/main/java/org/sopt/lequuServer/InitDb.java +++ b/src/main/java/org/sopt/lequuServer/InitDb.java @@ -12,10 +12,8 @@ import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; -import java.util.Arrays; -import java.util.List; - -import static org.sopt.lequuServer.domain.sticker.model.StickerCategory.*; +import static org.sopt.lequuServer.domain.sticker.model.StickerCategory.ALPHABET; +import static org.sopt.lequuServer.domain.sticker.model.StickerCategory.BIRTHDAY; @Component @RequiredArgsConstructor @@ -27,15 +25,6 @@ public void init() { initService.dbInit(); } - private static final List CHARACTER_STICKERS = Arrays.asList( - "https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/stickers/8d83b1c1-1e2c-437b-a2f5-e3ce96ce6d35.jpg", - "https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/stickers/0215b8a5-d7a1-40c3-b291-5174b1747074.jpg", - "https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/stickers/c446705f-d96f-4cef-b490-62979fc52cd9.jpg", - "https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/stickers/1d8ac983-4862-4687-b27a-324a4ecb8ae6.jpg", - "https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/stickers/ea9a990a-e6e5-4789-9911-a967095d3cdc.jpg", - "https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/stickers/38e4509e-61ba-42e7-a823-8b379c1be022.jpg" - ); - @Component @Transactional @RequiredArgsConstructor @@ -55,7 +44,7 @@ public void dbInit() { Book book1 = Book.builder() .uuid("ee4f66f9-9cf4-4b28-90f4-f71d0ecba021") .favoriteName("LeoJ") - .favoriteImage("https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/books/favorite_image/b4006561-382b-479e-ae1d-e841922e883f.jpg") + .favoriteImage("https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/b4006561-382b-479e-ae1d-e841922e883f.jpg") .title("1번째 레큐북") .description("레큐북의 내용입니다!") .backgroundColor(1) @@ -67,7 +56,7 @@ public void dbInit() { Book book = Book.builder() .uuid("ee4f66f9-9cf4-4b28-90f4-f71d0ecba02" + String.valueOf(i + 1)) .favoriteName("LeoJ") - .favoriteImage("https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/books/favorite_image/b4006561-382b-479e-ae1d-e841922e883f.jpg") + .favoriteImage("https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/b4006561-382b-479e-ae1d-e841922e883f.jpg") .title(String.valueOf(i + 1) + "번째 레큐북") .description("레큐북의 내용입니다!") .backgroundColor(1) @@ -80,7 +69,7 @@ public void dbInit() { for (int i = 0; i < 3; i++) { Note note = Note.builder() .content("레큐노트 내용입니다 블라블라블라 블라블라블라 블라블라블라 블라블라블라 블라블라블라 블라블라블라 블라블라블라") - .background("https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/notes/background_image/676c2ca3-f868-423f-8000-a0bcb67dc797.jpg") + .background("https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/676c2ca3-f868-423f-8000-a0bcb67dc797.jpg") .textColor(i) .member(member1) .book(book1) @@ -101,14 +90,14 @@ public void dbInit() { Sticker sticker1 = Sticker.builder() .bookId(0L) .category(ALPHABET) - .stickerImage("https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/stickers/8d83b1c1-1e2c-437b-a2f5-e3ce96ce6d35.jpg") + .stickerImage("https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/8d83b1c1-1e2c-437b-a2f5-e3ce96ce6d35.jpg") .build(); em.persist(sticker1); for (int i = 0; i < 3; i++) { Sticker sticker = Sticker.builder() .bookId(0L) .category(ALPHABET) - .stickerImage("https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/stickers/8d83b1c1-1e2c-437b-a2f5-e3ce96ce6d35.jpg") + .stickerImage("https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/8d83b1c1-1e2c-437b-a2f5-e3ce96ce6d35.jpg") .build(); em.persist(sticker); } @@ -116,24 +105,15 @@ public void dbInit() { Sticker sticker = Sticker.builder() .bookId(0L) .category(BIRTHDAY) - .stickerImage("https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/stickers/8d83b1c1-1e2c-437b-a2f5-e3ce96ce6d35.jpg") - .build(); - em.persist(sticker); - } - for (String characterSticker : CHARACTER_STICKERS) { - Sticker sticker = Sticker.builder() - .bookId(0L) - .category(CHARACTER) - .stickerImage(characterSticker) + .stickerImage("https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/8d83b1c1-1e2c-437b-a2f5-e3ce96ce6d35.jpg") .build(); em.persist(sticker); } - for (int i = 0; i < 2; i++) { Sticker sticker = Sticker.builder() .bookId(1L) .category(ALPHABET) - .stickerImage("https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/stickers/8d83b1c1-1e2c-437b-a2f5-e3ce96ce6d35.jpg") + .stickerImage("https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/8d83b1c1-1e2c-437b-a2f5-e3ce96ce6d35.jpg") .build(); em.persist(sticker); } @@ -141,7 +121,7 @@ public void dbInit() { Sticker sticker = Sticker.builder() .bookId(1L) .category(BIRTHDAY) - .stickerImage("https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/stickers/8d83b1c1-1e2c-437b-a2f5-e3ce96ce6d35.jpg") + .stickerImage("https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/8d83b1c1-1e2c-437b-a2f5-e3ce96ce6d35.jpg") .build(); em.persist(sticker); } 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..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 @@ -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; @@ -8,22 +11,31 @@ 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.http.HttpStatus; +import org.springframework.web.bind.annotation.*; import java.security.Principal; @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(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(summary = "레큐 북 삭제") + public ApiResponse deleteBook(@PathVariable Long 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/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/book/facade/BookFacade.java b/src/main/java/org/sopt/lequuServer/domain/book/facade/BookFacade.java index 745bc66..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 @@ -4,13 +4,20 @@ 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.domain.sticker.repository.StickerRepository; 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 +30,10 @@ 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; + private final StickerRepository stickerRepository; public BookCreateResponseDto createBook(BookCreateRequestDto request, Long memberId) { @@ -53,4 +64,30 @@ 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); + + // 레큐북 id에 속하는 스티커 삭제 + stickerRepository.deleteStickersByBookId(bookId); + + // 정상적인 book id가 전송되면 + bookRepository.deleteById(bookId); + } } 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/member/controller/MemberController.java b/src/main/java/org/sopt/lequuServer/domain/member/controller/MemberController.java index a2028af..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 @@ -1,23 +1,19 @@ package org.sopt.lequuServer.domain.member.controller; -import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; -import org.sopt.lequuServer.domain.member.dto.request.MemberNicknameRequestDto; import org.sopt.lequuServer.domain.member.dto.request.SocialLoginRequestDto; import org.sopt.lequuServer.domain.member.dto.response.MemberLoginResponseDto; -import org.sopt.lequuServer.domain.member.dto.response.MemberNicknameResponseDto; import org.sopt.lequuServer.domain.member.service.MemberService; import org.sopt.lequuServer.global.auth.fegin.kakao.KakaoLoginService; 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 @@ -32,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") @@ -40,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과 겹치지 않기 위해 이렇게 설정 @@ -48,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") @@ -56,13 +52,6 @@ public ApiResponse logout(Principal principal) { public ApiResponse kakaoAccessToken( @RequestHeader("Authorization") String code) { - return ApiResponse.success(KAKAO_ACCESS_TOKEN_SUCCESS, kakaoLoginService.getKakaoAccessToken(code)); - } - - @PatchMapping("/nickname") - @ResponseStatus(HttpStatus.OK) - public ApiResponse setMemberNickname(Principal principal, @Valid @RequestBody MemberNicknameRequestDto request) { - - return ApiResponse.success(SET_MEMBER_NICKNAME_SUCCESS, memberService.setMemberNickname(JwtProvider.getUserFromPrincial(principal), request)); + return ApiResponse.success(SuccessType.KAKAO_ACCESS_TOKEN_SUCCESS, kakaoLoginService.getKakaoAccessToken(code)); } -} \ No newline at end of file +} diff --git a/src/main/java/org/sopt/lequuServer/domain/member/dto/request/MemberNicknameRequestDto.java b/src/main/java/org/sopt/lequuServer/domain/member/dto/request/MemberNicknameRequestDto.java deleted file mode 100644 index b3c6d7b..0000000 --- a/src/main/java/org/sopt/lequuServer/domain/member/dto/request/MemberNicknameRequestDto.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.sopt.lequuServer.domain.member.dto.request; - -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.Size; - -public record MemberNicknameRequestDto( - @NotBlank - @Size(min = 1, max = 8, message = "닉네임은 1글자 이상 8글자 이하여야합니다.") - String nickname -) { -} \ No newline at end of file diff --git a/src/main/java/org/sopt/lequuServer/domain/member/dto/response/MemberNicknameResponseDto.java b/src/main/java/org/sopt/lequuServer/domain/member/dto/response/MemberNicknameResponseDto.java deleted file mode 100644 index 8684bb1..0000000 --- a/src/main/java/org/sopt/lequuServer/domain/member/dto/response/MemberNicknameResponseDto.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.sopt.lequuServer.domain.member.dto.response; - -public record MemberNicknameResponseDto(Long memberId) { - public static MemberNicknameResponseDto of(Long userId) { - return new MemberNicknameResponseDto(userId); - } -} \ No newline at end of file diff --git a/src/main/java/org/sopt/lequuServer/domain/member/model/Member.java b/src/main/java/org/sopt/lequuServer/domain/member/model/Member.java index 3d97c97..d96bd53 100644 --- a/src/main/java/org/sopt/lequuServer/domain/member/model/Member.java +++ b/src/main/java/org/sopt/lequuServer/domain/member/model/Member.java @@ -23,10 +23,6 @@ public class Member extends BaseTimeEntity { private String nickname; - public void updateNickname(String nickname) { - this.nickname = nickname; - } - /** * 소셜 로그인 관련 */ diff --git a/src/main/java/org/sopt/lequuServer/domain/member/service/MemberService.java b/src/main/java/org/sopt/lequuServer/domain/member/service/MemberService.java index 6f745e8..afa24fb 100644 --- a/src/main/java/org/sopt/lequuServer/domain/member/service/MemberService.java +++ b/src/main/java/org/sopt/lequuServer/domain/member/service/MemberService.java @@ -1,10 +1,8 @@ package org.sopt.lequuServer.domain.member.service; import lombok.RequiredArgsConstructor; -import org.sopt.lequuServer.domain.member.dto.request.MemberNicknameRequestDto; import org.sopt.lequuServer.domain.member.dto.request.SocialLoginRequestDto; import org.sopt.lequuServer.domain.member.dto.response.MemberLoginResponseDto; -import org.sopt.lequuServer.domain.member.dto.response.MemberNicknameResponseDto; import org.sopt.lequuServer.domain.member.model.Member; import org.sopt.lequuServer.domain.member.model.SocialPlatform; import org.sopt.lequuServer.domain.member.repository.MemberRepository; @@ -102,12 +100,4 @@ private static String parseTokenString(String tokenString) { } return strings[1]; } - - @Transactional - public MemberNicknameResponseDto setMemberNickname(Long memberId, MemberNicknameRequestDto request) { - Member member = memberRepository.findByIdOrThrow(memberId); - member.updateNickname(request.nickname()); - - return MemberNicknameResponseDto.of(memberId); - } } \ No newline at end of file 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..da9d398 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,22 @@ 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 jakarta.validation.Valid; 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.RequestBody; 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,7 +30,8 @@ public class NoteController { @Operation(summary = "레큐 노트 생성") @PostMapping - public ApiResponse createNote(Principal principal, NoteCreateDto noteCreateDto) { - return ApiResponse.success(SuccessType.CREATE_NOTE_SUCCESS, noteFacade.createNote(JwtProvider.getUserFromPrincial(principal), noteCreateDto)); + @ResponseStatus(HttpStatus.CREATED) + public ApiResponse createNote(Principal principal, @RequestBody @Valid NoteCreateDto noteCreateDto) { + return ApiResponse.success(SuccessType.NOTE_CREATE_SUCCESS, noteFacade.createNote(JwtProvider.getUserFromPrincial(principal), noteCreateDto)); } } diff --git a/src/main/java/org/sopt/lequuServer/domain/note/facade/NoteFacade.java b/src/main/java/org/sopt/lequuServer/domain/note/facade/NoteFacade.java index 49d437c..77e31ce 100644 --- a/src/main/java/org/sopt/lequuServer/domain/note/facade/NoteFacade.java +++ b/src/main/java/org/sopt/lequuServer/domain/note/facade/NoteFacade.java @@ -9,12 +9,9 @@ import org.sopt.lequuServer.domain.note.dto.response.NoteResponseDto; import org.sopt.lequuServer.domain.note.model.Note; import org.sopt.lequuServer.domain.note.service.NoteService; -import org.sopt.lequuServer.global.s3.service.S3Service; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import static org.sopt.lequuServer.global.s3.enums.ImageFolderName.NOTE_BACKGROUND_IMAGE_FOLDER_NAME; - @Service @RequiredArgsConstructor @Transactional(readOnly = true) @@ -23,17 +20,11 @@ public class NoteFacade { private final MemberRepository memberRepository; private final BookRepository bookRepository; private final NoteService noteService; - private final S3Service s3Service; public NoteResponseDto createNote(Long userId, NoteCreateDto noteCreateDto) { Member member = memberRepository.findByIdOrThrow(userId); Book book = bookRepository.findByIdOrThrow(noteCreateDto.bookId()); - String background = noteCreateDto.background(); - if (background.endsWith(".jpg")) { - background = s3Service.getURL(NOTE_BACKGROUND_IMAGE_FOLDER_NAME.getValue() + noteCreateDto.background()); - } - - return noteService.saveNote(Note.of(noteCreateDto.content(), background, noteCreateDto.textColor(), member, book), member, book); + return noteService.saveNote(Note.of(noteCreateDto.content(), noteCreateDto.background(), noteCreateDto.textColor(), member, book), member, book); } } 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)); } diff --git a/src/main/java/org/sopt/lequuServer/domain/sticker/model/StickerCategory.java b/src/main/java/org/sopt/lequuServer/domain/sticker/model/StickerCategory.java index 8650f6c..8f5d3e4 100644 --- a/src/main/java/org/sopt/lequuServer/domain/sticker/model/StickerCategory.java +++ b/src/main/java/org/sopt/lequuServer/domain/sticker/model/StickerCategory.java @@ -9,8 +9,7 @@ public enum StickerCategory { ALPHABET("알파벳"), - BIRTHDAY("생일"), - CHARACTER("캐릭터"); + BIRTHDAY("생일"); private final String value; } 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( diff --git a/src/main/java/org/sopt/lequuServer/global/config/WebConfig.java b/src/main/java/org/sopt/lequuServer/global/config/WebConfig.java index a7a686b..c026a97 100644 --- a/src/main/java/org/sopt/lequuServer/global/config/WebConfig.java +++ b/src/main/java/org/sopt/lequuServer/global/config/WebConfig.java @@ -10,7 +10,7 @@ public class WebConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") - .allowedOrigins("http://localhost:5173", "http://localhost:8080") + .allowedOrigins("**") .allowedMethods("GET", "POST", "PUT", "DELETE") .allowCredentials(true) .maxAge(3000); 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 f26c657..58cc282 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 @@ -30,7 +30,12 @@ public enum SuccessType { */ BOOK_CREATE_SUCCESS(HttpStatus.CREATED, "레큐북이 성공적으로 생성됐습니다."), STICKER_POST_SUCCESS(HttpStatus.CREATED, "스티커 부착에 성공했습니다."), - CREATE_NOTE_SUCCESS(HttpStatus.CREATED, "레큐노트를 성공적으로 생성했습니다."); + NOTE_CREATE_SUCCESS(HttpStatus.CREATED, "레큐노트를 성공적으로 생성했습니다."), + + /** + * 204 NO CONTENT + */ + BOOK_DELETE_SUCCESS(HttpStatus.NO_CONTENT, "레큐북을 성공적으로 삭제했습니다."); private final HttpStatus httpStatus; private final String message;