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

Refactor: 롤링페이퍼 발신자 정보 추가 #105

Merged
merged 1 commit into from
Oct 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import slvtwn.khu.toyouserver.common.response.ResponseType;
import slvtwn.khu.toyouserver.domain.Member;
import slvtwn.khu.toyouserver.domain.RollingPaper;
import slvtwn.khu.toyouserver.domain.SenderSnapshot;
import slvtwn.khu.toyouserver.domain.Sticker;
import slvtwn.khu.toyouserver.domain.StickerSide;
import slvtwn.khu.toyouserver.domain.User;
Expand Down Expand Up @@ -47,16 +48,23 @@ public void generateCoverImageAndUpdateRollingPaper(CoverRequest request, Long r
// rollingPaper.updateCoverImage(coverImageUrl);
}

public void sendRollingPaper(Long recipientUserId, RollingPaperRequest request) {
Member member = memberRepository.findByUserIdAndGroupId(recipientUserId, request.groupId()).orElseThrow(
() -> new ToyouException(ResponseType.BAD_REQUEST));
RollingPaper rollingPaper = new RollingPaper(request.coverImageUrl(), request.title(),
request.content(), request.themeId(), member);
public void sendRollingPaper(Long requestUserId, Long recipientUserId, RollingPaperRequest request) {
RollingPaper rollingPaper = generateRollingPaper(requestUserId, recipientUserId, request);
List<Sticker> stickers = parseStickers(request, rollingPaper);
rollingPaperRepository.save(rollingPaper);
stickerRepository.saveAll(stickers);
}

private RollingPaper generateRollingPaper(Long requestUserId, Long recipientUserId, RollingPaperRequest request) {
Member member = memberRepository.findByUserIdAndGroupId(recipientUserId, request.groupId()).orElseThrow(
() -> new ToyouException(ResponseType.BAD_REQUEST));
User requestUser = userRepository.findById(requestUserId)
.orElseThrow(() -> new ToyouException(ResponseType.BAD_REQUEST));

return new RollingPaper(request.coverImageUrl(), request.title(), request.content(), request.themeId(),
member, new SenderSnapshot(requestUser.getName(), requestUser.getProfilePicture()));
}

public RollingPaperResponse findById(Long userId, Long rollingPaperId) {
User user = userRepository.findById(userId)
.orElseThrow(() -> new ToyouException(ResponseType.USER_NOT_FOUND));
Expand Down
10 changes: 9 additions & 1 deletion src/main/java/slvtwn/khu/toyouserver/domain/RollingPaper.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package slvtwn.khu.toyouserver.domain;

import jakarta.persistence.Embedded;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
Expand Down Expand Up @@ -43,12 +46,17 @@ public class RollingPaper extends BaseTimeEntity {
@JoinColumn(name = "groups_id")
private Group group;

public RollingPaper(String coverImageUrl, String title, String content, Long themeId, Member member) {
@Embedded
private SenderSnapshot senderSnapshot;

public RollingPaper(String coverImageUrl, String title, String content, Long themeId,
Member member, SenderSnapshot senderSnapshot) {
this.coverImageUrl = coverImageUrl;
this.title = title;
this.content = content;
this.themeId = themeId;
this.member = member;
this.senderSnapshot = senderSnapshot;
}

public void updateCoverImage(String coverImageUrl) {
Expand Down
20 changes: 20 additions & 0 deletions src/main/java/slvtwn/khu/toyouserver/domain/SenderSnapshot.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package slvtwn.khu.toyouserver.domain;

import jakarta.persistence.Embeddable;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;

@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Embeddable
@Getter
public class SenderSnapshot {

private String name;
private String profileImageUrl;

public SenderSnapshot(String name, String profileImageUrl) {
this.name = name;
this.profileImageUrl = profileImageUrl;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,15 @@
import slvtwn.khu.toyouserver.domain.RollingPaper;

public record RollingPaperResponse(Long id, String coverImageUrl, String title, String content, Long themeId,
List<StickerResponse> stickers) {
List<StickerResponse> stickers, String name, String profileImageUrl) {

public static RollingPaperResponse from(RollingPaper rollingPaper) {
List<StickerResponse> stickerResponses = rollingPaper.getStickers().stream()
.map(StickerResponse::from)
.toList();

return new RollingPaperResponse(rollingPaper.getId(), rollingPaper.getCoverImageUrl(), rollingPaper.getTitle(),
rollingPaper.getContent(), rollingPaper.getThemeId(), stickerResponses);
rollingPaper.getContent(), rollingPaper.getThemeId(), stickerResponses,
rollingPaper.getSenderSnapshot().getName(), rollingPaper.getSenderSnapshot().getProfileImageUrl());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,10 @@ public ToyouResponse<RollingPaperPagedResponse> findReceivedRollingPapers(@UserA
}

@PostMapping("/users/{userId}/rollingpapers")
public ToyouResponse<Void> sendRollingPaper(@UserAuthentication Long RequestUserId,
public ToyouResponse<Void> sendRollingPaper(@UserAuthentication Long requestUserId,
@PathVariable(name = "userId") Long recipientUserId,
@RequestBody RollingPaperRequest rollingPaperRequest) {
rollingPaperService.sendRollingPaper(recipientUserId, rollingPaperRequest);
rollingPaperService.sendRollingPaper(requestUserId, recipientUserId, rollingPaperRequest);
return ToyouResponse.noContent();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import slvtwn.khu.toyouserver.domain.Group;
import slvtwn.khu.toyouserver.domain.Member;
import slvtwn.khu.toyouserver.domain.RollingPaper;
import slvtwn.khu.toyouserver.domain.SenderSnapshot;
import slvtwn.khu.toyouserver.domain.User;
import slvtwn.khu.toyouserver.dto.RollingPaperPagedResponse;
import slvtwn.khu.toyouserver.dto.RollingPaperRequest;
Expand Down Expand Up @@ -82,17 +83,19 @@ class RollingPaperServiceTest {
"title", "content", 1L, List.of());

// then
assertThatCode(() -> rollingPaperService.sendRollingPaper(user2.getId(), request))
assertThatCode(() -> rollingPaperService.sendRollingPaper(user1.getId(), user2.getId(), request))
.doesNotThrowAnyException();
}

@Test
void 롤링페이퍼를_조회할_수_있다() {
// given
User sender = new User("sender", LocalDate.now(), "introduction", "profile_picture", null);
Group group = new Group("name");
User user = new User("name", LocalDate.now(), "introduction", "profile_picture", null);
Member member = new Member(user, group);
RollingPaper rollingPaper = new RollingPaper(null, "title", "content", 1L, member);
RollingPaper rollingPaper = new RollingPaper(null, "title", "content", 1L,
member, new SenderSnapshot(sender.getName(), sender.getProfilePicture()));

entityManager.persist(user);
entityManager.persist(group);
Expand All @@ -110,10 +113,12 @@ class RollingPaperServiceTest {
@Test
void 사용자는_자신이_수신한_롤링페이퍼를_조회할_수_있다() {
// given
User sender = new User("sender", LocalDate.now(), "introduction", "profile_picture", null);
Group group = new Group("name");
User user = new User("name", LocalDate.now(), "introduction", "profile_picture", null);
Member member = new Member(user, group);
RollingPaper rollingPaper = new RollingPaper(null, "title", "content", 1L, member);
RollingPaper rollingPaper = new RollingPaper(null, "title", "content", 1L,
member, new SenderSnapshot(sender.getName(), sender.getProfilePicture()));

entityManager.persist(user);
entityManager.persist(group);
Expand All @@ -132,13 +137,16 @@ class RollingPaperServiceTest {
@Test
void 수신한_롤링페이퍼_조회는_그룹_식별자가_null인_경우_유저가_수신한_모든_롤링페이퍼를_반환한다() {
// given
User sender = new User("sender", LocalDate.now(), "introduction", "profile_picture", null);
User user = new User("name", LocalDate.now(), "introduction", "profile_picture", null);
Group group1 = new Group("group1");
Group group2 = new Group("group2");
Member member1 = new Member(user, group1);
Member member2 = new Member(user, group2);
RollingPaper rollingPaper = new RollingPaper(null, "title", "rollingPaper", 1L, member1);
RollingPaper anotherRollingPaper = new RollingPaper(null, "title", "anotherRollingPaper", 1L, member2);
RollingPaper rollingPaper = new RollingPaper(null, "title", "rollingPaper", 1L,
member1, new SenderSnapshot(sender.getName(), sender.getProfilePicture()));
RollingPaper anotherRollingPaper = new RollingPaper(null, "title", "anotherRollingPaper", 1L,
member2, new SenderSnapshot(sender.getName(), sender.getProfilePicture()));

entityManager.persist(user);
entityManager.persist(group1);
Expand All @@ -165,13 +173,16 @@ class RollingPaperServiceTest {
@Test
void 수신한_롤링페이퍼_조회는_그룹_식별자가_존재할_경우_해당_그룹의_롤링페이퍼만_반환한다() {
// given
User sender = new User("sender", LocalDate.now(), "introduction", "profile_picture", null);
User user = new User("name", LocalDate.now(), "introduction", "profile_picture", null);
Group group1 = new Group("group1");
Group group2 = new Group("group2");
Member member1 = new Member(user, group1);
Member member2 = new Member(user, group2);
RollingPaper rollingPaper = new RollingPaper(null, "title", "rollingPaper", 1L, member1);
RollingPaper anotherRollingPaper = new RollingPaper(null, "title", "anotherRollingPaper", 1L, member2);
RollingPaper rollingPaper = new RollingPaper(null, "title", "rollingPaper", 1L,
member1, new SenderSnapshot(sender.getName(), sender.getProfilePicture()));
RollingPaper anotherRollingPaper = new RollingPaper(null, "title", "anotherRollingPaper", 1L,
member2, new SenderSnapshot(sender.getName(), sender.getProfilePicture()));

entityManager.persist(user);
entityManager.persist(group1);
Expand All @@ -195,15 +206,19 @@ class RollingPaperServiceTest {
@Test
void 수신한_롤링페이퍼_조회는_다른_그룹의_커서를_사용해도_해당_그룹의_편지만_조회된다() {
// given
User sender = new User("sender", LocalDate.now(), "introduction", "profile_picture", null);
User user = new User("name", LocalDate.now(), "introduction", "profile_picture", null);
Group group1 = new Group("group1");
Group group2 = new Group("group2");
Member member1 = new Member(user, group1);
Member member2 = new Member(user, group2);

RollingPaper rollingPaper1 = new RollingPaper(null, "title1", "rollingPaper1", 1L, member1);
RollingPaper rollingPaper2 = new RollingPaper(null, "title2", "rollingPaper2", 1L, member1);
RollingPaper rollingPaper3 = new RollingPaper(null, "title3", "rollingPaper3", 1L, member2);
RollingPaper rollingPaper1 = new RollingPaper(null, "title1", "rollingPaper1",
1L, member1, new SenderSnapshot(sender.getName(), sender.getProfilePicture()));
RollingPaper rollingPaper2 = new RollingPaper(null, "title2", "rollingPaper2",
1L, member1, new SenderSnapshot(sender.getName(), sender.getProfilePicture()));
RollingPaper rollingPaper3 = new RollingPaper(null, "title3", "rollingPaper3",
1L, member2, new SenderSnapshot(sender.getName(), sender.getProfilePicture()));

entityManager.persist(user);
entityManager.persist(group1);
Expand Down Expand Up @@ -233,13 +248,17 @@ class RollingPaperServiceTest {
@Test
void 수신한_롤링페이퍼_조회는_생성된_시간이_최신인_롤링페이퍼부터_조회된다() {
// given
User sender = new User("sender", LocalDate.now(), "introduction", "profile_picture", null);
User user = new User("name", LocalDate.now(), "introduction", "profile_picture", null);
Group group = new Group("group");
Member member = new Member(user, group);

RollingPaper rollingPaper1 = new RollingPaper(null, "title1", "rollingPaper1", 1L, member);
RollingPaper rollingPaper2 = new RollingPaper(null, "title2", "rollingPaper2", 1L, member);
RollingPaper rollingPaper3 = new RollingPaper(null, "title3", "rollingPaper3", 1L, member);
RollingPaper rollingPaper1 = new RollingPaper(null, "title1", "rollingPaper1",
1L, member, new SenderSnapshot(sender.getName(), sender.getProfilePicture()));
RollingPaper rollingPaper2 = new RollingPaper(null, "title2", "rollingPaper2",
1L, member, new SenderSnapshot(sender.getName(), sender.getProfilePicture()));
RollingPaper rollingPaper3 = new RollingPaper(null, "title3", "rollingPaper3",
1L, member, new SenderSnapshot(sender.getName(), sender.getProfilePicture()));

entityManager.persist(user);
entityManager.persist(group);
Expand Down