Skip to content

Commit 42eee38

Browse files
dooongdaengsso0omluckheetlswltjqdbfgml2000
authored
Feat/70 1 (#234)
* feat:ã�:job 연결, admin dto 수정 * fix:test 오류 해결 --------- Co-authored-by: sso0om <[email protected]> Co-authored-by: 석희성 <[email protected]> Co-authored-by: 신지섭 <[email protected]> Co-authored-by: dbfgml20 <[email protected]>
1 parent 431c833 commit 42eee38

File tree

18 files changed

+364
-105
lines changed

18 files changed

+364
-105
lines changed

back/src/main/java/com/back/domain/member/member/controller/MemberAuthController.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.back.domain.member.member.dto.MentorSignupVerifyRequest;
55
import com.back.domain.member.member.dto.MentorVerificationRequest;
66
import com.back.domain.member.member.dto.LoginRequest;
7+
import com.back.domain.member.member.dto.MemberMeResponse;
78
import com.back.domain.member.member.entity.Member;
89
import com.back.domain.member.member.service.MemberService;
910
import com.back.global.rq.Rq;
@@ -87,9 +88,9 @@ public RsData<Void> logout() {
8788

8889
@GetMapping("/me")
8990
@Operation(summary = "사용자 정보 조회")
90-
public RsData<Member> me() {
91-
Member actor = memberService.getCurrentUser(rq.getActor());
92-
return new RsData<>("200-5", "사용자 정보 조회 성공", actor);
91+
public RsData<MemberMeResponse> me() {
92+
MemberMeResponse response = memberService.getMemberMe(rq.getActor());
93+
return new RsData<>("200-5", "사용자 정보 조회 성공", response);
9394
}
9495

9596
@PostMapping("/refresh")
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.back.domain.member.member.dto;
2+
3+
import com.back.domain.member.member.entity.Member;
4+
5+
public record MemberMeResponse(
6+
Long memberId,
7+
String publicId,
8+
String email,
9+
String name,
10+
String nickname,
11+
String role,
12+
Long mentorId,
13+
Long menteeId
14+
) {
15+
public static MemberMeResponse of(Member member, Long mentorId, Long menteeId) {
16+
return new MemberMeResponse(
17+
member.getId(),
18+
member.getPublicId(),
19+
member.getEmail(),
20+
member.getName(),
21+
member.getNickname(),
22+
member.getRole().name(),
23+
mentorId,
24+
menteeId
25+
);
26+
}
27+
}

back/src/main/java/com/back/domain/member/member/dto/MemberSearchResponse.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,10 @@ public record MemberSearchResponse(
1515
Boolean isDeleted,
1616
LocalDateTime createdAt,
1717
LocalDateTime modifiedAt,
18-
String career, // 멘토인 경우에만 값이 있음 (TODO: Job 연결 후 수정 예정)
18+
String job, // 멘토/멘티 모두: 직업명 또는 관심분야
1919
Integer careerYears, // 멘토인 경우에만 값이 있음
20-
String interestedField // 멘티인 경우에만 값이 있음 (TODO: Job 연결 후 수정 예정)
20+
Long mentorId, // 멘토 ID (멘토인 경우에만 값이 있음)
21+
Long menteeId // 멘티 ID (멘티인 경우에만 값이 있음)
2122
) {
2223
public static MemberSearchResponse from(Member member, Mentor mentor, Mentee mentee) {
2324
return new MemberSearchResponse(
@@ -29,9 +30,10 @@ public static MemberSearchResponse from(Member member, Mentor mentor, Mentee men
2930
member.getIsDeleted(),
3031
member.getCreateDate(),
3132
member.getModifyDate(),
32-
mentor != null ? "TODO: Job 연결 필요" : null, // TODO: Job 연결 후 수정
33+
mentor != null ? mentor.getJob().getName() : (mentee != null ? mentee.getJob().getName() : null),
3334
mentor != null ? mentor.getCareerYears() : null,
34-
mentee != null ? "TODO: Job 연결 필요" : null // TODO: Job 연결 후 수정
35+
mentor != null ? mentor.getId() : null,
36+
mentee != null ? mentee.getId() : null
3537
);
3638
}
3739
}

back/src/main/java/com/back/domain/member/member/dto/MenteeMyPageResponse.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ public record MenteeMyPageResponse(
88
String email,
99
String name,
1010
String nickname,
11-
Long jobId
11+
String job
1212
) {
1313
public static MenteeMyPageResponse from(Member member, Mentee mentee) {
1414
return new MenteeMyPageResponse(
1515
member.getId(),
1616
member.getEmail(),
1717
member.getName(),
1818
member.getNickname(),
19-
mentee.getJobId()
19+
mentee.getJob().getName()
2020
);
2121
}
2222
}

back/src/main/java/com/back/domain/member/member/dto/MentorMyPageResponse.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public record MentorMyPageResponse(
88
String email,
99
String name,
1010
String nickname,
11-
Long jobId,
11+
String job,
1212
Double rate,
1313
Integer careerYears
1414
) {
@@ -18,7 +18,7 @@ public static MentorMyPageResponse from(Member member, Mentor mentor) {
1818
member.getEmail(),
1919
member.getName(),
2020
member.getNickname(),
21-
mentor.getJobId(),
21+
mentor.getJob().getName(),
2222
mentor.getRate(),
2323
mentor.getCareerYears()
2424
);

back/src/main/java/com/back/domain/member/member/service/MemberService.java

Lines changed: 72 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.back.domain.member.member.service;
22

3+
import com.back.domain.job.job.entity.Job;
4+
import com.back.domain.job.job.repository.JobRepository;
35
import com.back.domain.member.member.dto.*;
46
import com.back.domain.member.member.entity.Member;
57
import com.back.domain.member.member.repository.MemberRepository;
@@ -24,6 +26,7 @@ public class MemberService {
2426
private final MentorRepository mentorRepository;
2527
private final MenteeRepository menteeRepository;
2628
private final PasswordEncoder passwordEncoder;
29+
private final JobRepository jobRepository;
2730

2831
@Transactional
2932
public Member joinMentee(String email, String name, String nickname, String password, String interestedField) {
@@ -44,8 +47,11 @@ public Member joinMentee(String email, String name, String nickname, String pass
4447
Member member = new Member(email, passwordEncoder.encode(password), name, nickname, Member.Role.MENTEE);
4548
Member savedMember = memberRepository.save(member);
4649

47-
// TODO: interestedField를 jobId로 매핑하는 로직 필요
48-
Mentee mentee = new Mentee(savedMember, null);
50+
// interestedField로 Job 찾기 또는 생성
51+
Job job = jobRepository.findByName(interestedField)
52+
.orElseGet(() -> jobRepository.save(new Job(interestedField, null)));
53+
54+
Mentee mentee = new Mentee(savedMember, job);
4955
menteeRepository.save(mentee);
5056

5157
return savedMember;
@@ -70,8 +76,11 @@ public Member joinMentor(String email, String name, String nickname, String pass
7076
Member member = new Member(email, passwordEncoder.encode(password), name, nickname, Member.Role.MENTOR);
7177
Member savedMember = memberRepository.save(member);
7278

73-
// TODO: career를 jobId로 매핑하는 로직 필요
74-
Mentor mentor = new Mentor(savedMember, null, null, careerYears);
79+
// career로 Job 찾기 또는 생성
80+
Job job = jobRepository.findByName(career)
81+
.orElseGet(() -> jobRepository.save(new Job(career, null)));
82+
83+
Mentor mentor = new Mentor(savedMember, job, null, careerYears);
7584
mentorRepository.save(mentor);
7685

7786
return savedMember;
@@ -146,6 +155,27 @@ public Member getCurrentUser(Member actor) {
146155
return actor;
147156
}
148157

158+
public MemberMeResponse getMemberMe(Member actor) {
159+
if (actor == null) {
160+
throw new ServiceException("401-1", "로그인이 필요합니다.");
161+
}
162+
163+
Long mentorId = null;
164+
Long menteeId = null;
165+
166+
if (actor.getRole() == Member.Role.MENTOR) {
167+
mentorId = mentorRepository.findByMemberId(actor.getId())
168+
.map(Mentor::getId)
169+
.orElse(null);
170+
} else if (actor.getRole() == Member.Role.MENTEE) {
171+
menteeId = menteeRepository.findByMemberId(actor.getId())
172+
.map(Mentee::getId)
173+
.orElse(null);
174+
}
175+
176+
return MemberMeResponse.of(actor, mentorId, menteeId);
177+
}
178+
149179
public Member refreshAccessToken(String refreshToken) {
150180
if (refreshToken.isBlank()) {
151181
throw new ServiceException("401-1", "Refresh token이 없습니다.");
@@ -191,7 +221,17 @@ public void updateMentee(Member currentUser, MenteeUpdateRequest request) {
191221
member.updateNickname(request.nickname());
192222
memberRepository.save(member);
193223

194-
// TODO: interestedField를 jobId로 매핑하는 로직 필요 (현재는 기존 jobId 유지)
224+
// Mentee 정보 업데이트 (interestedField)
225+
if (request.interestedField() != null) {
226+
Mentee mentee = menteeRepository.findByMemberId(currentUser.getId())
227+
.orElseThrow(() -> new ServiceException("404-2", "멘티 정보를 찾을 수 없습니다."));
228+
229+
Job job = jobRepository.findByName(request.interestedField())
230+
.orElseGet(() -> jobRepository.save(new Job(request.interestedField(), null)));
231+
232+
mentee.updateJob(job);
233+
menteeRepository.save(mentee);
234+
}
195235
}
196236

197237
public MentorMyPageResponse getMentorMyPage(Member currentUser) {
@@ -216,11 +256,18 @@ public void updateMentor(Member currentUser, MentorUpdateRequest request) {
216256
member.updateNickname(request.nickname());
217257
memberRepository.save(member);
218258

219-
// Mentor 정보 업데이트 (경력연수)
220-
mentor.updateCareerYears(request.careerYears());
221-
mentorRepository.save(mentor);
259+
// Mentor 정보 업데이트 (경력연수, career)
260+
if (request.careerYears() != null) {
261+
mentor.updateCareerYears(request.careerYears());
262+
}
222263

223-
// TODO: career를 jobId로 매핑하는 로직 필요 (현재는 기존 jobId 유지)
264+
if (request.career() != null) {
265+
Job job = jobRepository.findByName(request.career())
266+
.orElseGet(() -> jobRepository.save(new Job(request.career(), null)));
267+
mentor.updateJob(job);
268+
}
269+
270+
mentorRepository.save(mentor);
224271
}
225272

226273

@@ -288,11 +335,25 @@ public void updateMemberByAdmin(Long memberId, String name, String nickname, Str
288335
Mentor mentor = mentorRepository.findByMemberIdIncludingDeleted(member.getId())
289336
.orElse(null);
290337
if (mentor != null) {
291-
if (careerYears != null) mentor.updateCareerYears(careerYears);
338+
if (careerYears != null) {
339+
mentor.updateCareerYears(careerYears);
340+
}
341+
if (career != null) {
342+
Job job = jobRepository.findByName(career)
343+
.orElseGet(() -> jobRepository.save(new Job(career, null)));
344+
mentor.updateJob(job);
345+
}
292346
mentorRepository.save(mentor);
293347
}
294348
} else if (member.getRole() == Member.Role.MENTEE && interestedField != null) {
295-
// TODO: interestedField 업데이트 로직 필요 (Mentee 엔티티에 업데이트 메서드가 있을 때)
349+
Mentee mentee = menteeRepository.findByMemberIdIncludingDeleted(member.getId())
350+
.orElse(null);
351+
if (mentee != null) {
352+
Job job = jobRepository.findByName(interestedField)
353+
.orElseGet(() -> jobRepository.save(new Job(interestedField, null)));
354+
mentee.updateJob(job);
355+
menteeRepository.save(mentee);
356+
}
296357
}
297358
}
298359

back/src/main/java/com/back/domain/member/mentee/entity/Mentee.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.back.domain.member.mentee.entity;
22

3+
import com.back.domain.job.job.entity.Job;
34
import com.back.domain.member.member.entity.Member;
45
import com.back.global.jpa.BaseEntity;
56
import jakarta.persistence.*;
@@ -15,19 +16,24 @@ public class Mentee extends BaseEntity {
1516
@JoinColumn(name = "member_id", nullable = false)
1617
private Member member;
1718

18-
@Column(name = "job_id")
19-
private Long jobId;
19+
@ManyToOne(fetch = FetchType.LAZY)
20+
@JoinColumn(name = "job_id", nullable = false)
21+
private Job job;
2022

2123
@Column(nullable = false)
2224
private Boolean isDeleted = false;
2325

2426
@Builder
25-
public Mentee(Member member, Long jobId) {
27+
public Mentee(Member member, Job job) {
2628
this.member = member;
27-
this.jobId = jobId;
29+
this.job = job;
2830
this.isDeleted = false;
2931
}
3032

33+
public void updateJob(Job job) {
34+
this.job = job;
35+
}
36+
3137
public void delete() {
3238
this.isDeleted = true;
3339
}

back/src/main/java/com/back/domain/member/mentor/entity/Mentor.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.back.domain.member.mentor.entity;
22

3+
import com.back.domain.job.job.entity.Job;
34
import com.back.domain.member.member.entity.Member;
45
import com.back.global.jpa.BaseEntity;
56
import jakarta.persistence.*;
@@ -15,8 +16,9 @@ public class Mentor extends BaseEntity {
1516
@JoinColumn(name = "member_id", nullable = false)
1617
private Member member;
1718

18-
@Column(name = "job_id")
19-
private Long jobId;
19+
@ManyToOne(fetch = FetchType.LAZY)
20+
@JoinColumn(name = "job_id", nullable = false)
21+
private Job job;
2022

2123
@Column
2224
private Double rate;
@@ -28,14 +30,18 @@ public class Mentor extends BaseEntity {
2830
private Boolean isDeleted = false;
2931

3032
@Builder
31-
public Mentor(Member member, Long jobId, Double rate, Integer careerYears) {
33+
public Mentor(Member member, Job job, Double rate, Integer careerYears) {
3234
this.member = member;
33-
this.jobId = jobId;
35+
this.job = job;
3436
this.rate = rate;
3537
this.careerYears = careerYears;
3638
this.isDeleted = false;
3739
}
3840

41+
public void updateJob(Job job) {
42+
this.job = job;
43+
}
44+
3945
public void updateCareerYears(Integer careerYears) {
4046
this.careerYears = careerYears;
4147
}

back/src/main/java/com/back/domain/roadmap/roadmap/repository/MentorRoadmapRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public interface MentorRoadmapRepository extends JpaRepository<MentorRoadmap, Lo
5050
SELECT DISTINCT mr FROM MentorRoadmap mr
5151
LEFT JOIN FETCH mr.nodes n
5252
LEFT JOIN FETCH n.task t
53-
WHERE mr.mentor.jobId = :jobId
53+
WHERE mr.mentor.job.id = :jobId
5454
ORDER BY mr.id, n.stepOrder
5555
""")
5656
List<MentorRoadmap> findAllByMentorJobIdWithNodes(@Param("jobId") Long jobId);

back/src/main/java/com/back/domain/roadmap/roadmap/service/MentorRoadmapService.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public MentorRoadmapSaveResponse create(Long mentorId, MentorRoadmapSaveRequest
6161
// CASCADE로 노드들이 자동 저장됨 (추가 save() 호출 불필요)
6262
mentorRoadmap.addNodes(allNodes);
6363

64-
eventPublisher.publishEvent(new MentorRoadmapChangeEvent(mentor.getJobId()));
64+
eventPublisher.publishEvent(new MentorRoadmapChangeEvent(mentor.getJob().getId()));
6565

6666
log.info("멘토 로드맵 생성 완료 - 멘토 ID: {}, 로드맵 ID: {}, 노드 수: {} (cascade 활용)",
6767
mentorId, mentorRoadmap.getId(), mentorRoadmap.getNodes().size());
@@ -134,7 +134,7 @@ public MentorRoadmapSaveResponse update(Long id, Long mentorId, MentorRoadmapSav
134134
log.info("멘토 로드맵 수정 완료 - 로드맵 ID: {}, 노드 수: {} (cascade 활용)",
135135
mentorRoadmap.getId(), mentorRoadmap.getNodes().size());
136136

137-
eventPublisher.publishEvent(new MentorRoadmapChangeEvent(mentorRoadmap.getMentor().getJobId()));
137+
eventPublisher.publishEvent(new MentorRoadmapChangeEvent(mentorRoadmap.getMentor().getJob().getId()));
138138

139139
return new MentorRoadmapSaveResponse(
140140
mentorRoadmap.getId(),
@@ -157,7 +157,7 @@ public void delete(Long roadmapId, Long mentorId) {
157157
throw new ServiceException("403", "본인의 로드맵만 삭제할 수 있습니다.");
158158
}
159159

160-
Long jobId = mentorRoadmap.getMentor().getJobId();
160+
Long jobId = mentorRoadmap.getMentor().getJob().getId();
161161

162162
// 1. 관련 노드들을 먼저 직접 삭제
163163
roadmapNodeRepository.deleteByRoadmapIdAndRoadmapType(

0 commit comments

Comments
 (0)