From 75ea6e48f84d4357f6317e49d55eb7d6b3bd184f Mon Sep 17 00:00:00 2001 From: yongckim Date: Tue, 5 Mar 2024 19:21:59 +0900 Subject: [PATCH] =?UTF-8?q?:sparkles:=20[STMT-89]=20=EB=8B=B9=EB=8F=84=20-?= =?UTF-8?q?>=20=EB=A0=88=EB=B2=A8=20=EB=B3=80=EA=B2=BD=EC=9C=BC=EB=A1=9C?= =?UTF-8?q?=20=EC=9D=B8=ED=95=9C=20=EC=8A=A4=ED=82=A4=EB=A7=88=20=EA=B5=AC?= =?UTF-8?q?=EC=A1=B0=20=EB=B3=80=EA=B2=BD=20=EB=B0=8F=20=EC=BD=94=EB=93=9C?= =?UTF-8?q?=20=EB=8C=80=EC=9D=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../out/persistence/MemberJpaEntity.java | 12 ++++++++--- .../persistence/MemberPersistenceMapper.java | 11 ++++++++-- .../service/MemberOAuthService.java | 6 +++++- .../stumeet/server/member/domain/Member.java | 2 +- .../server/member/domain/MemberLevel.java | 14 +++++++++++++ .../server/member/domain/MemberRank.java | 19 ++++++++++++++++++ .../migration/V1.2__modify_member_level.sql | 8 ++++++++ .../com/stumeet/server/stub/MemberStub.java | 20 +++++++++++++------ 8 files changed, 79 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/stumeet/server/member/domain/MemberLevel.java create mode 100644 src/main/java/com/stumeet/server/member/domain/MemberRank.java create mode 100644 src/main/resources/db/migration/V1.2__modify_member_level.sql diff --git a/src/main/java/com/stumeet/server/member/adapter/out/persistence/MemberJpaEntity.java b/src/main/java/com/stumeet/server/member/adapter/out/persistence/MemberJpaEntity.java index 2fa9754f..e55fa4c3 100644 --- a/src/main/java/com/stumeet/server/member/adapter/out/persistence/MemberJpaEntity.java +++ b/src/main/java/com/stumeet/server/member/adapter/out/persistence/MemberJpaEntity.java @@ -2,6 +2,7 @@ import com.stumeet.server.common.model.BaseTimeEntity; import com.stumeet.server.member.domain.AuthType; +import com.stumeet.server.member.domain.MemberRank; import com.stumeet.server.member.domain.UserRole; import com.stumeet.server.profession.adapter.out.persistence.ProfessionJpaEntity; import jakarta.persistence.*; @@ -36,9 +37,14 @@ public class MemberJpaEntity extends BaseTimeEntity { @Comment("멤버 이미지 URL") private String image; - @Column(name = "sugar_contents", nullable = false) - @Comment("포도알 당도") - private Double sugarContents; + @Column(name = "rank", length = 50, nullable = false) + @Enumerated(EnumType.STRING) + @Comment("등급") + private MemberRank rank; + + @Column(name = "experience", nullable = false) + @Comment("경험치") + private double experience; @Column(name = "region", length = 50) @Comment("지역") diff --git a/src/main/java/com/stumeet/server/member/adapter/out/persistence/MemberPersistenceMapper.java b/src/main/java/com/stumeet/server/member/adapter/out/persistence/MemberPersistenceMapper.java index 3e6daf95..bfc5899e 100644 --- a/src/main/java/com/stumeet/server/member/adapter/out/persistence/MemberPersistenceMapper.java +++ b/src/main/java/com/stumeet/server/member/adapter/out/persistence/MemberPersistenceMapper.java @@ -1,6 +1,7 @@ package com.stumeet.server.member.adapter.out.persistence; import com.stumeet.server.member.domain.Member; +import com.stumeet.server.member.domain.MemberLevel; import com.stumeet.server.profession.adapter.out.persistence.ProfessionPersistenceMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -16,7 +17,8 @@ public MemberJpaEntity toEntity(Member domain) { .id(domain.getId()) .name(domain.getName()) .image(domain.getImage()) - .sugarContents(domain.getSugarContents()) + .rank(domain.getLevel().getRank()) + .experience(domain.getLevel().getExperience()) .region(domain.getRegion()) .profession(professionPersistenceMapper.toEntity(domain.getProfession())) .authType(domain.getAuthType()) @@ -25,11 +27,16 @@ public MemberJpaEntity toEntity(Member domain) { } public Member toDomain(MemberJpaEntity entity) { + MemberLevel level = MemberLevel.builder() + .rank(entity.getRank()) + .experience(entity.getExperience()) + .build(); + return Member.builder() .id(entity.getId()) .name(entity.getName()) .image(entity.getImage()) - .sugarContents(entity.getSugarContents()) + .level(level) .region(entity.getRegion()) .profession(professionPersistenceMapper.toDomain(entity.getProfession())) .authType(entity.getAuthType()) diff --git a/src/main/java/com/stumeet/server/member/application/service/MemberOAuthService.java b/src/main/java/com/stumeet/server/member/application/service/MemberOAuthService.java index 7e21be90..20133cd8 100644 --- a/src/main/java/com/stumeet/server/member/application/service/MemberOAuthService.java +++ b/src/main/java/com/stumeet/server/member/application/service/MemberOAuthService.java @@ -28,9 +28,13 @@ public Member getMemberOrCreate(OAuthUserProfileResponse response, String provid if (isRegisterUser) { member = memberQueryPort.getByOAuthProviderId(response.id(), oAuthProvider); } else { + MemberLevel initialLevel = MemberLevel.builder() + .rank(MemberRank.SEED) + .experience(0.0) + .build(); member = memberCommandPort.save( Member.builder() - .sugarContents(0.0) + .level(initialLevel) .authType(AuthType.OAUTH) .role(UserRole.FIRST_LOGIN) .build() diff --git a/src/main/java/com/stumeet/server/member/domain/Member.java b/src/main/java/com/stumeet/server/member/domain/Member.java index 2c058409..3a0e47be 100644 --- a/src/main/java/com/stumeet/server/member/domain/Member.java +++ b/src/main/java/com/stumeet/server/member/domain/Member.java @@ -19,7 +19,7 @@ public class Member { private String image; - private Double sugarContents; + private MemberLevel level; private String region; diff --git a/src/main/java/com/stumeet/server/member/domain/MemberLevel.java b/src/main/java/com/stumeet/server/member/domain/MemberLevel.java new file mode 100644 index 00000000..4012f013 --- /dev/null +++ b/src/main/java/com/stumeet/server/member/domain/MemberLevel.java @@ -0,0 +1,14 @@ +package com.stumeet.server.member.domain; + +import lombok.*; + + +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Builder +public class MemberLevel { + + private MemberRank rank; + private double experience; +} diff --git a/src/main/java/com/stumeet/server/member/domain/MemberRank.java b/src/main/java/com/stumeet/server/member/domain/MemberRank.java new file mode 100644 index 00000000..5213b005 --- /dev/null +++ b/src/main/java/com/stumeet/server/member/domain/MemberRank.java @@ -0,0 +1,19 @@ +package com.stumeet.server.member.domain; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@Getter +public enum MemberRank { + SEED("씨앗"), + SPROUT("새싹"), + LEAF("잎"), + FLOWER("꽃"), + TREE("나무"), + FRUIT("열매"); + + + private final String name; + +} diff --git a/src/main/resources/db/migration/V1.2__modify_member_level.sql b/src/main/resources/db/migration/V1.2__modify_member_level.sql new file mode 100644 index 00000000..35bf898f --- /dev/null +++ b/src/main/resources/db/migration/V1.2__modify_member_level.sql @@ -0,0 +1,8 @@ +ALTER TABLE `member` + DROP COLUMN `sugar_contents`; + +ALTER TABLE `member` + ADD COLUMN `rank` VARCHAR(50) not null comment '등급' AFTER `image`; + +ALTER TABLE `member` + ADD COLUMN `experience` DOUBLE not null comment '경험치' AFTER `rank` ; \ No newline at end of file diff --git a/src/test/java/com/stumeet/server/stub/MemberStub.java b/src/test/java/com/stumeet/server/stub/MemberStub.java index b602e344..e32215ec 100644 --- a/src/test/java/com/stumeet/server/stub/MemberStub.java +++ b/src/test/java/com/stumeet/server/stub/MemberStub.java @@ -3,9 +3,7 @@ import com.stumeet.server.member.adapter.out.persistence.MemberJpaEntity; import com.stumeet.server.member.application.port.in.command.MemberSignupCommand; import com.stumeet.server.member.application.port.in.command.MemberUpdateCommand; -import com.stumeet.server.member.domain.AuthType; -import com.stumeet.server.member.domain.Member; -import com.stumeet.server.member.domain.UserRole; +import com.stumeet.server.member.domain.*; import com.stumeet.server.helper.WithMockMember; import org.springframework.mock.web.MockMultipartFile; @@ -31,7 +29,8 @@ public static MemberJpaEntity getMemberEntity() { .name("test") .role(UserRole.FIRST_LOGIN) .authType(AuthType.OAUTH) - .sugarContents(0.0) + .rank(MemberRank.SEED) + .experience(0.0) .build(); } @@ -41,12 +40,17 @@ public static MemberSignupCommand getMemberSignupCommand() { } public static Member getMember(WithMockMember annotation) { + MemberLevel level = MemberLevel.builder() + .rank(MemberRank.SEED) + .experience(0.0) + .build(); + return Member.builder() .id(1L) .name("test") .role(annotation.authority()) .authType(AuthType.OAUTH) - .sugarContents(0.0) + .level(level) .profession(null) .region(null) .image(null) @@ -54,12 +58,16 @@ public static Member getMember(WithMockMember annotation) { } public static Member getMember() { + MemberLevel level = MemberLevel.builder() + .rank(MemberRank.SEED) + .experience(0.0) + .build(); return Member.builder() .id(1L) .name("test") .role(UserRole.MEMBER) .authType(AuthType.OAUTH) - .sugarContents(0.0) + .level(level) .profession(null) .region(null) .image(null)