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

[OING-193] feat: 회원 리얼이모지 familyId 컬럼 추가 및 로직 수정 #152

Merged
merged 7 commits into from
Feb 9, 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
@@ -0,0 +1,3 @@
ALTER TABLE `member_real_emoji` ADD COLUMN (`family_id` CHAR(26) NOT NULL DEFAULT '0' COMMENT 'ULID');
UPDATE member_real_emoji JOIN member ON member_real_emoji.member_id = member.member_id
SET member_real_emoji.family_id = member.family_id;
Original file line number Diff line number Diff line change
Expand Up @@ -56,15 +56,15 @@ public class MemberPostRealEmojiApiTest {

@BeforeEach
void setUp() {
memberRepository.save(new Member(TEST_MEMBER_ID, "testUser1", LocalDate.now(), "",
memberRepository.save(new Member(TEST_MEMBER_ID, TEST_FAMILY_ID, LocalDate.now(), "",
"", "",
LocalDateTime.now()));
TEST_MEMBER_TOKEN = tokenGenerator.generateTokenPair(TEST_MEMBER_ID).accessToken();

memberPostRepository.save(new MemberPost(TEST_POST_ID, TEST_MEMBER_ID, TEST_FAMILY_ID, "img", "img",
"content"));

memberRealEmojiRepository.save(new MemberRealEmoji(TEST_REAL_EMOJI_ID, TEST_MEMBER_ID, Emoji.EMOJI_1,
memberRealEmojiRepository.save(new MemberRealEmoji(TEST_REAL_EMOJI_ID, TEST_MEMBER_ID, TEST_FAMILY_ID, Emoji.EMOJI_1,
"https://test.com/bucket/real-emoji.jpg", "bucket/real-emoji.jpg"));

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ public class MemberRealEmojiApiTest {
private ObjectMapper objectMapper;

private String TEST_MEMBER_ID = "01HGW2N7EHJVJ4CJ999RRS2E97";
private String TEST_FAMILY_ID = "01HGW2N7EHJVJ4CJ999RRS2E44";
private String TEST_MEMBER_REAL_EMOJI_ID = "01HGW2N7EHJVJ4CJ999RRS2A97";
private String TEST_MEMBER_TOKEN;

Expand All @@ -55,7 +56,7 @@ void setUp() {
memberRepository.save(
new Member(
TEST_MEMBER_ID,
"testUser1",
TEST_FAMILY_ID,
LocalDate.now(),
"", "", "",
LocalDateTime.now()
Expand Down Expand Up @@ -116,6 +117,7 @@ void setUp() {
new MemberRealEmoji(
TEST_MEMBER_REAL_EMOJI_ID,
TEST_MEMBER_ID,
TEST_FAMILY_ID,
Emoji.EMOJI_1,
"https://test.com/bucket/images/defaultEmoji.jpg",
"images/defaultEmoji.jpg"
Expand Down Expand Up @@ -144,6 +146,7 @@ void setUp() {
new MemberRealEmoji(
TEST_MEMBER_REAL_EMOJI_ID,
TEST_MEMBER_ID,
TEST_FAMILY_ID,
Emoji.EMOJI_1,
realEmojiImageUrl,
"images/defaultEmoji.jpg"
Expand Down
4 changes: 0 additions & 4 deletions member/src/main/java/com/oing/domain/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,6 @@ public class Member extends DeletableBaseAuditEntity {
private LocalDateTime familyJoinAt;


public void setProfileImgKey(String profileImgKey) {
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

사용하지 않는 메서드라 삭제했습니다.

this.profileImgKey = profileImgKey;
}


public void updateProfileImg(String profileImgUrl, String profileImgKey) {
this.profileImgUrl = profileImgUrl;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,13 @@ public class MemberPostRealEmojiController implements MemberPostRealEmojiApi {
*/
@Transactional
@Override
public PostRealEmojiResponse createPostRealEmoji(String postId, PostRealEmojiRequest request) {
public PostRealEmojiResponse createPostRealEmoji(String postId, String familyId, PostRealEmojiRequest request) {
String memberId = authenticationHolder.getUserId();
MemberPost post = memberPostService.getMemberPostById(postId);
if (!memberBridge.isInSameFamily(memberId, post.getMemberId()))
throw new AuthorizationFailedException();

MemberRealEmoji realEmoji = memberRealEmojiService.getMemberRealEmojiById(request.realEmojiId());
MemberRealEmoji realEmoji = memberRealEmojiService.getMemberRealEmojiByIdAndFamilyId(request.realEmojiId(), familyId);
validatePostRealEmojiForAddition(post, memberId, realEmoji);
MemberPostRealEmoji postRealEmoji = new MemberPostRealEmoji(identityGenerator.generateIdentity(), realEmoji,
post, memberId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,40 +42,40 @@ public PreSignedUrlResponse requestPresignedUrl(String memberId, PreSignedUrlReq

@Transactional
@Override
public RealEmojiResponse createMemberRealEmoji(String memberId, CreateMyRealEmojiRequest request) {
public RealEmojiResponse createMemberRealEmoji(String memberId, String familyId, CreateMyRealEmojiRequest request) {
validateMemberId(memberId);
String emojiId = identityGenerator.generateIdentity();
String emojiImgKey = preSignedUrlGenerator.extractImageKey(request.imageUrl());
Emoji emoji = Emoji.fromString(request.type());
if (isExistsSameRealEmojiType(emoji, memberId)) {
if (isExistsSameRealEmojiType(emoji, memberId, familyId)) {
throw new DuplicateRealEmojiException();
}

MemberRealEmoji realEmoji = new MemberRealEmoji(emojiId, memberId, emoji, request.imageUrl(), emojiImgKey);
MemberRealEmoji realEmoji = new MemberRealEmoji(emojiId, memberId, familyId, emoji, request.imageUrl(), emojiImgKey);
MemberRealEmoji addedRealEmoji = memberRealEmojiService.save(realEmoji);
return RealEmojiResponse.from(addedRealEmoji);
}

private boolean isExistsSameRealEmojiType(Emoji emoji, String memberId) {
return memberRealEmojiService.findRealEmojiByEmojiTypeAndMemberId(emoji, memberId);
private boolean isExistsSameRealEmojiType(Emoji emoji, String memberId, String familyId) {
return memberRealEmojiService.findRealEmojiByEmojiTypeAndMemberIdAndFamilyId(emoji, memberId, familyId);
}

@Transactional
@Override
public RealEmojiResponse changeMemberRealEmoji(String memberId, String realEmojiId, UpdateMyRealEmojiRequest request) {
public RealEmojiResponse changeMemberRealEmoji(String memberId, String familyId, String realEmojiId, UpdateMyRealEmojiRequest request) {
validateMemberId(memberId);
String emojiImgKey = preSignedUrlGenerator.extractImageKey(request.imageUrl());

MemberRealEmoji findEmoji = memberRealEmojiService.findRealEmojiById(realEmojiId);
MemberRealEmoji findEmoji = memberRealEmojiService.getMemberRealEmojiByIdAndFamilyId(realEmojiId, familyId);
findEmoji.updateRealEmoji(request.imageUrl(), emojiImgKey);
return RealEmojiResponse.from(findEmoji);
}

@Override
public RealEmojisResponse getMemberRealEmojis(String memberId) {
public RealEmojisResponse getMemberRealEmojis(String memberId, String familyId) {
validateMemberId(memberId);

List<MemberRealEmoji> realEmojis = memberRealEmojiService.findRealEmojisByMemberId(memberId);
List<MemberRealEmoji> realEmojis = memberRealEmojiService.findRealEmojisByMemberIdAndFamilyId(memberId, familyId);
List<RealEmojiResponse> emojiResponses = realEmojis.stream()
.map(RealEmojiResponse::from)
.collect(Collectors.toList());
Expand Down
3 changes: 3 additions & 0 deletions post/src/main/java/com/oing/domain/MemberRealEmoji.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ public class MemberRealEmoji extends BaseAuditEntity {
@Column(name = "member_id", columnDefinition = "CHAR(26)", nullable = false)
private String memberId;

@Column(name = "family_id", columnDefinition = "CHAR(26)", nullable = false)
private String familyId;

@Enumerated(EnumType.STRING)
@Column(name = "type", nullable = false)
private Emoji type;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@

public interface MemberRealEmojiRepository extends JpaRepository<MemberRealEmoji, String> {

Optional<MemberRealEmoji> findByTypeAndMemberId(Emoji emoji, String memberId);
Optional<MemberRealEmoji> findByIdAndFamilyId(String realEmojiId, String familyId);

List<MemberRealEmoji> findAllByMemberId(String memberId);
Optional<MemberRealEmoji> findByTypeAndMemberIdAndFamilyId(Emoji emoji, String memberId, String familyId);

List<MemberRealEmoji> findAllByMemberIdAndFamilyId(String memberId, String familyId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.oing.dto.request.PostRealEmojiRequest;
import com.oing.dto.response.*;
import com.oing.util.security.FamilyId;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
Expand All @@ -21,6 +22,10 @@ PostRealEmojiResponse createPostRealEmoji(
@PathVariable
String postId,

@Parameter(hidden = true)
@FamilyId
String familyId,

@Valid
@RequestBody
PostRealEmojiRequest request
Expand Down
15 changes: 14 additions & 1 deletion post/src/main/java/com/oing/restapi/MemberRealEmojiApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.oing.dto.response.PreSignedUrlResponse;
import com.oing.dto.response.RealEmojiResponse;
import com.oing.dto.response.RealEmojisResponse;
import com.oing.util.security.FamilyId;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
Expand Down Expand Up @@ -37,6 +38,10 @@ RealEmojiResponse createMemberRealEmoji(
@PathVariable
String memberId,

@Parameter(hidden = true)
@FamilyId
String familyId,

@Valid
@RequestBody
CreateMyRealEmojiRequest request
Expand All @@ -49,6 +54,10 @@ RealEmojiResponse changeMemberRealEmoji(
@PathVariable
String memberId,

@Parameter(hidden = true)
@FamilyId
String familyId,

@Parameter(description = "리얼 이모지 ID", example = "01HGW2N7EHJVJ4CJ999RRS2E97")
@PathVariable
String realEmojiId,
Expand All @@ -63,6 +72,10 @@ RealEmojiResponse changeMemberRealEmoji(
RealEmojisResponse getMemberRealEmojis(
@Parameter(description = "회원 ID", example = "01HGW2N7EHJVJ4CJ999RRS2E97")
@PathVariable
String memberId
String memberId,

@Parameter(hidden = true)
@FamilyId
String familyId
);
}
20 changes: 7 additions & 13 deletions post/src/main/java/com/oing/service/MemberRealEmojiService.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,29 +16,23 @@ public class MemberRealEmojiService {
private final MemberRealEmojiRepository memberRealEmojiRepository;


public MemberRealEmoji getMemberRealEmojiById(String realEmojiId) {
return memberRealEmojiRepository.findById(realEmojiId)
public MemberRealEmoji getMemberRealEmojiByIdAndFamilyId(String realEmojiId, String familyId) {
return memberRealEmojiRepository
.findByIdAndFamilyId(realEmojiId, familyId)
.orElseThrow(RealEmojiNotFoundException::new);
}

public MemberRealEmoji save(MemberRealEmoji emoji) {
return memberRealEmojiRepository.save(emoji);
}

public MemberRealEmoji findRealEmojiById(String realEmojiId) {
return memberRealEmojiRepository
.findById(realEmojiId)
.orElseThrow(RealEmojiNotFoundException::new);
}

public boolean findRealEmojiByEmojiTypeAndMemberId(Emoji emoji, String memberId) {
public boolean findRealEmojiByEmojiTypeAndMemberIdAndFamilyId(Emoji emoji, String memberId, String familyId) {
return memberRealEmojiRepository
.findByTypeAndMemberId(emoji, memberId)
.findByTypeAndMemberIdAndFamilyId(emoji, memberId, familyId)
.isPresent();
}

public List<MemberRealEmoji> findRealEmojisByMemberId(String memberId) {
return memberRealEmojiRepository.findAllByMemberId(memberId);
public List<MemberRealEmoji> findRealEmojisByMemberIdAndFamilyId(String memberId, String familyId) {
return memberRealEmojiRepository.findAllByMemberIdAndFamilyId(memberId, familyId);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -57,22 +57,23 @@ public class MemberPostRealEmojiControllerTest {
void 게시물_리얼이모지_등록_테스트() {
//given
String memberId = "1";
String familyId = "1";
when(authenticationHolder.getUserId()).thenReturn(memberId);
when(memberBridge.isInSameFamily(memberId, memberId)).thenReturn(true);
MemberPost post = new MemberPost("1", memberId, "1", "https://oing.com/post.jpg", "post.jpg",
MemberPost post = new MemberPost("1", memberId, familyId, "https://oing.com/post.jpg", "post.jpg",
"안녕.오잉.");
MemberRealEmoji realEmoji = new MemberRealEmoji("1", memberId,
MemberRealEmoji realEmoji = new MemberRealEmoji("1", memberId, familyId,
Emoji.EMOJI_1, "https://oing.com/emoji.jpg", "emoji.jpg");
when(memberPostService.getMemberPostById(post.getId())).thenReturn(post);
when(memberRealEmojiService.getMemberRealEmojiById(realEmoji.getId())).thenReturn(realEmoji);
when(memberRealEmojiService.getMemberRealEmojiByIdAndFamilyId(realEmoji.getId(), familyId)).thenReturn(realEmoji);

MemberPostRealEmoji postRealEmoji = new MemberPostRealEmoji("1", realEmoji, post, memberId);
when(memberPostRealEmojiService.savePostRealEmoji(any(MemberPostRealEmoji.class))).thenReturn(postRealEmoji);
when(identityGenerator.generateIdentity()).thenReturn(postRealEmoji.getId());
PostRealEmojiRequest request = new PostRealEmojiRequest(realEmoji.getId());

//when
PostRealEmojiResponse response = memberPostRealEmojiController.createPostRealEmoji(post.getId(), request);
PostRealEmojiResponse response = memberPostRealEmojiController.createPostRealEmoji(post.getId(), familyId, request);

//then
assertEquals(post.getId(), response.postId());
Expand All @@ -83,10 +84,11 @@ public class MemberPostRealEmojiControllerTest {
void 권한없는_memberId로_게시물_리얼이모지_등록_예외_테스트() {
// given
String memberId = "1";
String familyId = "1";
when(authenticationHolder.getUserId()).thenReturn(memberId);
MemberPost post = new MemberPost("1", memberId, "1", "https://oing.com/post.jpg", "post.jpg",
MemberPost post = new MemberPost("1", memberId, familyId, "https://oing.com/post.jpg", "post.jpg",
"안녕.오잉.");
MemberRealEmoji realEmoji = new MemberRealEmoji("1", memberId,
MemberRealEmoji realEmoji = new MemberRealEmoji("1", memberId, familyId,
Emoji.EMOJI_1, "https://oing.com/emoji.jpg", "emoji.jpg");
when(memberPostService.getMemberPostById(post.getId())).thenReturn(post);

Expand All @@ -96,38 +98,40 @@ public class MemberPostRealEmojiControllerTest {

// then
assertThrows(AuthorizationFailedException.class,
() -> memberPostRealEmojiController.createPostRealEmoji(post.getId(), request));
() -> memberPostRealEmojiController.createPostRealEmoji(post.getId(), familyId, request));
}

@Test
void 게시물_중복된_리얼이모지_등록_예외_테스트() {
//given
String memberId = "1";
String familyId = "1";
when(authenticationHolder.getUserId()).thenReturn(memberId);
when(memberBridge.isInSameFamily(memberId, memberId)).thenReturn(true);
MemberPost post = new MemberPost("1", memberId, "1", "https://oing.com/post.jpg", "post.jpg",
MemberPost post = new MemberPost("1", memberId, familyId, "https://oing.com/post.jpg", "post.jpg",
"안녕.오잉.");
MemberRealEmoji realEmoji = new MemberRealEmoji("1", memberId, Emoji.EMOJI_1,
MemberRealEmoji realEmoji = new MemberRealEmoji("1", memberId, familyId, Emoji.EMOJI_1,
"https://oing.com/emoji.jpg", "emoji.jpg");
when(memberPostService.getMemberPostById(post.getId())).thenReturn(post);
when(memberRealEmojiService.getMemberRealEmojiById(realEmoji.getId())).thenReturn(realEmoji);
when(memberRealEmojiService.getMemberRealEmojiByIdAndFamilyId(realEmoji.getId(), familyId)).thenReturn(realEmoji);

//when
when(memberPostRealEmojiService.isMemberPostRealEmojiExists(post, memberId, realEmoji)).thenReturn(true);
PostRealEmojiRequest request = new PostRealEmojiRequest(realEmoji.getId());

//then
assertThrows(RealEmojiAlreadyExistsException.class,
() -> memberPostRealEmojiController.createPostRealEmoji(post.getId(), request));
() -> memberPostRealEmojiController.createPostRealEmoji(post.getId(), familyId, request));
}

@Test
void 게시물_리얼이모지_삭제_테스트() {
//given
String memberId = "1";
MemberPost post = new MemberPost("1", memberId, "1", "https://oing.com/post.jpg", "post.jpg",
String familyId = "1";
MemberPost post = new MemberPost("1", memberId, familyId, "https://oing.com/post.jpg", "post.jpg",
"안녕.오잉.");
MemberRealEmoji realEmoji = new MemberRealEmoji("1", memberId,
MemberRealEmoji realEmoji = new MemberRealEmoji("1", memberId, familyId,
Emoji.EMOJI_1, "https://oing.com/emoji.jpg", "emoji.jpg");
when(memberPostService.getMemberPostById(post.getId())).thenReturn(post);

Expand All @@ -142,10 +146,11 @@ public class MemberPostRealEmojiControllerTest {
void 게시물_등록되지_않은_리얼이모지_삭제_예외_테스트() {
//given
String memberId = "1";
String familyId = "1";
when(authenticationHolder.getUserId()).thenReturn(memberId);
MemberPost post = new MemberPost("1", memberId, "1","https://oing.com/post.jpg", "post.jpg",
MemberPost post = new MemberPost("1", memberId, familyId,"https://oing.com/post.jpg", "post.jpg",
"안녕.오잉.");
MemberRealEmoji realEmoji = new MemberRealEmoji("1", memberId,
MemberRealEmoji realEmoji = new MemberRealEmoji("1", memberId, familyId,
Emoji.EMOJI_1, "https://oing.com/emoji.jpg", "emoji.jpg");
when(memberPostService.getMemberPostById(post.getId())).thenReturn(post);

Expand Down
Loading
Loading