Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,10 @@
import hackerthon.likelion13th.canfly.domain.mock.Mock;
import hackerthon.likelion13th.canfly.domain.mock.MockScore;
import hackerthon.likelion13th.canfly.domain.user.User;
import hackerthon.likelion13th.canfly.global.api.ErrorCode;
import hackerthon.likelion13th.canfly.global.exception.GeneralException;
import hackerthon.likelion13th.canfly.grades.dto.MockCreateRequest;
import hackerthon.likelion13th.canfly.grades.dto.MockCreateResponse;
import hackerthon.likelion13th.canfly.grades.dto.MockRequestDto;
import hackerthon.likelion13th.canfly.grades.dto.MockResponseDto;
import hackerthon.likelion13th.canfly.grades.repository.MockRepository;
import hackerthon.likelion13th.canfly.grades.repository.MockScoreRepository;
import hackerthon.likelion13th.canfly.login.repository.UserRepository;
import hackerthon.likelion13th.canfly.score.ScoreExcelEngine;
import hackerthon.likelion13th.canfly.score.SubjectCategoryMapper;
Expand All @@ -25,8 +21,6 @@
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;


Expand All @@ -35,78 +29,11 @@
@RequiredArgsConstructor
public class MockService {
private final MockRepository mockRepository;
private final MockScoreRepository mockScoreRepository;
private final UserRepository userRepository;

private final SubjectSelectionValidator selectionValidator;
private final ScoreExcelEngine excelEngine;

@Transactional
public MockResponseDto createMock(String userId, MockRequestDto mockRequestDto) {
User user = userRepository.findById(userId)
.orElseThrow(() -> GeneralException.of(ErrorCode.USER_NOT_FOUND));

Optional<Mock> existingMockOpt = mockRepository.findByUserUidAndExamYearAndExamMonthAndExamGrade(
user.getUid(),
mockRequestDto.getExamYear(),
mockRequestDto.getExamMonth(),
mockRequestDto.getExamGrade()
);

Mock updateMock = null;
if (existingMockOpt.isPresent()) {
// Mock 존재 시에는 수정
updateMock = existingMockOpt.get();
updateMock.getScoreLists().clear();

} else {
// Mock 없으면 생성
updateMock = Mock.builder()
.user(user)
.examYear(mockRequestDto.getExamYear())
.examMonth(mockRequestDto.getExamMonth())
.examGrade(mockRequestDto.getExamGrade())
.build();
user.addMock(updateMock);
}

// MockScoreRequestDto 리스트를 MockScore 엔티티 리스트로 변환하여 추가
if (mockRequestDto.getScoreLists() != null && !mockRequestDto.getScoreLists().isEmpty()) {
for (MockRequestDto.MockScoreRequestDto scoreDto : mockRequestDto.getScoreLists()) {
MockScore mockScore = MockScore.builder()
.standardScore(scoreDto.getStandardScore())
.percentile(scoreDto.getPercentile())
.grade(scoreDto.getGrade())
.cumulative(scoreDto.getCumulative())
.category(scoreDto.getCategory())
.name(scoreDto.getName())
.build();
updateMock.addMockScore(mockScore);
}
}
Mock updatedMock = mockRepository.save(updateMock);
return new MockResponseDto(updatedMock);
}
// 사용하지 않는 관계로 주석 처리
// @Transactional
// public MockResponseDto addMockScoreToMock(Long mockId, MockRequestDto.MockScoreRequestDto scoreRequestDto) {
// Mock mock = mockRepository.findById(mockId)
// .orElseThrow(() -> new IllegalArgumentException("Mock not found with id: " + mockId));
//
// // DTO 필드에서 MockScore 엔티티 직접 생성
// MockScore newMockScore = MockScore.builder()
// .standardScore(scoreRequestDto.getStandardScore())
// .percentile(scoreRequestDto.getPercentile())
// .grade(scoreRequestDto.getGrade())
// .cumulative(scoreRequestDto.getCumulative())
// .category(scoreRequestDto.getCategory())
// .name(scoreRequestDto.getName())
// .build();
// mock.addMockScore(newMockScore); // Mock 엔티티에 MockScore 추가 (양방향 관계 설정)
// mockScoreRepository.save(newMockScore);
// return new MockResponseDto(mock);
// }

@Transactional(readOnly = true)
public MockResponseDto getMockById(Long mockId, String userId) {
Mock mock = mockRepository.findByIdAndUser_Uid(mockId, userId)
Expand Down Expand Up @@ -140,36 +67,6 @@ public MockResponseDto.MockScoreResponseDto getMockScoreById(Long mockId, Long s
return new MockResponseDto.MockScoreResponseDto(mockScore);
}

// @Transactional
// public MockResponseDto.MockScoreResponseDto updateMockScore(Long mockScoreId, MockRequestDto.MockScoreRequestDto scoreRequestDto) {
// MockScore existingMockScore = mockScoreRepository.findById(mockScoreId)
// .orElseThrow(() -> new IllegalArgumentException("MockScore not found with id: " + mockScoreId));
// existingMockScore.setStandardScore(scoreRequestDto.getStandardScore());
// existingMockScore.setPercentile(scoreRequestDto.getPercentile());
// existingMockScore.setGrade(scoreRequestDto.getGrade());
// existingMockScore.setCumulative(scoreRequestDto.getCumulative());
// existingMockScore.setCategory(scoreRequestDto.getCategory());
// existingMockScore.setName(scoreRequestDto.getName());
// MockScore updatedMockScore = mockScoreRepository.save(existingMockScore);
// return convertToDto(updatedMockScore);
// }

// if (mockRequestDto.getScoreLists() != null && !mockRequestDto.getScoreLists().isEmpty()) {
// for (MockRequestDto.MockScoreRequestDto scoreDto : mockRequestDto.getScoreLists()) {
// MockScore mockScore = MockScore.builder()
// .standardScore(scoreDto.getStandardScore())
// .percentile(scoreDto.getPercentile())
// .grade(scoreDto.getGrade())
// .cumulative(scoreDto.getCumulative())
// .category(scoreDto.getCategory())
// .name(scoreDto.getName())
// .build();
// newMock.addMockScore(mockScore);
// }
// }
// user.addMock(newMock);
// mockRepository.save(newMock);

@Transactional
public void deleteMock(Long mockId, String userId) {
mockRepository.deleteByIdAndUser_Uid(mockId, userId);
Expand Down Expand Up @@ -302,4 +199,100 @@ private Integer toInt(Object v) {
private BigDecimal scale2(BigDecimal v) {
return (v == null) ? null : v.setScale(2, java.math.RoundingMode.HALF_UP);
}


// @Transactional
// public MockResponseDto createMock(String userId, MockRequestDto mockRequestDto) {
// User user = userRepository.findById(userId)
// .orElseThrow(() -> GeneralException.of(ErrorCode.USER_NOT_FOUND));
//
// Optional<Mock> existingMockOpt = mockRepository.findByUserUidAndExamYearAndExamMonthAndExamGrade(
// user.getUid(),
// mockRequestDto.getExamYear(),
// mockRequestDto.getExamMonth(),
// mockRequestDto.getExamGrade()
// );
//
// Mock updateMock = null;
// if (existingMockOpt.isPresent()) {
// // Mock 존재 시에는 수정
// updateMock = existingMockOpt.get();
// updateMock.getScoreLists().clear();
//
// } else {
// // Mock 없으면 생성
// updateMock = Mock.builder()
// .user(user)
// .examYear(mockRequestDto.getExamYear())
// .examMonth(mockRequestDto.getExamMonth())
// .examGrade(mockRequestDto.getExamGrade())
// .build();
// user.addMock(updateMock);
// }
//
// // MockScoreRequestDto 리스트를 MockScore 엔티티 리스트로 변환하여 추가
// if (mockRequestDto.getScoreLists() != null && !mockRequestDto.getScoreLists().isEmpty()) {
// for (MockRequestDto.MockScoreRequestDto scoreDto : mockRequestDto.getScoreLists()) {
// MockScore mockScore = MockScore.builder()
// .standardScore(scoreDto.getStandardScore())
// .percentile(scoreDto.getPercentile())
// .grade(scoreDto.getGrade())
// .cumulative(scoreDto.getCumulative())
// .category(scoreDto.getCategory())
// .name(scoreDto.getName())
// .build();
// updateMock.addMockScore(mockScore);
// }
// }
// Mock updatedMock = mockRepository.save(updateMock);
// return new MockResponseDto(updatedMock);
// }
// 사용하지 않는 관계로 주석 처리
// @Transactional
// public MockResponseDto addMockScoreToMock(Long mockId, MockRequestDto.MockScoreRequestDto scoreRequestDto) {
// Mock mock = mockRepository.findById(mockId)
// .orElseThrow(() -> new IllegalArgumentException("Mock not found with id: " + mockId));
//
// // DTO 필드에서 MockScore 엔티티 직접 생성
// MockScore newMockScore = MockScore.builder()
// .standardScore(scoreRequestDto.getStandardScore())
// .percentile(scoreRequestDto.getPercentile())
// .grade(scoreRequestDto.getGrade())
// .cumulative(scoreRequestDto.getCumulative())
// .category(scoreRequestDto.getCategory())
// .name(scoreRequestDto.getName())
// .build();
// mock.addMockScore(newMockScore); // Mock 엔티티에 MockScore 추가 (양방향 관계 설정)
// mockScoreRepository.save(newMockScore);
// return new MockResponseDto(mock);
// }
// @Transactional
// public MockResponseDto.MockScoreResponseDto updateMockScore(Long mockScoreId, MockRequestDto.MockScoreRequestDto scoreRequestDto) {
// MockScore existingMockScore = mockScoreRepository.findById(mockScoreId)
// .orElseThrow(() -> new IllegalArgumentException("MockScore not found with id: " + mockScoreId));
// existingMockScore.setStandardScore(scoreRequestDto.getStandardScore());
// existingMockScore.setPercentile(scoreRequestDto.getPercentile());
// existingMockScore.setGrade(scoreRequestDto.getGrade());
// existingMockScore.setCumulative(scoreRequestDto.getCumulative());
// existingMockScore.setCategory(scoreRequestDto.getCategory());
// existingMockScore.setName(scoreRequestDto.getName());
// MockScore updatedMockScore = mockScoreRepository.save(existingMockScore);
// return convertToDto(updatedMockScore);
// }

// if (mockRequestDto.getScoreLists() != null && !mockRequestDto.getScoreLists().isEmpty()) {
// for (MockRequestDto.MockScoreRequestDto scoreDto : mockRequestDto.getScoreLists()) {
// MockScore mockScore = MockScore.builder()
// .standardScore(scoreDto.getStandardScore())
// .percentile(scoreDto.getPercentile())
// .grade(scoreDto.getGrade())
// .cumulative(scoreDto.getCumulative())
// .category(scoreDto.getCategory())
// .name(scoreDto.getName())
// .build();
// newMock.addMockScore(mockScore);
// }
// }
// user.addMock(newMock);
// mockRepository.save(newMock);
}