Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FEAT] 마이페이지 조회 API 구현 #43

Merged
merged 11 commits into from
Jan 11, 2024
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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")
Expand Down Expand Up @@ -66,4 +69,16 @@ public ApiResponse<MemberNicknameResponseDto> setMemberNickname(Principal princi

return ApiResponse.success(SET_MEMBER_NICKNAME_SUCCESS, memberService.setMemberNickname(JwtProvider.getUserFromPrincial(principal), request));
}

@GetMapping("/mypage/book")
@ResponseStatus(HttpStatus.OK)
public ApiResponse<MypageBookResponseDto> getMypageBook(Principal principal) {
return ApiResponse.success(GET_MYPAGE_BOOK_SUCCESS, memberService.getMypageBook(JwtProvider.getUserFromPrincial(principal)));
}

@GetMapping("/mypage/note")
@ResponseStatus(HttpStatus.OK)
public ApiResponse<List<MypageNoteResponseDto>> getMypageNote(Principal principal) {
return ApiResponse.success(GET_MYPAGE_NOTE_SUCCESS, memberService.getMypageNote(JwtProvider.getUserFromPrincial(principal)));
}
}
Original file line number Diff line number Diff line change
@@ -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()
);
}
}
Original file line number Diff line number Diff line change
@@ -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<MypageBookListResponseDto> mypageBookList
) {
public static MypageBookResponseDto of(String nickName, List<Book> books) {
List<MypageBookListResponseDto> mypageBookList = books.stream()
.map(MypageBookListResponseDto::of)
.toList();

return new MypageBookResponseDto(nickName, mypageBookList);
}
}
Original file line number Diff line number Diff line change
@@ -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), "");
}
}
Original file line number Diff line number Diff line change
@@ -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<Member, Long> {

boolean existsBySocialPlatformAndSocialId(SocialPlatform socialPlatform, String socialId);
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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
Expand Down Expand Up @@ -110,4 +117,32 @@ public MemberNicknameResponseDto setMemberNickname(Long memberId, MemberNickname

return MemberNicknameResponseDto.of(memberId);
}
}

public MypageBookResponseDto getMypageBook(Long memberId) {

// 회원 id 찾기
Member member = memberRepository.findByIdOrThrow(memberId);

// 회원 id로 memberNickname 조회
String nickname = member.getNickname();

// 회원이 소유한 Book 리스트 가져오기
List<Book> books = member.getBooks();

return MypageBookResponseDto.of(nickname, books);
}

public List<MypageNoteResponseDto> getMypageNote(Long memberId) {

// 회원 id 찾기
Member member = memberRepository.findByIdOrThrow(memberId);

// 회원이 소유한 Note 리스트 가져오기
List<Note> notes = member.getNotes();

return notes.stream()
.map(MypageNoteResponseDto::of)
.collect(Collectors.toList());
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public record NoteCreateDto(
String content,
@Schema(example = "0")
int textColor,
@Schema(example = "0")
@Schema(example = "0 or ~.jpg")
String background
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading