Skip to content

Commit 9bf44dd

Browse files
authored
RINGUS-26 feat: 멘토 프로필 등록 기능 구현 (#5)
1 parent 7b2c454 commit 9bf44dd

31 files changed

+376
-266
lines changed

src/main/java/es/princip/ringus/application/mentee/service/MenteeService.java

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import es.princip.ringus.domain.mentee.MenteeRepository;
88
import es.princip.ringus.domain.mentor.MentorRepository;
99
import es.princip.ringus.global.exception.CustomRuntimeException;
10-
import es.princip.ringus.presentation.user.dto.MenteeRequest;
10+
import es.princip.ringus.presentation.mentee.dto.MenteeRequest;
1111
import lombok.RequiredArgsConstructor;
1212
import org.springframework.stereotype.Service;
1313
import org.springframework.transaction.annotation.Transactional;
@@ -18,24 +18,13 @@
1818
public class MenteeService {
1919

2020
private final MemberRepository memberRepository;
21-
private final MentorRepository mentorRepository;
2221
private final MenteeRepository menteeRepository;
2322

2423
@Transactional
25-
public void createMentee(MenteeRequest request) {
24+
public Long register(MenteeRequest request) {
2625
Member member = memberRepository.findByEmail(request.email())
2726
.orElseThrow(() -> new CustomRuntimeException(SignUpErrorCode.WRONG_EMAIL));
28-
29-
if (mentorRepository.existsByMember(member)) {
30-
throw new CustomRuntimeException(SignUpErrorCode.ALREADY_REGISTERED_AS_MENTOR);
31-
}
32-
if (menteeRepository.existsByMember(member)) {
33-
throw new CustomRuntimeException(SignUpErrorCode.ALREADY_REGISTERED_AS_MENTEE);
34-
}
35-
36-
Mentee mentee = Mentee.of(member, request.nickname(), request.introduction(), request.major(), request.educationLevelType());
37-
38-
menteeRepository.save(mentee);
27+
Mentee mentee = request.toEntity();
28+
return menteeRepository.save(mentee).getId();
3929
}
40-
41-
}
30+
}

src/main/java/es/princip/ringus/application/mentor/service/MentorService.java

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import es.princip.ringus.domain.mentor.Mentor;
88
import es.princip.ringus.domain.mentor.MentorRepository;
99
import es.princip.ringus.global.exception.CustomRuntimeException;
10-
import es.princip.ringus.presentation.user.dto.MentorRequest;
10+
import es.princip.ringus.presentation.mentor.dto.MentorRequest;
1111
import lombok.RequiredArgsConstructor;
1212
import org.springframework.stereotype.Service;
1313
import org.springframework.transaction.annotation.Transactional;
@@ -19,23 +19,12 @@ public class MentorService {
1919

2020
private final MemberRepository memberRepository;
2121
private final MentorRepository mentorRepository;
22-
private final MenteeRepository menteeRepository;
2322

2423
@Transactional
25-
public void createMentor(MentorRequest request) {
24+
public Long register(MentorRequest request) {
2625
Member member = memberRepository.findByEmail(request.email())
2726
.orElseThrow(() -> new CustomRuntimeException(SignUpErrorCode.WRONG_EMAIL));
28-
29-
if (mentorRepository.existsByMember(member)) {
30-
throw new CustomRuntimeException(SignUpErrorCode.ALREADY_REGISTERED_AS_MENTOR);
31-
}
32-
if (menteeRepository.existsByMember(member)) {
33-
throw new CustomRuntimeException(SignUpErrorCode.ALREADY_REGISTERED_AS_MENTEE);
34-
}
35-
36-
Mentor mentor = Mentor.of(member, request.nickname(), request.introduction(), request.company(), request.job(), request.experience());
37-
38-
mentorRepository.save(mentor);
27+
Mentor mentor = request.toEntity(member.getId());
28+
return mentorRepository.save(mentor).getId();
3929
}
40-
41-
}
30+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package es.princip.ringus.domain.common;
2+
3+
import jakarta.persistence.Embeddable;
4+
import lombok.AccessLevel;
5+
import lombok.AllArgsConstructor;
6+
import lombok.Getter;
7+
import lombok.NoArgsConstructor;
8+
9+
// 학력
10+
@Getter
11+
@Embeddable
12+
@AllArgsConstructor
13+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
14+
public class Education {
15+
// 학교명 (필수)
16+
private String schoolName;
17+
// 전공명 (선택)
18+
private String major;
19+
}

src/main/java/es/princip/ringus/domain/member/Member.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import es.princip.ringus.domain.base.BaseTimeEntity;
44
import es.princip.ringus.domain.serviceTerm.ServiceTermAgreement;
5-
import es.princip.ringus.domain.user.User;
65
import jakarta.persistence.*;
76
import lombok.AccessLevel;
87
import lombok.Builder;
Lines changed: 36 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,48 @@
11
package es.princip.ringus.domain.mentee;
22

3-
import es.princip.ringus.domain.member.Member;
4-
import es.princip.ringus.domain.mentor.Mentor;
5-
import es.princip.ringus.domain.user.User;
6-
import es.princip.ringus.domain.user.UserType;
7-
import jakarta.persistence.Entity;
8-
import jakarta.persistence.EnumType;
9-
import jakarta.persistence.Enumerated;
3+
import es.princip.ringus.domain.common.Education;
4+
import jakarta.persistence.*;
5+
import lombok.AccessLevel;
106
import lombok.Builder;
117
import lombok.Getter;
128
import lombok.NoArgsConstructor;
139

14-
@Entity
15-
@NoArgsConstructor
1610
@Getter
17-
public class Mentee extends User {
11+
@Entity
12+
@Table(name = "mentee")
13+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
14+
public class Mentee {
1815

19-
private String major;
16+
@Id
17+
@Column(name = "mentee_id")
18+
@GeneratedValue(strategy = GenerationType.IDENTITY)
19+
private Long id;
2020

21-
@Enumerated(EnumType.STRING)
22-
private EducationLevelType levelType;
21+
// 닉네임
22+
@Column(name = "nickname", unique = true)
23+
private String nickname;
2324

24-
@Builder
25-
public Mentee(Member member, String nickname, String introduction, String major, EducationLevelType levelType) {
26-
super(nickname, introduction, UserType.MENTEE, member);
27-
this.major = major;
28-
this.levelType = levelType;
29-
}
25+
// 학력
26+
@Embedded
27+
private Education education;
3028

31-
public static Mentee of(Member member, String nickname, String introduction, String major, EducationLevelType levelType) {
32-
return Mentee.builder()
33-
.member(member)
34-
.nickname(nickname)
35-
.introduction(introduction)
36-
.major(major)
37-
.levelType(levelType)
38-
.build();
39-
}
29+
// 자기소개
30+
@Column(name = "introduction", length = 500)
31+
private String introduction;
32+
33+
@Column(name = "member_id")
34+
private Long memberId;
4035

41-
}
36+
@Builder
37+
public Mentee(
38+
final String nickname,
39+
final Education education,
40+
final String introduction,
41+
final Long memberId
42+
) {
43+
this.nickname = nickname;
44+
this.education = education;
45+
this.introduction = introduction;
46+
this.memberId = memberId;
47+
}
48+
}

src/main/java/es/princip/ringus/domain/mentee/MenteeRepository.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,5 @@
55
import org.springframework.stereotype.Repository;
66

77
@Repository
8-
public interface MenteeRepository extends JpaRepository<Mentee, String> {
9-
boolean existsByMember(Member member);
8+
public interface MenteeRepository extends JpaRepository<Mentee, Long> {
109
}
Lines changed: 82 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,96 @@
11
package es.princip.ringus.domain.mentor;
22

3-
import es.princip.ringus.domain.member.Member;
4-
import es.princip.ringus.domain.user.User;
5-
import es.princip.ringus.domain.user.UserType;
3+
import es.princip.ringus.domain.common.Education;
4+
import es.princip.ringus.domain.mentor.vo.Hashtag;
5+
import es.princip.ringus.domain.mentor.vo.MentoringField;
6+
import es.princip.ringus.domain.mentor.vo.Organization;
7+
import es.princip.ringus.domain.mentor.vo.Portfolio;
8+
import es.princip.ringus.domain.mentor.vo.Timezone;
69
import jakarta.persistence.*;
10+
import lombok.AccessLevel;
711
import lombok.Builder;
812
import lombok.Getter;
913
import lombok.NoArgsConstructor;
1014

11-
@Entity
12-
@NoArgsConstructor
15+
import java.util.List;
16+
import java.util.Set;
17+
1318
@Getter
14-
public class Mentor extends User {
19+
@Entity
20+
@Table(name = "mentor")
21+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
22+
public class Mentor {
1523

16-
private String company;
24+
@Id
25+
@Column(name = "mentor_id")
26+
@GeneratedValue(strategy = GenerationType.IDENTITY)
27+
private Long id;
1728

18-
private String job;
29+
// 닉네임
30+
@Column(name = "nickname")
31+
private String nickname;
1932

20-
private int experience;
33+
// 학력
34+
@Embedded
35+
private Education education;
2136

22-
@Builder
23-
public Mentor(Member member, String nickname, String introduction, String company, String job, int experience) {
24-
super(nickname, introduction, UserType.MENTOR, member);
25-
this.company = company;
26-
this.job = job;
27-
this.experience = experience;
28-
}
37+
// 조직
38+
@Embedded
39+
private Organization organization;
40+
41+
// 자기소개
42+
@Column(name = "introduction", length = 500)
43+
private String introduction;
44+
45+
// 선호 시간대
46+
@Embedded
47+
private Timezone timezone;
2948

30-
public static Mentor of(Member member, String nickname, String introduction, String company, String job, int experience) {
31-
return Mentor.builder()
32-
.member(member)
33-
.nickname(nickname)
34-
.introduction(introduction)
35-
.company(company)
36-
.job(job)
37-
.experience(experience)
38-
.build();
49+
// 멘토링 분야
50+
@ElementCollection(fetch = FetchType.EAGER)
51+
@CollectionTable(name = "mentor_mentoring_fields", joinColumns = @JoinColumn(name = "mentor_id"))
52+
@Enumerated(EnumType.STRING)
53+
@Column(name = "mentoring_field")
54+
private Set<MentoringField> mentoringField;
55+
56+
// 해시태그
57+
@ElementCollection(fetch = FetchType.EAGER)
58+
@CollectionTable(name = "mentor_hashtags", joinColumns = @JoinColumn(name = "mentor_id"))
59+
private List<Hashtag> hashtags;
60+
61+
// 멘티에게 전하는 말
62+
@Column(name = "message", length = 50)
63+
private String message;
64+
65+
// 포트폴리오
66+
@Embedded
67+
private Portfolio portfolio;
68+
69+
@Column(name = "member_id")
70+
private Long memberId;
71+
72+
@Builder
73+
public Mentor(
74+
final String nickname,
75+
final Education education,
76+
final Organization organization,
77+
final String introduction,
78+
final Timezone timezone,
79+
final Set<MentoringField> mentoringField,
80+
final List<Hashtag> hashtags,
81+
final String message,
82+
final Portfolio portfolio,
83+
final Long memberId
84+
) {
85+
this.nickname = nickname;
86+
this.education = education;
87+
this.organization = organization;
88+
this.introduction = introduction;
89+
this.timezone = timezone;
90+
this.mentoringField = mentoringField;
91+
this.hashtags = hashtags;
92+
this.message = message;
93+
this.portfolio = portfolio;
94+
this.memberId = memberId;
3995
}
40-
}
96+
}

src/main/java/es/princip/ringus/domain/mentor/MentorRepository.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,4 @@
66

77
@Repository
88
public interface MentorRepository extends JpaRepository<Mentor, Long> {
9-
boolean existsByMember(Member member);
109
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package es.princip.ringus.domain.mentor.vo;
2+
3+
import jakarta.persistence.Embeddable;
4+
import lombok.AccessLevel;
5+
import lombok.AllArgsConstructor;
6+
import lombok.Getter;
7+
import lombok.NoArgsConstructor;
8+
9+
@Getter
10+
@Embeddable
11+
@AllArgsConstructor
12+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
13+
public class Hashtag {
14+
private String value;
15+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package es.princip.ringus.domain.mentor.vo;
2+
3+
public enum MentoringField {
4+
JOB_PREPARATION,
5+
INTERVIEW_PREPARATION,
6+
PRACTICAL_SKILLS,
7+
PORTFOLIO
8+
}

0 commit comments

Comments
 (0)