Skip to content

Commit

Permalink
Merge pull request #36 from KusitmsHDmedi/feature/33-survey
Browse files Browse the repository at this point in the history
[feat] 설문조사 결과 문항 비교 api 구현
  • Loading branch information
RyuKwanKon committed Sep 16, 2023
2 parents 416f4ca + 5210d2d commit 9a05fbb
Show file tree
Hide file tree
Showing 5 changed files with 84 additions and 30 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.kusithm.hdmedi_server.domain.survey.controller;

import com.kusithm.hdmedi_server.domain.survey.dto.request.CreateSurveyDto;
import com.kusithm.hdmedi_server.domain.survey.dto.response.SurveyDetailResponseDto;
import com.kusithm.hdmedi_server.domain.survey.dto.response.SurveyDetailResultDto;
import com.kusithm.hdmedi_server.domain.survey.dto.response.SurveyResultResponseDto;
import com.kusithm.hdmedi_server.domain.survey.service.SurveyService;
Expand All @@ -14,8 +15,6 @@
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RequiredArgsConstructor
@RequestMapping("/api/survey")
@Controller
Expand Down Expand Up @@ -46,8 +45,10 @@ public ResponseEntity<BaseResponse<?>> getSurveyResult(@AuthenticatedUserId fina
}

@GetMapping("/detail")
public ResponseEntity<BaseResponse<?>> getSurveyContent(@RequestParam final Long surveyId) {
public ResponseEntity<BaseResponse<?>> getSurveyContent(@AuthenticatedUserId final HDmediUser hDmediUser,
@RequestParam final Long surveyId) {
final SurveyDetailResponseDto responseDto = surveyService.getSurveyDetail(hDmediUser, surveyId);
return ResponseEntity.status(HttpStatus.OK)
.body(BaseResponse.of(SuccessCode.OK, null));
.body(BaseResponse.of(SuccessCode.OK, responseDto));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.kusithm.hdmedi_server.domain.survey.dto.response;

import lombok.Builder;
import lombok.Getter;

@Builder
@Getter
public class BaseSurveyResponseDto {
private String question;
private int score;

public static BaseSurveyResponseDto of(String question, int score){
return BaseSurveyResponseDto.builder()
.question(question)
.score(score)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.kusithm.hdmedi_server.domain.survey.dto.response;

import lombok.Builder;
import lombok.Getter;

import java.util.List;

@Builder
@Getter
public class SurveyDetailResponseDto {
private List<BaseSurveyResponseDto> parentsSurveyList;
private List<BaseSurveyResponseDto> teacherSurveyList;

public static SurveyDetailResponseDto of(List<BaseSurveyResponseDto> parentsSurveyList, List<BaseSurveyResponseDto> teacherSurveyList){
return SurveyDetailResponseDto.builder()
.parentsSurveyList(parentsSurveyList)
.teacherSurveyList(teacherSurveyList)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@
@Getter
public class SurveyResultResponseDto {
private int totalScore;
private String message;

public static SurveyResultResponseDto of(int totalScore){
public static SurveyResultResponseDto of(int totalScore, String message){
return SurveyResultResponseDto.builder()
.totalScore(totalScore)
.message(message)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,18 @@
import com.kusithm.hdmedi_server.domain.survey.domain.Survey;
import com.kusithm.hdmedi_server.domain.survey.dto.request.BaseSurveyDto;
import com.kusithm.hdmedi_server.domain.survey.dto.request.CreateSurveyDto;
import com.kusithm.hdmedi_server.domain.survey.dto.response.BaseSurveyResponseDto;
import com.kusithm.hdmedi_server.domain.survey.dto.response.SurveyDetailResponseDto;
import com.kusithm.hdmedi_server.domain.survey.dto.response.SurveyDetailResultDto;
import com.kusithm.hdmedi_server.domain.survey.dto.response.SurveyResultResponseDto;
import com.kusithm.hdmedi_server.domain.survey.repository.SurveyRepository;
import com.kusithm.hdmedi_server.global.common.HDmediUser;
import com.kusithm.hdmedi_server.global.common.MessageSourceProvider;
import com.kusithm.hdmedi_server.global.error.exception.EntityNotFoundException;
import com.kusithm.hdmedi_server.global.error.exception.ErrorCode;
import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

@RequiredArgsConstructor
Expand All @@ -34,65 +32,80 @@ public SurveyResultResponseDto processSurvey(HDmediUser hDmediUser, CreateSurvey
Survey currentSurvey = findSurvey(hDmediUser.getId());
addRespondentSurvey(hDmediUser.getIsGuest(), currentSurvey, respondent);
saveSurvey(currentSurvey);
return SurveyResultResponseDto.of(respondent.getTotalScore());
String surveyResultMessage = getMessageFor(respondent.getTotalScore());
return SurveyResultResponseDto.of(respondent.getTotalScore(), surveyResultMessage);
}


public SurveyDetailResultDto getDetailResult(HDmediUser hDmediUser, Long surveyId){
public SurveyDetailResultDto getDetailResult(HDmediUser hDmediUser, Long surveyId) {
Survey currentSurvey = findSurvey(hDmediUser.getId());
Respondent parentsRespondent = getParentsRespondent(currentSurvey, surveyId.intValue());
Respondent teacherRespondent = getTeacherRespondent(currentSurvey, surveyId.intValue());
String parentsMessage = getParentMessage(parentsRespondent.getTotalScore());
String teacherMessage = getTeacherRespondent(parentsRespondent.getTotalScore());
Respondent parentsRespondent = getParentsRespondent(currentSurvey, surveyId.intValue());
Respondent teacherRespondent = getTeacherRespondent(currentSurvey, surveyId.intValue());
String parentsMessage = getMessageFor(parentsRespondent.getTotalScore());
String teacherMessage = getMessageForTeacherSurvey(parentsRespondent.getTotalScore());
return SurveyDetailResultDto.of(parentsRespondent.getTotalScore(), parentsMessage, teacherRespondent.getTotalScore(), teacherMessage);
}

private String getParentMessage(int totalScore){
if(totalScore >= 19) return messageSourceProvider.getEmergencyContent();
public SurveyDetailResponseDto getSurveyDetail(HDmediUser hDmediUser, Long surveyId) {
Survey currentSurvey = findSurvey(hDmediUser.getId());
Respondent parentsRespondent = getParentsRespondent(currentSurvey, surveyId.intValue());
Respondent teacherRespondent = getTeacherRespondent(currentSurvey, surveyId.intValue());
List<BaseSurveyResponseDto> parentsBaseSurveyResponseDtoList = getBaseSurveyDtoListFor(parentsRespondent);
List<BaseSurveyResponseDto> teachersBaseSurveyResponseDtoList = getBaseSurveyDtoListFor(teacherRespondent);
return SurveyDetailResponseDto.of(parentsBaseSurveyResponseDtoList, teachersBaseSurveyResponseDtoList);
}

private List<BaseSurveyResponseDto> getBaseSurveyDtoListFor(Respondent respondent) {
return respondent.getBaseSurveyList().stream()
.map(baseSurvey ->
BaseSurveyResponseDto.of(baseSurvey.getQuestion(), baseSurvey.getScore()))
.collect(Collectors.toList());
}

private String getMessageFor(int totalScore) {
if (totalScore >= 19) return messageSourceProvider.getEmergencyContent();
return messageSourceProvider.getNonEmergencyContent();
}

private String getTeacherRespondent(int totalScore){
if(totalScore == -1) return messageSourceProvider.getNonSurveyContent();
if(totalScore >= 19) return messageSourceProvider.getEmergencyContent();
private String getMessageForTeacherSurvey(int totalScore) {
if (totalScore == -1) return messageSourceProvider.getNonSurveyContent();
if (totalScore >= 19) return messageSourceProvider.getEmergencyContent();
return messageSourceProvider.getNonEmergencyContent();
}

private Respondent getParentsRespondent(Survey currentSurvey, int id){
private Respondent getParentsRespondent(Survey currentSurvey, int id) {
return currentSurvey.getEachSurvey().getParentsSurveyList().get(id);
}

private Respondent getTeacherRespondent(Survey currentSurvey, int id){
private Respondent getTeacherRespondent(Survey currentSurvey, int id) {
List<Respondent> teacherSurveyList = currentSurvey.getEachSurvey().getTeacherSurveyList();
if(teacherSurveyList.size() <= id) return Respondent.createRespondent(null, -1);
if (teacherSurveyList.size() <= id) return Respondent.createRespondent(null, -1);
return teacherSurveyList.get(id);
}

private List<BaseSurvey> createBaseSurvey(List<BaseSurveyDto> questionList){
private List<BaseSurvey> createBaseSurvey(List<BaseSurveyDto> questionList) {
return questionList.stream()
.map(baseSurveyDto ->
BaseSurvey.createBaseSurvey(baseSurveyDto.getQuestion(), baseSurveyDto.getScore()))
.collect(Collectors.toList());
}

private Survey findSurvey(Long userId){
private Survey findSurvey(Long userId) {
return surveyRepository.findByUserId(userId)
.orElseGet(() -> Survey.createSurvey(userId));
}

private void addRespondentSurvey(Boolean isGuest, Survey currentSurvey, Respondent respondent){
if(isGuest)
private void addRespondentSurvey(Boolean isGuest, Survey currentSurvey, Respondent respondent) {
if (isGuest)
currentSurvey.getEachSurvey().addTeacherSurveyList(respondent);
else
currentSurvey.getEachSurvey().addParentsSurveyList(respondent);
}

private void saveSurvey(Survey survey){
private void saveSurvey(Survey survey) {
surveyRepository.save(survey);
}



}


0 comments on commit 9a05fbb

Please sign in to comment.