Skip to content

Commit 8d9a2b2

Browse files
authored
Merge pull request #85 from GD-YD/feature/modify-and-delete-answer
대학생 답변글 수정 및 삭제 API 구현
2 parents 0842665 + fbcb008 commit 8d9a2b2

File tree

8 files changed

+120
-2
lines changed

8 files changed

+120
-2
lines changed

gd-yd-api/src/main/java/com/gdyd/gdydapi/controller/mentoring/MentoringController.java

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

33
import com.gdyd.gdydapi.request.mentoring.CreateHighSchoolStudentQuestionRequest;
44
import com.gdyd.gdydapi.request.mentoring.CreateUniversityStudentAnswerRequest;
5+
import com.gdyd.gdydapi.request.mentoring.UpdateUniversityStudentAnswerRequest;
56
import com.gdyd.gdydapi.request.report.ReportRequest;
67
import com.gdyd.gdydapi.response.common.LikeListResponse;
78
import com.gdyd.gdydapi.response.common.PageResponse;
@@ -52,6 +53,27 @@ public ResponseEntity<CreateUniversityStudentAnswerResponse> createUniversityStu
5253
return ResponseEntity.ok(response);
5354
}
5455

56+
@Operation(summary = "대학생 답변 수정 API", description = "대학생이 답변을 수정하는 API")
57+
@Parameter(name = "universityStudentAnswerId", description = "대학생 답변글 ID", required = true)
58+
@PutMapping("/university-student-answer/{universityStudentAnswerId}")
59+
public ResponseEntity<UpdateUniversityStudentAnswerResponse> updateUniversityStudentAnswer(
60+
@PathVariable("universityStudentAnswerId") Long universityStudentAnswerId,
61+
@RequestBody @Valid UpdateUniversityStudentAnswerRequest request
62+
) {
63+
UpdateUniversityStudentAnswerResponse response = mentoringCommandService.updateUniversityStudentAnswer(universityStudentAnswerId, request);
64+
return ResponseEntity.ok(response);
65+
}
66+
67+
@Operation(summary = "대학생 답변 삭제 API", description = "대학생이 답변을 삭제하는 API")
68+
@Parameter(name = "universityStudentAnswerId", description = "대학생 답변글 ID", required = true)
69+
@DeleteMapping("/university-student-answer/{universityStudentAnswerId}")
70+
public ResponseEntity<DeleteUniversityStudentAnswerResponse> deleteUniversityStudentAnswer(
71+
@PathVariable("universityStudentAnswerId") Long universityStudentAnswerId
72+
) {
73+
DeleteUniversityStudentAnswerResponse response = mentoringCommandService.deleteUniversityStudentAnswer(universityStudentAnswerId);
74+
return ResponseEntity.ok(response);
75+
}
76+
5577
@Operation(summary = "고등학생 질문 목록 조회 API", description = "고등학생 질문 목록을 페이지네이션으로 조회하는 API")
5678
@Parameter(name = "page", description = "페이지 번호")
5779
@Parameter(name = "size", description = "페이지 크기")
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.gdyd.gdydapi.request.mentoring;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
import jakarta.validation.constraints.NotBlank;
5+
6+
@Schema(description = "대학생 답변 수정 요청")
7+
public record UpdateUniversityStudentAnswerRequest(
8+
@NotBlank(message = "대학생 답변 내용은 필수입니다.")
9+
@Schema(description = "대학생 답변 내용", example = "네, 가능합니다.")
10+
String answer
11+
) {
12+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.gdyd.gdydapi.response.mentoring;
2+
3+
import com.gdyd.gdydcore.domain.mentoring.UniversityStudentAnswer;
4+
import io.swagger.v3.oas.annotations.media.Schema;
5+
import lombok.Builder;
6+
7+
@Builder
8+
@Schema(description = "대학생 답변 삭제 응답")
9+
public record DeleteUniversityStudentAnswerResponse(
10+
@Schema(description = "대학생 답변 ID", example = "1")
11+
Long id
12+
) {
13+
public static DeleteUniversityStudentAnswerResponse from(UniversityStudentAnswer universityStudentAnswer) {
14+
return DeleteUniversityStudentAnswerResponse.builder()
15+
.id(universityStudentAnswer.getId())
16+
.build();
17+
}
18+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.gdyd.gdydapi.response.mentoring;
2+
3+
import com.gdyd.gdydcore.domain.mentoring.UniversityStudentAnswer;
4+
import io.swagger.v3.oas.annotations.media.Schema;
5+
import lombok.Builder;
6+
7+
@Builder
8+
@Schema(description = "대학생 답변 수정 응답")
9+
public record UpdateUniversityStudentAnswerResponse(
10+
@Schema(description = "대학생 답변 ID", example = "1")
11+
Long universityStudentAnswerId,
12+
13+
@Schema(description = "대학생 답변 내용", example = "네, 가능합니다.")
14+
String answer
15+
) {
16+
public static UpdateUniversityStudentAnswerResponse from(UniversityStudentAnswer universityStudentAnswer) {
17+
return UpdateUniversityStudentAnswerResponse.builder()
18+
.universityStudentAnswerId(universityStudentAnswer.getId())
19+
.answer(universityStudentAnswer.getAnswer())
20+
.build();
21+
}
22+
}

gd-yd-api/src/main/java/com/gdyd/gdydapi/service/mentoring/MentoringCommandService.java

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@
22

33
import com.gdyd.gdydapi.request.mentoring.CreateHighSchoolStudentQuestionRequest;
44
import com.gdyd.gdydapi.request.mentoring.CreateUniversityStudentAnswerRequest;
5+
import com.gdyd.gdydapi.request.mentoring.UpdateUniversityStudentAnswerRequest;
56
import com.gdyd.gdydapi.request.report.ReportRequest;
67
import com.gdyd.gdydapi.response.common.LikeListResponse;
7-
import com.gdyd.gdydapi.response.common.ScrapListResponse;
88
import com.gdyd.gdydapi.response.common.ReportResponse;
9+
import com.gdyd.gdydapi.response.common.ScrapListResponse;
910
import com.gdyd.gdydapi.response.mentoring.CreateHighSchoolStudentQuestionResponse;
1011
import com.gdyd.gdydapi.response.mentoring.CreateUniversityStudentAnswerResponse;
12+
import com.gdyd.gdydapi.response.mentoring.DeleteUniversityStudentAnswerResponse;
13+
import com.gdyd.gdydapi.response.mentoring.UpdateUniversityStudentAnswerResponse;
1114
import com.gdyd.gdydapi.service.member.MemberQueryService;
1215
import com.gdyd.gdydauth.jwt.JwtProvider;
1316
import com.gdyd.gdydauth.jwt.Token;
@@ -20,8 +23,8 @@
2023
import com.gdyd.gdydcore.domain.report.Report;
2124
import com.gdyd.gdydcore.service.member.LikeListService;
2225
import com.gdyd.gdydcore.service.member.MemberService;
23-
import com.gdyd.gdydcore.service.member.ScrapListService;
2426
import com.gdyd.gdydcore.service.member.ReportService;
27+
import com.gdyd.gdydcore.service.member.ScrapListService;
2528
import com.gdyd.gdydcore.service.mentoring.HighSchoolStudentQuestionMediaService;
2629
import com.gdyd.gdydcore.service.mentoring.HighSchoolStudentQuestionService;
2730
import com.gdyd.gdydcore.service.mentoring.UniversityStudentAnswerService;
@@ -109,6 +112,34 @@ public CreateUniversityStudentAnswerResponse createUniversityStudentAnswer(Long
109112
return CreateUniversityStudentAnswerResponse.from(answer);
110113
}
111114

115+
/**
116+
* 대학생 답변 수정
117+
*/
118+
public UpdateUniversityStudentAnswerResponse updateUniversityStudentAnswer(Long universityStudentAnswerId,UpdateUniversityStudentAnswerRequest request) {
119+
Long memberId = PrincipalUtil.getMemberIdByPrincipal();
120+
UniversityStudentAnswer answer = universityStudentAnswerService.getUniversityStudentAnswerById(universityStudentAnswerId);
121+
if (!answer.getUniversityStudent().getId().equals(memberId)) {
122+
throw new BusinessException(ErrorCode.INVALID_MEMBER_REQUEST);
123+
}
124+
answer.updateAnswer(request.answer());
125+
return UpdateUniversityStudentAnswerResponse.from(answer);
126+
}
127+
128+
/**
129+
* 대학생 답변 삭제
130+
*/
131+
public DeleteUniversityStudentAnswerResponse deleteUniversityStudentAnswer(Long universityStudentAnswerId) {
132+
Long memberId = PrincipalUtil.getMemberIdByPrincipal();
133+
UniversityStudentAnswer answer = universityStudentAnswerService.getUniversityStudentAnswerById(universityStudentAnswerId);
134+
if (!answer.getUniversityStudent().getId().equals(memberId)) {
135+
throw new BusinessException(ErrorCode.INVALID_MEMBER_REQUEST);
136+
}
137+
// 대학생 답변 삭제 후 고등학생 질문의 답변 수 감소
138+
universityStudentAnswerService.delete(answer);
139+
answer.getHighSchoolStudentQuestion().decreaseAnswerCount();
140+
return DeleteUniversityStudentAnswerResponse.from(answer);
141+
}
142+
112143
/**
113144
* 고등학생 질문 좋아요 증가
114145
*/

gd-yd-core/src/main/java/com/gdyd/gdydcore/domain/mentoring/HighSchoolStudentQuestion.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,10 @@ public void increaseAnswerCount() {
9797
this.answerCount++;
9898
}
9999

100+
public void decreaseAnswerCount() {
101+
this.answerCount--;
102+
}
103+
100104
public void increaseLikeCount() {
101105
this.likeCount++;
102106
}

gd-yd-core/src/main/java/com/gdyd/gdydcore/domain/mentoring/UniversityStudentAnswer.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,10 @@ public UniversityStudentAnswer(String answer, UniversityStudent universityStuden
5757
this.highSchoolStudentQuestion = highSchoolStudentQuestion;
5858
}
5959

60+
public void updateAnswer(String answer) {
61+
this.answer = answer;
62+
}
63+
6064
public void increaseLikeCount() {
6165
this.likeCount++;
6266
}

gd-yd-core/src/main/java/com/gdyd/gdydcore/service/mentoring/UniversityStudentAnswerService.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,9 @@ public UniversityStudentAnswer getUniversityStudentAnswerById(Long id) {
2222
public void save(UniversityStudentAnswer universityStudentAnswer) {
2323
universityStudentAnswerRepository.save(universityStudentAnswer);
2424
}
25+
26+
@Transactional
27+
public void delete(UniversityStudentAnswer universityStudentAnswer) {
28+
universityStudentAnswerRepository.delete(universityStudentAnswer);
29+
}
2530
}

0 commit comments

Comments
 (0)