Skip to content

Commit 3e7acea

Browse files
authored
fix: 멘토 지원서 승인 시 유저 Role 을 Mentor로 승격 (#639)
* fix: 멘토 지원서 승인 시 유저 Role 을 Mentor로 승격 * fix: 멘토 지원서 승인 시 멘토 생성 * fix: 멘토의 introduction, passTip null 허용하도록 수정 - not null 인 필드에 빈문자열로 값을 채우는 것 보다, null 허용이 더 의미 있다 판단하여 null 을 허용하도록 하였습니다. * fix: 사용하지 않는 멘토 생성 api 제거 - 멘토 생성의 주체가 어드민으로 변경되어 Mentor 도메인의 Mentor 생성 api 를 제거 * feat: 멘토 지원서 승인 예외처리 추가 - 중복 멘토 생성 예외 처리 및 테스트 추가 * refactor: Mentor 생성 시 null 전달 제거 * refactor: 멘토 지원서 승낙 시, 검증 후 승격 및 멘토 생성
1 parent 8d060b4 commit 3e7acea

9 files changed

Lines changed: 94 additions & 209 deletions

File tree

src/main/java/com/example/solidconnection/admin/service/AdminMentorApplicationService.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.example.solidconnection.admin.service;
22

3+
import static com.example.solidconnection.common.exception.ErrorCode.MENTOR_ALREADY_EXISTS;
34
import static com.example.solidconnection.common.exception.ErrorCode.MENTOR_APPLICATION_NOT_FOUND;
45
import static com.example.solidconnection.common.exception.ErrorCode.USER_NOT_FOUND;
56

@@ -9,9 +10,11 @@
910
import com.example.solidconnection.admin.dto.MentorApplicationSearchCondition;
1011
import com.example.solidconnection.admin.dto.MentorApplicationSearchResponse;
1112
import com.example.solidconnection.common.exception.CustomException;
13+
import com.example.solidconnection.mentor.domain.Mentor;
1214
import com.example.solidconnection.mentor.domain.MentorApplication;
1315
import com.example.solidconnection.mentor.domain.MentorApplicationStatus;
1416
import com.example.solidconnection.mentor.repository.MentorApplicationRepository;
17+
import com.example.solidconnection.mentor.repository.MentorRepository;
1518
import com.example.solidconnection.siteuser.domain.SiteUser;
1619
import com.example.solidconnection.siteuser.repository.SiteUserRepository;
1720
import com.example.solidconnection.university.domain.HostUniversity;
@@ -31,6 +34,7 @@ public class AdminMentorApplicationService {
3134
private final MentorApplicationRepository mentorApplicationRepository;
3235
private final HostUniversityRepository hostUniversityRepository;
3336
private final SiteUserRepository siteUserRepository;
37+
private final MentorRepository mentorRepository;
3438

3539
@Transactional(readOnly = true)
3640
public Page<MentorApplicationSearchResponse> searchMentorApplications(
@@ -45,7 +49,26 @@ public void approveMentorApplication(Long mentorApplicationId) {
4549
MentorApplication mentorApplication = mentorApplicationRepository.findById(mentorApplicationId)
4650
.orElseThrow(() -> new CustomException(MENTOR_APPLICATION_NOT_FOUND));
4751

52+
SiteUser siteUser = siteUserRepository.findById(mentorApplication.getSiteUserId())
53+
.orElseThrow(() -> new CustomException(USER_NOT_FOUND));
54+
validateUserCanCreateMentor(siteUser.getId());
55+
4856
mentorApplication.approve();
57+
siteUser.becomeMentor();
58+
59+
Mentor mentor = new Mentor(
60+
siteUser.getId(),
61+
mentorApplication.getUniversityId(),
62+
mentorApplication.getTermId()
63+
);
64+
65+
mentorRepository.save(mentor);
66+
}
67+
68+
private void validateUserCanCreateMentor(long siteUserId) {
69+
if (mentorRepository.existsBySiteUserId(siteUserId)) {
70+
throw new CustomException(MENTOR_ALREADY_EXISTS);
71+
}
4972
}
5073

5174
@Transactional

src/main/java/com/example/solidconnection/mentor/controller/MentorMyPageController.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.example.solidconnection.mentor.controller;
22

33
import com.example.solidconnection.common.resolver.AuthorizedUser;
4-
import com.example.solidconnection.mentor.dto.MentorMyPageCreateRequest;
54
import com.example.solidconnection.mentor.dto.MentorMyPageResponse;
65
import com.example.solidconnection.mentor.dto.MentorMyPageUpdateRequest;
76
import com.example.solidconnection.mentor.service.MentorMyPageService;
@@ -11,7 +10,6 @@
1110
import lombok.RequiredArgsConstructor;
1211
import org.springframework.http.ResponseEntity;
1312
import org.springframework.web.bind.annotation.GetMapping;
14-
import org.springframework.web.bind.annotation.PostMapping;
1513
import org.springframework.web.bind.annotation.PutMapping;
1614
import org.springframework.web.bind.annotation.RequestBody;
1715
import org.springframework.web.bind.annotation.RequestMapping;
@@ -42,14 +40,4 @@ public ResponseEntity<Void> updateMentorMyPage(
4240
mentorMyPageService.updateMentorMyPage(siteUserId, mentorMyPageUpdateRequest);
4341
return ResponseEntity.ok().build();
4442
}
45-
46-
@RequireRoleAccess(roles = Role.MENTOR)
47-
@PostMapping
48-
public ResponseEntity<Void> createMentorMyPage(
49-
@AuthorizedUser long siteUserId,
50-
@Valid @RequestBody MentorMyPageCreateRequest request
51-
) {
52-
mentorMyPageService.createMentorMyPage(siteUserId, request);
53-
return ResponseEntity.ok().build();
54-
}
5543
}

src/main/java/com/example/solidconnection/mentor/domain/Mentor.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,10 @@ public class Mentor extends BaseEntity {
3333
@Column
3434
private boolean hasBadge = false;
3535

36-
@Column(length = 1000, nullable = false)
36+
@Column(length = 1000)
3737
private String introduction;
3838

39-
@Column(length = 1000, nullable = false)
39+
@Column(length = 1000)
4040
private String passTip;
4141

4242
@Column
@@ -67,6 +67,16 @@ public Mentor(
6767
this.termId = termId;
6868
}
6969

70+
public Mentor(
71+
long siteUserId,
72+
Long universityId,
73+
long termId
74+
) {
75+
this.siteUserId = siteUserId;
76+
this.universityId = universityId;
77+
this.termId = termId;
78+
}
79+
7080
public void increaseMenteeCount() {
7181
this.menteeCount++;
7282
}
@@ -96,11 +106,4 @@ public void updateChannels(List<Channel> channels) {
96106
}
97107
}
98108
}
99-
100-
public void createChannels(List<Channel> channels) {
101-
for(Channel channel : channels) {
102-
channel.updateMentor(this);
103-
this.channels.add(channel);
104-
}
105-
}
106109
}

src/main/java/com/example/solidconnection/mentor/dto/MentorMyPageCreateRequest.java

Lines changed: 0 additions & 20 deletions
This file was deleted.

src/main/java/com/example/solidconnection/mentor/service/MentorMyPageService.java

Lines changed: 1 addition & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package com.example.solidconnection.mentor.service;
22

33
import static com.example.solidconnection.common.exception.ErrorCode.CHANNEL_REGISTRATION_LIMIT_EXCEEDED;
4-
import static com.example.solidconnection.common.exception.ErrorCode.MENTOR_ALREADY_EXISTS;
5-
import static com.example.solidconnection.common.exception.ErrorCode.MENTOR_APPLICATION_NOT_FOUND;
64
import static com.example.solidconnection.common.exception.ErrorCode.MENTOR_NOT_FOUND;
75
import static com.example.solidconnection.common.exception.ErrorCode.TERM_NOT_FOUND;
86
import static com.example.solidconnection.common.exception.ErrorCode.UNIVERSITY_NOT_FOUND;
@@ -11,10 +9,7 @@
119
import com.example.solidconnection.common.exception.CustomException;
1210
import com.example.solidconnection.mentor.domain.Channel;
1311
import com.example.solidconnection.mentor.domain.Mentor;
14-
import com.example.solidconnection.mentor.domain.MentorApplication;
15-
import com.example.solidconnection.mentor.domain.MentorApplicationStatus;
1612
import com.example.solidconnection.mentor.dto.ChannelRequest;
17-
import com.example.solidconnection.mentor.dto.MentorMyPageCreateRequest;
1813
import com.example.solidconnection.mentor.dto.MentorMyPageResponse;
1914
import com.example.solidconnection.mentor.dto.MentorMyPageUpdateRequest;
2015
import com.example.solidconnection.mentor.repository.MentorApplicationRepository;
@@ -65,50 +60,17 @@ public void updateMentorMyPage(long siteUserId, MentorMyPageUpdateRequest reques
6560

6661
mentor.updateIntroduction(request.introduction());
6762
mentor.updatePassTip(request.passTip());
68-
updateChannel(request.channels(), mentor);
69-
}
7063

71-
private void updateChannel(List<ChannelRequest> channelRequests, Mentor mentor) {
72-
List<Channel> newChannels = buildChannels(channelRequests);
64+
List<Channel> newChannels = buildChannels(request.channels());
7365
mentor.updateChannels(newChannels);
7466
}
7567

76-
@Transactional
77-
public void createMentorMyPage(long siteUserId, MentorMyPageCreateRequest request) {
78-
validateUserCanCreateMentor(siteUserId);
79-
validateChannelRegistrationLimit(request.channels());
80-
MentorApplication mentorApplication = mentorApplicationRepository.findBySiteUserIdAndMentorApplicationStatus(siteUserId, MentorApplicationStatus.APPROVED)
81-
.orElseThrow(() -> new CustomException(MENTOR_APPLICATION_NOT_FOUND));
82-
83-
Mentor mentor = new Mentor(
84-
request.introduction(),
85-
request.passTip(),
86-
siteUserId,
87-
mentorApplication.getUniversityId(),
88-
mentorApplication.getTermId()
89-
);
90-
91-
createChannels(request.channels(), mentor);
92-
mentorRepository.save(mentor);
93-
}
94-
95-
private void validateUserCanCreateMentor(long siteUserId) {
96-
if (mentorRepository.existsBySiteUserId(siteUserId)) {
97-
throw new CustomException(MENTOR_ALREADY_EXISTS);
98-
}
99-
}
100-
10168
private void validateChannelRegistrationLimit(List<ChannelRequest> channelRequests) {
10269
if (channelRequests.size() > CHANNEL_REGISTRATION_LIMIT) {
10370
throw new CustomException(CHANNEL_REGISTRATION_LIMIT_EXCEEDED);
10471
}
10572
}
10673

107-
private void createChannels(List<ChannelRequest> channelRequests, Mentor mentor) {
108-
List<Channel> newChannels = buildChannels(channelRequests);
109-
mentor.createChannels(newChannels);
110-
}
111-
11274
private List<Channel> buildChannels(List<ChannelRequest> channelRequests) {
11375
int sequence = CHANNEL_SEQUENCE_START_NUMBER;
11476
List<Channel> newChannels = new ArrayList<>();

src/main/java/com/example/solidconnection/siteuser/domain/SiteUser.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,4 +130,8 @@ public void updatePassword(String newEncodedPassword) {
130130
public void updateUserStatus(UserStatus status) {
131131
this.userStatus = status;
132132
}
133+
134+
public void becomeMentor() {
135+
this.role = Role.MENTOR;
136+
}
133137
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
ALTER TABLE mentor
2+
MODIFY introduction VARCHAR(1000) NULL;
3+
4+
ALTER TABLE mentor
5+
MODIFY pass_tip VARCHAR(1000) NULL;

0 commit comments

Comments
 (0)