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)