
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
package com.example.educatback.Application;
import com.example.educatback.controller.request.StudyAnswerRequest;
import com.example.educatback.controller.response.SolvedResponse;
import com.example.educatback.model.entity.*;
import com.example.educatback.model.repository.*;
import jakarta.persistence.EntityNotFoundException;
import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.Optional;
@Service
@RequiredArgsConstructor
public class StudyAnswerAppService {
private final SolvedRepository solvedRepository;
private final StudyRepository studyRepository;
private final WordBundleRepository wordBundleRepository;
private final SentenceDiaryRepository sentenceDiaryRepository;
private final TravelRepository travelRepository;
private final CountryElementRepository countryElementRepository;
private final WorldRepository worldRepository;
private final SentenceAbsorbRepository sentenceAbsorbRepository;
private final MemberRepository memberRepository;
private final GrammarFairyRepository grammarFairyRepository;
private final GrammarLandRepository grammarLandRepository;
private final WordAbsorbRepository wordAbsorbRepository;
private final ScoreLogRepository scoreLogRepository;
@Transactional
public SolvedResponse checkAnswer(StudyAnswerRequest.Save request, String userId) {
// 요청에서 필요한 정보 추출
Long studyId = request.getId();
String answer = request.getAnswer();
int time = request.getTime();
int level = request.getLevel();
// studyId로 해당하는 study를 가져옴
Study study = studyRepository.findById(studyId)
.orElseThrow(() -> new EntityNotFoundException("Study not found with ID: " + studyId));
Member member = memberRepository.findById(userId)
.orElseThrow(() -> new EntityNotFoundException("Member not found with ID: " + userId));
System.out.println("스터디가 담겼니??"+study);
// studyType에 따라 적절한 엔티티의 정답과 비교
String correctAnswer;
switch (study.getStudyType()) {
case 단어뭉치:
WordBundle wordBundle = wordBundleRepository.findByStudyId(studyId)
.orElseThrow(() -> new EntityNotFoundException("WordBundle not found for Study ID: " + studyId));
correctAnswer = wordBundle.getWord();
break;
case 문장일기:
SentenceDiary sentenceDiary = sentenceDiaryRepository.findByStudyId(studyId)
.orElseThrow(() -> new EntityNotFoundException("SentenceDiary not found for Study ID: " + studyId));
correctAnswer = sentenceDiary.getSentence();
break;
case 동요세상:
case 동화세상:
World world = worldRepository.findByStudyIdAndLevel(studyId, level)
.orElseThrow(() -> new EntityNotFoundException("World not found for Study ID: " + studyId + " and level: " + level));
correctAnswer = world.getAnswer();
break;
case 동요나라:
CountryElement countryElement = countryElementRepository.findByStudyIdAndLevel(studyId, level)
.orElseThrow(() -> new EntityNotFoundException("CountryElement not found for Study ID: " + studyId + " and level: " + level));
correctAnswer = countryElement.getAnswer();
break;
case 동화여행:
Travel travel = travelRepository.findByStudyIdAndLevel(studyId, level)
.orElseThrow(() -> new EntityNotFoundException("Travel not found for Study ID: " + studyId + " and level: " + level));
correctAnswer = travel.getAnswer();
break;
case 문장쏙쏙:
SentenceAbsorb sentenceAbsorb = sentenceAbsorbRepository.findByStudyIdAndLevel(studyId, level)
.orElseThrow(() -> new EntityNotFoundException("SentenceAbsorb not found for Study ID: " + studyId + " and level: " + level));
correctAnswer = sentenceAbsorb.getAnswer();
break;
case 문법요정:
GrammarFairy grammarFairy = grammarFairyRepository.findByStudyIdAndLevel(studyId, level)
.orElseThrow(() -> new EntityNotFoundException("GrammarFairy not found for Study ID: " + studyId + " and level: " + level));
correctAnswer = grammarFairy.getAnswer();
break;
case 문법랜드:
GrammarLand grammarLand = grammarLandRepository.findByStudyIdAndLevel(studyId, level)
.orElseThrow(() -> new EntityNotFoundException("GrammarLand not found for Study ID: " + studyId + " and level: " + level));
correctAnswer = grammarLand.getAnswer();
break;
case 어휘력쑥쑥:
WordAbsorb wordAbsorb = wordAbsorbRepository.findByStudyIdAndLevel(studyId, level)
.orElseThrow(() -> new EntityNotFoundException("WordAbsorb not found for Study ID: " + studyId + " and level: " + level));
System.out.println("wordAbsorb해보기"+wordAbsorb.getAnswer());
correctAnswer = wordAbsorb.getAnswer();
break;
default:
throw new UnsupportedOperationException("Study type not supported: " + study.getStudyType());
}
System.out.println("이걸 잘봐라라라ㅏ라라라ㅏ라라ㅏ라라"+correctAnswer);
// 정답 검증 및 solved의 is_checked 설정
int isChecked = answer.toLowerCase().equals(correctAnswer.toLowerCase()) ? 1 : 2;
if(isChecked == 1){ //맞춘 경우
switch (study.getStudyType()) {
case 단어뭉치, 어휘력쑥쑥:
member.setWord(member.getWord()+5);
break;
case 문장일기, 문장쏙쏙:
member.setSentence(member.getSentence()+5);
break;
case 동요세상, 동요나라:
member.setExpression(member.getExpression()+5);
break;
case 동화세상, 동화여행:
member.setUnderstand(member.getUnderstand()+5);
break;
case 문법요정, 문법랜드:
member.setGrammar(member.getGrammar()+5);
break;
default:
throw new UnsupportedOperationException("Study type not supported: " + study.getStudyType());
}
if(request.getTime()<=60&&request.getTime()>40){
member.setFocus(member.getFocus()+3);
} else if (request.getTime() <= 40 && request.getTime() > 20) {
member.setFocus(member.getFocus()+2);
}
else {
member.setFocus(member.getFocus()+1);
}
memberRepository.save(member);
}
else{ //틀린 경우
switch (study.getStudyType()) {
case 단어뭉치, 어휘력쑥쑥:
member.setWord(member.getWord()-5);
break;
case 문장일기, 문장쏙쏙:
member.setSentence(member.getSentence()-5);
break;
case 동요세상, 동요나라:
member.setExpression(member.getExpression()-5);
break;
case 동화세상, 동화여행:
member.setUnderstand(member.getUnderstand()-5);
break;
case 문법요정, 문법랜드:
member.setGrammar(member.getGrammar()-5);
break;
default:
throw new UnsupportedOperationException("Study type not supported: " + study.getStudyType());
}
if(request.getTime()<=60&&request.getTime()>40){
member.setFocus(member.getFocus()-3);
} else if (request.getTime() <= 40 && request.getTime() > 20) {
member.setFocus(member.getFocus()-2);
}
else {
member.setFocus(member.getFocus()-1);
}
memberRepository.save(member);
}
System.out.println("socreLog 하는중임");
ScoreLog scoreLog = new ScoreLog();
scoreLog.setMember(member);
scoreLog.setWord(member.getWord());
scoreLog.setFocus(member.getFocus());
scoreLog.setGrammar(member.getGrammar());
scoreLog.setExpression(member.getExpression());
scoreLog.setSentence(member.getSentence());
scoreLog.setUnderstand(member.getUnderstand());
scoreLogRepository.save(scoreLog);
System.out.println("socreLog 끝남");
// study와 연결된 solved 생성
Solved solved = new Solved();
solved.setAnswer(answer);
solved.setIsChecked(isChecked);
solved.setStudy(study);
solved.setMember(member);
solved.setTime(60-time);
solved.setLevel(level);
System.out.println("여기까지들어가니??????????????????????????????");
// SolvedResponse 객체 생성 및 반환
return SolvedResponse.from(solvedRepository.save(solved));
}
}