Skip to content

Commit

Permalink
[feat] #30 survey detail result api 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
RyuKwanKon committed Sep 16, 2023
1 parent 4939a50 commit 917d367
Show file tree
Hide file tree
Showing 5 changed files with 99 additions and 9 deletions.
Original file line number Diff line number Diff line change
@@ -1,15 +1,26 @@
package com.kusithm.hdmedi_server.domain.survey.domain;

import com.kusithm.hdmedi_server.global.common.BaseTimeEntity;
import lombok.Builder;
import lombok.Data;
import lombok.Getter;

import java.util.ArrayList;
import java.util.List;

@Builder
@Getter
@Data
public class EachSurvey {
private List<Respondent> parentsSurveyList = new ArrayList<>();
private List<Respondent> teacherSurveyList = new ArrayList<>();
private List<Respondent> parentsSurveyList;
private List<Respondent> teacherSurveyList;

public static EachSurvey createEachSurvey(){
return EachSurvey.builder()
.parentsSurveyList(new ArrayList<>())
.teacherSurveyList(new ArrayList<>())
.build();
}

public void addParentsSurveyList(Respondent parentsSurvey){
this.parentsSurveyList.add(parentsSurvey);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
@Builder
@Data
public class Respondent extends BaseTimeEntity {
private List<BaseSurvey> baseSurveyList = new ArrayList<>();
private List<BaseSurvey> baseSurveyList;
private int totalScore;

public static Respondent createRespondent(List<BaseSurvey> baseSurveyList, int totalScore){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,12 @@ public class Survey {
private String id;
private Long userId;
private EachSurvey eachSurvey;

public static Survey createSurvey(Long userId){
EachSurvey createdEachSurvey = EachSurvey.createEachSurvey();
return Survey.builder()
.userId(userId)
.eachSurvey(createdEachSurvey)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.kusithm.hdmedi_server.domain.survey.dto.response;

import lombok.Builder;
import lombok.Getter;

@Builder
@Getter
public class SurveyDetailResultDto {
private int parentsScore;
private String parentsMessage;
private int teacherScore;
private String teacherMessage;

public static SurveyDetailResultDto of(int parentsScore, String parentsMessage, int teacherScore, String teacherMessage){
return SurveyDetailResultDto.builder()
.parentsScore(parentsScore)
.parentsMessage(parentsMessage)
.teacherScore(teacherScore)
.teacherMessage(teacherMessage)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
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.SurveyDetailResultDto;
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;
Expand All @@ -15,23 +17,52 @@
import org.springframework.stereotype.Service;

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

@RequiredArgsConstructor
@Transactional
@Service
public class SurveyService {
private final SurveyRepository surveyRepository;
private final MessageSourceProvider messageSourceProvider;

public void processSurvey(HDmediUser hDmediUser, CreateSurveyDto createSurveyDto) {
List<BaseSurvey> baseSurveyList = createBaseSurvey(createSurveyDto.getQuestionList());
Respondent respondent = Respondent.createRespondent(baseSurveyList, createSurveyDto.getTotalScore());
Survey currentSurvey = surveyRepository.findByUserId(hDmediUser.getId()).orElseThrow(() -> new EntityNotFoundException(ErrorCode.USER_NOT_FOUND));
if(hDmediUser.getIsGuest()){
currentSurvey.getEachSurvey().addTeacherSurveyList(respondent);
}else {
currentSurvey.getEachSurvey().addParentsSurveyList(respondent);
}
Survey currentSurvey = findSurvey(hDmediUser.getId());
addRespondentSurvey(hDmediUser.getIsGuest(), currentSurvey, respondent);
saveSurvey(currentSurvey);
}

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());
return SurveyDetailResultDto.of(parentsRespondent.getTotalScore(), parentsMessage, teacherRespondent.getTotalScore(), teacherMessage);
}

private String getParentMessage(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();
return messageSourceProvider.getNonEmergencyContent();
}

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

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

private List<BaseSurvey> createBaseSurvey(List<BaseSurveyDto> questionList){
Expand All @@ -41,6 +72,24 @@ private List<BaseSurvey> createBaseSurvey(List<BaseSurveyDto> questionList){
.collect(Collectors.toList());
}

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

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){
surveyRepository.save(survey);
}



}


0 comments on commit 917d367

Please sign in to comment.