Skip to content

Commit 7aad1d4

Browse files
committed
feat(mentorship): add motivation field to mentorship requests and responseMessage to mentor responses; update request/response DTOs and related unit tests
1 parent 2a5ac66 commit 7aad1d4

File tree

11 files changed

+230
-51
lines changed

11 files changed

+230
-51
lines changed

apps/jobboard-backend/src/main/java/org/bounswe/jobboardbackend/mentorship/controller/MentorshipController.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,15 +150,15 @@ public ResponseEntity<MentorshipRequestDTO> getMentorshipRequest(
150150

151151

152152
@PatchMapping("/requests/{requestId}/respond")
153-
public ResponseEntity<MentorshipRequestDTO> respondToMentorshipRequest(
153+
public ResponseEntity<MentorshipRequestResponseDTO> respondToMentorshipRequest(
154154
@PathVariable Long requestId,
155155
@Valid @RequestBody RespondToRequestDTO responseDTO,
156156
Authentication auth
157157
) {
158158
UserDetailsImpl userDetails = (UserDetailsImpl) auth.getPrincipal();
159-
MentorshipRequestDTO updatedRequest = mentorshipService.respondToMentorshipRequest(
159+
MentorshipRequestResponseDTO updatedRequest = mentorshipService.respondToMentorshipRequest(
160160
requestId,
161-
responseDTO.accept(),
161+
responseDTO,
162162
userDetails.getId()
163163
);
164164
return new ResponseEntity<>(updatedRequest, HttpStatus.OK);

apps/jobboard-backend/src/main/java/org/bounswe/jobboardbackend/mentorship/dto/CreateMentorshipRequestDTO.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33

44

5+
import jakarta.validation.constraints.NotBlank;
56
import jakarta.validation.constraints.NotNull;
67

78
public record CreateMentorshipRequestDTO(
8-
@NotNull Long mentorId
9+
@NotNull Long mentorId,
10+
@NotBlank String motivation
911
) {}

apps/jobboard-backend/src/main/java/org/bounswe/jobboardbackend/mentorship/dto/MentorshipRequestDTO.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@ public record MentorshipRequestDTO(
77
String requesterId,
88
String mentorId,
99
String status,
10-
LocalDateTime createdAt
10+
LocalDateTime createdAt,
11+
String motivation
1112
) {}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.bounswe.jobboardbackend.mentorship.dto;
2+
3+
import java.time.LocalDateTime;
4+
5+
public record MentorshipRequestResponseDTO(
6+
String id,
7+
String requesterId,
8+
String mentorId,
9+
String status,
10+
LocalDateTime createdAt,
11+
String motivation,
12+
String responseMessage
13+
) {}
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package org.bounswe.jobboardbackend.mentorship.dto;
22

3+
import jakarta.validation.constraints.NotBlank;
34
import jakarta.validation.constraints.NotNull;
45

56
public record RespondToRequestDTO(
6-
@NotNull Boolean accept
7-
) {}
7+
@NotNull Boolean accept,
8+
@NotBlank String responseMessage
9+
) {}

apps/jobboard-backend/src/main/java/org/bounswe/jobboardbackend/mentorship/model/MentorshipRequest.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
@Entity
1111
@Data
12+
@Table(name = "mentorship_request")
1213
public class MentorshipRequest {
1314
@Id
1415
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -27,12 +28,20 @@ public class MentorshipRequest {
2728

2829
private LocalDateTime createdAt;
2930

30-
public void accept() {
31+
@Column(nullable = false, columnDefinition = "TEXT DEFAULT 'Not provided'")
32+
private String motivation;
33+
34+
@Column
35+
private String responseMessage;
36+
37+
public void accept(String message) {
3138
this.status = RequestStatus.ACCEPTED;
39+
this.responseMessage = message;
3240
}
3341

34-
public void decline() {
42+
public void decline(String message) {
3543
this.status = RequestStatus.DECLINED;
44+
this.responseMessage = message;
3645
}
3746

3847

apps/jobboard-backend/src/main/java/org/bounswe/jobboardbackend/mentorship/service/MentorshipService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public interface MentorshipService {
2222
MentorProfileDTO updateMentorProfile(Long userId, UpdateMentorProfileDTO updateDTO);
2323
void deleteMentorProfile(Long userId);
2424
MentorshipRequestDTO createMentorshipRequest(CreateMentorshipRequestDTO requestDTO, Long jobSeekerId);
25-
MentorshipRequestDTO respondToMentorshipRequest(Long requestId, boolean accept, Long mentorId);
25+
MentorshipRequestResponseDTO respondToMentorshipRequest(Long requestId, RespondToRequestDTO respondToRequestDTO, Long mentorId);
2626
void rateMentor(CreateRatingDTO ratingDTO, Long jobSeekerId);
2727
MentorshipRequestDTO getMentorshipRequest(Long requestId, Long userId);
2828
void completeMentorship(Long resumeReviewId, Authentication auth);

apps/jobboard-backend/src/main/java/org/bounswe/jobboardbackend/mentorship/service/MentorshipServiceImpl.java

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,7 @@ public MentorshipRequestDTO createMentorshipRequest(CreateMentorshipRequestDTO r
251251
newRequest.setRequester(jobSeeker);
252252
newRequest.setStatus(RequestStatus.PENDING);
253253
newRequest.setCreatedAt(LocalDateTime.now());
254+
newRequest.setMotivation(requestDTO.motivation());
254255
MentorshipRequest savedRequest = mentorshipRequestRepository.save(newRequest);
255256

256257
// Trigger notification
@@ -261,7 +262,7 @@ public MentorshipRequestDTO createMentorshipRequest(CreateMentorshipRequestDTO r
261262

262263
@Override
263264
@Transactional
264-
public MentorshipRequestDTO respondToMentorshipRequest(Long requestId, boolean accept, Long mentorId) {
265+
public MentorshipRequestResponseDTO respondToMentorshipRequest(Long requestId, RespondToRequestDTO respondToRequestDTO, Long mentorId) {
265266
MentorshipRequest request = mentorshipRequestRepository.findById(requestId)
266267
.orElseThrow(() -> new HandleException(ErrorCode.REQUEST_NOT_FOUND, "Request not found"));
267268

@@ -273,9 +274,11 @@ public MentorshipRequestDTO respondToMentorshipRequest(Long requestId, boolean a
273274
throw new HandleException(ErrorCode.REQUEST_ALREADY_PROCESSED, "This request has already been responded to.");
274275
}
275276

276-
if (accept) {
277277

278-
request.accept();
278+
279+
if (respondToRequestDTO.accept()) {
280+
281+
request.accept(respondToRequestDTO.responseMessage());
279282

280283
ResumeReview review = new ResumeReview();
281284
review.setJobSeeker(request.getRequester());
@@ -295,14 +298,14 @@ public MentorshipRequestDTO respondToMentorshipRequest(Long requestId, boolean a
295298
// notificationService.notifyUser(request.getRequester(), "Your request was accepted!"); // (Future implementation)
296299

297300
} else {
298-
request.decline();
301+
request.decline(respondToRequestDTO.responseMessage());
299302

300303
// Trigger notification
301304
// notificationService.notifyUser(request.getRequester(), "Your request was declined."); // (Future implementation)
302305
}
303306

304307
MentorshipRequest updatedRequest = mentorshipRequestRepository.save(request);
305-
return toMentorshipRequestDTO(updatedRequest);
308+
return toMentorshipRequestResponseDTO(updatedRequest);
306309
}
307310

308311
@Override
@@ -500,7 +503,20 @@ private MentorshipRequestDTO toMentorshipRequestDTO(MentorshipRequest request) {
500503
request.getRequester().getId().toString(),
501504
request.getMentor().getId().toString(),
502505
request.getStatus().name(),
503-
request.getCreatedAt()
506+
request.getCreatedAt(),
507+
request.getMotivation()
508+
);
509+
}
510+
511+
private MentorshipRequestResponseDTO toMentorshipRequestResponseDTO(MentorshipRequest request) {
512+
return new MentorshipRequestResponseDTO(
513+
request.getId().toString(),
514+
request.getRequester().getId().toString(),
515+
request.getMentor().getId().toString(),
516+
request.getStatus().name(),
517+
request.getCreatedAt(),
518+
request.getMotivation(),
519+
request.getResponseMessage()
504520
);
505521
}
506522

apps/jobboard-backend/src/test/java/org/bounswe/jobboardbackend/mentorship/controller/MentorshipControllerTest.java

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.springframework.security.core.Authentication;
1212
import org.springframework.web.multipart.MultipartFile;
1313

14+
import java.time.LocalDateTime;
1415
import java.util.List;
1516

1617
import static org.junit.jupiter.api.Assertions.*;
@@ -263,7 +264,14 @@ void getMentorshipRequest_usesAuthenticatedUserId() {
263264
when(auth.getPrincipal()).thenReturn(principal);
264265
when(principal.getId()).thenReturn(99L);
265266

266-
MentorshipRequestDTO dto = mock(MentorshipRequestDTO.class);
267+
MentorshipRequestDTO dto = new MentorshipRequestDTO(
268+
"50",
269+
"10",
270+
"99",
271+
"PENDING",
272+
LocalDateTime.now(),
273+
"Because I want to learn"
274+
);
267275

268276
when(mentorshipService.getMentorshipRequest(requestId, 99L))
269277
.thenReturn(dto);
@@ -273,33 +281,39 @@ void getMentorshipRequest_usesAuthenticatedUserId() {
273281

274282
assertEquals(HttpStatus.OK, response.getStatusCode());
275283
assertSame(dto, response.getBody());
284+
276285
verify(mentorshipService).getMentorshipRequest(requestId, 99L);
286+
verifyNoMoreInteractions(mentorshipService);
277287
}
278288

289+
279290
@Test
280-
void respondToMentorshipRequest_usesAcceptFlagAndUserId() {
291+
void respondToMentorshipRequest_usesAuthenticatedUserIdAndDelegatesToService() {
281292
Long requestId = 60L;
293+
282294
Authentication auth = mock(Authentication.class);
283295
UserDetailsImpl principal = mock(UserDetailsImpl.class);
284296
when(auth.getPrincipal()).thenReturn(principal);
285297
when(principal.getId()).thenReturn(11L);
286298

287-
RespondToRequestDTO responseDTO = mock(RespondToRequestDTO.class);
288-
when(responseDTO.accept()).thenReturn(true);
299+
RespondToRequestDTO dto =
300+
new RespondToRequestDTO(true, "Happy to mentor you.");
289301

290-
MentorshipRequestDTO returned = mock(MentorshipRequestDTO.class);
302+
MentorshipRequestResponseDTO serviceResult = mock(MentorshipRequestResponseDTO.class);
303+
when(mentorshipService.respondToMentorshipRequest(requestId, dto, 11L))
304+
.thenReturn(serviceResult);
291305

292-
when(mentorshipService.respondToMentorshipRequest(requestId, true, 11L))
293-
.thenReturn(returned);
294-
295-
ResponseEntity<MentorshipRequestDTO> response =
296-
mentorshipController.respondToMentorshipRequest(requestId, responseDTO, auth);
306+
ResponseEntity<MentorshipRequestResponseDTO> response =
307+
mentorshipController.respondToMentorshipRequest(requestId, dto, auth);
297308

298309
assertEquals(HttpStatus.OK, response.getStatusCode());
299-
assertSame(returned, response.getBody());
300-
verify(mentorshipService).respondToMentorshipRequest(requestId, true, 11L);
310+
assertSame(serviceResult, response.getBody());
311+
312+
verify(mentorshipService).respondToMentorshipRequest(requestId, dto, 11L);
313+
verifyNoMoreInteractions(mentorshipService);
301314
}
302315

316+
303317
// ----------------------------------------------------------------------
304318
// Rating endpoint
305319
// ----------------------------------------------------------------------

apps/jobboard-backend/src/test/java/org/bounswe/jobboardbackend/mentorship/repository/MentorshipRepositoriesTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,14 @@ private MentorshipRequest buildAndPersistMentorshipRequest(MentorProfile mentor,
6969
request.setRequester(mentee);
7070
request.setStatus(RequestStatus.PENDING);
7171
request.setCreatedAt(LocalDateTime.now());
72+
request.setMotivation("Test motivation");
7273

7374
entityManager.persist(mentee);
7475
entityManager.persist(request);
7576
return request;
7677
}
7778

79+
7880
private ResumeReview buildAndPersistResumeReview(MentorshipRequest request,
7981
MentorProfile mentor,
8082
User mentee) {

0 commit comments

Comments
 (0)