Skip to content

Commit

Permalink
Merge pull request #55 from Stumeet/dev
Browse files Browse the repository at this point in the history
✨ [STMT-146] 분야 정보를 관리하는 도메인 정의 (#54)
  • Loading branch information
zxcv9203 authored Feb 28, 2024
2 parents dee74a0 + b444817 commit 738b8f8
Show file tree
Hide file tree
Showing 20 changed files with 440 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public enum ErrorCode {
INVALID_IMAGE_EXCEPTION(HttpStatus.BAD_REQUEST, "잘못된 이미지 파일입니다."),
INVALID_FILE_EXTENSION_EXCEPTION(HttpStatus.BAD_REQUEST, "잘못된 파일 확장자입니다."),
DUPLICATE_NICKNAME_EXCEPTION(HttpStatus.BAD_REQUEST, "닉네임이 중복되었습니다."),
NOT_EXIST_EXCEPTION(HttpStatus.BAD_REQUEST, "요청으로 전달한 값이 존재하지 않습니다."),


/*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.stumeet.server.common.model.BaseTimeEntity;
import com.stumeet.server.member.domain.AuthType;
import com.stumeet.server.member.domain.UserRole;
import com.stumeet.server.profession.adapter.out.persistence.ProfessionJpaEntity;
import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.Comment;
Expand All @@ -22,6 +23,11 @@ public class MemberJpaEntity extends BaseTimeEntity {
@Comment("멤버 아이디")
private Long id;

@ManyToOne
@JoinColumn(name = "profession_id")
@Comment("분야")
private ProfessionJpaEntity profession;

@Column(name = "name")
@Comment("멤버 이름")
private String name;
Expand All @@ -38,18 +44,14 @@ public class MemberJpaEntity extends BaseTimeEntity {
@Comment("지역")
private String region;

@Column(name = "profession", length = 50)
@Comment("분야")
private String profession;

@Column(name = "auth_type", length = 50, nullable = false)
@Enumerated(EnumType.STRING)
@Comment("인증 방법(OAuth, 자체 로그인 등)")
private AuthType authType;

@Column(name = "role", length = 20, nullable = false)
@Enumerated(EnumType.STRING)
@Comment("권한")
@Comment("권한(FIRST_LOGIN, MEMBER)")
private UserRole role;

@Column(name = "is_deleted", nullable = false)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,24 @@
package com.stumeet.server.member.adapter.out.persistence;

import com.stumeet.server.member.domain.Member;
import com.stumeet.server.profession.adapter.out.persistence.ProfessionPersistenceMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

@Component
@RequiredArgsConstructor
public class MemberPersistenceMapper {

private final ProfessionPersistenceMapper professionPersistenceMapper;

public MemberJpaEntity toEntity(Member domain) {
return MemberJpaEntity.builder()
.id(domain.getId())
.name(domain.getName())
.image(domain.getImage())
.sugarContents(domain.getSugarContents())
.region(domain.getRegion())
.profession(domain.getProfession())
.profession(professionPersistenceMapper.toEntity(domain.getProfession()))
.authType(domain.getAuthType())
.role(domain.getRole())
.build();
Expand All @@ -26,7 +31,7 @@ public Member toDomain(MemberJpaEntity entity) {
.image(entity.getImage())
.sugarContents(entity.getSugarContents())
.region(entity.getRegion())
.profession(entity.getProfession())
.profession(professionPersistenceMapper.toDomain(entity.getProfession()))
.authType(entity.getAuthType())
.role(entity.getRole())
.build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public class OAuthLoginJpaEntity extends BaseTimeEntity {

@Column(name = "provider_name", length = 50, nullable = false)
@Enumerated(EnumType.STRING)
@Comment("제공자 이름")
@Comment("제공자 이름(kakao, apple)")
private OAuthProvider providerName;

@Column(name = "provider_id", length = 50, nullable = false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public record MemberSignupCommand(
@NotBlank(message = "지역을 입력해주세요")
String region,

@NotBlank(message = "분야를 선택해주세요")
String profession
@NotNull(message = "분야를 선택해주세요")
Long profession
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,14 @@
import com.stumeet.server.file.application.port.in.FileUploadUseCase;
import com.stumeet.server.file.application.port.out.FileUrl;
import com.stumeet.server.member.adapter.in.web.response.TokenResponse;
import com.stumeet.server.member.application.port.in.MemberSignupCommand;
import com.stumeet.server.member.application.port.in.MemberAuthUseCase;
import com.stumeet.server.member.application.port.in.MemberSignupCommand;
import com.stumeet.server.member.application.port.in.TokenRenewCommand;
import com.stumeet.server.member.application.port.out.MemberCommandPort;
import com.stumeet.server.member.application.port.out.MemberQueryPort;
import com.stumeet.server.member.domain.Member;
import com.stumeet.server.profession.application.port.in.ProfessionQueryUseCase;
import com.stumeet.server.profession.domain.Profession;
import lombok.RequiredArgsConstructor;
import org.springframework.transaction.annotation.Transactional;

Expand All @@ -26,12 +28,14 @@ public class MemberAuthService implements MemberAuthUseCase {
private final FileUploadUseCase fileUploadUseCase;
private final RefreshTokenService refreshTokenService;
private final JwtTokenProvider jwtTokenProvider;
private final ProfessionQueryUseCase professionQueryUseCase;

@Override
public void signup(Member member, MemberSignupCommand request) {
Profession profession = professionQueryUseCase.getById(request.profession());
FileUrl url = fileUploadUseCase.uploadUserProfileImage(member.getId(), request.image());

member.registerWithAdditionalDetails(request, url);
member.registerWithAdditionalDetails(request, url, profession);

memberCommandPort.save(member);
}
Expand Down
14 changes: 9 additions & 5 deletions src/main/java/com/stumeet/server/member/domain/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,20 @@

import com.stumeet.server.file.application.port.out.FileUrl;
import com.stumeet.server.member.application.port.in.MemberSignupCommand;
import lombok.*;
import com.stumeet.server.profession.domain.Profession;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;

@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Builder
@Getter
public class Member {
private Long id;

private Profession profession;

private String name;

private String image;
Expand All @@ -18,17 +24,15 @@ public class Member {

private String region;

private String profession;

private AuthType authType;

private UserRole role;

public void registerWithAdditionalDetails(MemberSignupCommand request, FileUrl profileImage) {
public void registerWithAdditionalDetails(MemberSignupCommand request, FileUrl profileImage, Profession profession) {
this.image = profileImage.url();
this.name = request.nickname();
this.region = request.region();
this.profession = request.profession();
this.profession = profession;
this.role = UserRole.MEMBER;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.stumeet.server.profession.adapter.out.persistence;

import org.springframework.data.jpa.repository.JpaRepository;

public interface JpaProfessionRepository extends JpaRepository<ProfessionJpaEntity, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.stumeet.server.profession.adapter.out.persistence;

import com.stumeet.server.common.model.BaseTimeEntity;
import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.Comment;

@Entity
@Table(name = "profession")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Builder
@Getter
public class ProfessionJpaEntity extends BaseTimeEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Comment("분야 ID")
private Long id;

@Column(name = "name", nullable = false)
@Comment("이름")
private String name;

@ManyToOne
@JoinColumn(name = "parent_id")
@Comment("대분류 분야")
private ProfessionJpaEntity parent;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.stumeet.server.profession.adapter.out.persistence;

import com.stumeet.server.common.annotation.PersistenceAdapter;
import com.stumeet.server.common.exception.model.BusinessException;
import com.stumeet.server.common.response.ErrorCode;
import com.stumeet.server.profession.application.port.out.ProfessionQueryPort;
import com.stumeet.server.profession.domain.Profession;
import lombok.RequiredArgsConstructor;

@PersistenceAdapter
@RequiredArgsConstructor
public class ProfessionPersistenceAdapter implements ProfessionQueryPort {
private final ProfessionPersistenceMapper professionPersistenceMapper;
private final JpaProfessionRepository jpaProfessionRepository;

@Override
public Profession getById(Long id) {
ProfessionJpaEntity entity = jpaProfessionRepository.findById(id)
.orElseThrow(() -> new BusinessException(ErrorCode.NOT_EXIST_EXCEPTION));

return professionPersistenceMapper.toDomain(entity);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package com.stumeet.server.profession.adapter.out.persistence;

import com.stumeet.server.profession.domain.Profession;
import org.springframework.stereotype.Component;

@Component
public class ProfessionPersistenceMapper {

public ProfessionJpaEntity toEntity(Profession domain) {
if (domain == null) {
return null;
}
ProfessionJpaEntity parent = null;

if (domain.getParent() != null) {
parent = ProfessionJpaEntity.builder()
.id(domain.getId())
.name(domain.getName())
.parent(null)
.build();
}

return ProfessionJpaEntity.builder()
.id(domain.getId())
.name(domain.getName())
.parent(parent)
.build();
}

public Profession toDomain(ProfessionJpaEntity entity) {
if (entity == null) {
return null;
}
Profession parent = null;

if (entity.getParent() != null) {
parent = Profession.builder()
.id(entity.getId())
.name(entity.getName())
.parent(null)
.build();
}

return Profession.builder()
.id(entity.getId())
.name(entity.getName())
.parent(parent)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.stumeet.server.profession.application.port.in;

import com.stumeet.server.profession.domain.Profession;

public interface ProfessionQueryUseCase {
Profession getById(Long id);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.stumeet.server.profession.application.port.out;

import com.stumeet.server.profession.domain.Profession;

public interface ProfessionQueryPort {
Profession getById(Long id);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.stumeet.server.profession.application.service;

import com.stumeet.server.common.annotation.UseCase;
import com.stumeet.server.profession.application.port.in.ProfessionQueryUseCase;
import com.stumeet.server.profession.application.port.out.ProfessionQueryPort;
import com.stumeet.server.profession.domain.Profession;
import lombok.RequiredArgsConstructor;
import org.springframework.transaction.annotation.Transactional;

@UseCase
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class ProfessionQueryService implements ProfessionQueryUseCase {

private final ProfessionQueryPort professionQueryPort;

@Override
public Profession getById(Long id) {
return professionQueryPort.getById(id);
}
}
19 changes: 19 additions & 0 deletions src/main/java/com/stumeet/server/profession/domain/Profession.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.stumeet.server.profession.domain;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;

@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Builder
@Getter
public class Profession {

private Long id;

private String name;

private Profession parent;

}
2 changes: 1 addition & 1 deletion src/main/resources/application-local.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ spring:
port: 6379
jpa:
hibernate:
ddl-auto: update
ddl-auto: none
properties:
hibernate:
show_sql: true
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/application-prod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ spring:
port: ${REDIS_PORT}
jpa:
hibernate:
ddl-auto: validate
ddl-auto: none
properties:
hibernate:
show_sql: true
Expand Down
Loading

0 comments on commit 738b8f8

Please sign in to comment.