From 591d5dc1a5a46af72956c55026e6c2ff8c7a3a1b Mon Sep 17 00:00:00 2001 From: Taehyeon Jo <70999462+whxogus215@users.noreply.github.com> Date: Wed, 14 Aug 2024 21:28:07 +0900 Subject: [PATCH 1/2] =?UTF-8?q?refactor:=20GonghakCourseDao=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=9D=B4=EB=A6=84=20=EB=B0=8F=20JPQL=20?= =?UTF-8?q?=EB=84=A4=EC=9D=B4=EB=B0=8D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - GonghakCorusesDao -> GonghakCoursesDao (Course 오타 수정) - JPQL에 사용된 CompletedCourseesDomain의 약어를 GCCD에서 CCD로 변경 --- .../java/com/example/gimmegonghakauth/InitData.java | 12 ++++++------ .../com/example/gimmegonghakauth/InitFileData.java | 6 +++--- ...GonghakCorusesDao.java => GonghakCoursesDao.java} | 12 +++++------- .../com/example/gimmegonghakauth/dao/GonghakDao.java | 6 +++--- .../Service/GonghakCalculateServiceTest.java | 6 +++--- .../example/gimmegonghakauth/domain/DomainTest.java | 6 +++--- 6 files changed, 23 insertions(+), 25 deletions(-) rename src/main/java/com/example/gimmegonghakauth/dao/{GonghakCorusesDao.java => GonghakCoursesDao.java} (74%) diff --git a/src/main/java/com/example/gimmegonghakauth/InitData.java b/src/main/java/com/example/gimmegonghakauth/InitData.java index 3b77bb4..c407a45 100644 --- a/src/main/java/com/example/gimmegonghakauth/InitData.java +++ b/src/main/java/com/example/gimmegonghakauth/InitData.java @@ -5,7 +5,7 @@ import com.example.gimmegonghakauth.dao.AbeekDao; import com.example.gimmegonghakauth.dao.CompletedCoursesDao; import com.example.gimmegonghakauth.dao.CoursesDao; -import com.example.gimmegonghakauth.dao.GonghakCorusesDao; +import com.example.gimmegonghakauth.dao.GonghakCoursesDao; import com.example.gimmegonghakauth.dao.MajorsDao; import com.example.gimmegonghakauth.dao.UserDao; import com.example.gimmegonghakauth.domain.AbeekDomain; @@ -33,7 +33,7 @@ public class InitData { private final AbeekDao abeekDao; private final CompletedCoursesDao completedCoursesDao; private final CoursesDao coursesDao; - private final GonghakCorusesDao gonghakCorusesDao; + private final GonghakCoursesDao gonghakCoursesDao; private final UserDao userDao; private final PasswordEncoder passwordEncoder; @@ -229,10 +229,10 @@ public void initDatabase() { .passCategory("인선") .year(19).build(); - gonghakCorusesDao.save(gonghakCourses1); - gonghakCorusesDao.save(gonghakCourses2); - gonghakCorusesDao.save(gonghakCourses3); - gonghakCorusesDao.save(gonghakCourses4); + gonghakCoursesDao.save(gonghakCourses1); + gonghakCoursesDao.save(gonghakCourses2); + gonghakCoursesDao.save(gonghakCourses3); + gonghakCoursesDao.save(gonghakCourses4); } diff --git a/src/main/java/com/example/gimmegonghakauth/InitFileData.java b/src/main/java/com/example/gimmegonghakauth/InitFileData.java index 424c3c9..dfb2f75 100644 --- a/src/main/java/com/example/gimmegonghakauth/InitFileData.java +++ b/src/main/java/com/example/gimmegonghakauth/InitFileData.java @@ -2,7 +2,7 @@ import com.example.gimmegonghakauth.constant.CourseCategoryConst; import com.example.gimmegonghakauth.dao.CoursesDao; -import com.example.gimmegonghakauth.dao.GonghakCorusesDao; +import com.example.gimmegonghakauth.dao.GonghakCoursesDao; import com.example.gimmegonghakauth.dao.MajorsDao; import com.example.gimmegonghakauth.domain.CoursesDomain; import com.example.gimmegonghakauth.domain.GonghakCoursesDomain; @@ -24,7 +24,7 @@ public class InitFileData { private final MajorsDao majorsDao; private final CoursesDao coursesDao; - private final GonghakCorusesDao gonghakCorusesDao; + private final GonghakCoursesDao gonghakCoursesDao; @EventListener(ApplicationReadyEvent.class) @Transactional @@ -82,7 +82,7 @@ private void inputGonghakCoursesCsv(String csvFilePath) { try { Optional course = mapToGonghakCoursesDomain(data); if (course.isPresent()) { - gonghakCorusesDao.save(course.get()); + gonghakCoursesDao.save(course.get()); } } catch (Exception e) { continue; diff --git a/src/main/java/com/example/gimmegonghakauth/dao/GonghakCorusesDao.java b/src/main/java/com/example/gimmegonghakauth/dao/GonghakCoursesDao.java similarity index 74% rename from src/main/java/com/example/gimmegonghakauth/dao/GonghakCorusesDao.java rename to src/main/java/com/example/gimmegonghakauth/dao/GonghakCoursesDao.java index fb8c7e4..8d7bf94 100644 --- a/src/main/java/com/example/gimmegonghakauth/dao/GonghakCorusesDao.java +++ b/src/main/java/com/example/gimmegonghakauth/dao/GonghakCoursesDao.java @@ -12,18 +12,16 @@ import org.springframework.stereotype.Repository; @Repository -public interface GonghakCorusesDao extends JpaRepository { - - List findAllByMajorsDomain(MajorsDomain majorsDomain); +public interface GonghakCoursesDao extends JpaRepository { @Query("select new com.example.gimmegonghakauth.dto.GonghakCoursesByMajorDto(GCD.coursesDomain.courseId, GCD.coursesDomain.name, GCD.year, GCD.courseCategory, GCD.passCategory, GCD.designCredit, GCD.coursesDomain.credit) from GonghakCoursesDomain GCD " - + "join CompletedCoursesDomain GCCD on GCD.coursesDomain = GCCD.coursesDomain " - + "where GCCD.userDomain.studentId =:studentId and GCD.majorsDomain.id = :majorsId and GCCD.year = GCD.year") + + "join CompletedCoursesDomain CCD on GCD.coursesDomain = CCD.coursesDomain " + + "where CCD.userDomain.studentId =:studentId and GCD.majorsDomain.id = :majorsId and CCD.year = GCD.year") List findUserCoursesByMajorAndGonghakCoursesWithCompletedCourses(@Param("studentId") Long studentId, @Param("majorsId") Long majorId); @Query("select new com.example.gimmegonghakauth.dto.IncompletedCoursesDto(GCD.coursesDomain.name, GCD.courseCategory, GCD.coursesDomain.credit, GCD.designCredit) from GonghakCoursesDomain GCD " - + "left join CompletedCoursesDomain GCCD on GCCD.coursesDomain = GCD.coursesDomain " - + "where GCD.majorsDomain = :majorsDomain and GCD.year = :year and GCD.courseCategory = :courseCategory and GCCD.id is null and :studentId is not null") + + "left join CompletedCoursesDomain CCD on CCD.coursesDomain = GCD.coursesDomain " + + "where GCD.majorsDomain = :majorsDomain and GCD.year = :year and GCD.courseCategory = :courseCategory and CCD.id is null and :studentId is not null") List findUserCoursesByMajorAndCourseCategoryAndGonghakCoursesWithoutCompleteCourses(@Param("courseCategory") CourseCategoryConst courseCategory, @Param("studentId") Long studentId, @Param("majorsDomain") MajorsDomain majorsDomain, @Param("year") Long year); } diff --git a/src/main/java/com/example/gimmegonghakauth/dao/GonghakDao.java b/src/main/java/com/example/gimmegonghakauth/dao/GonghakDao.java index 4fbccd0..34f6538 100644 --- a/src/main/java/com/example/gimmegonghakauth/dao/GonghakDao.java +++ b/src/main/java/com/example/gimmegonghakauth/dao/GonghakDao.java @@ -24,7 +24,7 @@ public class GonghakDao implements GonghakRepository{ private static final int DIVIDER = 1000000; private final AbeekDao abeekDao; - private final GonghakCorusesDao gonghakCorusesDao; + private final GonghakCoursesDao gonghakCoursesDao; @Override public AbeekDomain save(AbeekDomain abeekDomain) { @@ -44,14 +44,14 @@ public Optional findStandard(Long studentId, MajorsDomain ma @Override public List findUserCoursesByMajorByGonghakCoursesWithCompletedCourses( Long studentId, MajorsDomain majorsDomain) { - return gonghakCorusesDao.findUserCoursesByMajorAndGonghakCoursesWithCompletedCourses(studentId,majorsDomain.getId()); + return gonghakCoursesDao.findUserCoursesByMajorAndGonghakCoursesWithCompletedCourses(studentId,majorsDomain.getId()); } // @Override public List findUserCoursesByMajorByGonghakCoursesWithoutCompleteCourses( CourseCategoryConst courseCategory, Long studentId, MajorsDomain majorsDomain) { - return gonghakCorusesDao.findUserCoursesByMajorAndCourseCategoryAndGonghakCoursesWithoutCompleteCourses( + return gonghakCoursesDao.findUserCoursesByMajorAndCourseCategoryAndGonghakCoursesWithoutCompleteCourses( courseCategory, studentId, majorsDomain, studentId/DIVIDER); } diff --git a/src/test/java/com/example/gimmegonghakauth/Service/GonghakCalculateServiceTest.java b/src/test/java/com/example/gimmegonghakauth/Service/GonghakCalculateServiceTest.java index 56c5812..467992d 100644 --- a/src/test/java/com/example/gimmegonghakauth/Service/GonghakCalculateServiceTest.java +++ b/src/test/java/com/example/gimmegonghakauth/Service/GonghakCalculateServiceTest.java @@ -5,7 +5,7 @@ import com.example.gimmegonghakauth.Service.GonghakCalculateServiceTest.CalculateTestConfig; import com.example.gimmegonghakauth.constant.AbeekTypeConst; import com.example.gimmegonghakauth.dao.AbeekDao; -import com.example.gimmegonghakauth.dao.GonghakCorusesDao; +import com.example.gimmegonghakauth.dao.GonghakCoursesDao; import com.example.gimmegonghakauth.dao.GonghakDao; import com.example.gimmegonghakauth.dao.GonghakRepository; import com.example.gimmegonghakauth.domain.MajorsDomain; @@ -51,11 +51,11 @@ class GonghakCalculateServiceTest { @RequiredArgsConstructor static class CalculateTestConfig{ private final AbeekDao abeekDao; - private final GonghakCorusesDao gonghakCorusesDao; + private final GonghakCoursesDao gonghakCoursesDao; @Bean public GonghakRepository gonghakRepository(){ - return new GonghakDao(abeekDao,gonghakCorusesDao); + return new GonghakDao(abeekDao, gonghakCoursesDao); } @Bean diff --git a/src/test/java/com/example/gimmegonghakauth/domain/DomainTest.java b/src/test/java/com/example/gimmegonghakauth/domain/DomainTest.java index 3c9bc1f..aa0b6e1 100644 --- a/src/test/java/com/example/gimmegonghakauth/domain/DomainTest.java +++ b/src/test/java/com/example/gimmegonghakauth/domain/DomainTest.java @@ -5,7 +5,7 @@ import com.example.gimmegonghakauth.constant.AbeekTypeConst; import com.example.gimmegonghakauth.dao.AbeekDao; -import com.example.gimmegonghakauth.dao.GonghakCorusesDao; +import com.example.gimmegonghakauth.dao.GonghakCoursesDao; import com.example.gimmegonghakauth.dao.GonghakDao; import com.example.gimmegonghakauth.dao.GonghakRepository; import com.example.gimmegonghakauth.dao.MajorsDao; @@ -39,11 +39,11 @@ public class DomainTest { @RequiredArgsConstructor public static class DomainTestConfig { private final AbeekDao abeekDao; - private final GonghakCorusesDao gonghakCorusesDao; + private final GonghakCoursesDao gonghakCoursesDao; @Bean public GonghakRepository gonghakRepository(){ - return new GonghakDao(abeekDao,gonghakCorusesDao); + return new GonghakDao(abeekDao, gonghakCoursesDao); } } From d1741f57e885cc54badec9257a6f156d0c730422 Mon Sep 17 00:00:00 2001 From: Taehyeon Jo <70999462+whxogus215@users.noreply.github.com> Date: Wed, 14 Aug 2024 21:40:26 +0900 Subject: [PATCH 2/2] =?UTF-8?q?refactor:=20GonghakRepository=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gimmegonghakauth/dao/GonghakCoursesDao.java | 4 ++-- .../com/example/gimmegonghakauth/dao/GonghakDao.java | 11 +++++------ .../gimmegonghakauth/dao/GonghakRepository.java | 4 ++-- .../service/GonghakCalculateService.java | 2 +- .../ComputerMajorGonghakRecommendService.java | 6 +++--- .../ElecInfoMajorGonghakRecommendService.java | 6 +++--- .../gimmegonghakauth/dao/GonghakRepositoryTest.java | 8 ++++---- 7 files changed, 20 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/example/gimmegonghakauth/dao/GonghakCoursesDao.java b/src/main/java/com/example/gimmegonghakauth/dao/GonghakCoursesDao.java index 8d7bf94..d3d1216 100644 --- a/src/main/java/com/example/gimmegonghakauth/dao/GonghakCoursesDao.java +++ b/src/main/java/com/example/gimmegonghakauth/dao/GonghakCoursesDao.java @@ -17,11 +17,11 @@ public interface GonghakCoursesDao extends JpaRepository findUserCoursesByMajorAndGonghakCoursesWithCompletedCourses(@Param("studentId") Long studentId, @Param("majorsId") Long majorId); + List findUserCompletedCourses(@Param("studentId") Long studentId, @Param("majorsId") Long majorId); @Query("select new com.example.gimmegonghakauth.dto.IncompletedCoursesDto(GCD.coursesDomain.name, GCD.courseCategory, GCD.coursesDomain.credit, GCD.designCredit) from GonghakCoursesDomain GCD " + "left join CompletedCoursesDomain CCD on CCD.coursesDomain = GCD.coursesDomain " + "where GCD.majorsDomain = :majorsDomain and GCD.year = :year and GCD.courseCategory = :courseCategory and CCD.id is null and :studentId is not null") - List findUserCoursesByMajorAndCourseCategoryAndGonghakCoursesWithoutCompleteCourses(@Param("courseCategory") CourseCategoryConst courseCategory, @Param("studentId") Long studentId, @Param("majorsDomain") MajorsDomain majorsDomain, @Param("year") Long year); + List findUserIncompletedCourses(@Param("courseCategory") CourseCategoryConst courseCategory, @Param("studentId") Long studentId, @Param("majorsDomain") MajorsDomain majorsDomain, @Param("year") Long year); } diff --git a/src/main/java/com/example/gimmegonghakauth/dao/GonghakDao.java b/src/main/java/com/example/gimmegonghakauth/dao/GonghakDao.java index 34f6538..1d49f98 100644 --- a/src/main/java/com/example/gimmegonghakauth/dao/GonghakDao.java +++ b/src/main/java/com/example/gimmegonghakauth/dao/GonghakDao.java @@ -42,17 +42,16 @@ public Optional findStandard(Long studentId, MajorsDomain ma // gonghakCourse 중 이수한 과목을 불러온다. @Override - public List findUserCoursesByMajorByGonghakCoursesWithCompletedCourses( + public List findUserCompletedCourses( Long studentId, MajorsDomain majorsDomain) { - return gonghakCoursesDao.findUserCoursesByMajorAndGonghakCoursesWithCompletedCourses(studentId,majorsDomain.getId()); + return gonghakCoursesDao.findUserCompletedCourses(studentId,majorsDomain.getId()); } - // + // gonghakCourse 중 이수하지 않은 과목을 불러온다. @Override - public List findUserCoursesByMajorByGonghakCoursesWithoutCompleteCourses( + public List findUserIncompletedCourses( CourseCategoryConst courseCategory, Long studentId, MajorsDomain majorsDomain) { - return gonghakCoursesDao.findUserCoursesByMajorAndCourseCategoryAndGonghakCoursesWithoutCompleteCourses( - courseCategory, studentId, majorsDomain, studentId/DIVIDER); + return gonghakCoursesDao.findUserIncompletedCourses(courseCategory, studentId, majorsDomain, studentId/DIVIDER); } private Optional changeToGonghakStandardDto(MajorsDomain majorsDomain, int year) { diff --git a/src/main/java/com/example/gimmegonghakauth/dao/GonghakRepository.java b/src/main/java/com/example/gimmegonghakauth/dao/GonghakRepository.java index 0d2b533..b104cb2 100644 --- a/src/main/java/com/example/gimmegonghakauth/dao/GonghakRepository.java +++ b/src/main/java/com/example/gimmegonghakauth/dao/GonghakRepository.java @@ -17,9 +17,9 @@ public interface GonghakRepository { Optional findStandard(Long studentId, MajorsDomain majorsDomain); - List findUserCoursesByMajorByGonghakCoursesWithCompletedCourses(Long studentId, MajorsDomain majorsDomain); + List findUserCompletedCourses(Long studentId, MajorsDomain majorsDomain); - List findUserCoursesByMajorByGonghakCoursesWithoutCompleteCourses( + List findUserIncompletedCourses( CourseCategoryConst courseCategory,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 9b56f8b..0e65320 100644 --- a/src/main/java/com/example/gimmegonghakauth/service/GonghakCalculateService.java +++ b/src/main/java/com/example/gimmegonghakauth/service/GonghakCalculateService.java @@ -35,7 +35,7 @@ public Optional getResultRatio(UserDomain userDomain) { // user 공학 상태 테이블 // gonghakCourse 중 이수한 과목을 불러온다. - List userCoursesByMajorByGonghakCoursesWithCompletedCourses = gonghakRepository.findUserCoursesByMajorByGonghakCoursesWithCompletedCourses( + List userCoursesByMajorByGonghakCoursesWithCompletedCourses = gonghakRepository.findUserCompletedCourses( userDomain.getStudentId(), userDomain.getMajorsDomain()); // user 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 ce07bf9..0866dfe 100644 --- a/src/main/java/com/example/gimmegonghakauth/service/recommend/ComputerMajorGonghakRecommendService.java +++ b/src/main/java/com/example/gimmegonghakauth/service/recommend/ComputerMajorGonghakRecommendService.java @@ -33,17 +33,17 @@ public GonghakRecommendCoursesDto createRecommendCourses(UserDomain userDomain) userDomain.getStudentId(), userDomain.getMajorsDomain()); // 수강하지 않은 과목 중 "전문 교양" 과목을 반환한다. - List professionalNonMajor = gonghakRepository.findUserCoursesByMajorByGonghakCoursesWithoutCompleteCourses( + List professionalNonMajor = gonghakRepository.findUserIncompletedCourses( CourseCategoryConst.전문교양, userDomain.getStudentId(), userDomain.getMajorsDomain() ); // 수강하지 않은 과목 중 "전공" 과목을 반환한다. - List major = gonghakRepository.findUserCoursesByMajorByGonghakCoursesWithoutCompleteCourses( + List major = gonghakRepository.findUserIncompletedCourses( CourseCategoryConst.전공, userDomain.getStudentId(), userDomain.getMajorsDomain() ); // 수강하지 않은 과목 중 "BSM" 과목을 반환한다. - List bsm = gonghakRepository.findUserCoursesByMajorByGonghakCoursesWithoutCompleteCourses( + List bsm = gonghakRepository.findUserIncompletedCourses( CourseCategoryConst.BSM, userDomain.getStudentId(), userDomain.getMajorsDomain() ); 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 d84c896..f81149e 100644 --- a/src/main/java/com/example/gimmegonghakauth/service/recommend/ElecInfoMajorGonghakRecommendService.java +++ b/src/main/java/com/example/gimmegonghakauth/service/recommend/ElecInfoMajorGonghakRecommendService.java @@ -32,17 +32,17 @@ public GonghakRecommendCoursesDto createRecommendCourses(UserDomain userDomain) userDomain.getStudentId(), userDomain.getMajorsDomain()); // 수강하지 않은 과목 중 "전문 교양" 과목을 반환한다. - List professionalNonMajor = gonghakRepository.findUserCoursesByMajorByGonghakCoursesWithoutCompleteCourses( + List professionalNonMajor = gonghakRepository.findUserIncompletedCourses( CourseCategoryConst.전문교양, userDomain.getStudentId(), userDomain.getMajorsDomain() ); // 수강하지 않은 과목 중 "전공" 과목을 반환한다. - List major = gonghakRepository.findUserCoursesByMajorByGonghakCoursesWithoutCompleteCourses( + List major = gonghakRepository.findUserIncompletedCourses( CourseCategoryConst.전공, userDomain.getStudentId(), userDomain.getMajorsDomain() ); // 수강하지 않은 과목 중 "MSC" 과목을 반환한다. - List msc = gonghakRepository.findUserCoursesByMajorByGonghakCoursesWithoutCompleteCourses( + List msc = gonghakRepository.findUserIncompletedCourses( CourseCategoryConst.MSC, userDomain.getStudentId(), userDomain.getMajorsDomain() ); diff --git a/src/test/java/com/example/gimmegonghakauth/dao/GonghakRepositoryTest.java b/src/test/java/com/example/gimmegonghakauth/dao/GonghakRepositoryTest.java index 51ae05f..2edd5a1 100644 --- a/src/test/java/com/example/gimmegonghakauth/dao/GonghakRepositoryTest.java +++ b/src/test/java/com/example/gimmegonghakauth/dao/GonghakRepositoryTest.java @@ -54,7 +54,7 @@ void setInit(){ @Test @DisplayName("dao 메서드 상태 출력") void displayDaoMethod(){ - List withoutCompleteCourses = gonghakRepository.findUserCoursesByMajorByGonghakCoursesWithoutCompleteCourses( + List withoutCompleteCourses = gonghakRepository.findUserIncompletedCourses( CourseCategoryConst.전공, COM_TEST_STUDENT_ID, COM_TEST_MAJORDOMAIN ); @@ -64,7 +64,7 @@ void displayDaoMethod(){ } ); - List withCompletedCourses = gonghakRepository.findUserCoursesByMajorByGonghakCoursesWithCompletedCourses( + List withCompletedCourses = gonghakRepository.findUserCompletedCourses( COM_TEST_STUDENT_ID, COM_TEST_MAJORDOMAIN ); @@ -89,7 +89,7 @@ void findStandardKeySetTest() { @Test @DisplayName("findUserCoursesByMajorByGonghakCoursesWithCompletedCourses 테스트 ") void findUserCoursesByMajorByGonghakCoursesWithCompletedCoursesTest() { - List userDataForCalculate = gonghakRepository.findUserCoursesByMajorByGonghakCoursesWithCompletedCourses( + List userDataForCalculate = gonghakRepository.findUserCompletedCourses( COM_TEST_STUDENT_ID, COM_TEST_MAJORDOMAIN); log.info("userDataForCalculate size = {}",userDataForCalculate.size()); @@ -122,7 +122,7 @@ void findUserCoursesByMajorByGonghakCoursesWithoutCompleteCoursesTest(){ Arrays.stream(CourseCategoryConst.values()).forEach( courseCategory -> { - List testCourses = gonghakRepository.findUserCoursesByMajorByGonghakCoursesWithoutCompleteCourses( + List testCourses = gonghakRepository.findUserIncompletedCourses( CourseCategoryConst.전공, COM_TEST_STUDENT_ID, COM_TEST_MAJORDOMAIN