Skip to content

Commit 82fba5f

Browse files
authored
Merge pull request #38 from kookmin-sw/BE_Feature/#32-member
Be feature/#32 member
2 parents 538fef0 + 669feeb commit 82fba5f

File tree

27 files changed

+439
-41
lines changed

27 files changed

+439
-41
lines changed
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package com.project.capstone.auth.controller.dto;
22

3+
import com.project.capstone.member.domain.Gender;
4+
35
public record SignupRequest(
46
String email,
57
String name,
68
int age,
7-
String gender
9+
Gender gender
810
) {
911
}

backend/src/main/java/com/project/capstone/book/domain/Book.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package com.project.capstone.book.domain;
22

3+
import com.fasterxml.jackson.annotation.JsonManagedReference;
34
import com.project.capstone.club.domain.Club;
45
import com.project.capstone.content.domain.Content;
6+
import com.project.capstone.member.controller.dto.AddMyBookRequest;
7+
import com.project.capstone.mybook.domain.MyBook;
58
import com.project.capstone.quiz.domain.Quiz;
69
import jakarta.persistence.*;
710
import lombok.AllArgsConstructor;
@@ -21,6 +24,7 @@ public class Book {
2124
@Id
2225
@GeneratedValue(strategy = GenerationType.IDENTITY)
2326
private Long id;
27+
private String isbn;
2428
private String title;
2529
@Column(name = "category_1d")
2630
private String category1d;
@@ -30,14 +34,27 @@ public class Book {
3034
private String category3d;
3135
private String author;
3236
private String publisher;
33-
private String publish_date;
37+
@Column(name = "publish_date")
38+
private String publishDate;
3439

40+
@JsonManagedReference
3541
@OneToMany(mappedBy = "book")
3642
private List<Club> clubs = new ArrayList<>();
3743

44+
@JsonManagedReference
3845
@OneToMany(mappedBy = "book")
3946
private List<Content> contents = new ArrayList<>();
4047

48+
@JsonManagedReference
4149
@OneToMany(mappedBy = "book")
4250
private List<Quiz> quizzes = new ArrayList<>();
51+
52+
@JsonManagedReference
53+
@OneToMany(mappedBy = "book")
54+
private List<MyBook> membersAddThisBook = new ArrayList<>();
55+
56+
public Book(AddMyBookRequest request) {
57+
this(null, request.isbn(), request.title(), request.category1d(), request.category2d(), request.category3d(),
58+
request.author(), request.publisher(), request.publishDate(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>());
59+
}
4360
}

backend/src/main/java/com/project/capstone/book/domain/BookRepository.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@
66

77
public interface BookRepository extends JpaRepository<Book, Long> {
88
Optional<Book> findBookById(Long id);
9+
Optional<Book> findBookByIsbn(String isbn);
910
}

backend/src/main/java/com/project/capstone/club/controller/dto/ClubResponse.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
import com.fasterxml.jackson.annotation.JsonIgnore;
44
import com.project.capstone.club.domain.Club;
55
import com.project.capstone.club.domain.PublicStatus;
6+
import com.project.capstone.post.controller.dto.PostResponse;
67
import com.project.capstone.post.domain.Post;
78

89
import java.time.LocalDateTime;
10+
import java.util.ArrayList;
911
import java.util.List;
1012

1113
public record ClubResponse (
@@ -16,10 +18,19 @@ public record ClubResponse (
1618
LocalDateTime createdAt,
1719
int maximum,
1820
PublicStatus publicstatus,
19-
List<Post> posts
21+
List<PostResponse> posts
2022

2123
) {
2224
public ClubResponse(Club club) {
23-
this(club.getId(), club.getBook() == null ? null : club.getBook().getId(), club.getTopic(), club.getName(), club.getCreatedAt(), club.getMaximum(), club.getPublicStatus(), club.getPosts());
25+
this(club.getId(), club.getBook() == null ? null : club.getBook().getId(), club.getTopic(), club.getName(), club.getCreatedAt(), club.getMaximum(),
26+
club.getPublicStatus(), createPostResponseList(club.getPosts()));
27+
}
28+
29+
private static List<PostResponse> createPostResponseList(List<Post> postList) {
30+
List<PostResponse> postResponseList = new ArrayList<>();
31+
for (Post post : postList) {
32+
postResponseList.add(new PostResponse(post));
33+
}
34+
return postResponseList;
2435
}
2536
}

backend/src/main/java/com/project/capstone/club/domain/Club.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,13 @@
33
import com.fasterxml.jackson.annotation.JsonIgnore;
44
import com.fasterxml.jackson.annotation.JsonManagedReference;
55
import com.project.capstone.book.domain.Book;
6+
import com.project.capstone.club.controller.dto.ClubCreateRequest;
67
import com.project.capstone.memberclub.domain.MemberClub;
78
import com.project.capstone.content.domain.Content;
89
import com.project.capstone.post.domain.Post;
910
import com.project.capstone.quiz.domain.Quiz;
1011
import jakarta.persistence.*;
11-
import lombok.AllArgsConstructor;
12-
import lombok.Builder;
13-
import lombok.Getter;
14-
import lombok.NoArgsConstructor;
12+
import lombok.*;
1513
import org.springframework.data.annotation.CreatedDate;
1614
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
1715

@@ -26,6 +24,7 @@
2624
@AllArgsConstructor
2725
@Getter
2826
@Builder
27+
@ToString
2928
public class Club {
3029
@Id
3130
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -62,4 +61,9 @@ public class Club {
6261
@ManyToOne
6362
private Book book;
6463

64+
public Club(ClubCreateRequest request, UUID memberId) {
65+
this(null, memberId, request.topic(), request.name(), null, request.maximum(), request.publicStatus(), request.password(),
66+
new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), null);
67+
}
68+
6569
}

backend/src/main/java/com/project/capstone/club/service/ClubService.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,7 @@ public List<ClubResponse> searchByName(String name) {
5353

5454
@Transactional
5555
public void createClub(ClubCreateRequest request, String memberId) {
56-
Club savedClub = clubRepository.save(Club.builder()
57-
.managerId(UUID.fromString(memberId))
58-
.topic(request.topic())
59-
.name(request.name())
60-
.maximum(request.maximum())
61-
.publicStatus(request.publicStatus())
62-
.password(request.password())
63-
.build());
64-
56+
Club savedClub = clubRepository.save(new Club(request, UUID.fromString(memberId)));
6557
join(memberId, savedClub.getId());
6658
}
6759

@@ -75,7 +67,9 @@ public void join(String memberId, Long clubId) {
7567
if (memberClubRepository.findMemberClubByMember_IdAndClub_Id(UUID.fromString(memberId), clubId).isPresent()) {
7668
throw new MemberClubException(ALREADY_JOIN);
7769
}
78-
memberClubRepository.save(new MemberClub(null, member, club));
70+
MemberClub saved = memberClubRepository.save(new MemberClub(null, member, club));
71+
member.getClubs().add(saved);
72+
club.getMembers().add(saved);
7973
}
8074

8175
@Transactional

backend/src/main/java/com/project/capstone/comment/controller/dto/CommentResponse.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@
88
public record CommentResponse(
99
Long id,
1010
Long postId,
11-
UUID memberId,
11+
String writer,
1212
String body,
1313
LocalDateTime createdAt
1414
) {
1515
public CommentResponse(Comment comment) {
16-
this(comment.getId(), comment.getPost().getId(), comment.getMember().getId(), comment.getBody(), comment.getCreatedAt());
16+
this(comment.getId(), comment.getPost().getId(), comment.getMember().getName(), comment.getBody(), comment.getCreatedAt());
1717
}
1818
}

backend/src/main/java/com/project/capstone/content/controller/dto/ContentResponse.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
public record ContentResponse(
99
Long id,
10-
UUID memberId,
10+
String writer,
1111
Long bookId,
1212
Long clubId,
1313
ContentType type,
@@ -16,7 +16,7 @@ public record ContentResponse(
1616
int likes
1717
) {
1818
public ContentResponse(Content content) {
19-
this(content.getId(), content.getMember().getId(), content.getBook().getId(),
19+
this(content.getId(), content.getMember().getName(), content.getBook().getId(),
2020
content.getClub() == null ? null : content.getClub().getId(), content.getType(), content.getTitle(), content.getBody(), content.getLikes());
2121
}
2222
}
Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,42 @@
11
package com.project.capstone.member.controller;
22

3+
import com.project.capstone.auth.domain.PrincipalDetails;
4+
import com.project.capstone.member.controller.dto.AddMyBookRequest;
5+
import com.project.capstone.member.controller.dto.MemberResponse;
6+
import com.project.capstone.member.controller.dto.MyBookResponse;
7+
import com.project.capstone.member.service.MemberService;
38
import lombok.RequiredArgsConstructor;
49
import org.springframework.http.ResponseEntity;
5-
import org.springframework.web.bind.annotation.GetMapping;
6-
import org.springframework.web.bind.annotation.RequestMapping;
7-
import org.springframework.web.bind.annotation.RestController;
10+
import org.springframework.security.core.annotation.AuthenticationPrincipal;
11+
import org.springframework.web.bind.annotation.*;
12+
13+
import java.util.List;
14+
import java.util.UUID;
815

916
@RestController
1017
@RequiredArgsConstructor
1118
@RequestMapping("/member")
1219
public class MemberController {
13-
@GetMapping("/test")
14-
public ResponseEntity<?> test() {
15-
return ResponseEntity.ok("ok");
20+
21+
private final MemberService memberService;
22+
23+
@GetMapping("/{id}")
24+
public ResponseEntity<MemberResponse> getMember(@PathVariable UUID id) {
25+
MemberResponse memberResponse = memberService.getMember(id);
26+
return ResponseEntity.ok().body(memberResponse);
27+
}
28+
29+
// 나만의 서재 조회
30+
@GetMapping("/my-book")
31+
public ResponseEntity<List<MyBookResponse>> getMyBook(@AuthenticationPrincipal PrincipalDetails details) {
32+
List<MyBookResponse> myBooks = memberService.getMyBooks(details.getUserId());
33+
return ResponseEntity.ok().body(myBooks);
34+
}
35+
36+
// 나만의 서재 추가
37+
@PostMapping("/my-book/add")
38+
public ResponseEntity<?> addMyBook(@AuthenticationPrincipal PrincipalDetails details, @RequestBody AddMyBookRequest request) {
39+
memberService.addMyBook(details.getUserId(), request);
40+
return ResponseEntity.ok().body("추가 완료");
1641
}
1742
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.project.capstone.member.controller.dto;
2+
3+
import java.time.LocalDateTime;
4+
5+
public record AddMyBookRequest (
6+
String isbn,
7+
String title,
8+
String category1d,
9+
String category2d,
10+
String category3d,
11+
String author,
12+
String publisher,
13+
String publishDate
14+
) {
15+
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package com.project.capstone.member.controller.dto;
2+
3+
import com.project.capstone.club.domain.Club;
4+
import com.project.capstone.comment.controller.dto.CommentResponse;
5+
import com.project.capstone.comment.domain.Comment;
6+
import com.project.capstone.content.controller.dto.ContentResponse;
7+
import com.project.capstone.content.domain.Content;
8+
import com.project.capstone.member.domain.Gender;
9+
import com.project.capstone.member.domain.Member;
10+
import com.project.capstone.memberclub.domain.MemberClub;
11+
import com.project.capstone.mybook.domain.MyBook;
12+
import com.project.capstone.post.controller.dto.PostResponse;
13+
import com.project.capstone.post.controller.dto.SimplePostResponse;
14+
import com.project.capstone.post.domain.Post;
15+
import com.project.capstone.quiz.controller.dto.QuizResponse;
16+
import com.project.capstone.quiz.domain.Quiz;
17+
18+
import java.time.LocalDateTime;
19+
import java.util.ArrayList;
20+
import java.util.List;
21+
import java.util.UUID;
22+
23+
public record MemberResponse (
24+
UUID id,
25+
String email,
26+
String name,
27+
int age,
28+
Gender gender,
29+
LocalDateTime createdAt,
30+
List<MemberClub> clubsList,
31+
List<SimplePostResponse> postList,
32+
List<CommentResponse> commentList,
33+
List<ContentResponse> contentList,
34+
List<QuizResponse> quizList,
35+
List<MyBookResponse> myBookList
36+
) {
37+
public MemberResponse(Member member) {
38+
this(member.getId(), member.getEmail(), member.getName(), member.getAge(), member.getGender(), member.getCreatedAt(),
39+
member.getClubs(), createSimplePostResponseList(member.getPosts()), createCommentResponseList(member.getComments()),
40+
createContentResponseList(member.getContents()), createQuizResponseList(member.getQuizzes()), createMyBookResponseList(member.getMyBooks()));
41+
}
42+
43+
private static List<SimplePostResponse> createSimplePostResponseList(List<Post> postList) {
44+
List<SimplePostResponse> simplePostResponses = new ArrayList<>();
45+
for (Post post: postList) {
46+
simplePostResponses.add(new SimplePostResponse(post));
47+
}
48+
return simplePostResponses;
49+
}
50+
51+
private static List<CommentResponse> createCommentResponseList(List<Comment> commentList) {
52+
List<CommentResponse> commentResponseList = new ArrayList<>();
53+
for (Comment comment: commentList) {
54+
commentResponseList.add(new CommentResponse(comment));
55+
}
56+
return commentResponseList;
57+
}
58+
59+
private static List<ContentResponse> createContentResponseList(List<Content> contentList) {
60+
List<ContentResponse> contentResponseList = new ArrayList<>();
61+
for (Content content : contentList) {
62+
contentResponseList.add(new ContentResponse(content));
63+
}
64+
return contentResponseList;
65+
}
66+
private static List<QuizResponse> createQuizResponseList(List<Quiz> quizList) {
67+
List<QuizResponse> quizResponseList = new ArrayList<>();
68+
for (Quiz quiz : quizList) {
69+
quizResponseList.add(new QuizResponse(quiz));
70+
}
71+
return quizResponseList;
72+
}
73+
74+
private static List<MyBookResponse> createMyBookResponseList(List<MyBook> myBookList) {
75+
List<MyBookResponse> myBookResponseList = new ArrayList<>();
76+
for (MyBook myBook : myBookList) {
77+
myBookResponseList.add(new MyBookResponse(myBook));
78+
}
79+
return myBookResponseList;
80+
}
81+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.project.capstone.member.controller.dto;
2+
3+
import com.project.capstone.mybook.domain.MyBook;
4+
5+
public record MyBookResponse(
6+
Long id,
7+
String isbn,
8+
String title,
9+
String author,
10+
String publisher
11+
) {
12+
public MyBookResponse(MyBook myBook) {
13+
this(myBook.getId(), myBook.getBook().getIsbn(), myBook.getBook().getTitle(), myBook.getBook().getAuthor(), myBook.getBook().getPublisher());
14+
}
15+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.project.capstone.member.domain;
2+
3+
import com.fasterxml.jackson.annotation.JsonCreator;
4+
import com.project.capstone.quiz.domain.QuizType;
5+
import lombok.AllArgsConstructor;
6+
import lombok.Getter;
7+
8+
@AllArgsConstructor
9+
@Getter
10+
public enum Gender {
11+
MALE("남자"),
12+
FEMALE("여자")
13+
;
14+
private final String type;
15+
16+
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
17+
public static Gender from(String type) {
18+
for (Gender gender: Gender.values()) {
19+
if (gender.getType().equals(type)) {
20+
return gender;
21+
}
22+
}
23+
throw new RuntimeException("잘못된 성별 입니다.");
24+
}
25+
}

0 commit comments

Comments
 (0)