diff --git a/src/main/java/com/example/gimmegonghakauth/completed/service/CompletedCoursesService.java b/src/main/java/com/example/gimmegonghakauth/completed/service/CompletedCoursesService.java index c181a58..05c4da3 100644 --- a/src/main/java/com/example/gimmegonghakauth/completed/service/CompletedCoursesService.java +++ b/src/main/java/com/example/gimmegonghakauth/completed/service/CompletedCoursesService.java @@ -148,8 +148,12 @@ public void checkUser(UserDomain userDomain) { } private Long courseIdToLong(String courseIdAsString) { - if (courseIdAsString.charAt(0) == 'P') { - courseIdAsString = '0' + courseIdAsString.substring(1); + if (!Character.isDigit(courseIdAsString.charAt(0))){ + if (courseIdAsString.charAt(0) == 'P'){ + courseIdAsString = '0' + courseIdAsString.substring(1); + } else{ + return 0L; + } } return Long.parseLong(courseIdAsString); } diff --git a/src/main/java/com/example/gimmegonghakauth/status/controller/StatusController.java b/src/main/java/com/example/gimmegonghakauth/status/controller/StatusController.java index 934b407..83a2a84 100644 --- a/src/main/java/com/example/gimmegonghakauth/status/controller/StatusController.java +++ b/src/main/java/com/example/gimmegonghakauth/status/controller/StatusController.java @@ -1,15 +1,19 @@ package com.example.gimmegonghakauth.status.controller; import com.example.gimmegonghakauth.common.constant.AbeekTypeConst; +import com.example.gimmegonghakauth.status.service.dto.AbeekDetailsDto; +import com.example.gimmegonghakauth.status.service.dto.CourseDetailsDto; +import com.example.gimmegonghakauth.status.service.dto.GonghakResultDto; +import com.example.gimmegonghakauth.status.service.dto.ResultPointDto; import com.example.gimmegonghakauth.user.infrastructure.UserRepository; import com.example.gimmegonghakauth.user.domain.UserDomain; -import com.example.gimmegonghakauth.status.service.dto.GonghakResultDto.ResultPointDto; import com.example.gimmegonghakauth.status.service.dto.IncompletedCoursesDto; import com.example.gimmegonghakauth.status.service.GonghakCalculateService; import com.example.gimmegonghakauth.status.service.recommend.GonghakRecommendService; import com.example.gimmegonghakauth.status.service.recommend.RecommendServiceSelectManager; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.Authentication; @@ -38,20 +42,42 @@ public String readGonghakStatusResult(Authentication authentication, Model model // 컨트롤러가 UserDomain 객체를 가져오는 역할을 수행하고 있음. UserDomain student = userRepository.findByStudentId(studentId).get(); - readUserResultRatio(model, student); + readUserResult(model, student); readUserRecommendCourses(model, studentId, student); return "gonghak/statusForm"; } // 사용자의 인증 현황 데이터를 가져온다. - private void readUserResultRatio(Model model, UserDomain student) { - Map userResultRatio = gonghakCalculateService.getResultRatio( + private void readUserResult(Model model, UserDomain student) { + GonghakResultDto userResultRatio = gonghakCalculateService.getResult( student) - .get() - .getUserResultRatio(); - model.addAttribute("userResultRatio", userResultRatio); + .orElseThrow(IllegalArgumentException::new); + addResultPoint(model, userResultRatio); + addCoursesDetails(model, userResultRatio); } + private void addResultPoint(Model model, GonghakResultDto result){ + Map userResult = result.getUserResult(); + Map resultPoint = new ConcurrentHashMap<>(); + userResult.forEach((abeekTypeConst, abeekDetailsDto) -> { + resultPoint.put(abeekTypeConst, abeekDetailsDto.getResultPoint()); + }); + + model.addAttribute("userResultRatio", resultPoint); + } + + private void addCoursesDetails(Model model, GonghakResultDto result){ + Map userResult = result.getUserResult(); + + Map> coursesDetails = new ConcurrentHashMap<>(); + userResult.forEach((abeekTypeConst, abeekDetailsDto) -> { + coursesDetails.put(abeekTypeConst, abeekDetailsDto.getCoursesDetails()); + }); + + model.addAttribute("userCourseDetails", coursesDetails); + } + + // 사용자의 공학인증 추천 과목을 가져온다. private void readUserRecommendCourses(Model model, Long studentId, UserDomain student) { GonghakRecommendService gonghakRecommendService = recommendServiceSelectManager.selectRecommendService( diff --git a/src/main/java/com/example/gimmegonghakauth/status/infrastructure/GonghakCoursesDao.java b/src/main/java/com/example/gimmegonghakauth/status/infrastructure/GonghakCoursesDao.java index 0994fa0..d0b55ec 100644 --- a/src/main/java/com/example/gimmegonghakauth/status/infrastructure/GonghakCoursesDao.java +++ b/src/main/java/com/example/gimmegonghakauth/status/infrastructure/GonghakCoursesDao.java @@ -3,7 +3,7 @@ import com.example.gimmegonghakauth.common.constant.CourseCategoryConst; import com.example.gimmegonghakauth.status.domain.GonghakCoursesDomain; import com.example.gimmegonghakauth.common.domain.MajorsDomain; -import com.example.gimmegonghakauth.status.service.dto.GonghakCoursesByMajorDto; +import com.example.gimmegonghakauth.status.service.dto.CourseDetailsDto; import com.example.gimmegonghakauth.status.service.dto.IncompletedCoursesDto; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; @@ -14,10 +14,10 @@ @Repository public interface GonghakCoursesDao extends JpaRepository { - @Query("select new com.example.gimmegonghakauth.status.service.dto.GonghakCoursesByMajorDto(GCD.coursesDomain.courseId, GCD.coursesDomain.name, GCD.year, GCD.courseCategory, GCD.passCategory, GCD.designCredit, GCD.coursesDomain.credit) from GonghakCoursesDomain GCD " + @Query("select new com.example.gimmegonghakauth.status.service.dto.CourseDetailsDto(GCD.coursesDomain.courseId, GCD.coursesDomain.name, CCD.year, CCD.semester, GCD.courseCategory, GCD.passCategory, GCD.designCredit, GCD.coursesDomain.credit) from GonghakCoursesDomain GCD " + "join CompletedCoursesDomain CCD on GCD.coursesDomain = CCD.coursesDomain " + "where CCD.userDomain.studentId =:studentId and GCD.majorsDomain.id = :majorsId and GCD.year = :year") - List findUserCompletedCourses(@Param("studentId") Long studentId, @Param("majorsId") Long majorId, @Param("year") Long year); + List findUserCompletedCourses(@Param("studentId") Long studentId, @Param("majorsId") Long majorId, @Param("year") Long year); @Query("select new com.example.gimmegonghakauth.status.service.dto.IncompletedCoursesDto(GCD.coursesDomain.name, GCD.courseCategory, GCD.coursesDomain.credit, GCD.designCredit) from GonghakCoursesDomain GCD " + "left join CompletedCoursesDomain CCD on CCD.coursesDomain = GCD.coursesDomain " diff --git a/src/main/java/com/example/gimmegonghakauth/status/infrastructure/GonghakDao.java b/src/main/java/com/example/gimmegonghakauth/status/infrastructure/GonghakDao.java index 9bc01c4..62acd3b 100644 --- a/src/main/java/com/example/gimmegonghakauth/status/infrastructure/GonghakDao.java +++ b/src/main/java/com/example/gimmegonghakauth/status/infrastructure/GonghakDao.java @@ -4,7 +4,7 @@ import com.example.gimmegonghakauth.common.constant.CourseCategoryConst; import com.example.gimmegonghakauth.status.domain.AbeekDomain; import com.example.gimmegonghakauth.common.domain.MajorsDomain; -import com.example.gimmegonghakauth.status.service.dto.GonghakCoursesByMajorDto; +import com.example.gimmegonghakauth.status.service.dto.CourseDetailsDto; import com.example.gimmegonghakauth.status.service.dto.GonghakStandardDto; import com.example.gimmegonghakauth.status.service.dto.IncompletedCoursesDto; import java.util.List; @@ -41,7 +41,7 @@ public Optional findStandard(MajorsDomain majorsDomain){ // gonghakCourse 중 이수한 과목을 불러온다. @Override - public List findUserCompletedCourses( + public List findUserCompletedCourses( Long studentId, MajorsDomain majorsDomain) { return gonghakCoursesDao.findUserCompletedCourses(studentId,majorsDomain.getId(), studentId/DIVIDER); } diff --git a/src/main/java/com/example/gimmegonghakauth/status/infrastructure/GonghakRepository.java b/src/main/java/com/example/gimmegonghakauth/status/infrastructure/GonghakRepository.java index 1e825e3..497203d 100644 --- a/src/main/java/com/example/gimmegonghakauth/status/infrastructure/GonghakRepository.java +++ b/src/main/java/com/example/gimmegonghakauth/status/infrastructure/GonghakRepository.java @@ -3,7 +3,7 @@ import com.example.gimmegonghakauth.common.constant.CourseCategoryConst; import com.example.gimmegonghakauth.status.domain.AbeekDomain; import com.example.gimmegonghakauth.common.domain.MajorsDomain; -import com.example.gimmegonghakauth.status.service.dto.GonghakCoursesByMajorDto; +import com.example.gimmegonghakauth.status.service.dto.CourseDetailsDto; import com.example.gimmegonghakauth.status.service.dto.GonghakStandardDto; import com.example.gimmegonghakauth.status.service.dto.IncompletedCoursesDto; import java.util.List; @@ -17,7 +17,7 @@ public interface GonghakRepository { Optional findStandard(MajorsDomain majorsDomain); - List findUserCompletedCourses(Long studentId, MajorsDomain majorsDomain); + List findUserCompletedCourses(Long studentId, MajorsDomain majorsDomain); List findUserIncompletedCourses( CourseCategoryConst courseCategory,Long studentId, MajorsDomain majorsDomain); diff --git a/src/main/java/com/example/gimmegonghakauth/status/service/GonghakCalculateService.java b/src/main/java/com/example/gimmegonghakauth/status/service/GonghakCalculateService.java index b8d3cae..87fd638 100644 --- a/src/main/java/com/example/gimmegonghakauth/status/service/GonghakCalculateService.java +++ b/src/main/java/com/example/gimmegonghakauth/status/service/GonghakCalculateService.java @@ -2,11 +2,13 @@ import com.example.gimmegonghakauth.common.constant.AbeekTypeConst; import com.example.gimmegonghakauth.status.infrastructure.GonghakRepository; -import com.example.gimmegonghakauth.status.service.dto.GonghakCoursesByMajorDto; +import com.example.gimmegonghakauth.status.service.dto.AbeekDetailsDto; +import com.example.gimmegonghakauth.status.service.dto.CourseDetailsDto; import com.example.gimmegonghakauth.status.service.dto.GonghakResultDto; -import com.example.gimmegonghakauth.status.service.dto.GonghakResultDto.ResultPointDto; import com.example.gimmegonghakauth.status.service.dto.GonghakStandardDto; +import com.example.gimmegonghakauth.status.service.dto.ResultPointDto; import com.example.gimmegonghakauth.user.domain.UserDomain; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -23,116 +25,112 @@ public class GonghakCalculateService { private final GonghakRepository gonghakRepository; @Transactional(readOnly = true) - public Optional getResultRatio(UserDomain userDomain) { + public Optional getResult(UserDomain userDomain) { // findStandard -> 학번 입학년도를 기준으로 해당 년도의 abeekType(영역별 구분),minCredit(영역별 인증학점) 불러온다. Optional standard = gonghakRepository.findStandard( - userDomain.getMajorsDomain()); + userDomain.getMajorsDomain()); // default user abeek 학점 상태 map - Map userAbeekCredit = getUserAbeekCreditDefault( - standard.get().getStandards()); + Map userResult = getUserAbeekCreditDefault( + standard.get().getStandards()); // user 공학 상태 테이블 // gonghakCourse 중 이수한 과목을 불러온다. - List userCoursesByMajorByGonghakCoursesWithCompletedCourses = gonghakRepository.findUserCompletedCourses( - userDomain.getStudentId(), userDomain.getMajorsDomain()); + List userCompletedCourses = gonghakRepository.findUserCompletedCourses( + userDomain.getStudentId(), userDomain.getMajorsDomain()); // user // stackUserGonghakCredit -> abeekType에 맞게 이수한 총 학점을 계산한다. - stackUserGonghakCredit(userCoursesByMajorByGonghakCoursesWithCompletedCourses, - userAbeekCredit); - - // getUserGonghakResultRatio -> 인증 상태(비율)를 계산한다. - Map userResultRatio = getUserGonghakResultRatio( - userAbeekCredit, standard); + stackUserGonghakCredit(userCompletedCourses, + userResult); // 인증 상태(비율) return - return Optional.of(new GonghakResultDto(userResultRatio)); + return Optional.of(new GonghakResultDto(userResult)); } + // default user abeek 학점 상태 map을 만들어 반환한다. - private Map getUserAbeekCreditDefault( - Map standards) { - Map userAbeekCredit = new ConcurrentHashMap<>(); + private Map getUserAbeekCreditDefault( + Map standards) { + Map userAbeekCredit = new ConcurrentHashMap<>(); Arrays.stream(AbeekTypeConst.values()).forEach(abeekTypeConst -> { if (standards.containsKey(abeekTypeConst)) { - userAbeekCredit.put(abeekTypeConst, 0.0); + ResultPointDto resultPoint = new ResultPointDto(0.0, standards.get(abeekTypeConst)); + AbeekDetailsDto abeekDetailsDto = new AbeekDetailsDto(resultPoint, + new ArrayList<>()); + userAbeekCredit.put(abeekTypeConst, abeekDetailsDto); } }); return userAbeekCredit; } - // 인증 상태(비율)를 계산한다. - private Map getUserGonghakResultRatio( - Map userAbeekCredit, - Optional standard) { - - Map userResultRatio = new ConcurrentHashMap<>(); - Arrays.stream(AbeekTypeConst.values()).forEach(abeekTypeConst -> { - if (userAbeekCredit.containsKey(abeekTypeConst)) { - getRatio(userAbeekCredit, standard, abeekTypeConst, userResultRatio); - } - } - ); - return userResultRatio; - } - - private void getRatio(Map userAbeekCredit, - Optional standard, AbeekTypeConst abeekTypeConst, - Map userResultRatio) { - - userResultRatio.put( - abeekTypeConst, - new ResultPointDto(userAbeekCredit.get(abeekTypeConst), standard.get().getStandards() - .get(abeekTypeConst)) - ); - } // abeekType에 맞게 이수한 총 학점을 계산한다. - private void stackUserGonghakCredit( - List userCoursesByMajorByGonghakCoursesWithCompletedCourses, - Map userAbeekCredit) { - userCoursesByMajorByGonghakCoursesWithCompletedCourses.forEach(gonghakCoursesByMajorDto -> { - switch (gonghakCoursesByMajorDto.getCourseCategory()) { - case 전공: - stackCredit(AbeekTypeConst.MAJOR, gonghakCoursesByMajorDto, userAbeekCredit); - break; - case 전문교양: - stackCredit(AbeekTypeConst.PROFESSIONAL_NON_MAJOR, gonghakCoursesByMajorDto, - userAbeekCredit); - break; - case 교양: - stackCredit(AbeekTypeConst.NON_MAJOR, gonghakCoursesByMajorDto, - userAbeekCredit); - break; - case MSC: - stackCredit(AbeekTypeConst.MSC, gonghakCoursesByMajorDto, userAbeekCredit); - break; - case BSM: - stackCredit(AbeekTypeConst.BSM, gonghakCoursesByMajorDto, userAbeekCredit); - break; + private void stackUserGonghakCredit(List userCoursesByMajor, + Map userResult) { + userCoursesByMajor.forEach(courseDetailsDto -> { + AbeekTypeConst typeConst = getCourseCategoryType( + String.valueOf(courseDetailsDto.getCourseCategory())); + if (typeConst != null) { + stackCredit(typeConst, courseDetailsDto, userResult); + addCourseToDetails(typeConst, courseDetailsDto, userResult); } - stackCredit(AbeekTypeConst.DESIGN, gonghakCoursesByMajorDto, userAbeekCredit); - stackCredit(AbeekTypeConst.MINIMUM_CERTI, gonghakCoursesByMajorDto, userAbeekCredit); + stackCredit(AbeekTypeConst.DESIGN, courseDetailsDto, userResult); + addCourseToDetails(AbeekTypeConst.DESIGN, courseDetailsDto, userResult); + stackCredit(AbeekTypeConst.MINIMUM_CERTI, courseDetailsDto, userResult); + addCourseToDetails(AbeekTypeConst.MINIMUM_CERTI, courseDetailsDto, userResult); }); } + private AbeekTypeConst getCourseCategoryType(String courseCategory) { + switch (courseCategory) { + case "전공": + return AbeekTypeConst.MAJOR; + case "전문교양": + return AbeekTypeConst.PROFESSIONAL_NON_MAJOR; + case "교양": + return AbeekTypeConst.NON_MAJOR; + case "MSC": + return AbeekTypeConst.MSC; + case "BSM": + return AbeekTypeConst.BSM; + default: + return null; + } + } + - private void stackCredit(AbeekTypeConst abeekTypeConst, - GonghakCoursesByMajorDto gonghakCoursesByMajorDto, - Map userAbeekCredit) { - double inputCredit = getInputCredit(abeekTypeConst, gonghakCoursesByMajorDto); - userAbeekCredit.put(abeekTypeConst, userAbeekCredit.get(abeekTypeConst) + inputCredit); + private void stackCredit(AbeekTypeConst abeekTypeConst, CourseDetailsDto courseDetailsDto, + Map userResult) { + double inputCredit = getInputCredit(abeekTypeConst, courseDetailsDto); + AbeekDetailsDto currentDetails = userResult.get(abeekTypeConst); + if (currentDetails != null) { + ResultPointDto currentResultPoint = currentDetails.getResultPoint(); + double newUserPoint = currentResultPoint.getUserPoint() + inputCredit; + currentResultPoint.setUserPoint(newUserPoint); + } } + private double getInputCredit(AbeekTypeConst abeekTypeConst, - GonghakCoursesByMajorDto gonghakCoursesByMajorDto) { - if (abeekTypeConst == AbeekTypeConst.DESIGN) { - return gonghakCoursesByMajorDto.getDesignCredit(); - } else { - return (double) gonghakCoursesByMajorDto.getCredit(); + CourseDetailsDto courseDetailsDto) { + return (abeekTypeConst == AbeekTypeConst.DESIGN) ? courseDetailsDto.getDesignCredit() + : (double) courseDetailsDto.getCredit(); + } + + private void addCourseToDetails(AbeekTypeConst abeekTypeConst, + CourseDetailsDto courseDetailsDto, + Map userAbeekCredit) { + if (getInputCredit(abeekTypeConst, courseDetailsDto) == 0) { + return; + } + + AbeekDetailsDto currentDetails = userAbeekCredit.get(abeekTypeConst); + if (currentDetails != null) { + List updatedCourses = currentDetails.getCoursesDetails(); + updatedCourses.add(courseDetailsDto); } } diff --git a/src/main/java/com/example/gimmegonghakauth/status/service/dto/AbeekDetailsDto.java b/src/main/java/com/example/gimmegonghakauth/status/service/dto/AbeekDetailsDto.java new file mode 100644 index 0000000..77309db --- /dev/null +++ b/src/main/java/com/example/gimmegonghakauth/status/service/dto/AbeekDetailsDto.java @@ -0,0 +1,14 @@ +package com.example.gimmegonghakauth.status.service.dto; + + +import java.util.List; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class AbeekDetailsDto { + + private ResultPointDto resultPoint; + private List coursesDetails; +} diff --git a/src/main/java/com/example/gimmegonghakauth/status/service/dto/GonghakCoursesByMajorDto.java b/src/main/java/com/example/gimmegonghakauth/status/service/dto/CourseDetailsDto.java similarity index 87% rename from src/main/java/com/example/gimmegonghakauth/status/service/dto/GonghakCoursesByMajorDto.java rename to src/main/java/com/example/gimmegonghakauth/status/service/dto/CourseDetailsDto.java index a62bcef..f1f2a74 100644 --- a/src/main/java/com/example/gimmegonghakauth/status/service/dto/GonghakCoursesByMajorDto.java +++ b/src/main/java/com/example/gimmegonghakauth/status/service/dto/CourseDetailsDto.java @@ -1,17 +1,19 @@ -package com.example.gimmegonghakauth.status.service.dto; - -import com.example.gimmegonghakauth.common.constant.CourseCategoryConst; -import lombok.Getter; -import lombok.RequiredArgsConstructor; - -@Getter -@RequiredArgsConstructor -public class GonghakCoursesByMajorDto { - private final Long courseId; - private final String courseName; - private final int year; - private final CourseCategoryConst courseCategory; - private final String passCategory; - private final double designCredit; - private final int credit; -} +package com.example.gimmegonghakauth.status.service.dto; + +import com.example.gimmegonghakauth.common.constant.CourseCategoryConst; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public class CourseDetailsDto { + + private final Long courseId; + private final String courseName; + private final int year; + private final String semester; + private final CourseCategoryConst courseCategory; + private final String passCategory; + private final double designCredit; + private final int credit; +} diff --git a/src/main/java/com/example/gimmegonghakauth/status/service/dto/GonghakResultDto.java b/src/main/java/com/example/gimmegonghakauth/status/service/dto/GonghakResultDto.java index 6883340..fd3c977 100644 --- a/src/main/java/com/example/gimmegonghakauth/status/service/dto/GonghakResultDto.java +++ b/src/main/java/com/example/gimmegonghakauth/status/service/dto/GonghakResultDto.java @@ -8,12 +8,6 @@ @Getter @RequiredArgsConstructor public class GonghakResultDto { - @Getter - @RequiredArgsConstructor - public static class ResultPointDto { - private final Double userPoint; - private final int standardPoint; - } - private final Map userResultRatio; + private final Map userResult; } diff --git a/src/main/java/com/example/gimmegonghakauth/status/service/dto/ResultPointDto.java b/src/main/java/com/example/gimmegonghakauth/status/service/dto/ResultPointDto.java new file mode 100644 index 0000000..292d99a --- /dev/null +++ b/src/main/java/com/example/gimmegonghakauth/status/service/dto/ResultPointDto.java @@ -0,0 +1,14 @@ +package com.example.gimmegonghakauth.status.service.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@AllArgsConstructor +public class ResultPointDto { + + private Double userPoint; + private int standardPoint; +} diff --git a/src/main/resources/static/css/modalStyle.css b/src/main/resources/static/css/modalStyle.css new file mode 100644 index 0000000..eb3b6dd --- /dev/null +++ b/src/main/resources/static/css/modalStyle.css @@ -0,0 +1,21 @@ +#modal-background { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.5); /* 반투명 검정 배경 */ + z-index: 999; /* 모달이 표시될 때, 검정 배경이 다른 요소들보다 위에 보이도록 설정 */ + display: none; +} + +#modal-container { + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + background-color: white; + padding: 20px; + z-index: 1000; /* 모달이 배경 위에 오도록 설정 */ + display: none; +} diff --git a/src/main/resources/static/js/modal.js b/src/main/resources/static/js/modal.js new file mode 100644 index 0000000..cc4b692 --- /dev/null +++ b/src/main/resources/static/js/modal.js @@ -0,0 +1,24 @@ +function openModal(typeName) { + const allTbody = document.querySelectorAll(".modal-body tbody"); + allTbody.forEach(tbody => { + tbody.style.display = "none"; + }); + + const modalheader = document.querySelector(".modal-header h2"); + modalheader.textContent = `${typeName}` + + const findTbody = document.getElementById(typeName); + if (findTbody) { + findTbody.style.display = "table-row-group"; + } else { + console.error(`${typeName}에 해당하는 상세정보가 존재하지 않습니다.`); + } + + document.getElementById("modal-background").style.display = "block"; + document.getElementById("modal-container").style.display = "block"; +} + +function closeModal() { + document.getElementById("modal-background").style.display = "none"; + document.getElementById("modal-container").style.display = "none"; +} diff --git a/src/main/resources/templates/excel/excelList.html b/src/main/resources/templates/excel/excelList.html index f66f2ac..57cadbd 100644 --- a/src/main/resources/templates/excel/excelList.html +++ b/src/main/resources/templates/excel/excelList.html @@ -1,4 +1,4 @@ - +
diff --git a/src/main/resources/templates/gonghak/abeekDetailModal.html b/src/main/resources/templates/gonghak/abeekDetailModal.html new file mode 100644 index 0000000..b2aeaf6 --- /dev/null +++ b/src/main/resources/templates/gonghak/abeekDetailModal.html @@ -0,0 +1,41 @@ + + + + + +
+ + + +
diff --git a/src/main/resources/templates/gonghak/statusForm.html b/src/main/resources/templates/gonghak/statusForm.html index 5b1861a..06781b6 100644 --- a/src/main/resources/templates/gonghak/statusForm.html +++ b/src/main/resources/templates/gonghak/statusForm.html @@ -1,4 +1,4 @@ - +
@@ -17,6 +17,9 @@
+ +
+
@@ -25,27 +28,33 @@

RESULT RATIO

- - - - - - - + + + + + + + - - - - - - - + + + + + + +
Abeek 타입얻은 학점기준 학점진행도
Abeek 타입얻은 학점기준 학점진행도
-
-
-
-
+ + + 상세보기 + + +
+
+
+
diff --git a/src/main/resources/templates/layout/layout.html b/src/main/resources/templates/layout/mainLayout.html similarity index 100% rename from src/main/resources/templates/layout/layout.html rename to src/main/resources/templates/layout/mainLayout.html diff --git a/src/main/resources/templates/layout/layout2.html b/src/main/resources/templates/layout/userLayout.html similarity index 93% rename from src/main/resources/templates/layout/layout2.html rename to src/main/resources/templates/layout/userLayout.html index 125570e..e4c520f 100644 --- a/src/main/resources/templates/layout/layout2.html +++ b/src/main/resources/templates/layout/userLayout.html @@ -1,5 +1,5 @@ - + @@ -16,6 +16,7 @@ href="https://unpkg.com/98.css" > + 공학인증검사 diff --git a/src/main/resources/templates/main.html b/src/main/resources/templates/main.html index ab380f9..4681307 100644 --- a/src/main/resources/templates/main.html +++ b/src/main/resources/templates/main.html @@ -1,4 +1,4 @@ - +
diff --git a/src/main/resources/templates/user/changePassword.html b/src/main/resources/templates/user/changePassword.html index cff36ce..ac035cd 100644 --- a/src/main/resources/templates/user/changePassword.html +++ b/src/main/resources/templates/user/changePassword.html @@ -1,4 +1,4 @@ - +
diff --git a/src/main/resources/templates/user/information.html b/src/main/resources/templates/user/information.html index 2ad8111..0f50bd2 100644 --- a/src/main/resources/templates/user/information.html +++ b/src/main/resources/templates/user/information.html @@ -1,4 +1,4 @@ - +
diff --git a/src/main/resources/templates/user/login.html b/src/main/resources/templates/user/login.html index 72d78b3..a004438 100644 --- a/src/main/resources/templates/user/login.html +++ b/src/main/resources/templates/user/login.html @@ -1,4 +1,4 @@ - +
diff --git a/src/main/resources/templates/user/resetVerify.html b/src/main/resources/templates/user/resetVerify.html index bb04141..ae73904 100644 --- a/src/main/resources/templates/user/resetVerify.html +++ b/src/main/resources/templates/user/resetVerify.html @@ -1,4 +1,4 @@ - +

diff --git a/src/main/resources/templates/user/signup.html b/src/main/resources/templates/user/signup.html index 5c9a8a2..c2f7d6b 100644 --- a/src/main/resources/templates/user/signup.html +++ b/src/main/resources/templates/user/signup.html @@ -1,4 +1,4 @@ - +
diff --git a/src/main/resources/templates/user/withdrawal.html b/src/main/resources/templates/user/withdrawal.html index 85e37b9..e7b4949 100644 --- a/src/main/resources/templates/user/withdrawal.html +++ b/src/main/resources/templates/user/withdrawal.html @@ -1,4 +1,4 @@ - +
diff --git a/src/test/java/com/example/gimmegonghakauth/Service/GonghakCalculateServiceTest.java b/src/test/java/com/example/gimmegonghakauth/Service/GonghakCalculateServiceTest.java index f5d5cef..e5df1c3 100644 --- a/src/test/java/com/example/gimmegonghakauth/Service/GonghakCalculateServiceTest.java +++ b/src/test/java/com/example/gimmegonghakauth/Service/GonghakCalculateServiceTest.java @@ -4,14 +4,19 @@ import com.example.gimmegonghakauth.Service.GonghakCalculateServiceTest.CalculateTestConfig; import com.example.gimmegonghakauth.common.constant.AbeekTypeConst; +import com.example.gimmegonghakauth.common.domain.CoursesDomain; import com.example.gimmegonghakauth.common.domain.MajorsDomain; +import com.example.gimmegonghakauth.completed.domain.CompletedCoursesDomain; import com.example.gimmegonghakauth.status.infrastructure.AbeekDao; import com.example.gimmegonghakauth.status.infrastructure.GonghakCoursesDao; import com.example.gimmegonghakauth.status.infrastructure.GonghakDao; import com.example.gimmegonghakauth.status.infrastructure.GonghakRepository; import com.example.gimmegonghakauth.status.service.GonghakCalculateService; -import com.example.gimmegonghakauth.status.service.dto.GonghakResultDto.ResultPointDto; +import com.example.gimmegonghakauth.status.service.dto.AbeekDetailsDto; +import com.example.gimmegonghakauth.status.service.dto.CourseDetailsDto; +import com.example.gimmegonghakauth.status.service.dto.ResultPointDto; import com.example.gimmegonghakauth.user.domain.UserDomain; +import java.util.List; import java.util.Map; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -33,23 +38,68 @@ @ActiveProfiles("test") class GonghakCalculateServiceTest { + private static final MajorsDomain TEST_MAJORSDOMAIN = MajorsDomain.builder() + .id(1L) + .major("컴퓨터공학과").build(); + private static final UserDomain TEST_USERDOMAIN = UserDomain.builder() + .email("testEmail") + .name("홍지섭") + .password("qwer") + .studentId(19011706L) + .majorsDomain(TEST_MAJORSDOMAIN).build(); + @Autowired private GonghakCalculateService gonghakCalculateService; - private static final MajorsDomain TEST_MAJORSDOMAIN = MajorsDomain.builder() - .id(1L) - .major("컴퓨터공학과").build(); + @Test + @DisplayName("check log gonghakCalculateServiceTest") + void logGonghakCalculateServiceTest() { + Map userResultRatio = gonghakCalculateService.getResult( + TEST_USERDOMAIN).get().getUserResult(); - private static final UserDomain TEST_USERDOMAIN = UserDomain.builder() - .email("testEmail") - .name("홍지섭") - .password("qwer") - .studentId(19011706L) - .majorsDomain(TEST_MAJORSDOMAIN).build(); + log.info("userResultRatio = {}", userResultRatio); + } + + @Test + @DisplayName("컴퓨터공학과 GonghakCalculateService 계산 결과 체크") + void correctGonghakCalculateServiceTestCom() { + Map userResultRatio = gonghakCalculateService.getResult( + TEST_USERDOMAIN).get().getUserResult(); + + userResultRatio.keySet().forEach( + abeekTypeConst -> { + Double userPoint = userResultRatio.get(abeekTypeConst).getResultPoint().getUserPoint(); + assertThat(userPoint).isLessThanOrEqualTo(1); + assertThat(userPoint).isGreaterThanOrEqualTo(0); + } + ); + } + + @Test + @DisplayName("AbeekTypeConst 별로 CourseDetailsDto가 올바르게 저장되는지 확인") + void checkCoursesStoredByAbeekTypeConst() { + Map userResult = gonghakCalculateService.getResult(TEST_USERDOMAIN).get().getUserResult(); + + userResult.forEach((abeekTypeConst, abeekDetailsDto) -> { + List courses = abeekDetailsDto.getCoursesDetails(); + assertThat(courses).isNotNull(); + assertThat(courses).isInstanceOf(List.class); + + log.info("AbeekTypeConst: {}, Courses: {}", abeekTypeConst, courses); + }); + } + + + private double getExpectedCredit(int credit, Map standard, + AbeekTypeConst abeekTypeConst) { + return Double.valueOf( + String.format("%.4f", (double) credit / standard.get(abeekTypeConst))); + } @TestConfiguration @RequiredArgsConstructor static class CalculateTestConfig { + private final AbeekDao abeekDao; private final GonghakCoursesDao gonghakCoursesDao; @@ -63,32 +113,4 @@ public GonghakCalculateService gonghakCalculateService() { return new GonghakCalculateService(gonghakRepository()); } } - - @Test - @DisplayName("check log gonghakCalculateServiceTest") - void logGonghakCalculateServiceTest() { - Map userResultRatio = gonghakCalculateService.getResultRatio( - TEST_USERDOMAIN).get().getUserResultRatio(); - - log.info("userResultRatio = {}", userResultRatio); - } - - @Test - @DisplayName("컴퓨터공학과 GonghakCalculateService 계산 결과 체크") - void correctGonghakCalculateServiceTestCom() { - Map userResultRatio = gonghakCalculateService.getResultRatio( - TEST_USERDOMAIN).get().getUserResultRatio(); - - userResultRatio.keySet().forEach( - abeekTypeConst -> { - Double userPoint = userResultRatio.get(abeekTypeConst).getUserPoint(); - assertThat(userPoint).isLessThanOrEqualTo(1); - assertThat(userPoint).isGreaterThanOrEqualTo(0); - } - ); - } - - private double getExpectedCredit(int credit, Map standard, AbeekTypeConst abeekTypeConst) { - return Double.valueOf(String.format("%.4f", (double) credit / standard.get(abeekTypeConst))); - } } diff --git a/src/test/java/com/example/gimmegonghakauth/dao/GonghakRepositoryTest.java b/src/test/java/com/example/gimmegonghakauth/dao/GonghakRepositoryTest.java index 54517ef..aa82c8c 100644 --- a/src/test/java/com/example/gimmegonghakauth/dao/GonghakRepositoryTest.java +++ b/src/test/java/com/example/gimmegonghakauth/dao/GonghakRepositoryTest.java @@ -11,7 +11,7 @@ import com.example.gimmegonghakauth.common.domain.MajorsDomain; import com.example.gimmegonghakauth.status.domain.MajorName; import com.example.gimmegonghakauth.status.infrastructure.GonghakRepository; -import com.example.gimmegonghakauth.status.service.dto.GonghakCoursesByMajorDto; +import com.example.gimmegonghakauth.status.service.dto.CourseDetailsDto; import com.example.gimmegonghakauth.status.service.dto.GonghakStandardDto; import com.example.gimmegonghakauth.status.service.dto.IncompletedCoursesDto; import com.example.gimmegonghakauth.user.domain.UserDomain; @@ -109,7 +109,7 @@ void displayDaoMethod() { } ); - List withCompletedCourses = gonghakRepository.findUserCompletedCourses( + List withCompletedCourses = gonghakRepository.findUserCompletedCourses( COM_TEST_STUDENT_ID, COM_TEST_MAJORDOMAIN ); @@ -138,11 +138,11 @@ void findStandardKeySetTest() { @Test @DisplayName("findUserCoursesByMajorByGonghakCoursesWithCompletedCourses 테스트 ") void findUserCoursesByMajorByGonghakCoursesWithCompletedCoursesTest() { - List userDataForCalculate = gonghakRepository.findUserCompletedCourses( + List userDataForCalculate = gonghakRepository.findUserCompletedCourses( COM_TEST_STUDENT_ID, COM_TEST_MAJORDOMAIN); log.info("userDataForCalculate size = {}", userDataForCalculate.size()); - for (GonghakCoursesByMajorDto course : userDataForCalculate) { + for (CourseDetailsDto course : userDataForCalculate) { log.info( "Course ID: {}, Course Name: {}, Year: {}, Course Category: {}, Pass Category: {}, Design Credit: {}, Credit: {}", course.getCourseId(),