From 4b8db0380ab5f794797def6c05453825cb10c473 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=9D=AC=EC=88=98?= Date: Sun, 18 Aug 2024 15:29:00 +0900 Subject: [PATCH 1/8] refactor: GonghakDao MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit findStandard 메서드를 최신년도 기준을 불러오도록 변경하고 연관된 사항들을 변경사항에 맞게 변경하였습니다. --- .../example/gimmegonghakauth/InitData.java | 36 +++++++++---------- .../gimmegonghakauth/dao/GonghakDao.java | 11 +++--- .../dao/GonghakRepository.java | 2 +- .../service/GonghakCalculateService.java | 4 +-- .../ComputerMajorGonghakRecommendService.java | 3 +- .../ElecInfoMajorGonghakRecommendService.java | 3 +- .../dao/GonghakRepositoryTest.java | 6 ++-- 7 files changed, 29 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/example/gimmegonghakauth/InitData.java b/src/main/java/com/example/gimmegonghakauth/InitData.java index c407a45..6d271b3 100644 --- a/src/main/java/com/example/gimmegonghakauth/InitData.java +++ b/src/main/java/com/example/gimmegonghakauth/InitData.java @@ -49,37 +49,37 @@ public void initDatabase() { majorsDao.save(computerMajor); majorsDao.save(elecInfoMajor); - //19학년도 computerMajor + //24학년도 computerMajor AbeekDomainBuilder abeek1 = AbeekDomain.builder() .abeekType(AbeekTypeConst.BSM) .majorsDomain(computerMajor) .note("this is a test note") - .year(19) + .year(24) .minCredit(18); AbeekDomainBuilder abeek2 = AbeekDomain.builder() .abeekType(AbeekTypeConst.PROFESSIONAL_NON_MAJOR) .majorsDomain(computerMajor) .note("this is a test note") - .year(19) + .year(24) .minCredit(14); AbeekDomainBuilder abeek3 = AbeekDomain.builder() .abeekType(AbeekTypeConst.DESIGN) .majorsDomain(computerMajor) .note("this is a test note") - .year(19) - .minCredit(12); + .year(24) + .minCredit(10); AbeekDomainBuilder abeek4 = AbeekDomain.builder() .abeekType(AbeekTypeConst.MAJOR) .majorsDomain(computerMajor) .note("this is a test note") - .year(19) - .minCredit(60); + .year(24) + .minCredit(45); AbeekDomainBuilder abeek5 = AbeekDomain.builder() .abeekType(AbeekTypeConst.MINIMUM_CERTI) .majorsDomain(computerMajor) .note("this is a test note") - .year(19) - .minCredit(92); + .year(24) + .minCredit(77); abeekDao.save(abeek1.build()); abeekDao.save(abeek2.build()); @@ -87,37 +87,37 @@ public void initDatabase() { abeekDao.save(abeek4.build()); abeekDao.save(abeek5.build()); - //19학년도 전정통 + //24학년도 전정통 AbeekDomainBuilder abeek21 = AbeekDomain.builder() .abeekType(AbeekTypeConst.MSC) .majorsDomain(elecInfoMajor) .note("this is a test note") - .year(19) - .minCredit(30); + .year(24) + .minCredit(27); AbeekDomainBuilder abeek22 = AbeekDomain.builder() .abeekType(AbeekTypeConst.PROFESSIONAL_NON_MAJOR) .majorsDomain(elecInfoMajor) .note("this is a test note") - .year(19) + .year(24) .minCredit(14); AbeekDomainBuilder abeek23 = AbeekDomain.builder() .abeekType(AbeekTypeConst.DESIGN) .majorsDomain(elecInfoMajor) .note("this is a test note") - .year(19) + .year(24) .minCredit(9); AbeekDomainBuilder abeek24 = AbeekDomain.builder() .abeekType(AbeekTypeConst.MAJOR) .majorsDomain(elecInfoMajor) .note("this is a test note") - .year(19) - .minCredit(54); + .year(24) + .minCredit(45); AbeekDomainBuilder abeek25 = AbeekDomain.builder() .abeekType(AbeekTypeConst.MINIMUM_CERTI) .majorsDomain(elecInfoMajor) .note("this is a test note") - .year(19) - .minCredit(98); + .year(24) + .minCredit(86); abeekDao.save(abeek21.build()); abeekDao.save(abeek22.build()); diff --git a/src/main/java/com/example/gimmegonghakauth/dao/GonghakDao.java b/src/main/java/com/example/gimmegonghakauth/dao/GonghakDao.java index 1d49f98..e96b37b 100644 --- a/src/main/java/com/example/gimmegonghakauth/dao/GonghakDao.java +++ b/src/main/java/com/example/gimmegonghakauth/dao/GonghakDao.java @@ -23,6 +23,7 @@ public class GonghakDao implements GonghakRepository{ private static final int DIVIDER = 1000000; + private static final int YEAR = 24; private final AbeekDao abeekDao; private final GonghakCoursesDao gonghakCoursesDao; @@ -32,12 +33,10 @@ public AbeekDomain save(AbeekDomain abeekDomain) { return abeekDomain; } - // 학번 입학년도를 기준으로 해당 년도의 abeekType(영역별 구분),minCredit(영역별 인증학점) 불러온다. + // 최신년도의 abeekType(영역별 구분),minCredit(영역별 인증학점) 불러온다. @Override - public Optional findStandard(Long studentId, MajorsDomain majorsDomain) { - int year = (int) (studentId/DIVIDER); -// log.info("year = {}",year); - return changeToGonghakStandardDto(majorsDomain, year); + public Optional findStandard(MajorsDomain majorsDomain){ + return changeToGonghakStandardDto(majorsDomain, YEAR); } // gonghakCourse 중 이수한 과목을 불러온다. @@ -60,8 +59,6 @@ private Optional changeToGonghakStandardDto(MajorsDomain maj // year, major를 기준으로 abeek 데이터를 불러온다. List allByYearAndMajorsDomain = abeekDao.findAllByYearAndMajorsDomain(year, majorsDomain); - log.info("allByYearAndMajorsDomain.isEmpty() = {}", allByYearAndMajorsDomain.isEmpty()); - // abeek을 기반으로 abeekType(영역별 구분),minCredit(영역별 인증학점) 저장한다. allByYearAndMajorsDomain.forEach( abeekDomain -> { diff --git a/src/main/java/com/example/gimmegonghakauth/dao/GonghakRepository.java b/src/main/java/com/example/gimmegonghakauth/dao/GonghakRepository.java index b104cb2..5fa08ed 100644 --- a/src/main/java/com/example/gimmegonghakauth/dao/GonghakRepository.java +++ b/src/main/java/com/example/gimmegonghakauth/dao/GonghakRepository.java @@ -15,7 +15,7 @@ public interface GonghakRepository { AbeekDomain save(AbeekDomain abeekDomain); - Optional findStandard(Long studentId, MajorsDomain majorsDomain); + Optional findStandard(MajorsDomain majorsDomain); List findUserCompletedCourses(Long studentId, MajorsDomain majorsDomain); diff --git a/src/main/java/com/example/gimmegonghakauth/service/GonghakCalculateService.java b/src/main/java/com/example/gimmegonghakauth/service/GonghakCalculateService.java index 0e65320..9236e86 100644 --- a/src/main/java/com/example/gimmegonghakauth/service/GonghakCalculateService.java +++ b/src/main/java/com/example/gimmegonghakauth/service/GonghakCalculateService.java @@ -25,9 +25,9 @@ public class GonghakCalculateService { @Transactional(readOnly = true) public Optional getResultRatio(UserDomain userDomain) { - // findStandard -> 학번 입학년도를 기준으로 해당 년도의 abeekType(영역별 구분),minCredit(영역별 인증학점) 불러온다. + // findLatestStandard -> 학번 입학년도를 기준으로 해당 년도의 abeekType(영역별 구분),minCredit(영역별 인증학점) 불러온다. Optional standard = gonghakRepository.findStandard( - userDomain.getStudentId(), userDomain.getMajorsDomain()); + userDomain.getMajorsDomain()); // default user abeek 학점 상태 map Map userAbeekCredit = getUserAbeekCreditDefault( diff --git a/src/main/java/com/example/gimmegonghakauth/service/recommend/ComputerMajorGonghakRecommendService.java b/src/main/java/com/example/gimmegonghakauth/service/recommend/ComputerMajorGonghakRecommendService.java index 0866dfe..0ab1304 100644 --- a/src/main/java/com/example/gimmegonghakauth/service/recommend/ComputerMajorGonghakRecommendService.java +++ b/src/main/java/com/example/gimmegonghakauth/service/recommend/ComputerMajorGonghakRecommendService.java @@ -29,8 +29,7 @@ public GonghakRecommendCoursesDto createRecommendCourses(UserDomain userDomain) GonghakRecommendCoursesDto gonghakRecommendCoursesDto = new GonghakRecommendCoursesDto(); // findStandard -> 학번 입학년도를 기준으로 해당 년도의 abeekType(영역별 구분),minCredit(영역별 인증학점) 불러온다. - Optional standard = gonghakRepository.findStandard( - userDomain.getStudentId(), userDomain.getMajorsDomain()); + Optional standard = gonghakRepository.findStandard(userDomain.getMajorsDomain()); // 수강하지 않은 과목 중 "전문 교양" 과목을 반환한다. List professionalNonMajor = gonghakRepository.findUserIncompletedCourses( diff --git a/src/main/java/com/example/gimmegonghakauth/service/recommend/ElecInfoMajorGonghakRecommendService.java b/src/main/java/com/example/gimmegonghakauth/service/recommend/ElecInfoMajorGonghakRecommendService.java index f81149e..5b85feb 100644 --- a/src/main/java/com/example/gimmegonghakauth/service/recommend/ElecInfoMajorGonghakRecommendService.java +++ b/src/main/java/com/example/gimmegonghakauth/service/recommend/ElecInfoMajorGonghakRecommendService.java @@ -28,8 +28,7 @@ public GonghakRecommendCoursesDto createRecommendCourses(UserDomain userDomain) GonghakRecommendCoursesDto gonghakRecommendCoursesDto = new GonghakRecommendCoursesDto(); // findStandard -> 학번 입학년도를 기준으로 해당 년도의 abeekType(영역별 구분),minCredit(영역별 인증학점) 불러온다. - Optional standard = gonghakRepository.findStandard( - userDomain.getStudentId(), userDomain.getMajorsDomain()); + Optional standard = gonghakRepository.findStandard(userDomain.getMajorsDomain()); // 수강하지 않은 과목 중 "전문 교양" 과목을 반환한다. List professionalNonMajor = gonghakRepository.findUserIncompletedCourses( diff --git a/src/test/java/com/example/gimmegonghakauth/dao/GonghakRepositoryTest.java b/src/test/java/com/example/gimmegonghakauth/dao/GonghakRepositoryTest.java index 2edd5a1..4adfa7a 100644 --- a/src/test/java/com/example/gimmegonghakauth/dao/GonghakRepositoryTest.java +++ b/src/test/java/com/example/gimmegonghakauth/dao/GonghakRepositoryTest.java @@ -78,7 +78,7 @@ void displayDaoMethod(){ @Test @DisplayName("GonghakStandardDto 5가지 상태 모두 포함되어있는지 확인") void findStandardKeySetTest() { - Optional standard = gonghakRepository.findStandard(COM_TEST_STUDENT_ID, COM_TEST_MAJORDOMAIN); + Optional standard = gonghakRepository.findStandard(COM_TEST_MAJORDOMAIN); log.info("testStandard status ={}", standard.get().getStandards()); Map testStandard = standard.get().getStandards(); assertThat(testStandard.keySet()).contains(AbeekTypeConst.BSM,AbeekTypeConst.PROFESSIONAL_NON_MAJOR,AbeekTypeConst.DESIGN,AbeekTypeConst.MAJOR,AbeekTypeConst.MINIMUM_CERTI); @@ -140,9 +140,7 @@ void findUserCoursesByMajorByGonghakCoursesWithoutCompleteCoursesTest(){ @Test @DisplayName("findStandard가 없을 때 - Wrong Major") void findStandardWrongMajorDomainTest(){ - Optional wrongStandard = gonghakRepository.findStandard( - COM_TEST_STUDENT_ID, - WRONG_TEST_MAJORDOMAIN); + Optional wrongStandard = gonghakRepository.findStandard(WRONG_TEST_MAJORDOMAIN); assertThat(wrongStandard.get().getStandards().isEmpty()).isEqualTo(true); } } From 8f0a7650f6d147bebe03828e2b022f3c0dc2afe5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=9D=AC=EC=88=98?= Date: Mon, 19 Aug 2024 12:04:01 +0900 Subject: [PATCH 2/8] =?UTF-8?q?refactor:=20=EC=83=81=EC=88=98=EB=AA=85=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 직관적인 이해를 위해 YEAR -> LATEST_YAER 변경 --- .../java/com/example/gimmegonghakauth/dao/GonghakDao.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/gimmegonghakauth/dao/GonghakDao.java b/src/main/java/com/example/gimmegonghakauth/dao/GonghakDao.java index e96b37b..16b5049 100644 --- a/src/main/java/com/example/gimmegonghakauth/dao/GonghakDao.java +++ b/src/main/java/com/example/gimmegonghakauth/dao/GonghakDao.java @@ -23,7 +23,7 @@ public class GonghakDao implements GonghakRepository{ private static final int DIVIDER = 1000000; - private static final int YEAR = 24; + private static final int LATEST_YEAR = 24; private final AbeekDao abeekDao; private final GonghakCoursesDao gonghakCoursesDao; @@ -36,7 +36,7 @@ public AbeekDomain save(AbeekDomain abeekDomain) { // 최신년도의 abeekType(영역별 구분),minCredit(영역별 인증학점) 불러온다. @Override public Optional findStandard(MajorsDomain majorsDomain){ - return changeToGonghakStandardDto(majorsDomain, YEAR); + return changeToGonghakStandardDto(majorsDomain, LATEST_YEAR); } // gonghakCourse 중 이수한 과목을 불러온다. From 3e1bd42854a15b90d91753a70054ebe2ef698c3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=9D=AC=EC=88=98?= Date: Mon, 19 Aug 2024 12:04:23 +0900 Subject: [PATCH 3/8] =?UTF-8?q?refactor:=20=EC=A3=BC=EC=84=9D=20=EC=98=A4?= =?UTF-8?q?=ED=83=80=20=EC=A0=95=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gimmegonghakauth/service/GonghakCalculateService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/example/gimmegonghakauth/service/GonghakCalculateService.java b/src/main/java/com/example/gimmegonghakauth/service/GonghakCalculateService.java index 9236e86..3394c07 100644 --- a/src/main/java/com/example/gimmegonghakauth/service/GonghakCalculateService.java +++ b/src/main/java/com/example/gimmegonghakauth/service/GonghakCalculateService.java @@ -25,7 +25,7 @@ public class GonghakCalculateService { @Transactional(readOnly = true) public Optional getResultRatio(UserDomain userDomain) { - // findLatestStandard -> 학번 입학년도를 기준으로 해당 년도의 abeekType(영역별 구분),minCredit(영역별 인증학점) 불러온다. + // findStandard -> 학번 입학년도를 기준으로 해당 년도의 abeekType(영역별 구분),minCredit(영역별 인증학점) 불러온다. Optional standard = gonghakRepository.findStandard( userDomain.getMajorsDomain()); From dbbd8160bfe587545b8e8f6518fafc267366fa17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=9D=AC=EC=88=98?= Date: Tue, 20 Aug 2024 16:51:29 +0900 Subject: [PATCH 4/8] refactor: signup.html MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 회원가입 화면에서 선택할수 있는 학과에 '소프트웨어학과' , '데이터 사이언스학과' 추가 --- src/main/resources/templates/user/signup.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/resources/templates/user/signup.html b/src/main/resources/templates/user/signup.html index 161c5fb..af20d6f 100644 --- a/src/main/resources/templates/user/signup.html +++ b/src/main/resources/templates/user/signup.html @@ -58,6 +58,8 @@ + + From f19e28483d66a7458a097b02d1e7091fa6e6047a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=9D=AC=EC=88=98?= Date: Tue, 20 Aug 2024 16:53:39 +0900 Subject: [PATCH 5/8] refactor: InitData MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 추가: 소프트웨어학과, 데이터사이언스학과, 테스트 유저(admin 3명), 4개 학과 24년도 abeek 삭제: 기존 테스트 유저, 테스트 더미 데이터 --- .../example/gimmegonghakauth/InitData.java | 218 +++++++++--------- 1 file changed, 113 insertions(+), 105 deletions(-) diff --git a/src/main/java/com/example/gimmegonghakauth/InitData.java b/src/main/java/com/example/gimmegonghakauth/InitData.java index 6d271b3..18bb39f 100644 --- a/src/main/java/com/example/gimmegonghakauth/InitData.java +++ b/src/main/java/com/example/gimmegonghakauth/InitData.java @@ -17,6 +17,7 @@ import com.example.gimmegonghakauth.domain.UserDomain; import com.example.gimmegonghakauth.service.recommend.MajorName; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.annotation.Profile; import org.springframework.context.event.EventListener; @@ -31,12 +32,18 @@ public class InitData { private final MajorsDao majorsDao; private final AbeekDao abeekDao; - private final CompletedCoursesDao completedCoursesDao; - private final CoursesDao coursesDao; - private final GonghakCoursesDao gonghakCoursesDao; private final UserDao userDao; private final PasswordEncoder passwordEncoder; + @Value("${admin1}") + private Long admin1; + + @Value("${admin2}") + private Long admin2; + + @Value("${admin3}") + private Long admin3; + @EventListener(ApplicationReadyEvent.class) @Transactional public void initDatabase() { @@ -46,8 +53,16 @@ public void initDatabase() { MajorsDomain elecInfoMajor = MajorsDomain.builder() .id(2L) .major(MajorName.ELEC_INFO.getName()).build(); + MajorsDomain softwareMajor = MajorsDomain.builder() + .id(3L) + .major(MajorName.SOFTWARE.getName()).build(); + MajorsDomain dataScienceMajor = MajorsDomain.builder() + .id(4L) + .major(MajorName.DATA_SCIENCE.getName()).build(); majorsDao.save(computerMajor); majorsDao.save(elecInfoMajor); + majorsDao.save(softwareMajor); + majorsDao.save(dataScienceMajor); //24학년도 computerMajor AbeekDomainBuilder abeek1 = AbeekDomain.builder() @@ -125,114 +140,107 @@ public void initDatabase() { abeekDao.save(abeek24.build()); abeekDao.save(abeek25.build()); - //User - UserDomain userDomain = UserDomain.builder() - .email("testEmail@sju.ac.kr") - .name("홍지섭") - .password(passwordEncoder.encode("qwer")) - .studentId(19011706L) - .majorsDomain(computerMajor).build(); - userDao.save(userDomain); + //24학년도 소프트웨어 + AbeekDomainBuilder abeek31 = AbeekDomain.builder() + .abeekType(AbeekTypeConst.BSM) + .majorsDomain(softwareMajor) + .note("this is a test note") + .year(24) + .minCredit(18); + AbeekDomainBuilder abeek32 = AbeekDomain.builder() + .abeekType(AbeekTypeConst.PROFESSIONAL_NON_MAJOR) + .majorsDomain(softwareMajor) + .note("this is a test note") + .year(24) + .minCredit(14); + AbeekDomainBuilder abeek33 = AbeekDomain.builder() + .abeekType(AbeekTypeConst.DESIGN) + .majorsDomain(softwareMajor) + .note("this is a test note") + .year(24) + .minCredit(12); + AbeekDomainBuilder abeek34 = AbeekDomain.builder() + .abeekType(AbeekTypeConst.MAJOR) + .majorsDomain(softwareMajor) + .note("this is a test note") + .year(24) + .minCredit(45); + AbeekDomainBuilder abeek35 = AbeekDomain.builder() + .abeekType(AbeekTypeConst.MINIMUM_CERTI) + .majorsDomain(softwareMajor) + .note("this is a test note") + .year(24) + .minCredit(77); + + abeekDao.save(abeek31.build()); + abeekDao.save(abeek32.build()); + abeekDao.save(abeek33.build()); + abeekDao.save(abeek34.build()); + abeekDao.save(abeek35.build()); + + //24학년도 데이터사이언스 + AbeekDomainBuilder abeek41 = AbeekDomain.builder() + .abeekType(AbeekTypeConst.BSM) + .majorsDomain(dataScienceMajor) + .note("this is a test note") + .year(24) + .minCredit(15); + AbeekDomainBuilder abeek42 = AbeekDomain.builder() + .abeekType(AbeekTypeConst.PROFESSIONAL_NON_MAJOR) + .majorsDomain(dataScienceMajor) + .note("this is a test note") + .year(24) + .minCredit(14); + AbeekDomainBuilder abeek43 = AbeekDomain.builder() + .abeekType(AbeekTypeConst.DESIGN) + .majorsDomain(dataScienceMajor) + .note("this is a test note") + .year(24) + .minCredit(9); + AbeekDomainBuilder abeek44 = AbeekDomain.builder() + .abeekType(AbeekTypeConst.MAJOR) + .majorsDomain(dataScienceMajor) + .note("this is a test note") + .year(24) + .minCredit(45); + AbeekDomainBuilder abeek45 = AbeekDomain.builder() + .abeekType(AbeekTypeConst.MINIMUM_CERTI) + .majorsDomain(dataScienceMajor) + .note("this is a test note") + .year(24) + .minCredit(74); - UserDomain userDomainElec = UserDomain.builder() - .email("testEmail123@sju.ac.kr") - .name("전통이") + abeekDao.save(abeek41.build()); + abeekDao.save(abeek42.build()); + abeekDao.save(abeek43.build()); + abeekDao.save(abeek44.build()); + abeekDao.save(abeek45.build()); + + //User + UserDomain user1 = UserDomain.builder() + .email("testEmail1@sju.ac.kr") + .name("조태현") .password(passwordEncoder.encode("qwer")) - .studentId(19111111L) + .studentId(admin1) .majorsDomain(elecInfoMajor).build(); - userDao.save(userDomainElec); - - //Courses - CoursesDomain testCourse1 = CoursesDomain.builder() - .courseId(1234L) - .credit(3) - .name("testCourse1").build(); - CoursesDomain testCourse2 = CoursesDomain.builder() - .courseId(2345L) - .credit(4) - .name("testCourse2").build(); - CoursesDomain testCourse3 = CoursesDomain.builder() - .courseId(9000L) - .credit(5) - .name("testCourse3").build(); - CoursesDomain testCourse4 = CoursesDomain.builder() - .courseId(9001L) - .credit(3) - .name("testCourse4").build(); - CoursesDomain testCourse5 = CoursesDomain.builder() - .courseId(9002L) - .credit(3) - .name("testCourse5").build(); - coursesDao.save(testCourse1); - coursesDao.save(testCourse2); - coursesDao.save(testCourse3); - coursesDao.save(testCourse4); - coursesDao.save(testCourse5); - - //CompletedCourses - CompletedCoursesDomain coursesDomain1 = CompletedCoursesDomain.builder() - .year(19) - .semester("1학기") - .coursesDomain(testCourse1) - .userDomain(userDomain).build(); - CompletedCoursesDomain coursesDomain2 = CompletedCoursesDomain.builder() - .year(19) - .semester("1학기") - .coursesDomain(testCourse2) - .userDomain(userDomain).build(); - CompletedCoursesDomain coursesDomain3 = CompletedCoursesDomain.builder() - .year(19) - .semester("1학기") - .coursesDomain(testCourse3) - .userDomain(userDomain).build(); - CompletedCoursesDomain coursesDomain4 = CompletedCoursesDomain.builder() - .year(19) - .semester("1학기") - .coursesDomain(testCourse4) - .userDomain(userDomain).build(); - - completedCoursesDao.save(coursesDomain1); - completedCoursesDao.save(coursesDomain2); - completedCoursesDao.save(coursesDomain3); - completedCoursesDao.save(coursesDomain4); - - //gonghakCourses - GonghakCoursesDomain gonghakCourses1 = GonghakCoursesDomain.builder() - .courseCategory(CourseCategoryConst.BSM) - .majorsDomain(computerMajor) - .designCredit(0.0) - .coursesDomain(testCourse1) - .passCategory("인필") - .year(19).build(); + userDao.save(user1); - GonghakCoursesDomain gonghakCourses2 = GonghakCoursesDomain.builder() - .courseCategory(CourseCategoryConst.BSM) - .majorsDomain(computerMajor) - .designCredit(0.0) - .coursesDomain(testCourse2) - .passCategory("인필") - .year(19).build(); + UserDomain user2 = UserDomain.builder() + .email("testEmail2@sju.ac.kr") + .name("이희수") + .password(passwordEncoder.encode("qwer")) + .studentId(admin2) + .majorsDomain(dataScienceMajor).build(); + userDao.save(user2); - GonghakCoursesDomain gonghakCourses3 = GonghakCoursesDomain.builder() - .courseCategory(CourseCategoryConst.전공) - .majorsDomain(computerMajor) - .designCredit(1.0) - .coursesDomain(testCourse3) - .passCategory("인선") - .year(19).build(); + UserDomain user3 = UserDomain.builder() + .email("testEmail3@sju.ac.kr") + .name("홍지섭") + .password(passwordEncoder.encode("qwer")) + .studentId(admin3) + .majorsDomain(computerMajor).build(); + userDao.save(user3); - GonghakCoursesDomain gonghakCourses4 = GonghakCoursesDomain.builder() - .courseCategory(CourseCategoryConst.전공) - .majorsDomain(computerMajor) - .designCredit(1.0) - .coursesDomain(testCourse5) - .passCategory("인선") - .year(19).build(); - - gonghakCoursesDao.save(gonghakCourses1); - gonghakCoursesDao.save(gonghakCourses2); - gonghakCoursesDao.save(gonghakCourses3); - gonghakCoursesDao.save(gonghakCourses4); } From 89f9c699b16fcc8c92d300bb6442284a89ae4d9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=9D=AC=EC=88=98?= Date: Tue, 20 Aug 2024 16:56:08 +0900 Subject: [PATCH 6/8] refactor: InitFileData MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 운영용 DB에 동일한 DB 환경 구성 2. 과목명 띄어쓰기 오류 해결을 위한 CoursesDao.findByNameIgnoreSpaces 메서드 추가 3. MajorsDao.findById 메서드 추가 --- .../gimmegonghakauth/InitFileData.java | 29 ++++++++++++------- .../gimmegonghakauth/dao/CoursesDao.java | 6 ++++ .../gimmegonghakauth/dao/MajorsDao.java | 2 ++ 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/example/gimmegonghakauth/InitFileData.java b/src/main/java/com/example/gimmegonghakauth/InitFileData.java index dfb2f75..9257f02 100644 --- a/src/main/java/com/example/gimmegonghakauth/InitFileData.java +++ b/src/main/java/com/example/gimmegonghakauth/InitFileData.java @@ -29,16 +29,10 @@ public class InitFileData { @EventListener(ApplicationReadyEvent.class) @Transactional public void loadCoursesDataFromCSV() throws IOException { - String csvFilePath = "src/main/java/com/example/gimmegonghakauth/19학년2학기_20학년1학기_컴공.csv"; - inputCoursesCsv(csvFilePath); - csvFilePath = "src/main/java/com/example/gimmegonghakauth/19학년2학기_20학년1학기_전정통.csv"; - inputCoursesCsv(csvFilePath); - csvFilePath = "src/main/java/com/example/gimmegonghakauth/19학년2학기_20학년1학기_대양.csv"; + String csvFilePath = "src/main/java/com/example/gimmegonghakauth/Course.csv"; inputCoursesCsv(csvFilePath); - csvFilePath = "src/main/java/com/example/gimmegonghakauth/computerMajorGonghakCourses2019Test.csv"; - inputGonghakCoursesCsv(csvFilePath); - csvFilePath = "src/main/java/com/example/gimmegonghakauth/elecInfoMajorGonghakCourses2019Test.csv"; + csvFilePath = "src/main/java/com/example/gimmegonghakauth/gonghak_course.csv"; inputGonghakCoursesCsv(csvFilePath); } @@ -80,7 +74,7 @@ private void inputGonghakCoursesCsv(String csvFilePath) { while ((line = br.readLine()) != null) { String[] data = line.split(cvsSplitBy); try { - Optional course = mapToGonghakCoursesDomain(data); + Optional course = mapToGonghakCourses(data); if (course.isPresent()) { gonghakCoursesDao.save(course.get()); } @@ -93,9 +87,10 @@ private void inputGonghakCoursesCsv(String csvFilePath) { } } + // raw file 입력 용 private Optional mapToGonghakCoursesDomain(String[] data) { - CoursesDomain courseDomain = coursesDao.findByName(data[6].replaceAll("\\s+", "")); + CoursesDomain courseDomain = coursesDao.findByNameIgnoreSpaces(data[6].replaceAll("\\s+", "")); if (courseDomain == null) { return Optional.empty(); } @@ -128,4 +123,18 @@ private Optional mapToGonghakCoursesDomain(String[] data) return Optional.of(gonghakCourse); } + + // 실제 DB csv file 입력용 + private Optional mapToGonghakCourses(String[] data) { + GonghakCoursesDomain gonghakCourse = GonghakCoursesDomain.builder() + .year(Integer.parseInt(data[1])) + .majorsDomain(majorsDao.findById(Long.parseLong(data[4])).get()) + .coursesDomain(coursesDao.findByCourseId(Long.parseLong(data[2]))) + .courseCategory(CourseCategoryConst.valueOf(data[5])) + .passCategory(data[6]) + .designCredit(Double.parseDouble(data[0])) + .build(); + + return Optional.of(gonghakCourse); + } } diff --git a/src/main/java/com/example/gimmegonghakauth/dao/CoursesDao.java b/src/main/java/com/example/gimmegonghakauth/dao/CoursesDao.java index 2b05f7c..e3ddfba 100644 --- a/src/main/java/com/example/gimmegonghakauth/dao/CoursesDao.java +++ b/src/main/java/com/example/gimmegonghakauth/dao/CoursesDao.java @@ -2,6 +2,8 @@ import com.example.gimmegonghakauth.domain.CoursesDomain; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; @Repository @@ -10,4 +12,8 @@ public interface CoursesDao extends JpaRepository { CoursesDomain findByCourseId(Long id); CoursesDomain findByName(String name); + + // 띄워쓰기를 제외한 course.name 과 비교해서 반환하는 쿼리문 + @Query(value ="select * from course where REPLACE(name, ' ', '') = :name", nativeQuery = true) + CoursesDomain findByNameIgnoreSpaces(@Param("name") String name); } diff --git a/src/main/java/com/example/gimmegonghakauth/dao/MajorsDao.java b/src/main/java/com/example/gimmegonghakauth/dao/MajorsDao.java index b74333c..7ef54a2 100644 --- a/src/main/java/com/example/gimmegonghakauth/dao/MajorsDao.java +++ b/src/main/java/com/example/gimmegonghakauth/dao/MajorsDao.java @@ -1,6 +1,7 @@ package com.example.gimmegonghakauth.dao; import com.example.gimmegonghakauth.domain.MajorsDomain; +import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -8,4 +9,5 @@ public interface MajorsDao extends JpaRepository { MajorsDomain findByMajor(String Major); + Optional findById(Long id); } From ab8f4b13502597115305ddd4c99267ff08b080e7 Mon Sep 17 00:00:00 2001 From: Taehyeon Jo <70999462+whxogus215@users.noreply.github.com> Date: Wed, 21 Aug 2024 21:23:57 +0900 Subject: [PATCH 7/8] =?UTF-8?q?refactor:=20=EC=84=9C=EB=B8=8C=EB=AA=A8?= =?UTF-8?q?=EB=93=88=20=EC=96=B4=EB=93=9C=EB=AF=BC=20=ED=95=99=EB=B2=88=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 19010693 -> 18010693 --- src/main/resources/submodule-properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/submodule-properties b/src/main/resources/submodule-properties index 87aa3d0..920fd67 160000 --- a/src/main/resources/submodule-properties +++ b/src/main/resources/submodule-properties @@ -1 +1 @@ -Subproject commit 87aa3d0decac6025a0cd0d148bc298426ea4f5b1 +Subproject commit 920fd67beab95c36c8895217290a124b7058db0c From 6297efa0dfb4a4fce0c970b30ae103494c8f971e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=9D=AC=EC=88=98?= Date: Thu, 22 Aug 2024 21:20:39 +0900 Subject: [PATCH 8/8] =?UTF-8?q?fix:=20=EC=A3=BC=EC=84=9D=20=EC=98=A4?= =?UTF-8?q?=ED=83=88=EC=9E=90=20=EC=88=98=EC=A0=95,=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=20=EC=9D=B4=EB=A6=84=20=ED=86=B5=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 띄워쓰기 -> 띄어쓰기 2. Course.csv -> course.csv --- src/main/java/com/example/gimmegonghakauth/InitFileData.java | 2 +- src/main/java/com/example/gimmegonghakauth/dao/CoursesDao.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/gimmegonghakauth/InitFileData.java b/src/main/java/com/example/gimmegonghakauth/InitFileData.java index 9257f02..b9ffa61 100644 --- a/src/main/java/com/example/gimmegonghakauth/InitFileData.java +++ b/src/main/java/com/example/gimmegonghakauth/InitFileData.java @@ -29,7 +29,7 @@ public class InitFileData { @EventListener(ApplicationReadyEvent.class) @Transactional public void loadCoursesDataFromCSV() throws IOException { - String csvFilePath = "src/main/java/com/example/gimmegonghakauth/Course.csv"; + String csvFilePath = "src/main/java/com/example/gimmegonghakauth/course.csv"; inputCoursesCsv(csvFilePath); csvFilePath = "src/main/java/com/example/gimmegonghakauth/gonghak_course.csv"; diff --git a/src/main/java/com/example/gimmegonghakauth/dao/CoursesDao.java b/src/main/java/com/example/gimmegonghakauth/dao/CoursesDao.java index e3ddfba..2fdbb10 100644 --- a/src/main/java/com/example/gimmegonghakauth/dao/CoursesDao.java +++ b/src/main/java/com/example/gimmegonghakauth/dao/CoursesDao.java @@ -13,7 +13,7 @@ public interface CoursesDao extends JpaRepository { CoursesDomain findByName(String name); - // 띄워쓰기를 제외한 course.name 과 비교해서 반환하는 쿼리문 + // 띄어쓰기를 제외한 course.name 과 비교해서 반환하는 쿼리문 @Query(value ="select * from course where REPLACE(name, ' ', '') = :name", nativeQuery = true) CoursesDomain findByNameIgnoreSpaces(@Param("name") String name); }