Skip to content

Commit

Permalink
[BSVR-167] 레벨 도메인 분리 및 레벨별 칭호, 마스코트 이미지 추가 (#96)
Browse files Browse the repository at this point in the history
* feat: Level 도메인 분리

* feat: 레벨 레포지토리 추가 및 레벨 수정 유스케이스 수정

* feat: level 유스케이스 생성

* feat: member 생성 로직 변경

* fix: level 관련 API res 수정

* feat: 불필요한 Level enum 삭제

* fix: member-level 사이의 cascade all 옵션 삭제

* feat: Level 도메인에 createdAt, updatedAt, deletedAt 추가

* fix: jpa save 이용하도록 Update 수정

* fix: 후기 작성 후, 레벨 업데이트 된 유저 정보 반환하도록 수정

* feat: data.sql에 levels 추가

* feat: data.sql의 헥사코드 수정
  • Loading branch information
EunjiShin authored Aug 1, 2024
1 parent cacc05f commit cb92b12
Show file tree
Hide file tree
Showing 22 changed files with 347 additions and 215 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ public record MemberReviewProfileResponse(
Long id, String nickname, Integer level, String profileImageUrl) {
public static MemberReviewProfileResponse from(Member member) {
return new MemberReviewProfileResponse(
member.getId(), member.getNickname(), member.getLevel(), member.getProfileImage());
member.getId(),
member.getNickname(),
member.getLevel().getValue(),
member.getProfileImage());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ public static SeatResponse from(Seat seat) {
public record MemberInfo(String profileImage, String nickname, Integer level) {
public static MemberInfo from(Member member) {
return new MemberInfo(
member.getProfileImage(), member.getNickname(), member.getLevel());
member.getProfileImage(), member.getNickname(), member.getLevel().getValue());
}
}
}
41 changes: 41 additions & 0 deletions domain/src/main/java/org/depromeet/spot/domain/member/Level.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package org.depromeet.spot.domain.member;

import java.time.LocalDateTime;

import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public class Level {

private final Long id;
private final int value;
private final String title;
private final String mascotImageUrl;
private final LocalDateTime createdAt;
private final LocalDateTime updatedAt;
private final LocalDateTime deletedAt;

public static int calculateLevel(final long reviewCnt) {
if (reviewCnt == 0) {
return 0;
}
if (reviewCnt <= 2) {
return 1;
}
if (2 < reviewCnt && reviewCnt <= 4) {
return 2;
}
if (4 < reviewCnt && reviewCnt <= 7) {
return 3;
}
if (7 < reviewCnt && reviewCnt <= 13) {
return 4;
}
if (13 < reviewCnt && reviewCnt <= 20) {
return 5;
}
return 6;
}
}
26 changes: 2 additions & 24 deletions domain/src/main/java/org/depromeet/spot/domain/member/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public class Member {
private final String name;
private final String nickname;
private final String phoneNumber;
private final Integer level;
private final Level level;
private final String profileImage;
private final SnsProvider snsProvider;
private final String idToken;
Expand All @@ -29,29 +29,7 @@ public class Member {
private final LocalDateTime deletedAt;
private final LocalDateTime updatedAt;

public int calculateLevel(long reviewCnt) {
if (reviewCnt == 0) {
return 0;
}
if (reviewCnt <= 2) {
return 1;
}
if (2 < reviewCnt && reviewCnt <= 4) {
return 2;
}
if (4 < reviewCnt && reviewCnt <= 7) {
return 3;
}
if (7 < reviewCnt && reviewCnt <= 13) {
return 4;
}
if (13 < reviewCnt && reviewCnt <= 20) {
return 5;
}
return 6;
}

public Member updateLevel(int newLevel) {
public Member updateLevel(Level newLevel) {
return Member.builder()
.id(id)
.email(email)
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package org.depromeet.spot.jpa.member.entity;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;

import org.depromeet.spot.domain.member.Level;
import org.depromeet.spot.jpa.common.entity.BaseEntity;

import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;

@Entity
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "levels")
public class LevelEntity extends BaseEntity {

@Column(name = "value", nullable = false, unique = true)
private int value;

@Column(name = "title", nullable = false, unique = true)
private String title;

@Column(name = "mascot_image_url")
private String mascotImageUrl;

public LevelEntity(Level level) {
super(level.getId(), level.getCreatedAt(), level.getUpdatedAt(), level.getDeletedAt());
value = level.getValue();
title = level.getTitle();
mascotImageUrl = level.getMascotImageUrl();
}

public static LevelEntity from(Level level) {
return new LevelEntity(level.getValue(), level.getTitle(), level.getMascotImageUrl());
}

public Level toDomain() {
return new Level(
this.getId(),
value,
title,
mascotImageUrl,
this.getCreatedAt(),
this.getUpdatedAt(),
this.getDeletedAt());
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,19 @@
package org.depromeet.spot.jpa.member.entity;

import jakarta.persistence.Column;
import jakarta.persistence.ConstraintMode;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.ForeignKey;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;

import org.depromeet.spot.domain.member.Level;
import org.depromeet.spot.domain.member.Member;
import org.depromeet.spot.domain.member.enums.MemberRole;
import org.depromeet.spot.domain.member.enums.SnsProvider;
import org.depromeet.spot.jpa.common.entity.BaseEntity;
import org.hibernate.annotations.ColumnDefault;

import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
Expand All @@ -34,10 +39,12 @@ public class MemberEntity extends BaseEntity {
@Column(name = "phone_number", unique = true, length = 13)
private String phoneNumber;

// TODO : ERD nullable로 변경
@Column(name = "level")
@ColumnDefault("1")
private Integer level;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(
name = "level_id",
nullable = false,
foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
private LevelEntity level;

@Column(name = "profile_image", length = 255)
private String profileImage;
Expand All @@ -54,14 +61,13 @@ public class MemberEntity extends BaseEntity {
@Column(name = "role", nullable = false)
private String role;

public static MemberEntity from(Member member) {
public static MemberEntity of(Member member, Level level) {
return new MemberEntity(
member.getEmail(),
member.getName(),
member.getNickname(),
member.getPhoneNumber(),
// TODO : 레벨 - 추 후 PrePersist, DynamicInsert 등을 통해 기본값 넣기.
1,
new LevelEntity(level),
member.getProfileImage(),
member.getSnsProvider().getValue(),
member.getIdToken(),
Expand All @@ -74,11 +80,12 @@ public static MemberEntity withMember(Member member) {
}

public MemberEntity(Member member) {
super(member.getId(), null, null, null);
super(member.getId(), member.getCreatedAt(), member.getUpdatedAt(), member.getDeletedAt());
email = member.getEmail();
name = member.getName();
nickname = member.getNickname();
phoneNumber = member.getPhoneNumber();
level = new LevelEntity(member.getLevel());
profileImage = member.getProfileImage();
snsProvider = member.getSnsProvider().getValue();
idToken = member.getIdToken();
Expand All @@ -93,7 +100,7 @@ public Member toDomain() {
name,
nickname,
phoneNumber,
level,
level.toDomain(),
profileImage,
SnsProvider.valueOf(snsProvider),
idToken,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.depromeet.spot.jpa.member.repository;

import org.depromeet.spot.jpa.member.entity.LevelEntity;
import org.springframework.data.jpa.repository.JpaRepository;

public interface LevelJpaRepository extends JpaRepository<LevelEntity, Long> {

LevelEntity findByValue(int value);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package org.depromeet.spot.jpa.member.repository;

import org.depromeet.spot.domain.member.Level;
import org.depromeet.spot.usecase.port.out.member.LevelRepository;
import org.springframework.stereotype.Repository;

import lombok.RequiredArgsConstructor;

@Repository
@RequiredArgsConstructor
public class LevelRepositoryImpl implements LevelRepository {

private final LevelJpaRepository levelJpaRepository;

@Override
public Level findByValue(final int value) {
return levelJpaRepository.findByValue(value).toDomain();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,6 @@ void updateProfile(
@Param("teamId") Long teamId,
@Param("nickname") String nickname);

@Modifying
@Query("update MemberEntity m set m.level = :level where m.id = :memberId")
void updateLevel(@Param("memberId") Long memberId, @Param("level") int level);

void deleteByIdToken(String idToken);

@Modifying
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.time.LocalDateTime;

import org.depromeet.spot.common.exception.member.MemberException.MemberNotFoundException;
import org.depromeet.spot.domain.member.Level;
import org.depromeet.spot.domain.member.Member;
import org.depromeet.spot.jpa.member.entity.MemberEntity;
import org.depromeet.spot.usecase.port.out.member.MemberRepository;
Expand All @@ -17,8 +18,8 @@ public class MemberRepositoryImpl implements MemberRepository {
private final MemberJpaRepository memberJpaRepository;

@Override
public Member save(Member member) {
MemberEntity memberEntity = memberJpaRepository.save(MemberEntity.from(member));
public Member save(Member member, Level level) {
MemberEntity memberEntity = memberJpaRepository.save(MemberEntity.of(member, level));
return memberEntity.toDomain();
}

Expand All @@ -31,8 +32,8 @@ public Member updateProfile(Member member) {

@Override
public Member updateLevel(Member member) {
memberJpaRepository.updateLevel(member.getId(), member.getLevel());
return member;
MemberEntity memberEntity = memberJpaRepository.save(MemberEntity.withMember(member));
return memberEntity.toDomain();
}

@Override
Expand Down
Loading

0 comments on commit cb92b12

Please sign in to comment.