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 79a8279..3fab663 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 @@ -6,6 +6,8 @@ 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.dto.response.MypageBookResponseDto; +import org.sopt.lequuServer.domain.member.dto.response.MypageNoteResponseDto; 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; @@ -16,8 +18,9 @@ import org.springframework.web.bind.annotation.*; import java.security.Principal; +import java.util.List; -import static org.sopt.lequuServer.global.exception.enums.SuccessType.SET_MEMBER_NICKNAME_SUCCESS; +import static org.sopt.lequuServer.global.exception.enums.SuccessType.*; @RestController @RequestMapping("/api") @@ -66,4 +69,16 @@ public ApiResponse setMemberNickname(Principal princi return ApiResponse.success(SET_MEMBER_NICKNAME_SUCCESS, memberService.setMemberNickname(JwtProvider.getUserFromPrincial(principal), request)); } + + @GetMapping("/mypage/book") + @ResponseStatus(HttpStatus.OK) + public ApiResponse getMypageBook(Principal principal) { + return ApiResponse.success(GET_MYPAGE_BOOK_SUCCESS, memberService.getMypageBook(JwtProvider.getUserFromPrincial(principal))); + } + + @GetMapping("/mypage/note") + @ResponseStatus(HttpStatus.OK) + public ApiResponse> getMypageNote(Principal principal) { + return ApiResponse.success(GET_MYPAGE_NOTE_SUCCESS, memberService.getMypageNote(JwtProvider.getUserFromPrincial(principal))); + } } \ No newline at end of file diff --git a/src/main/java/org/sopt/lequuServer/domain/member/dto/response/MypageBookListResponseDto.java b/src/main/java/org/sopt/lequuServer/domain/member/dto/response/MypageBookListResponseDto.java new file mode 100644 index 0000000..08f622f --- /dev/null +++ b/src/main/java/org/sopt/lequuServer/domain/member/dto/response/MypageBookListResponseDto.java @@ -0,0 +1,31 @@ +package org.sopt.lequuServer.domain.member.dto.response; + +import org.sopt.lequuServer.domain.book.model.Book; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +public record MypageBookListResponseDto( + + Long bookId, + String bookUuid, + String title, + String bookDate, + int bookBackgroundColor, + + int noteNum +) { + public static MypageBookListResponseDto of(Book book) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd"); + String bookDate = book.getCreatedAt().format(formatter); + + return new MypageBookListResponseDto( + book.getId(), + book.getUuid(), + book.getTitle(), + bookDate, + book.getBackgroundColor(), + book.getNotes().size() + ); + } +} \ No newline at end of file diff --git a/src/main/java/org/sopt/lequuServer/domain/member/dto/response/MypageBookResponseDto.java b/src/main/java/org/sopt/lequuServer/domain/member/dto/response/MypageBookResponseDto.java new file mode 100644 index 0000000..2e1f633 --- /dev/null +++ b/src/main/java/org/sopt/lequuServer/domain/member/dto/response/MypageBookResponseDto.java @@ -0,0 +1,18 @@ +package org.sopt.lequuServer.domain.member.dto.response; + +import org.sopt.lequuServer.domain.book.model.Book; + +import java.util.List; + +public record MypageBookResponseDto( + String memberNickname, + List mypageBookList +) { + public static MypageBookResponseDto of(String nickName, List books) { + List mypageBookList = books.stream() + .map(MypageBookListResponseDto::of) + .toList(); + + return new MypageBookResponseDto(nickName, mypageBookList); + } +} diff --git a/src/main/java/org/sopt/lequuServer/domain/member/dto/response/MypageNoteResponseDto.java b/src/main/java/org/sopt/lequuServer/domain/member/dto/response/MypageNoteResponseDto.java new file mode 100644 index 0000000..ee9ff16 --- /dev/null +++ b/src/main/java/org/sopt/lequuServer/domain/member/dto/response/MypageNoteResponseDto.java @@ -0,0 +1,32 @@ +package org.sopt.lequuServer.domain.member.dto.response; + +import org.sopt.lequuServer.domain.note.model.Note; + +import java.time.format.DateTimeFormatter; + +public record MypageNoteResponseDto( + String bookUuid, + + String title, + + Long noteId, + String content, + + String noteDate, + + int noteBackgroundColor, + String noteBackgroundImage +) { + public static MypageNoteResponseDto of(Note note) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd"); + String noteDate = note.getCreatedAt().format(formatter); + + String background = note.getBackground(); + if (background.endsWith(".jpg")) { + return new MypageNoteResponseDto(note.getBook().getUuid(), note.getBook().getTitle(), + note.getId(), note.getContent(), noteDate, -1, background); + } + return new MypageNoteResponseDto(note.getBook().getUuid(), note.getBook().getTitle(), + note.getId(), note.getContent(), noteDate, Integer.parseInt(background), ""); + } +} diff --git a/src/main/java/org/sopt/lequuServer/domain/member/repository/MemberRepository.java b/src/main/java/org/sopt/lequuServer/domain/member/repository/MemberRepository.java index 2dcda7e..559770c 100644 --- a/src/main/java/org/sopt/lequuServer/domain/member/repository/MemberRepository.java +++ b/src/main/java/org/sopt/lequuServer/domain/member/repository/MemberRepository.java @@ -1,12 +1,13 @@ package org.sopt.lequuServer.domain.member.repository; -import java.util.Optional; import org.sopt.lequuServer.domain.member.model.Member; import org.sopt.lequuServer.domain.member.model.SocialPlatform; import org.sopt.lequuServer.global.exception.enums.ErrorType; import org.sopt.lequuServer.global.exception.model.CustomException; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.Optional; + public interface MemberRepository extends JpaRepository { boolean existsBySocialPlatformAndSocialId(SocialPlatform socialPlatform, String socialId); 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..23c075f 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,13 +1,17 @@ package org.sopt.lequuServer.domain.member.service; import lombok.RequiredArgsConstructor; +import org.sopt.lequuServer.domain.book.model.Book; 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.dto.response.MypageBookResponseDto; +import org.sopt.lequuServer.domain.member.dto.response.MypageNoteResponseDto; import org.sopt.lequuServer.domain.member.model.Member; import org.sopt.lequuServer.domain.member.model.SocialPlatform; import org.sopt.lequuServer.domain.member.repository.MemberRepository; +import org.sopt.lequuServer.domain.note.model.Note; 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; @@ -16,6 +20,9 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; +import java.util.stream.Collectors; + import static org.sopt.lequuServer.global.exception.enums.ErrorType.*; @Service @@ -110,4 +117,32 @@ public MemberNicknameResponseDto setMemberNickname(Long memberId, MemberNickname return MemberNicknameResponseDto.of(memberId); } -} \ No newline at end of file + + public MypageBookResponseDto getMypageBook(Long memberId) { + + // 회원 id 찾기 + Member member = memberRepository.findByIdOrThrow(memberId); + + // 회원 id로 memberNickname 조회 + String nickname = member.getNickname(); + + // 회원이 소유한 Book 리스트 가져오기 + List books = member.getBooks(); + + return MypageBookResponseDto.of(nickname, books); + } + + public List getMypageNote(Long memberId) { + + // 회원 id 찾기 + Member member = memberRepository.findByIdOrThrow(memberId); + + // 회원이 소유한 Note 리스트 가져오기 + List notes = member.getNotes(); + + return notes.stream() + .map(MypageNoteResponseDto::of) + .collect(Collectors.toList()); + } +} + diff --git a/src/main/java/org/sopt/lequuServer/domain/note/dto/request/NoteCreateDto.java b/src/main/java/org/sopt/lequuServer/domain/note/dto/request/NoteCreateDto.java index 903f6fb..cc135e0 100644 --- a/src/main/java/org/sopt/lequuServer/domain/note/dto/request/NoteCreateDto.java +++ b/src/main/java/org/sopt/lequuServer/domain/note/dto/request/NoteCreateDto.java @@ -17,7 +17,7 @@ public record NoteCreateDto( String content, @Schema(example = "0") int textColor, - @Schema(example = "0") + @Schema(example = "0 or ~.jpg") String background ) { } 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 4a5ac96..466c9a6 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 @@ -32,6 +32,6 @@ public NoteCreateResponseDto createNote(Long userId, NoteCreateDto noteCreateDto 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/global/exception/enums/SuccessType.java b/src/main/java/org/sopt/lequuServer/global/exception/enums/SuccessType.java index 58cc282..d6fa18d 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 @@ -24,6 +24,8 @@ public enum SuccessType { STICKER_PACK_LIST_SUCCESS(HttpStatus.OK, "스티커팩 목록 조회에 성공했습니다."), GET_SPLASH_SUCCESS(HttpStatus.OK, "스플래시 조회에 성공했습니다."), GET_HOME_SUCCESS(HttpStatus.OK, "홈 화면 조회에 성공했습니다."), + GET_MYPAGE_BOOK_SUCCESS(HttpStatus.OK, "마이페이지의 유저 닉네임과 내 레큐북 조회에 성공했습니다."), + GET_MYPAGE_NOTE_SUCCESS(HttpStatus.OK, "마이페이지 내 레큐노트 조회에 성공했습니다."), /** * 201 CREATED