From f840bf0c877784bfdb80b396bfee40ee578ecb49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EA=B2=BD=ED=98=B8?= Date: Tue, 19 Mar 2024 22:09:03 +0900 Subject: [PATCH 01/37] =?UTF-8?q?refactor:=20=EC=A0=84=EA=B3=B5=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=EB=AA=85=20=EB=B3=80=EA=B2=BD=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=A5=B8=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit major -> primaryMajor --- .../api/dto/response/MajorInfoResponse.java | 2 +- .../service/CalculateGraduationService.java | 4 ++-- .../DefaultGraduationRequirementType.java} | 21 ++++++++++++------- .../CoreCultureDetailCategoryManager.java | 2 +- .../major/exception/OptionalMandatory.java | 2 +- .../exception/OptionalMandatoryHandler.java | 6 +++--- .../ReplaceMandatoryMajorHandler.java | 2 +- .../mapper/ParsingTextHistoryMapper.java | 2 +- .../mapper/TakenLectureMapper.java | 4 ++-- .../dto/response/UserInformationResponse.java | 2 +- .../user/domain/model/StudentCategory.java | 2 +- .../user/domain/model/User.java | 2 +- .../persistence/mapper/UserMapper.java | 4 ++-- .../fixture/UserFixture.java | 2 +- .../FindMajorPersistenceAdapterTest.java | 6 +++--- .../ParsingTextHistoryServiceTest.java | 2 +- .../service/ParsingTextServiceTest.java | 2 +- .../mapper/TakenLectureMapperTest.java | 2 +- .../FindUserInformationControllerTest.java | 2 +- .../find/FindUserInformationServiceTest.java | 2 +- ...DefaultGraduationRequirementTypeTest.java} | 19 +++++++++-------- .../user/domain/model/UserTest.java | 8 +++---- .../persistence/mapper/UserMapperTest.java | 4 ++-- 23 files changed, 55 insertions(+), 49 deletions(-) rename src/main/java/com/plzgraduate/myongjigraduatebe/{user/domain/model/GraduationRequirementType.java => graduation/domain/model/DefaultGraduationRequirementType.java} (76%) rename src/test/java/com/plzgraduate/myongjigraduatebe/user/domain/model/{GraduationRequirementTypeTest.java => DefaultGraduationRequirementTypeTest.java} (70%) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/MajorInfoResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/MajorInfoResponse.java index 556098cd..b8402b94 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/MajorInfoResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/MajorInfoResponse.java @@ -27,7 +27,7 @@ private MajorInfoResponse(String primaryMajor, String doubleMajor, String subMaj public static MajorInfoResponse from(User user) { return MajorInfoResponse.builder() - .primaryMajor(user.getMajor()) + .primaryMajor(user.getPrimaryMajor()) .subMajor(user.getSubMajor()) .doubleMajor(null) //TODO: 복수전공 추가 .build(); diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java index a315ce6d..6e077c26 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java @@ -149,10 +149,10 @@ private GraduationManager determineBasicAcademica private DetailGraduationResult generateMajorDetailGraduationResult(User user, TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { - Set graduationMajorLectures = findMajorPort.findMajor(user.getMajor()); + Set graduationMajorLectures = findMajorPort.findMajor(user.getPrimaryMajor()); GraduationManager majorGraduationManager = new MajorManager(); return majorGraduationManager.createDetailGraduationResult(user, - takenLectureInventory, graduationMajorLectures, graduationRequirement.getMajorCredit()); + takenLectureInventory, graduationMajorLectures, graduationRequirement.getPrimaryMajorCredit()); } private DetailGraduationResult generateSubMajorDetailGraduationResult(User user, diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/GraduationRequirementType.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DefaultGraduationRequirementType.java similarity index 76% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/GraduationRequirementType.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DefaultGraduationRequirementType.java index d060db9c..8d561363 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/GraduationRequirementType.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DefaultGraduationRequirementType.java @@ -1,16 +1,19 @@ -package com.plzgraduate.myongjigraduatebe.user.domain.model; +package com.plzgraduate.myongjigraduatebe.graduation.domain.model; import java.util.Arrays; import java.util.NoSuchElementException; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.user.domain.model.College; +import com.plzgraduate.myongjigraduatebe.user.domain.model.EnglishLevel; +import com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.Getter; import lombok.RequiredArgsConstructor; @Getter @RequiredArgsConstructor -public enum GraduationRequirementType { +public enum DefaultGraduationRequirementType { // 단과대명|전공학점|공통교양학점|핵심교양학점|학문기초교양학점|일반교양학점|자유선택학점|전체학점|적용시작입학년도|적용마감입학년도 HUMANITIES_16_17("인문대", 63, 15, 12, 12, 10, 16, 128, 16, 17), SOCIAL_SCIENCE_16_17("사회과학대", 63, 15, 12, 12, 10, 16, 128, 16, 17), @@ -34,10 +37,10 @@ public enum GraduationRequirementType { private final int startEntryYear; private final int endEntryYear; - public static GraduationRequirementType determineGraduationRequirement(College college, User user) { - return Arrays.stream(GraduationRequirementType.values()) + public static DefaultGraduationRequirementType determineGraduationRequirement(College college, User user) { + return Arrays.stream(DefaultGraduationRequirementType.values()) .filter(gr -> gr.getCollageName().equals(college.getName())) - .filter(gr -> gr.getStartEntryYear() <= user.getEntryYear()&& gr.getEndEntryYear() >= user.getEntryYear()) + .filter(gr -> gr.getStartEntryYear() <= user.getEntryYear() && gr.getEndEntryYear() >= user.getEntryYear()) .findFirst() .orElseThrow(() -> new NoSuchElementException("일치하는 졸업 요건이 존재하지 않습니다.")); } @@ -45,7 +48,9 @@ public static GraduationRequirementType determineGraduationRequirement(College c public GraduationRequirement convertToProfitGraduationRequirement(User user) { GraduationRequirement graduationRequirement = GraduationRequirement.builder() .totalCredit(this.totalCredit) - .majorCredit(this.majorLectureCredit) + .primaryMajorCredit(this.majorLectureCredit) + .dualMajorCredit(0) + .subMajorCredit(0) .basicAcademicalCredit(this.basicAcademicalLectureCredit) .commonCultureCredit(this.commonCultureCredit) .coreCultureCredit(this.coreCultureCredit) @@ -54,7 +59,7 @@ public GraduationRequirement convertToProfitGraduationRequirement(User user) { checkIsEnglishFreeUserAndTransferCredit(user, graduationRequirement); //TODO: Additional Major에 따른 졸업요건 변화 체크 후 졸업 요건 학점 변화 적용 - checkIsSubMajorUserAndTransferCredit(user, graduationRequirement); + checkIsMultiMajorUserAndTransferCredit(user, graduationRequirement); return graduationRequirement; } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/coreculture/CoreCultureDetailCategoryManager.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/coreculture/CoreCultureDetailCategoryManager.java index c710ba57..76f2928f 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/coreculture/CoreCultureDetailCategoryManager.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/coreculture/CoreCultureDetailCategoryManager.java @@ -61,7 +61,7 @@ private Set categorizeCommonCultures(Set graduationLecture private void calculateFreeElectiveLeftCredit(User user, Set taken, DetailCategoryResult commonCultureDetailCategoryResult) { - if (ICT_DEPARTMENTS.contains(user.getMajor()) && (taken.contains(과학과기술_예외_과목))) { + if (ICT_DEPARTMENTS.contains(user.getPrimaryMajor()) && (taken.contains(과학과기술_예외_과목))) { taken.remove(과학과기술_예외_과목); int exceptionLectureCredit = 3; commonCultureDetailCategoryResult.addFreeElectiveLeftCredit(exceptionLectureCredit); diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/OptionalMandatory.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/OptionalMandatory.java index d7b17c68..2b4f0308 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/OptionalMandatory.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/OptionalMandatory.java @@ -50,7 +50,7 @@ public enum OptionalMandatory { public static OptionalMandatory from(User user) { return Arrays.stream(OptionalMandatory.values()) .filter(optionalMandatory -> Objects.equals(optionalMandatory.getDepartment(), - user.getMajor())) + user.getPrimaryMajor())) .findFirst() .orElseThrow(() -> new IllegalArgumentException("해당 전공선택필수를 찾을 수 없습니다.")); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/OptionalMandatoryHandler.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/OptionalMandatoryHandler.java index 0452c01c..2beb3188 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/OptionalMandatoryHandler.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/OptionalMandatoryHandler.java @@ -22,13 +22,13 @@ public class OptionalMandatoryHandler implements MajorExceptionHandler { private int removedMandatoryTotalCredit = 0; public boolean isSupport(User user) { - if (user.getMajor().equals(MANAGEMENT_INFORMATION) && user.getEntryYear() >= CLASS_OF_19) { + if (user.getPrimaryMajor().equals(MANAGEMENT_INFORMATION) && user.getEntryYear() >= CLASS_OF_19) { return true; } - if (user.getMajor().equals(ADMINISTRATIONS) && user.getEntryYear() >= CLASS_OF_17) { + if (user.getPrimaryMajor().equals(ADMINISTRATIONS) && user.getEntryYear() >= CLASS_OF_17) { return true; } - return List.of(BUSINESS, INTERNATIONAL_TRADE).contains(user.getMajor()); + return List.of(BUSINESS, INTERNATIONAL_TRADE).contains(user.getPrimaryMajor()); } @Override diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/ReplaceMandatoryMajorHandler.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/ReplaceMandatoryMajorHandler.java index 12829a83..00c2d1b5 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/ReplaceMandatoryMajorHandler.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/ReplaceMandatoryMajorHandler.java @@ -23,7 +23,7 @@ public class ReplaceMandatoryMajorHandler implements MajorExceptionHandler { @Override public boolean isSupport(User user) { - return user.getMajor().equals("철학과") && user.getEntryYear() <= 21; + return user.getPrimaryMajor().equals("철학과") && user.getEntryYear() <= 21; } @Override diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/mapper/ParsingTextHistoryMapper.java b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/mapper/ParsingTextHistoryMapper.java index 0583ee8a..a88846ac 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/mapper/ParsingTextHistoryMapper.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/mapper/ParsingTextHistoryMapper.java @@ -30,7 +30,7 @@ public UserJpaEntity mapToUserJpaEntity(User user) { .englishLevel(user.getEnglishLevel()) .studentNumber(user.getStudentNumber()) .entryYear(user.getEntryYear()) - .major(user.getMajor()) + .major(user.getPrimaryMajor()) .subMajor(user.getSubMajor()) .studentCategory(user.getStudentCategory()) .createdAt(user.getCreatedAt()) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/mapper/TakenLectureMapper.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/mapper/TakenLectureMapper.java index 5ec48452..951274f3 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/mapper/TakenLectureMapper.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/mapper/TakenLectureMapper.java @@ -45,7 +45,7 @@ private User mapToUserDomainEntity(UserJpaEntity user) { .studentNumber(user.getStudentNumber()) .entryYear(user.getEntryYear()) .englishLevel(user.getEnglishLevel()) - .major(user.getMajor()) + .primaryMajor(user.getMajor()) .subMajor(user.getSubMajor()) .studentCategory(user.getStudentCategory()) .createdAt(user.getCreatedAt()) @@ -63,7 +63,7 @@ public UserJpaEntity mapToUserJpaEntity(User user) { .englishLevel(user.getEnglishLevel()) .studentNumber(user.getStudentNumber()) .entryYear(user.getEntryYear()) - .major(user.getMajor()) + .major(user.getPrimaryMajor()) .subMajor(user.getSubMajor()) .studentCategory(user.getStudentCategory()) .createdAt(user.getCreatedAt()) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/finduserinformation/dto/response/UserInformationResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/finduserinformation/dto/response/UserInformationResponse.java index 38e5717c..e9ad715b 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/finduserinformation/dto/response/UserInformationResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/finduserinformation/dto/response/UserInformationResponse.java @@ -27,6 +27,6 @@ public static UserInformationResponse from(User user) { return UserInformationResponse.builder() .studentNumber(user.getStudentNumber()) .studentName(user.getName()) - .major(user.getMajor()).build(); + .major(user.getPrimaryMajor()).build(); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/StudentCategory.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/StudentCategory.java index adc3bf6c..11c35874 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/StudentCategory.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/StudentCategory.java @@ -15,7 +15,7 @@ public enum StudentCategory { NORMAL(List.of()), CHANGE_MAJOR(List.of("전과")), SUB_MAJOR(List.of("부전공")), - DOUBLE_MAJOR(List.of("복수전공")), + DUAL_MAJOR(List.of("복수전공")), ASSOCIATED_MAJOR(List.of("연계전공")), DOUBLE_SUB(List.of("복수전공", "부전공")); diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/User.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/User.java index 6271384e..6a79a959 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/User.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/User.java @@ -18,7 +18,7 @@ public class User { private String name; private final String studentNumber; private final int entryYear; - private String major; + private String primaryMajor; private String changeMajor; private String subMajor; private StudentCategory studentCategory; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/mapper/UserMapper.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/mapper/UserMapper.java index fa498ee0..24f78d39 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/mapper/UserMapper.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/mapper/UserMapper.java @@ -18,7 +18,7 @@ public User mapToDomainEntity(UserJpaEntity user) { .studentNumber(user.getStudentNumber()) .entryYear(user.getEntryYear()) .englishLevel(user.getEnglishLevel()) - .major(user.getMajor()) + .primaryMajor(user.getMajor()) .subMajor(user.getSubMajor()) .studentCategory(user.getStudentCategory()) .createdAt(user.getCreatedAt()) @@ -36,7 +36,7 @@ public UserJpaEntity mapToJpaEntity(User user) { .englishLevel(user.getEnglishLevel()) .studentNumber(user.getStudentNumber()) .entryYear(user.getEntryYear()) - .major(user.getMajor()) + .major(user.getPrimaryMajor()) .subMajor(user.getSubMajor()) .studentCategory(user.getStudentCategory()) .createdAt(user.getCreatedAt()) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/fixture/UserFixture.java b/src/test/java/com/plzgraduate/myongjigraduatebe/fixture/UserFixture.java index 96c1fcfd..5690e82a 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/fixture/UserFixture.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/fixture/UserFixture.java @@ -121,7 +121,7 @@ public static User createUser(String authId, String password, EnglishLevel engli .name(name) .studentNumber(studentNumber) .entryYear(entryYear) - .major(major) + .primaryMajor(major) .subMajor(subMajor) .studentCategory(studentCategory) .build(); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindMajorPersistenceAdapterTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindMajorPersistenceAdapterTest.java index c9a2ac44..529cecdf 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindMajorPersistenceAdapterTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindMajorPersistenceAdapterTest.java @@ -43,7 +43,7 @@ void findMajor() { MajorLectureJpaEntity majorLectureJpaEntityA = MajorLectureJpaEntity.builder() .lectureJpaEntity(lectureJpaEntityA) - .major(user.getMajor()).build(); + .major(user.getPrimaryMajor()).build(); MajorLectureJpaEntity majorLectureJpaEntityB = MajorLectureJpaEntity.builder() .lectureJpaEntity(lectureJpaEntityA) @@ -51,12 +51,12 @@ void findMajor() { majorLectureRepository.saveAll(List.of(majorLectureJpaEntityA, majorLectureJpaEntityB)); //when - Set majors = majorPersistenceAdapter.findMajor(user.getMajor()); + Set majors = majorPersistenceAdapter.findMajor(user.getPrimaryMajor()); //then assertThat(majors).hasSize(1) .extracting("major") - .contains(user.getMajor()); + .contains(user.getPrimaryMajor()); } } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextHistoryServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextHistoryServiceTest.java index 6e50b594..63495dfd 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextHistoryServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextHistoryServiceTest.java @@ -78,7 +78,7 @@ private User createUser(Long id, String authId, String password, EnglishLevel en .studentNumber(studentNumber) .entryYear(entryYear) .englishLevel(englishLevel) - .major(major) + .primaryMajor(major) .subMajor(subMajor) .studentCategory(studentCategory) .build(); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextServiceTest.java index d51083a6..cc4ae4d8 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextServiceTest.java @@ -162,7 +162,7 @@ private User createUser(String studentNumber) { .studentNumber(studentNumber) .entryYear(18) .englishLevel(EnglishLevel.ENG12) - .major("융합소프트웨어학부") + .primaryMajor("융합소프트웨어학부") .subMajor(null) .studentCategory(StudentCategory.NORMAL) .build(); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/mapper/TakenLectureMapperTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/mapper/TakenLectureMapperTest.java index 6d4ea28c..e3aa00b7 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/mapper/TakenLectureMapperTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/mapper/TakenLectureMapperTest.java @@ -109,7 +109,7 @@ private User createUser(Long id, String authId, String password, EnglishLevel en .studentNumber(studentNumber) .entryYear(entryYear) .englishLevel(englishLevel) - .major(major) + .primaryMajor(major) .subMajor(subMajor) .studentCategory(studentCategory) .build(); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/finduserinformation/FindUserInformationControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/finduserinformation/FindUserInformationControllerTest.java index bf76b2d9..d17f8b24 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/finduserinformation/FindUserInformationControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/finduserinformation/FindUserInformationControllerTest.java @@ -29,7 +29,7 @@ void getUserInformation() throws Exception { .id(userId) .studentNumber(studentNumber) .name(studentName) - .major(major).build(); + .primaryMajor(major).build(); given(findUserInformationUseCase.findUserInformation(userId)).willReturn(user); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserInformationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserInformationServiceTest.java index 09549ebb..c17e998a 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserInformationServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserInformationServiceTest.java @@ -35,7 +35,7 @@ void findUserInformation() { .id(userId) .name(studentName) .studentNumber(studentNumber) - .major(major).build(); + .primaryMajor(major).build(); given(findUserUseCase.findUserById(userId)).willReturn(foundUser); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/domain/model/GraduationRequirementTypeTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/domain/model/DefaultGraduationRequirementTypeTest.java similarity index 70% rename from src/test/java/com/plzgraduate/myongjigraduatebe/user/domain/model/GraduationRequirementTypeTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/user/domain/model/DefaultGraduationRequirementTypeTest.java index 6c2c4eeb..b9c9ea6c 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/domain/model/GraduationRequirementTypeTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/domain/model/DefaultGraduationRequirementTypeTest.java @@ -11,9 +11,10 @@ import org.junit.jupiter.params.provider.ValueSource; import com.plzgraduate.myongjigraduatebe.fixture.UserFixture; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DefaultGraduationRequirementType; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; -class GraduationRequirementTypeTest { +class DefaultGraduationRequirementTypeTest { @DisplayName("학생의 소속 단과대와 입학년도로 기본졸업요건을 결정한다.") @ParameterizedTest() @@ -25,7 +26,7 @@ void determineGraduationRequirement(int entryYear) { .entryYear(entryYear).build(); //when - GraduationRequirementType graduationRequirement = GraduationRequirementType.determineGraduationRequirement(ict, + DefaultGraduationRequirementType graduationRequirement = DefaultGraduationRequirementType.determineGraduationRequirement(ict, user); //then @@ -44,7 +45,7 @@ void determineGraduationRequirementWithIllegalUser(int entryYear) { .entryYear(entryYear).build(); //when //then - assertThatThrownBy(() -> GraduationRequirementType.determineGraduationRequirement(ict, user)) + assertThatThrownBy(() -> DefaultGraduationRequirementType.determineGraduationRequirement(ict, user)) .isInstanceOf(NoSuchElementException.class) .hasMessage("일치하는 졸업 요건이 존재하지 않습니다."); } @@ -55,18 +56,18 @@ void convertToProfitGraduationRequirementWithFreeEnglishUser() { //given User freeEnglishUser = UserFixture.경영학과_19학번_영어_면제(); College ict = College.ICT; - GraduationRequirementType graduationRequirementType = GraduationRequirementType.determineGraduationRequirement( + DefaultGraduationRequirementType defaultGraduationRequirementType = DefaultGraduationRequirementType.determineGraduationRequirement( ict, freeEnglishUser); //when - GraduationRequirement graduationRequirement = graduationRequirementType.convertToProfitGraduationRequirement( + GraduationRequirement graduationRequirement = defaultGraduationRequirementType.convertToProfitGraduationRequirement( freeEnglishUser); // then assertThat(graduationRequirement.getCommonCultureCredit()).isEqualTo( - graduationRequirementType.getCommonCultureCredit() - ENGLISH.getTotalCredit()); + defaultGraduationRequirementType.getCommonCultureCredit() - ENGLISH.getTotalCredit()); assertThat(graduationRequirement.getNormalCultureCredit()).isEqualTo( - graduationRequirementType.getNormalLectureCredit() + ENGLISH.getTotalCredit()); + defaultGraduationRequirementType.getNormalLectureCredit() + ENGLISH.getTotalCredit()); } @DisplayName("부전공 학생의 졸업요건을 결정한다.") @@ -75,11 +76,11 @@ void convertToProfitGraduationRequirementWithSubMajorUser() { //given User subMajorUser = UserFixture.경영학과_23학번_국제통상학과_부전공(); College ict = College.BUSINESS; - GraduationRequirementType graduationRequirementType = GraduationRequirementType.determineGraduationRequirement( + DefaultGraduationRequirementType defaultGraduationRequirementType = DefaultGraduationRequirementType.determineGraduationRequirement( ict, subMajorUser); //when - GraduationRequirement graduationRequirement = graduationRequirementType.convertToProfitGraduationRequirement( + GraduationRequirement graduationRequirement = defaultGraduationRequirementType.convertToProfitGraduationRequirement( subMajorUser); // then diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/domain/model/UserTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/domain/model/UserTest.java index e306bff6..fa9ba65f 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/domain/model/UserTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/domain/model/UserTest.java @@ -27,7 +27,7 @@ void setUp() { .studentNumber("60201000") .entryYear(20) .englishLevel(EnglishLevel.ENG12) - .major("경영학과") + .primaryMajor("경영학과") .studentCategory(StudentCategory.NORMAL) .build(); } @@ -48,11 +48,11 @@ void create() { @Test void updateStudentInformation() { //given //when - user.updateStudentInformation("테스터2", "경영학과", "데이터테크놀로지학과", null, StudentCategory.CHANGE_MAJOR); + user.updateStudentInformation("테스터2", "경영학과", "데이터테크놀로지학과", null, null, StudentCategory.CHANGE_MAJOR); //then assertThat(user) - .extracting("name", "major", "changeMajor", "subMajor", "studentCategory") - .contains("테스터2", "경영학과", "데이터테크놀로지학과", null, StudentCategory.CHANGE_MAJOR); + .extracting("name", "primaryMajor", "changeMajor", "subMajor", "dualMajor","studentCategory") + .contains("테스터2", "경영학과", "데이터테크놀로지학과", null, null, StudentCategory.CHANGE_MAJOR); } @DisplayName("checkBeforeEntryYear 메서드 테스트") diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/mapper/UserMapperTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/mapper/UserMapperTest.java index 26f0e6ce..48c4f9e1 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/mapper/UserMapperTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/mapper/UserMapperTest.java @@ -31,7 +31,7 @@ void mapToDomainEntityTest() { //then assertThat(user) .extracting("id", "authId", "password", "englishLevel", "name", - "studentNumber", "entryYear", "major", "subMajor", "studentCategory") + "studentNumber", "entryYear", "primaryMajor", "subMajor", "studentCategory") .contains(1L, "mju1000", "mju1000!", EnglishLevel.ENG12, "김명지", "60211111", 21, "경영", null, StudentCategory.NORMAL); } @@ -64,7 +64,7 @@ private User createUser(String authId, String password, EnglishLevel englishLeve .studentNumber(studentNumber) .entryYear(entryYear) .englishLevel(englishLevel) - .major(major) + .primaryMajor(major) .subMajor(subMajor) .studentCategory(studentCategory) .build(); From 7587022e7096e43d78171c3e5a65838d94baadca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EA=B2=BD=ED=98=B8?= Date: Tue, 19 Mar 2024 22:09:49 +0900 Subject: [PATCH 02/37] =?UTF-8?q?feat:=20=EB=B3=B5=EC=88=98=EC=A0=84?= =?UTF-8?q?=EA=B3=B5=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EC=A0=84=EA=B3=B5?= =?UTF-8?q?=EC=9D=B4=EC=88=98=20=ED=95=99=EC=A0=90=20Type?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DualMajorGraduationRequirementType.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DualMajorGraduationRequirementType.java diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DualMajorGraduationRequirementType.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DualMajorGraduationRequirementType.java new file mode 100644 index 00000000..7b3f944a --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DualMajorGraduationRequirementType.java @@ -0,0 +1,28 @@ +package com.plzgraduate.myongjigraduatebe.graduation.domain.model; + +import java.util.Arrays; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum DualMajorGraduationRequirementType { + + HUMANITIES("인문대", 36, 36), + SOCIAL_SCIENCE("사회과학대", 36, 36), + BUSINESS("경영대", 45, 45), + LAW("법대", 36, 36), + ICT("ICT융합대", 42, 42); + + private final String name; + private final int originMajorCredit; + private final int dualMajorCredit; + + public static DualMajorGraduationRequirementType findBelongingDualMajorGraduationRequirementType(String name) { + return Arrays.stream(DualMajorGraduationRequirementType.values()) + .filter(dualMajorGraduationRequirementType -> dualMajorGraduationRequirementType.getName().equals(name)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("소속 단과대가 존재하지 않습니다.")); + } +} From 4b384bada0f7982471be9c1cf06a5acfa680fd94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EA=B2=BD=ED=98=B8?= Date: Tue, 19 Mar 2024 22:13:40 +0900 Subject: [PATCH 03/37] =?UTF-8?q?refactor:=20=EB=B3=B5=EC=88=98=EC=A0=84?= =?UTF-8?q?=EA=B3=B5=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=A5=B8=20=EB=A7=A4=EA=B0=9C=EB=B3=80=EC=88=98=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 --- .../model/DefaultGraduationRequirementType.java | 13 +++++++++++-- ...indBasicAcademicalCulturePersistenceAdapter.java | 2 +- .../user/domain/model/College.java | 4 ++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DefaultGraduationRequirementType.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DefaultGraduationRequirementType.java index 8d561363..635ef599 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DefaultGraduationRequirementType.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DefaultGraduationRequirementType.java @@ -69,9 +69,18 @@ private void checkIsEnglishFreeUserAndTransferCredit(User user, GraduationRequir } } - private void checkIsSubMajorUserAndTransferCredit(User user, GraduationRequirement graduationRequirement) { + private void checkIsMultiMajorUserAndTransferCredit(User user, GraduationRequirement graduationRequirement) { + if (user.getStudentCategory() == StudentCategory.DUAL_MAJOR) { + DualMajorGraduationRequirementType originMajorGraduationRequirementType = DualMajorGraduationRequirementType.findBelongingDualMajorGraduationRequirementType( + College.findBelongingCollege(user.getPrimaryMajor()).getName()); + DualMajorGraduationRequirementType dualMajorGraduationRequirementType = DualMajorGraduationRequirementType.findBelongingDualMajorGraduationRequirementType( + College.findBelongingCollege(user.getDualMajor()).getName()); + + graduationRequirement.modifyCreditForDualMajor(originMajorGraduationRequirementType.getOriginMajorCredit(), + dualMajorGraduationRequirementType.getDualMajorCredit()); + } if (user.getStudentCategory() == StudentCategory.SUB_MAJOR) { - graduationRequirement.deleteFreeElectiveCredit(); + graduationRequirement.modifyCreditForSubMajor(); } } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindBasicAcademicalCulturePersistenceAdapter.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindBasicAcademicalCulturePersistenceAdapter.java index 1e42da2b..674066e3 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindBasicAcademicalCulturePersistenceAdapter.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindBasicAcademicalCulturePersistenceAdapter.java @@ -22,7 +22,7 @@ public class FindBasicAcademicalCulturePersistenceAdapter implements FindBasicAc @Override public Set findBasicAcademicalCulture(User user) { - College userCollege = College.findBelongingCollege(user); + College userCollege = College.findBelongingCollege(user.getPrimaryMajor()); return basicAcademicalCultureRepository.findAllByCollege(userCollege.getName()).stream() .map(lectureMapper::mapToBasicAcademicalCultureLectureModel) .collect(Collectors.toSet()); diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/College.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/College.java index b0b86c7d..4d00c680 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/College.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/College.java @@ -20,9 +20,9 @@ public enum College { private final String name; private final List holdingMajors; - public static College findBelongingCollege(User user) { + public static College findBelongingCollege(String major) { return Arrays.stream(College.values()) - .filter(college -> college.getHoldingMajors().contains(user.getMajor())) + .filter(college -> college.getHoldingMajors().contains(major)) .findFirst() .orElseThrow(() -> new IllegalArgumentException("소속 단과대가 존재하지 않습니다.")); } From 5764f45e8b1562bf33de1982c07ea9d53a531e6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EA=B2=BD=ED=98=B8?= Date: Tue, 19 Mar 2024 22:15:10 +0900 Subject: [PATCH 04/37] =?UTF-8?q?refactor:=20=EB=B3=B5=EC=88=98=EC=A0=84?= =?UTF-8?q?=EA=B3=B5=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EC=A1=B8=EC=97=85=20?= =?UTF-8?q?=EC=9A=94=EA=B1=B4=20=ED=95=99=EC=A0=90=EC=88=98=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/model/GraduationRequirement.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationRequirement.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationRequirement.java index ac248d29..f20218df 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationRequirement.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationRequirement.java @@ -9,8 +9,9 @@ public class GraduationRequirement { private final int totalCredit; - private final int majorCredit; - private final int subMajorCredit; + private int primaryMajorCredit; + private int dualMajorCredit; + private int subMajorCredit; private final int basicAcademicalCredit; private int commonCultureCredit; private final int coreCultureCredit; @@ -18,10 +19,11 @@ public class GraduationRequirement { private int freeElectiveCredit; @Builder - private GraduationRequirement(int totalCredit, int majorCredit, int subMajorCredit, int basicAcademicalCredit, + private GraduationRequirement(int totalCredit, int primaryMajorCredit, int dualMajorCredit, int subMajorCredit, int basicAcademicalCredit, int commonCultureCredit, int coreCultureCredit, int normalCultureCredit, int freeElectiveCredit) { this.totalCredit = totalCredit; - this.majorCredit = majorCredit; + this.primaryMajorCredit = primaryMajorCredit; + this.dualMajorCredit = dualMajorCredit; this.subMajorCredit = subMajorCredit; this.basicAcademicalCredit = basicAcademicalCredit; this.commonCultureCredit = commonCultureCredit; @@ -38,4 +40,10 @@ public void transferEnglishCreditCommonToNormal() { public void deleteFreeElectiveCredit() { freeElectiveCredit = 0; } + + public void modifyCreditForDualMajor(int primaryMajorCredit, int dualMajorCredit) { + normalCultureCredit = 0; + this.primaryMajorCredit = primaryMajorCredit; + this.dualMajorCredit = dualMajorCredit; + } } From 4d4e2b463e9a6f6a44ace0387ecc1d55ca3fa7e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EA=B2=BD=ED=98=B8?= Date: Tue, 19 Mar 2024 22:15:56 +0900 Subject: [PATCH 05/37] =?UTF-8?q?refactor:=20=EB=B3=B5=EC=88=98=EC=A0=84?= =?UTF-8?q?=EA=B3=B5=EC=97=90=20=EB=94=B0=EB=A5=B8=20parsing=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ParsingTextService.java | 20 ++++++++----------- .../parsing/domain/ParsingInformation.java | 10 +++++++--- .../domain/ParsingStudentCategoryDto.java | 9 +++++++-- 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextService.java index 025ac025..ada84695 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextService.java @@ -1,8 +1,6 @@ package com.plzgraduate.myongjigraduatebe.parsing.application.service; -import static com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory.CHANGE_MAJOR; -import static com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory.NORMAL; -import static com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory.SUB_MAJOR; +import static com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory.*; import java.util.List; import java.util.stream.Collectors; @@ -43,7 +41,7 @@ public void enrollParsingText(Long userId, String parsingText) { try { validateParsingText(parsingText); ParsingInformation parsingInformation = ParsingInformation.parsing(parsingText); - checkIfNormal(parsingInformation); + checkUnSupportedUser(parsingInformation); validateStudentNumber(user, parsingInformation); updateUser(user, parsingInformation); deleteTakenLecturesIfAlreadyEnrolled(user); @@ -69,8 +67,8 @@ private void saveTakenLectures(User user, ParsingInformation parsingInformation) private void updateUser(User user, ParsingInformation parsingInformation) { UpdateStudentInformationCommand updateStudentInfoCommand = UpdateStudentInformationCommand.of(user, parsingInformation.getStudentName(), parsingInformation.getMajor(), - parsingInformation.getAssociatedMajor(), parsingInformation.getSubMajor(), - parsingInformation.getStudentCategory()); + parsingInformation.getChangeMajor(), parsingInformation.getDualMajor(), + parsingInformation.getSubMajor(), parsingInformation.getStudentCategory()); updateStudentInformationUseCase.updateUser(updateStudentInfoCommand); } @@ -98,12 +96,10 @@ private List getSaveTakenLectureCommand(User user, .collect(Collectors.toList()); } - private void checkIfNormal(ParsingInformation parsingInformation) { - //TODO: 복수전공 파싱 통과 추가 - if (!(parsingInformation.getStudentCategory() == NORMAL - || parsingInformation.getStudentCategory() == CHANGE_MAJOR - || parsingInformation.getStudentCategory() == SUB_MAJOR)) { - throw new IllegalArgumentException("복수전공, 연계전공은 참여가 어렵습니다. 빠른 시일 내에 업데이트하도록 하겠습니다."); + private void checkUnSupportedUser(ParsingInformation parsingInformation) { + if (parsingInformation.getStudentCategory() == ASSOCIATED_MAJOR + || parsingInformation.getStudentCategory() == DOUBLE_SUB) { + throw new IllegalArgumentException("연계전공, 복수+부전공은 참여가 어렵습니다. 빠른 시일 내에 업데이트하도록 하겠습니다."); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/domain/ParsingInformation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/domain/ParsingInformation.java index 11eb6f5e..9e1e138c 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/domain/ParsingInformation.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/domain/ParsingInformation.java @@ -17,17 +17,19 @@ public class ParsingInformation { private final String major; private final String changeMajor; private final String subMajor; + private final String dualMajor; private final String associatedMajor; private final StudentCategory studentCategory; private final List takenLectureInformation; @Builder - public ParsingInformation(String studentName, String studentNumber, String major, String changeMajor, String subMajor, + public ParsingInformation(String studentName, String studentNumber, String major, String changeMajor, String subMajor, String dualMajor, String associatedMajor, StudentCategory studentCategory, List takenLectureInformation) { this.studentName = studentName; this.studentNumber = studentNumber; this.major = major; this.changeMajor = changeMajor; + this.dualMajor = dualMajor; this.subMajor = subMajor; this.associatedMajor = associatedMajor; this.studentCategory = studentCategory; @@ -41,6 +43,7 @@ public static ParsingInformation parsing(String parsingText) { .studentName(parseStudentName(splitText)) .studentNumber(parseStudentNumber(splitText)) .major(parseMajor(splitText)) + .dualMajor(parsingStudentCategoryDto.getDualMajor()) .changeMajor(parsingStudentCategoryDto.getChangeMajor()) .subMajor(parsingStudentCategoryDto.getSubMajor()) .associatedMajor(parsingStudentCategoryDto.getAssociatedMajor()) @@ -72,6 +75,7 @@ private static String parseMajor(String[] splitText) { private static ParsingStudentCategoryDto parseStudentCategory(String[] splitText) { String changeMajor = null; + String dualMajor = null; String subMajor = null; String associatedMajor = null; StudentCategory studentCategory; @@ -94,14 +98,14 @@ private static ParsingStudentCategoryDto parseStudentCategory(String[] splitText subMajor = part.substring("부전공 - ".length()); } else if (part.startsWith("복수전공 - ")) { categories.add("복수전공"); - subMajor = part.substring("복수전공 - ".length()); + dualMajor = part.substring("복수전공 - ".length()); } else if (part.startsWith("연계전공 - ")) { categories.add("연계전공"); associatedMajor = part.substring("연계전공 - ".length()); } } studentCategory = StudentCategory.from(categories); - return ParsingStudentCategoryDto.of(changeMajor, subMajor, associatedMajor, studentCategory); + return ParsingStudentCategoryDto.of(changeMajor, subMajor, dualMajor, associatedMajor, studentCategory); } private static List parseTakenLectureInformation(String[] splitText) { diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/domain/ParsingStudentCategoryDto.java b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/domain/ParsingStudentCategoryDto.java index b9159364..db086160 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/domain/ParsingStudentCategoryDto.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/domain/ParsingStudentCategoryDto.java @@ -8,21 +8,26 @@ @Getter class ParsingStudentCategoryDto { private final String changeMajor; + private final String dualMajor; private final String subMajor; private final String associatedMajor; private final StudentCategory studentCategory; @Builder - private ParsingStudentCategoryDto(String changeMajor, String subMajor, String associatedMajor, StudentCategory studentCategory) { + private ParsingStudentCategoryDto(String changeMajor, String dualMajor, String subMajor, String associatedMajor, + StudentCategory studentCategory) { this.changeMajor = changeMajor; + this.dualMajor = dualMajor; this.subMajor = subMajor; this.associatedMajor = associatedMajor; this.studentCategory = studentCategory; } - public static ParsingStudentCategoryDto of(String changeMajor, String subMajor, String associatedMajor, StudentCategory studentCategory) { + public static ParsingStudentCategoryDto of(String changeMajor, String subMajor, String dualMajor, + String associatedMajor, StudentCategory studentCategory) { return ParsingStudentCategoryDto.builder() .changeMajor(changeMajor) + .dualMajor(dualMajor) .subMajor(subMajor) .associatedMajor(associatedMajor) .studentCategory(studentCategory) From 4743ab7d124b8600947bf41c79e7925d72dfa321 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EA=B2=BD=ED=98=B8?= Date: Tue, 19 Mar 2024 22:17:26 +0900 Subject: [PATCH 06/37] =?UTF-8?q?refactor:=20=EB=B6=80=EC=A0=84=EA=B3=B5?= =?UTF-8?q?=20=EC=A1=B8=EC=97=85=20=ED=95=99=EC=A0=90=20=EB=B3=80=EA=B2=BD?= =?UTF-8?q?=20=EB=A1=9C=EC=A7=81=20=EC=8B=9C=EC=A0=90=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 졸업요건 계산 시점에서 생성 시점으로 변경 --- .../application/service/CalculateGraduationService.java | 3 +-- .../graduation/domain/model/GraduationRequirement.java | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java index 6e077c26..5f9e6057 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java @@ -156,8 +156,7 @@ private DetailGraduationResult generateMajorDetailGraduationResult(User user, } private DetailGraduationResult generateSubMajorDetailGraduationResult(User user, - TakenLectureInventory takenLectureInventory) { - int requireSubMajorCredit = 21; + TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { Set graduationSubMajorLectures = findMajorPort.findMajor(user.getSubMajor()); GraduationManager subMajorManager = new SubMajorManager(); return subMajorManager.createDetailGraduationResult(user, takenLectureInventory, graduationSubMajorLectures, diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationRequirement.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationRequirement.java index f20218df..85476d02 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationRequirement.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationRequirement.java @@ -37,7 +37,8 @@ public void transferEnglishCreditCommonToNormal() { normalCultureCredit += ENGLISH.getTotalCredit(); } - public void deleteFreeElectiveCredit() { + public void modifyCreditForSubMajor() { + subMajorCredit = 21; freeElectiveCredit = 0; } From fff2144dd373322ebda8ff24cda1db1c7cb43669 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EA=B2=BD=ED=98=B8?= Date: Tue, 19 Mar 2024 22:18:23 +0900 Subject: [PATCH 07/37] =?UTF-8?q?refactor:=20=EC=9C=A0=EC=A0=80=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20=EC=88=98=EC=A0=95=EC=8B=9C=20=EB=B3=B5?= =?UTF-8?q?=EC=88=98=EC=A0=84=EA=B3=B5=20=EC=88=98=EC=A0=95=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../update/UpdateStudentInformationService.java | 2 ++ .../update/UpdateStudentInformationCommand.java | 10 +++++++--- .../update/UpdateStudentInformationServiceTest.java | 4 ++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/update/UpdateStudentInformationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/update/UpdateStudentInformationService.java index ad3fa010..45027754 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/update/UpdateStudentInformationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/update/UpdateStudentInformationService.java @@ -15,12 +15,14 @@ @RequiredArgsConstructor class UpdateStudentInformationService implements UpdateStudentInformationUseCase { private final UpdateUserPort updateUserPort; + @Override public void updateUser(UpdateStudentInformationCommand updateStudentInformationCommand) { User user = updateStudentInformationCommand.getUser(); user.updateStudentInformation(updateStudentInformationCommand.getName(), updateStudentInformationCommand.getMajor(), updateStudentInformationCommand.getChangeMajor(), + updateStudentInformationCommand.getDualMajor(), updateStudentInformationCommand.getSubMajor(), updateStudentInformationCommand.getStudentCategory() ); diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/update/UpdateStudentInformationCommand.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/update/UpdateStudentInformationCommand.java index 394ab9cc..15a7463f 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/update/UpdateStudentInformationCommand.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/update/UpdateStudentInformationCommand.java @@ -18,28 +18,32 @@ public class UpdateStudentInformationCommand { private String changeMajor; + private String dualMajor; + private String subMajor; private StudentCategory studentCategory; @Builder - private UpdateStudentInformationCommand(User user, String name, String major, String changeMajor, + private UpdateStudentInformationCommand(User user, String name, String major, String changeMajor, String dualMajor, String subMajor, StudentCategory studentCategory) { this.user = user; this.name = name; this.major = major; this.changeMajor = changeMajor; + this.dualMajor = dualMajor; this.subMajor = subMajor; this.studentCategory = studentCategory; } - public static UpdateStudentInformationCommand of(User user, String name, String major, String changeMajor, String subMajor, - StudentCategory studentCategory) { + public static UpdateStudentInformationCommand of(User user, String name, String major, String changeMajor, + String dualMajor, String subMajor, StudentCategory studentCategory) { return UpdateStudentInformationCommand.builder() .user(user) .name(name) .major(major) .changeMajor(changeMajor) + .dualMajor(dualMajor) .subMajor(subMajor) .studentCategory(studentCategory) .build(); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/update/UpdateStudentInformationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/update/UpdateStudentInformationServiceTest.java index 275e247b..90f2dd7a 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/update/UpdateStudentInformationServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/update/UpdateStudentInformationServiceTest.java @@ -22,7 +22,7 @@ class UpdateStudentInformationServiceTest { @InjectMocks private UpdateStudentInformationService updateStudentInformationService; - @DisplayName("User의 하생정보를 수정한다.") + @DisplayName("User의 학생정보를 수정한다.") @Test void updateUser() { //given @@ -34,7 +34,7 @@ void updateUser() { .major("응용소프트웨어학과") .changeMajor(null) .subMajor("경영학과") - .studentCategory(StudentCategory.DOUBLE_MAJOR) + .studentCategory(StudentCategory.DUAL_MAJOR) .build(); //then From 4c4fc663bbb2459b31e9fc749c90c1431902ea6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EA=B2=BD=ED=98=B8?= Date: Tue, 19 Mar 2024 22:19:02 +0900 Subject: [PATCH 08/37] =?UTF-8?q?refactor:=20user=20domain=EC=97=90=20?= =?UTF-8?q?=EB=B3=B5=EC=88=98=EC=A0=84=EA=B3=B5=20=ED=95=84=EB=93=9C=20?= =?UTF-8?q?=EC=B6=94=20=EB=B0=8F=20=EC=A3=BC=EC=A0=84=EA=B3=B5=20=EB=B3=80?= =?UTF-8?q?=EC=88=98=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../myongjigraduatebe/user/domain/model/User.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/User.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/User.java index 6a79a959..4249ea92 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/User.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/User.java @@ -21,13 +21,14 @@ public class User { private String primaryMajor; private String changeMajor; private String subMajor; + private String dualMajor; private StudentCategory studentCategory; private final Instant createdAt; private Instant updatedAt; @Builder private User(Long id, String authId, String password, EnglishLevel englishLevel, String name, String studentNumber, - int entryYear, String major, String changeMajor, String subMajor, StudentCategory studentCategory, + int entryYear, String primaryMajor, String changeMajor, String subMajor, String dualMajor, StudentCategory studentCategory, Instant createdAt, Instant updatedAt) { this.id = id; this.authId = authId; @@ -36,9 +37,10 @@ private User(Long id, String authId, String password, EnglishLevel englishLevel, this.name = name; this.studentNumber = studentNumber; this.entryYear = entryYear; - this.major = major; + this.primaryMajor = primaryMajor; this.changeMajor = changeMajor; this.subMajor = subMajor; + this.dualMajor = dualMajor; this.studentCategory = studentCategory; this.createdAt = createdAt; this.updatedAt = updatedAt; @@ -56,11 +58,12 @@ public static User create(String authId, String password, EnglishLevel englishLe .build(); } - public void updateStudentInformation(String name, String major, String changeMajor, String subMajor, + public void updateStudentInformation(String name, String major, String changeMajor, String subMajor, String dualMajor, StudentCategory studentCategory) { this.name = name; - this.major = major; + this.primaryMajor = major; this.changeMajor = changeMajor; + this.dualMajor = dualMajor; this.subMajor = subMajor; this.studentCategory = studentCategory; } @@ -70,7 +73,7 @@ public boolean checkBeforeEntryYear(int entryYear) { } public boolean checkMajor(String major) { - return this.major.equals(major); + return this.primaryMajor.equals(major); } public boolean compareStudentNumber(String studentNumber) { From b467e202b461d11e5cbfffe8435b8433166a6efc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EA=B2=BD=ED=98=B8?= Date: Tue, 19 Mar 2024 22:19:37 +0900 Subject: [PATCH 09/37] =?UTF-8?q?test:=20=EB=B6=80=EC=A0=84=EA=B3=B5=20?= =?UTF-8?q?=EC=A1=B8=EC=97=85=ED=95=99=EC=A0=90=20=EC=A1=B0=EC=A0=95=20tes?= =?UTF-8?q?t=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../graduation/domain/model/GraduationRequirementTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationRequirementTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationRequirementTest.java index 0c52436d..cdf1f5c8 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationRequirementTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationRequirementTest.java @@ -28,7 +28,7 @@ void transferEnglishCategoryCredit() { .isEqualTo(beforeTransferNormalCultureCredit + ENGLISH.getTotalCredit()); } - @DisplayName("자유선택 졸업 학점을 0점으로 한다.") + @DisplayName("자유선택 졸업 학점을 부전공 졸업학점으로 조정한다.") @Test void deleteFreeElectiveCredit() { //given @@ -36,10 +36,11 @@ void deleteFreeElectiveCredit() { .freeElectiveCredit(10).build(); //when - graduationRequirement.deleteFreeElectiveCredit(); + graduationRequirement.modifyCreditForSubMajor(); //then assertThat(graduationRequirement.getFreeElectiveCredit()).isZero(); + assertThat(graduationRequirement.getSubMajorCredit()).isEqualTo(21); } } From a02d3c63433c605e99ccbbbfee2799c99d811d1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EA=B2=BD=ED=98=B8?= Date: Tue, 19 Mar 2024 22:19:56 +0900 Subject: [PATCH 10/37] =?UTF-8?q?test:=20=EB=B3=B5=EC=88=98=EC=A0=84?= =?UTF-8?q?=EA=B3=B5=20parsing=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../parsing/domain/ParsingInformationTest.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/domain/ParsingInformationTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/domain/ParsingInformationTest.java index 09d27f12..8e3d6a39 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/domain/ParsingInformationTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/domain/ParsingInformationTest.java @@ -31,9 +31,9 @@ void createParsingInformation() { .contains("이아현", "60191000", "경영학과", null, null, StudentCategory.NORMAL); } - @DisplayName("복수전공을 할 경우 StudentCategory는 DOUBLE MAJOR이다.") + @DisplayName("복수전공을 할 경우 StudentCategory는 DUAL MAJOR이다.") @Test - void test() { + void 복수전공생_확인() { //given String parsingText = "출력일자 : 2022/11/14|1/1" + "|사회과학대학 정치외교학과, 복수전공 - 경제학과, 이인구(60161000), 현학적 - 재학, 이수 - 7, 입학 - 신입학(2015/03/02)" @@ -47,9 +47,8 @@ void test() { ParsingInformation parsingInformation = ParsingInformation.parsing(parsingText); //then assertThat(parsingInformation) - .extracting("studentName", "studentNumber", "major", "subMajor", "associatedMajor", "studentCategory") - .contains("이인구", "60161000", "정치외교학과", "경제학과", null, StudentCategory.DOUBLE_MAJOR); - + .extracting("studentName", "studentNumber", "major", "dualMajor", "associatedMajor", "studentCategory") + .contains("이인구", "60161000", "정치외교학과", "경제학과", null, StudentCategory.DUAL_MAJOR); } @DisplayName("전과을 할 경우 StudentCategory는 CHANGE_MAJOR이다.") From 88a4df1303cb3144647b50ba701f7583b1d9aa03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EA=B2=BD=ED=98=B8?= Date: Tue, 19 Mar 2024 22:20:41 +0900 Subject: [PATCH 11/37] =?UTF-8?q?refactor:=20=EC=A1=B8=EC=97=85=EC=9A=94?= =?UTF-8?q?=EA=B1=B4=20=EA=B3=84=EC=82=B0=20=EB=A1=9C=EC=A7=81=EC=97=90=20?= =?UTF-8?q?=EB=B3=B5=EC=88=98=EC=A0=84=EA=B3=B5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/CalculateGraduationService.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java index 5f9e6057..9b956d40 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java @@ -33,7 +33,7 @@ import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; import com.plzgraduate.myongjigraduatebe.user.domain.model.College; -import com.plzgraduate.myongjigraduatebe.user.domain.model.GraduationRequirementType; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DefaultGraduationRequirementType; import com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @@ -70,8 +70,8 @@ public GraduationResponse calculateGraduation(Long userId) { } private GraduationRequirement determineGraduationRequirement(User user) { - College userCollage = College.findBelongingCollege(user); - GraduationRequirementType defaultGraduationRequirement = GraduationRequirementType.determineGraduationRequirement( + College userCollage = College.findBelongingCollege(user.getPrimaryMajor()); + DefaultGraduationRequirementType defaultGraduationRequirement = DefaultGraduationRequirementType.determineGraduationRequirement( userCollage, user); return defaultGraduationRequirement.convertToProfitGraduationRequirement(user); } @@ -95,9 +95,8 @@ private List generateDetailGraduationResults(User user, user, takenLectureInventory, graduationRequirement) )); - // TODO: Additional Major check - DetailGraduationResult if (user.getStudentCategory() == StudentCategory.SUB_MAJOR) { - detailGraduationResults.add(generateSubMajorDetailGraduationResult(user, takenLectureInventory)); + detailGraduationResults.add(generateSubMajorDetailGraduationResult(user, takenLectureInventory, graduationRequirement)); } return detailGraduationResults; @@ -133,7 +132,7 @@ private DetailGraduationResult generteBasicAcademicalDetailGraduationResult(User private GraduationManager determineBasicAcademicalCultureGraduationManager( User user) { GraduationManager basicAcademicalCultureGraduationManager; - switch (College.findBelongingCollege(user)) { + switch (College.findBelongingCollege(user.getPrimaryMajor())) { case BUSINESS: basicAcademicalCultureGraduationManager = new BusinessBasicAcademicalManager(); break; @@ -160,7 +159,7 @@ private DetailGraduationResult generateSubMajorDetailGraduationResult(User user, Set graduationSubMajorLectures = findMajorPort.findMajor(user.getSubMajor()); GraduationManager subMajorManager = new SubMajorManager(); return subMajorManager.createDetailGraduationResult(user, takenLectureInventory, graduationSubMajorLectures, - requireSubMajorCredit); + graduationRequirement.getSubMajorCredit()); } private GraduationResult generateGraduationResult(ChapelResult chapelResult, From 3b63e7dfc86a0663d84651b93e6c860f3fbcd937 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EA=B2=BD=ED=98=B8?= Date: Tue, 19 Mar 2024 22:21:01 +0900 Subject: [PATCH 12/37] =?UTF-8?q?refactor:=20=ED=95=84=EC=9A=94=EC=97=86?= =?UTF-8?q?=EB=8A=94=20import=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/persistence/FindMajorPersistenceAdapterTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindMajorPersistenceAdapterTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindMajorPersistenceAdapterTest.java index 529cecdf..3484aa44 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindMajorPersistenceAdapterTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindMajorPersistenceAdapterTest.java @@ -10,7 +10,6 @@ import org.springframework.beans.factory.annotation.Autowired; import com.plzgraduate.myongjigraduatebe.fixture.UserFixture; -import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.FindMajorPersistenceAdapter; import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.LectureJpaEntity; import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.MajorLectureJpaEntity; import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.LectureRepository; From bde3cc922bd240c0f50ea372cd1d1b6507d45035 Mon Sep 17 00:00:00 2001 From: 5uhwann <5uhwann27@gmail.com> Date: Wed, 27 Mar 2024 09:53:24 +0900 Subject: [PATCH 13/37] =?UTF-8?q?refactor:=20GraduationCategory=20?= =?UTF-8?q?=ED=83=80=EC=9E=85=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../graduation/api/dto/response/GraduationResponse.java | 5 +++-- .../graduation/domain/model/DetailCategoryResult.java | 2 +- .../graduation/domain/model/GraduationCategory.java | 9 ++++++--- .../BusinessBasicAcademicalManager.java | 6 +++--- .../DefaultBasicAcademicalManager.java | 6 +++--- .../SocialScienceBasicAcademicManager.java | 6 +++--- .../graduation/domain/service/major/MajorManager.java | 4 ++-- 7 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/GraduationResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/GraduationResponse.java index 24d0c2ba..d107fee5 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/GraduationResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/GraduationResponse.java @@ -51,8 +51,9 @@ public static GraduationResponse of(User user, GraduationResult graduationResult .chapelResult(ChapelResultResponse.from(graduationResult.getChapelResult())) .commonCulture(findDetailGraduationResultResponse(graduationResult, COMMON_CULTURE)) .coreCulture(findDetailGraduationResultResponse(graduationResult, CORE_CULTURE)) - .basicAcademicalCulture(findDetailGraduationResultResponse(graduationResult, BASIC_ACADEMICAL_CULTURE)) - .major(findDetailGraduationResultResponse(graduationResult, MAJOR)) + .basicAcademicalCulture(findDetailGraduationResultResponse(graduationResult, + PRIMARY_BASIC_ACADEMICAL_CULTURE)) + .major(findDetailGraduationResultResponse(graduationResult, PRIMARY_MAJOR)) .subMajor(findDetailGraduationResultResponse(graduationResult, SUB_MAJOR)) .normalCulture( RestResultResponse.fromNormalCultureResult(graduationResult.getNormalCultureGraduationResult())) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DetailCategoryResult.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DetailCategoryResult.java index 156135db..feb7c323 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DetailCategoryResult.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DetailCategoryResult.java @@ -75,7 +75,7 @@ private void addTakenLectures(Set taken) { private void calculateLeftCredit() { int leftCredit = takenCredits - totalCredits; if (leftCredit > 0) { - if (detailCategoryName.equals(MAJOR.getName())) { + if (detailCategoryName.equals(PRIMARY_MAJOR.getName())) { freeElectiveLeftCredit = leftCredit; takenCredits -= leftCredit; return; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationCategory.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationCategory.java index 866ad752..f70f3150 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationCategory.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationCategory.java @@ -13,11 +13,14 @@ public enum GraduationCategory { COMMON_CULTURE("공통교양"), CORE_CULTURE("핵심교양"), - BASIC_ACADEMICAL_CULTURE("학문기초교양"), - MAJOR("전공"), + PRIMARY_MAJOR("주전공"), + DUAL_MAJOR("복수전공"), SUB_MAJOR("부전공"), + PRIMARY_BASIC_ACADEMICAL_CULTURE("주 학문기초교양"), + DUAL_BASIC_ACADEMICAL_CULTURE("복수 학문기초교양"), NORMAL_CULTURE("일반교양"), - FREE_ELECTIVE("자유선택"); + FREE_ELECTIVE("자유선택"), + CHAPEL("채플"); private final String name; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/BusinessBasicAcademicalManager.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/BusinessBasicAcademicalManager.java index d57bde53..f5eaa56e 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/BusinessBasicAcademicalManager.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/BusinessBasicAcademicalManager.java @@ -1,6 +1,6 @@ package com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture; -import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.BASIC_ACADEMICAL_CULTURE; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE; import java.util.HashSet; import java.util.List; @@ -54,10 +54,10 @@ public DetailGraduationResult createDetailGraduationResult(User user, takenLectureInventory.handleFinishedTakenLectures(removedTakenLecture); DetailCategoryResult detailCategoryResult = DetailCategoryResult.create( - BASIC_ACADEMICAL_CULTURE.getName(), true, basicAcademicalCredit); + PRIMARY_BASIC_ACADEMICAL_CULTURE.getName(), true, basicAcademicalCredit); detailCategoryResult.calculate(taken, basicAcademicalLectures); - return DetailGraduationResult.create(BASIC_ACADEMICAL_CULTURE, basicAcademicalCredit, + return DetailGraduationResult.create(PRIMARY_BASIC_ACADEMICAL_CULTURE, basicAcademicalCredit, List.of(detailCategoryResult)); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/DefaultBasicAcademicalManager.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/DefaultBasicAcademicalManager.java index 8c5070fe..1b0c050d 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/DefaultBasicAcademicalManager.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/DefaultBasicAcademicalManager.java @@ -1,6 +1,6 @@ package com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture; -import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.BASIC_ACADEMICAL_CULTURE; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE; import java.util.HashSet; import java.util.List; @@ -43,10 +43,10 @@ public DetailGraduationResult createDetailGraduationResult(User user, takenLectureInventory.handleFinishedTakenLectures(removedTakenLecture); DetailCategoryResult detailCategoryResult = DetailCategoryResult.create( - BASIC_ACADEMICAL_CULTURE.getName(), true, basicAcademicalCredit); + PRIMARY_BASIC_ACADEMICAL_CULTURE.getName(), true, basicAcademicalCredit); detailCategoryResult.calculate(taken, basicAcademicalLectures); - return DetailGraduationResult.create(BASIC_ACADEMICAL_CULTURE, basicAcademicalCredit, + return DetailGraduationResult.create(PRIMARY_BASIC_ACADEMICAL_CULTURE, basicAcademicalCredit, List.of(detailCategoryResult)); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/SocialScienceBasicAcademicManager.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/SocialScienceBasicAcademicManager.java index 3ac3b7c2..5b8c8f6e 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/SocialScienceBasicAcademicManager.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/SocialScienceBasicAcademicManager.java @@ -1,6 +1,6 @@ package com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture; -import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.BASIC_ACADEMICAL_CULTURE; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE; import java.util.HashSet; import java.util.List; @@ -54,10 +54,10 @@ public DetailGraduationResult createDetailGraduationResult(User user, takenLectureInventory.handleFinishedTakenLectures(removedTakenLecture); DetailCategoryResult detailCategoryResult = DetailCategoryResult.create( - BASIC_ACADEMICAL_CULTURE.getName(), true, basicAcademicalCredit); + PRIMARY_BASIC_ACADEMICAL_CULTURE.getName(), true, basicAcademicalCredit); detailCategoryResult.calculate(taken, basicAcademicalLectures); - return DetailGraduationResult.create(BASIC_ACADEMICAL_CULTURE, basicAcademicalCredit, + return DetailGraduationResult.create(PRIMARY_BASIC_ACADEMICAL_CULTURE, basicAcademicalCredit, List.of(detailCategoryResult)); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MajorManager.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MajorManager.java index c9f253ad..90060f7d 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MajorManager.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MajorManager.java @@ -1,6 +1,6 @@ package com.plzgraduate.myongjigraduatebe.graduation.domain.service.major; -import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.MAJOR; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_MAJOR; import java.util.List; import java.util.Set; @@ -50,7 +50,7 @@ public DetailGraduationResult createDetailGraduationResult(User user, DetailCategoryResult electiveDetailCategoryResult = electiveMajorManager.createDetailCategoryResult( takenLectureInventory, electiveLectures, electiveMajorTotalCredit); - return DetailGraduationResult.create(MAJOR, graduationResultTotalCredit, + return DetailGraduationResult.create(PRIMARY_MAJOR, graduationResultTotalCredit, List.of(mandantoryDetailCategoryResult, electiveDetailCategoryResult)); } From 4e2bcf4ca6ba9fd3dc63f82b09098e3c03b8a291 Mon Sep 17 00:00:00 2001 From: 5uhwann <5uhwann27@gmail.com> Date: Thu, 28 Mar 2024 13:58:36 +0900 Subject: [PATCH 14/37] =?UTF-8?q?feat:=20CompletedCredit=20=EB=8F=84?= =?UTF-8?q?=EB=A9=94=EC=9D=B8=20=EB=AA=A8=EB=8D=B8=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/model/CompletedCredit.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/domain/model/CompletedCredit.java diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/domain/model/CompletedCredit.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/domain/model/CompletedCredit.java new file mode 100644 index 00000000..e4052c10 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/domain/model/CompletedCredit.java @@ -0,0 +1,21 @@ +package com.plzgraduate.myongjigraduatebe.completedcredit.domain.model; + +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; + +import lombok.Builder; +import lombok.Getter; + +@Getter +public class CompletedCredit { + + private final GraduationCategory category; + private final int totalCredit; + private final int takenCredit; + + @Builder + private CompletedCredit(GraduationCategory category, int totalCredit, int takenCredit) { + this.category = category; + this.totalCredit = totalCredit; + this.takenCredit = takenCredit; + } +} From b987a8db48dbcdde072988dab84f325185afcff1 Mon Sep 17 00:00:00 2001 From: 5uhwann <5uhwann27@gmail.com> Date: Thu, 28 Mar 2024 13:59:00 +0900 Subject: [PATCH 15/37] =?UTF-8?q?feat:=20CompletedCredit=20jpa=20entity=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/CompletedCreditJpaEntity.java | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/entity/CompletedCreditJpaEntity.java diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/entity/CompletedCreditJpaEntity.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/entity/CompletedCreditJpaEntity.java new file mode 100644 index 00000000..db3827e4 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/entity/CompletedCreditJpaEntity.java @@ -0,0 +1,51 @@ +package com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.entity; + +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; + +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Table(name = "completed_credit") +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class CompletedCreditJpaEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id")J + private UserJpaEntity userJpaEntity; + + @Enumerated(value = EnumType.STRING) + private GraduationCategory category; + + private int totalCredit; + + private int takenCredit; + + @Builder + private CompletedCreditJpaEntity(Long id, UserJpaEntity userJpaEntity, GraduationCategory category, int totalCredit, int takenCredit) { + this.id = id; + this.userJpaEntity = userJpaEntity; + this.category = category; + this.totalCredit = totalCredit; + this.takenCredit = takenCredit; + } +} From ddbb9c899e8cb3a7a4aac4d4b5dc66e9360ad6d4 Mon Sep 17 00:00:00 2001 From: 5uhwann <5uhwann27@gmail.com> Date: Thu, 28 Mar 2024 13:59:11 +0900 Subject: [PATCH 16/37] =?UTF-8?q?feat:=20CompletedCredit=20jpa=20entity=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../persistence/entity/CompletedCreditJpaEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/entity/CompletedCreditJpaEntity.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/entity/CompletedCreditJpaEntity.java index db3827e4..06cba9cc 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/entity/CompletedCreditJpaEntity.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/entity/CompletedCreditJpaEntity.java @@ -30,7 +30,7 @@ public class CompletedCreditJpaEntity { private Long id; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "user_id")J + @JoinColumn(name = "user_id") private UserJpaEntity userJpaEntity; @Enumerated(value = EnumType.STRING) From caa99f7236d7ee488c1e50ecfa450dc90ef9f801 Mon Sep 17 00:00:00 2001 From: 5uhwann <5uhwann27@gmail.com> Date: Thu, 28 Mar 2024 13:59:53 +0900 Subject: [PATCH 17/37] =?UTF-8?q?feat:=20CompletedCreditPersistenceMapper?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CompletedCreditPersistenceMapper.java | 20 +++++++++++ .../CompletedCreditPersistenceMapperTest.java | 35 +++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/mapper/CompletedCreditPersistenceMapper.java create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/mapper/CompletedCreditPersistenceMapperTest.java diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/mapper/CompletedCreditPersistenceMapper.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/mapper/CompletedCreditPersistenceMapper.java new file mode 100644 index 00000000..87d739ab --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/mapper/CompletedCreditPersistenceMapper.java @@ -0,0 +1,20 @@ +package com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.mapper; + +import org.springframework.stereotype.Component; + +import com.plzgraduate.myongjigraduatebe.completedcredit.domain.model.CompletedCredit; +import com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.entity.CompletedCreditJpaEntity; + +@Component +public class CompletedCreditPersistenceMapper { + + public CompletedCredit mapToDomainModel(CompletedCreditJpaEntity completedCreditJpaEntity) { + return CompletedCredit.builder() + .category(completedCreditJpaEntity.getCategory()) + .totalCredit(completedCreditJpaEntity.getTotalCredit()) + .takenCredit(completedCreditJpaEntity.getTakenCredit()).build(); + } + + + +} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/mapper/CompletedCreditPersistenceMapperTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/mapper/CompletedCreditPersistenceMapperTest.java new file mode 100644 index 00000000..76085f47 --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/mapper/CompletedCreditPersistenceMapperTest.java @@ -0,0 +1,35 @@ +package com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.mapper; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import com.plzgraduate.myongjigraduatebe.completedcredit.domain.model.CompletedCredit; +import com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.entity.CompletedCreditJpaEntity; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; + +class CompletedCreditPersistenceMapperTest { + + private final CompletedCreditPersistenceMapper completedCreditPersistenceMapper = new CompletedCreditPersistenceMapper(); + + @DisplayName("CompletedCredit jpa entity를 domain model로 매핑한다.") + @Test + void mapToDomainModel() { + //given + CompletedCreditJpaEntity completedCreditJpaEntity = CompletedCreditJpaEntity.builder() + .id(1L) + .category(GraduationCategory.COMMON_CULTURE) + .totalCredit(10) + .takenCredit(5).build(); + + //when + CompletedCredit completedCredit = completedCreditPersistenceMapper.mapToDomainModel(completedCreditJpaEntity); + + //then + assertThat(completedCredit.getCategory()).isEqualTo(completedCreditJpaEntity.getCategory()); + assertThat(completedCredit.getTotalCredit()).isEqualTo(completedCreditJpaEntity.getTotalCredit()); + assertThat(completedCredit.getTakenCredit()).isEqualTo(completedCreditJpaEntity.getTakenCredit()); + } + +} From e185d3a4c3a365319f17611cd96e9ebfad5d431f Mon Sep 17 00:00:00 2001 From: 5uhwann <5uhwann27@gmail.com> Date: Thu, 28 Mar 2024 15:09:50 +0900 Subject: [PATCH 18/37] =?UTF-8?q?feat:=20CompletedCreditRepository=20-=20?= =?UTF-8?q?=EC=9D=B4=EC=88=98=20=ED=95=99=EC=A0=90=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/CompletedCreditRepository.java | 14 +++++ .../CompletedCreditRepositoryTest.java | 59 +++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/repository/CompletedCreditRepository.java create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/repository/CompletedCreditRepositoryTest.java diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/repository/CompletedCreditRepository.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/repository/CompletedCreditRepository.java new file mode 100644 index 00000000..91b88b2e --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/repository/CompletedCreditRepository.java @@ -0,0 +1,14 @@ +package com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.repository; + +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.entity.CompletedCreditJpaEntity; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; + +public interface CompletedCreditRepository extends JpaRepository { + + List findAllByUserJpaEntity(UserJpaEntity userJpaEntity); + +} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/repository/CompletedCreditRepositoryTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/repository/CompletedCreditRepositoryTest.java new file mode 100644 index 00000000..1630d34b --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/repository/CompletedCreditRepositoryTest.java @@ -0,0 +1,59 @@ +package com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.repository; + +import java.util.List; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.entity.CompletedCreditJpaEntity; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; +import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.repository.UserRepository; + +class CompletedCreditRepositoryTest extends PersistenceTestSupport { + + @Autowired + private UserRepository userRepository; + @Autowired + private CompletedCreditRepository completedCreditRepository; + + @DisplayName("유저의 이수 학점을 조회 한다.") + @Test + void findAllByUserJpaEntity() { + //given + UserJpaEntity userJpaEntity = UserJpaEntity.builder() + .id(1L) + .authId("test") + .password("test") + .studentNumber("60191111").build(); + + CompletedCreditJpaEntity commonCultureCompletedCreditJpaEntity = CompletedCreditJpaEntity.builder() + .userJpaEntity(userJpaEntity) + .category(GraduationCategory.COMMON_CULTURE) + .totalCredit(10) + .takenCredit(10).build(); + + CompletedCreditJpaEntity coreCultureCompletedCreditJpaEntity = CompletedCreditJpaEntity.builder() + .userJpaEntity(userJpaEntity) + .category(GraduationCategory.CORE_CULTURE) + .totalCredit(10) + .takenCredit(10).build(); + + userRepository.save(userJpaEntity); + completedCreditRepository.saveAll( + List.of(commonCultureCompletedCreditJpaEntity, coreCultureCompletedCreditJpaEntity)); + + //when + List foundCompletedCredits = completedCreditRepository.findAllByUserJpaEntity( + userJpaEntity); + + //then + Assertions.assertThat(foundCompletedCredits).hasSize(2) + .extracting("userJpaEntity.id") + .contains(1L); + } + +} From 74889165728c3d5be6b0cd65d7ab624d45ffe3d6 Mon Sep 17 00:00:00 2001 From: 5uhwann <5uhwann27@gmail.com> Date: Thu, 28 Mar 2024 15:56:49 +0900 Subject: [PATCH 19/37] =?UTF-8?q?feat:=20FindCompletedCreditPort=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../port/FindCompletedCreditPort.java | 11 ++++ .../FindCompletedCreditAdapter.java | 29 ++++++++ .../FindCompletedCreditAdapterTest.java | 66 +++++++++++++++++++ 3 files changed, 106 insertions(+) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/port/FindCompletedCreditPort.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/FindCompletedCreditAdapter.java create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/FindCompletedCreditAdapterTest.java diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/port/FindCompletedCreditPort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/port/FindCompletedCreditPort.java new file mode 100644 index 00000000..7c0f6ed3 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/port/FindCompletedCreditPort.java @@ -0,0 +1,11 @@ +package com.plzgraduate.myongjigraduatebe.completedcredit.application.port; + +import java.util.List; + +import com.plzgraduate.myongjigraduatebe.completedcredit.domain.model.CompletedCredit; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +public interface FindCompletedCreditPort { + + List findCompletedCredit(User user); +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/FindCompletedCreditAdapter.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/FindCompletedCreditAdapter.java new file mode 100644 index 00000000..b1df18f9 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/FindCompletedCreditAdapter.java @@ -0,0 +1,29 @@ +package com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence; + +import java.util.List; +import java.util.stream.Collectors; + +import com.plzgraduate.myongjigraduatebe.completedcredit.application.port.FindCompletedCreditPort; +import com.plzgraduate.myongjigraduatebe.completedcredit.domain.model.CompletedCredit; +import com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.mapper.CompletedCreditPersistenceMapper; +import com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.repository.CompletedCreditRepository; +import com.plzgraduate.myongjigraduatebe.core.meta.PersistenceAdapter; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.mapper.UserMapper; + +import lombok.RequiredArgsConstructor; + +@PersistenceAdapter +@RequiredArgsConstructor +public class FindCompletedCreditAdapter implements FindCompletedCreditPort { + + private final UserMapper userMapper; + private final CompletedCreditPersistenceMapper completedCreditPersistenceMapper; + private final CompletedCreditRepository completedCreditRepository; + @Override + public List findCompletedCredit(User user) { + return completedCreditRepository.findAllByUserJpaEntity(userMapper.mapToJpaEntity(user)).stream() + .map(completedCreditPersistenceMapper::mapToDomainModel) + .collect(Collectors.toList()); + } +} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/FindCompletedCreditAdapterTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/FindCompletedCreditAdapterTest.java new file mode 100644 index 00000000..f1cf244e --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/FindCompletedCreditAdapterTest.java @@ -0,0 +1,66 @@ +package com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.List; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import com.plzgraduate.myongjigraduatebe.completedcredit.domain.model.CompletedCredit; +import com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.entity.CompletedCreditJpaEntity; +import com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.repository.CompletedCreditRepository; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; +import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.mapper.UserMapper; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.repository.UserRepository; + +class FindCompletedCreditAdapterTest extends PersistenceTestSupport { + + @Autowired + private UserRepository userRepository; + @Autowired + private UserMapper userMapper; + @Autowired + private CompletedCreditRepository completedCreditRepository; + @Autowired + private FindCompletedCreditAdapter findCompletedCreditAdapter; + + + @DisplayName("유저의 이수학점을 조회 후 도메인 모델로 반환한다.") + @Test + void findCompletedCredit() { + //given + UserJpaEntity userJpaEntity = UserJpaEntity.builder() + .id(1L) + .authId("test") + .password("test") + .studentNumber("60191111").build(); + + CompletedCreditJpaEntity commonCultureCompletedCreditJpaEntity = CompletedCreditJpaEntity.builder() + .userJpaEntity(userJpaEntity) + .category(GraduationCategory.COMMON_CULTURE) + .totalCredit(10) + .takenCredit(10).build(); + + CompletedCreditJpaEntity coreCultureCompletedCreditJpaEntity = CompletedCreditJpaEntity.builder() + .userJpaEntity(userJpaEntity) + .category(GraduationCategory.CORE_CULTURE) + .totalCredit(10) + .takenCredit(10).build(); + + userRepository.save(userJpaEntity); + completedCreditRepository.saveAll( + List.of(commonCultureCompletedCreditJpaEntity, coreCultureCompletedCreditJpaEntity)); + + //when + List completedCredits = findCompletedCreditAdapter.findCompletedCredit( + userMapper.mapToDomainEntity(userJpaEntity)); + + //then + assertThat(completedCredits).hasSize(2); + } + +} From 368446fb5ba8f95f8b4a75ede2e1a27a46f48cd9 Mon Sep 17 00:00:00 2001 From: 5uhwann <5uhwann27@gmail.com> Date: Sun, 31 Mar 2024 16:36:37 +0900 Subject: [PATCH 20/37] =?UTF-8?q?feat:=20FindCompletedCreditUseCase=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/FindCompletedCreditService.java | 29 ++++++++++ .../usecase/FindCompletedCreditUseCase.java | 11 ++++ .../FindCompletedCreditServiceTest.java | 53 +++++++++++++++++++ 3 files changed, 93 insertions(+) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/FindCompletedCreditService.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/usecase/FindCompletedCreditUseCase.java create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/FindCompletedCreditServiceTest.java diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/FindCompletedCreditService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/FindCompletedCreditService.java new file mode 100644 index 00000000..853c3736 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/FindCompletedCreditService.java @@ -0,0 +1,29 @@ +package com.plzgraduate.myongjigraduatebe.completedcredit.application.service; + +import java.util.List; + +import org.springframework.transaction.annotation.Transactional; + +import com.plzgraduate.myongjigraduatebe.completedcredit.application.port.FindCompletedCreditPort; +import com.plzgraduate.myongjigraduatebe.completedcredit.application.usecase.FindCompletedCreditUseCase; +import com.plzgraduate.myongjigraduatebe.completedcredit.domain.model.CompletedCredit; +import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +import lombok.RequiredArgsConstructor; + +@UseCase +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class FindCompletedCreditService implements FindCompletedCreditUseCase { + + private final FindUserUseCase findUserUseCase; + private final FindCompletedCreditPort findCompletedCreditPort; + + @Override + public List findCompletedCredits(Long userId) { + User user = findUserUseCase.findUserById(userId); + return findCompletedCreditPort.findCompletedCredit(user); + } +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/usecase/FindCompletedCreditUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/usecase/FindCompletedCreditUseCase.java new file mode 100644 index 00000000..8ad96508 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/usecase/FindCompletedCreditUseCase.java @@ -0,0 +1,11 @@ +package com.plzgraduate.myongjigraduatebe.completedcredit.application.usecase; + +import java.util.List; + +import com.plzgraduate.myongjigraduatebe.completedcredit.domain.model.CompletedCredit; + +public interface FindCompletedCreditUseCase { + + List findCompletedCredits(Long userId); + +} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/FindCompletedCreditServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/FindCompletedCreditServiceTest.java new file mode 100644 index 00000000..6ca941ee --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/FindCompletedCreditServiceTest.java @@ -0,0 +1,53 @@ +package com.plzgraduate.myongjigraduatebe.completedcredit.application.service; + +import static org.assertj.core.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.BDDMockito.given; + +import java.math.BigDecimal; +import java.util.List; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import com.plzgraduate.myongjigraduatebe.completedcredit.application.port.FindCompletedCreditPort; +import com.plzgraduate.myongjigraduatebe.completedcredit.domain.model.CompletedCredit; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +@ExtendWith(MockitoExtension.class) +class FindCompletedCreditServiceTest { + + @Mock + private FindUserUseCase findUserUseCase; + @Mock + private FindCompletedCreditPort findCompletedCreditPort; + @InjectMocks + private FindCompletedCreditService findCompletedCreditService; + + @DisplayName("유저의 기이수 학점을 조회한다.") + @Test + void findCompletedCredits() { + //given + User user = User.builder() + .id(1L).build(); + given(findUserUseCase.findUserById(1L)).willReturn(user); + given(findCompletedCreditPort.findCompletedCredit(user)).willReturn(List.of( + CompletedCredit.builder().build(), + CompletedCredit.builder().build(), + CompletedCredit.builder().build() + )); + + //when + List result = findCompletedCreditService.findCompletedCredits(1L); + + //then + assertThat(result).hasSize(3); + } + +} From eeb2861c711b8e97ec30cfd5cbab7586193ba565 Mon Sep 17 00:00:00 2001 From: 5uhwann <5uhwann27@gmail.com> Date: Sun, 31 Mar 2024 17:19:11 +0900 Subject: [PATCH 21/37] =?UTF-8?q?refactor:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=20=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CalculateGraduationApiPresentation.java | 14 ---- .../api/CalculateGraduationController.java | 24 ------ .../api/dto/response/GraduationResponse.java | 74 ------------------- .../CalculateGraduationControllerTest.java | 57 -------------- .../support/WebAdaptorTestSupport.java | 2 - 5 files changed, 171 deletions(-) delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateGraduationApiPresentation.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateGraduationController.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/GraduationResponse.java delete mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateGraduationControllerTest.java diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateGraduationApiPresentation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateGraduationApiPresentation.java deleted file mode 100644 index 2528ed57..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateGraduationApiPresentation.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.api; - -import com.plzgraduate.myongjigraduatebe.core.meta.LoginUser; -import com.plzgraduate.myongjigraduatebe.graduation.api.dto.response.GraduationResponse; - -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.tags.Tag; - -@Tag(name = "CalculateGraduation", description = "유저의 졸업 결과를 계산하는 API") -public interface CalculateGraduationApiPresentation { - - @Parameter(name = "userId", description = "로그인한 유저의 PK값") - GraduationResponse calculate(@LoginUser Long userId); -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateGraduationController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateGraduationController.java deleted file mode 100644 index 2b7d24ce..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateGraduationController.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.api; - -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; - -import com.plzgraduate.myongjigraduatebe.core.meta.LoginUser; -import com.plzgraduate.myongjigraduatebe.core.meta.WebAdapter; -import com.plzgraduate.myongjigraduatebe.graduation.api.dto.response.GraduationResponse; -import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateGraduationUseCase; - -import lombok.RequiredArgsConstructor; - -@WebAdapter -@RequestMapping("/api/v1/graduation") -@RequiredArgsConstructor -public class CalculateGraduationController implements CalculateGraduationApiPresentation { - - private final CalculateGraduationUseCase calculateGraduationUseCase; - - @GetMapping("/result") - public GraduationResponse calculate(@LoginUser Long userId) { - return calculateGraduationUseCase.calculateGraduation(userId); - } -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/GraduationResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/GraduationResponse.java deleted file mode 100644 index d107fee5..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/GraduationResponse.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.api.dto.response; - -import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.*; - -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationResult; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Builder; -import lombok.Getter; - -@Getter -public class GraduationResponse { - - private final BasicInfoResponse basicInfo; - private final ChapelResultResponse chapelResult; - private final DetailGraduationResultResponse commonCulture; - private final DetailGraduationResultResponse coreCulture; - private final DetailGraduationResultResponse basicAcademicalCulture; - private final DetailGraduationResultResponse major; - @Schema(name = "subMajor", nullable = true) - private final DetailGraduationResultResponse subMajor; - //TODO: 복수전공 response 추가 - private final RestResultResponse normalCulture; - private final RestResultResponse freeElective; - @Schema(name = "graduated", example = "false") - private final boolean graduated; - - @Builder - private GraduationResponse(BasicInfoResponse basicInfo, ChapelResultResponse chapelResult, - DetailGraduationResultResponse commonCulture, DetailGraduationResultResponse coreCulture, - DetailGraduationResultResponse basicAcademicalCulture, DetailGraduationResultResponse major, - DetailGraduationResultResponse subMajor, RestResultResponse normalCulture, RestResultResponse freeElective, - boolean graduated) { - this.basicInfo = basicInfo; - this.chapelResult = chapelResult; - this.commonCulture = commonCulture; - this.coreCulture = coreCulture; - this.basicAcademicalCulture = basicAcademicalCulture; - this.major = major; - this.subMajor = subMajor; - this.normalCulture = normalCulture; - this.freeElective = freeElective; - this.graduated = graduated; - } - - public static GraduationResponse of(User user, GraduationResult graduationResult) { - return GraduationResponse.builder() - .basicInfo(BasicInfoResponse.of(user, graduationResult)) - .chapelResult(ChapelResultResponse.from(graduationResult.getChapelResult())) - .commonCulture(findDetailGraduationResultResponse(graduationResult, COMMON_CULTURE)) - .coreCulture(findDetailGraduationResultResponse(graduationResult, CORE_CULTURE)) - .basicAcademicalCulture(findDetailGraduationResultResponse(graduationResult, - PRIMARY_BASIC_ACADEMICAL_CULTURE)) - .major(findDetailGraduationResultResponse(graduationResult, PRIMARY_MAJOR)) - .subMajor(findDetailGraduationResultResponse(graduationResult, SUB_MAJOR)) - .normalCulture( - RestResultResponse.fromNormalCultureResult(graduationResult.getNormalCultureGraduationResult())) - .freeElective(RestResultResponse.fromFreeElectiveResult(graduationResult.getFreeElectiveGraduationResult())) - .graduated(graduationResult.isGraduated()) - .build(); - } - - private static DetailGraduationResultResponse findDetailGraduationResultResponse(GraduationResult graduationResult, - GraduationCategory graduationCategory) { - return graduationResult.getDetailGraduationResults().stream() - .filter(detailGraduationResult -> detailGraduationResult.getCategoryName() - .equals(graduationCategory.getName())) - .map(DetailGraduationResultResponse::from) - .findFirst() - .orElse(null); - } -} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateGraduationControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateGraduationControllerTest.java deleted file mode 100644 index 15b28421..00000000 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateGraduationControllerTest.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.api; - -import static org.mockito.BDDMockito.given; -import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import com.plzgraduate.myongjigraduatebe.graduation.api.dto.response.BasicInfoResponse; -import com.plzgraduate.myongjigraduatebe.graduation.api.dto.response.ChapelResultResponse; -import com.plzgraduate.myongjigraduatebe.graduation.api.dto.response.DetailGraduationResultResponse; -import com.plzgraduate.myongjigraduatebe.graduation.api.dto.response.GraduationResponse; -import com.plzgraduate.myongjigraduatebe.graduation.api.dto.response.RestResultResponse; -import com.plzgraduate.myongjigraduatebe.support.WebAdaptorTestSupport; -import com.plzgraduate.myongjigraduatebe.support.WithMockAuthenticationUser; - -class CalculateGraduationControllerTest extends WebAdaptorTestSupport { - - @WithMockAuthenticationUser - @DisplayName("유저의 졸업 결과를 계산한다.") - @Test - void calculate() throws Exception { - ///given - Long userId = 1L; - GraduationResponse response = GraduationResponse.builder() - .basicInfo(BasicInfoResponse.builder().build()) - .chapelResult(ChapelResultResponse.builder().build()) - .commonCulture(DetailGraduationResultResponse.builder().build()) - .coreCulture(DetailGraduationResultResponse.builder().build()) - .basicAcademicalCulture(DetailGraduationResultResponse.builder().build()) - .major(DetailGraduationResultResponse.builder().build()) - .normalCulture(RestResultResponse.builder().build()) - .freeElective(RestResultResponse.builder().build()) - .graduated(true).build(); - given(calculateGraduationUseCase.calculateGraduation(userId)).willReturn(response); - - //when //then - mockMvc.perform( - get("/api/v1/graduation/result") - .with(csrf())) - .andDo(print()) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.basicInfo").exists()) - .andExpect(jsonPath("$.chapelResult").exists()) - .andExpect(jsonPath("$.commonCulture").exists()) - .andExpect(jsonPath("$.coreCulture").exists()) - .andExpect(jsonPath("$.basicAcademicalCulture").exists()) - .andExpect(jsonPath("$.major").exists()) - .andExpect(jsonPath("$.normalCulture").exists()) - .andExpect(jsonPath("$.freeElective").exists()) - .andExpect(jsonPath("$.graduated").isBoolean()); - } -} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java b/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java index 9d4207db..455e7768 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java @@ -21,7 +21,6 @@ import com.plzgraduate.myongjigraduatebe.core.config.JpaAuditingConfig; import com.plzgraduate.myongjigraduatebe.core.config.QuerydslConfig; import com.plzgraduate.myongjigraduatebe.core.config.SecurityConfig; -import com.plzgraduate.myongjigraduatebe.graduation.api.CalculateGraduationController; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateGraduationUseCase; import com.plzgraduate.myongjigraduatebe.lecture.api.SearchLectureController; import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.SearchLectureUseCase; @@ -56,7 +55,6 @@ @WebMvcTest(controllers = { SignInController.class, TokenController.class, - CalculateGraduationController.class, SearchLectureController.class, FindUserInformationController.class, UpdateTakenLectureController.class, From 6759d61365eeebcfdb1a93bc09dedca6c4c89f02 Mon Sep 17 00:00:00 2001 From: 5uhwann <5uhwann27@gmail.com> Date: Sun, 31 Mar 2024 17:53:11 +0900 Subject: [PATCH 22/37] =?UTF-8?q?refactor:=20CalculateGraduationUseCase=20?= =?UTF-8?q?=EB=A6=AC=ED=84=B4=20=ED=83=80=EC=9E=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/CalculateGraduationService.java | 12 ++-- .../usecase/CalculateGraduationUseCase.java | 4 +- .../domain/model/DetailGraduationResult.java | 8 +-- .../domain/model/GraduationResult.java | 2 +- .../FindCompletedCreditAdapterTest.java | 66 ------------------- .../FreeElectiveGraduationResultTest.java | 2 +- .../domain/model/GraduationResultTest.java | 10 +-- .../NormalCultureGraduationResultTest.java | 2 +- .../BusinessBasicAcademicalManagerTest.java | 13 ++-- .../DefaultBasicAcademicalManagerTest.java | 15 +++-- ...SocialScienceBasicAcademicManagerTest.java | 13 ++-- .../CommonCultureGraduationManagerTest.java | 10 +-- .../CoreCultureGraduationManagerTest.java | 9 +-- .../service/submajor/SubMajorManagerTest.java | 4 +- 14 files changed, 54 insertions(+), 116 deletions(-) delete mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/FindCompletedCreditAdapterTest.java diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java index 9b956d40..cd1fa509 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java @@ -7,9 +7,9 @@ import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.graduation.api.dto.response.GraduationResponse; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.ChapelResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DefaultGraduationRequirementType; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationResult; @@ -33,7 +33,6 @@ import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; import com.plzgraduate.myongjigraduatebe.user.domain.model.College; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DefaultGraduationRequirementType; import com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @@ -53,7 +52,7 @@ class CalculateGraduationService implements CalculateGraduationUseCase { private final FindMajorPort findMajorPort; @Override - public GraduationResponse calculateGraduation(Long userId) { + public GraduationResult calculateGraduation(Long userId) { User user = findUserUseCase.findUserById(userId); GraduationRequirement graduationRequirement = determineGraduationRequirement(user); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from( @@ -63,10 +62,8 @@ public GraduationResponse calculateGraduation(Long userId) { List detailGraduationResults = generateDetailGraduationResults(user, takenLectureInventory, graduationRequirement); - GraduationResult graduationResult = generateGraduationResult(chapelResult, detailGraduationResults, + return generateGraduationResult(chapelResult, detailGraduationResults, takenLectureInventory, graduationRequirement); - - return GraduationResponse.of(user, graduationResult); } private GraduationRequirement determineGraduationRequirement(User user) { @@ -96,7 +93,8 @@ private List generateDetailGraduationResults(User user, )); if (user.getStudentCategory() == StudentCategory.SUB_MAJOR) { - detailGraduationResults.add(generateSubMajorDetailGraduationResult(user, takenLectureInventory, graduationRequirement)); + detailGraduationResults.add( + generateSubMajorDetailGraduationResult(user, takenLectureInventory, graduationRequirement)); } return detailGraduationResults; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateGraduationUseCase.java index 20fb227d..b69a85d2 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateGraduationUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateGraduationUseCase.java @@ -1,8 +1,8 @@ package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; -import com.plzgraduate.myongjigraduatebe.graduation.api.dto.response.GraduationResponse; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationResult; public interface CalculateGraduationUseCase { - GraduationResponse calculateGraduation(Long userId); + GraduationResult calculateGraduation(Long userId); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DetailGraduationResult.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DetailGraduationResult.java index 5a0c881a..d42c4bd0 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DetailGraduationResult.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DetailGraduationResult.java @@ -8,16 +8,16 @@ @Getter public class DetailGraduationResult { - private final String categoryName; + private final GraduationCategory graduationCategory; private final boolean isCompleted; private final int totalCredit; private double takenCredit; private final List detailCategory; @Builder - private DetailGraduationResult(String categoryName, boolean isCompleted, int totalCredit, int takenCredit, + private DetailGraduationResult(GraduationCategory graduationCategory, boolean isCompleted, int totalCredit, int takenCredit, List detailCategory) { - this.categoryName = categoryName; + this.graduationCategory = graduationCategory; this.isCompleted = isCompleted; this.totalCredit = totalCredit; this.takenCredit = takenCredit; @@ -27,7 +27,7 @@ private DetailGraduationResult(String categoryName, boolean isCompleted, int tot public static DetailGraduationResult create(GraduationCategory graduationCategory, int totalCredit, List detailCategoryResults) { return DetailGraduationResult.builder() - .categoryName(graduationCategory.getName()) + .graduationCategory(graduationCategory) .isCompleted(checkIsCompleted(detailCategoryResults)) .totalCredit(totalCredit) .takenCredit(calculateTakenCredit(detailCategoryResults)) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationResult.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationResult.java index 0cb13836..bdf67c56 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationResult.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationResult.java @@ -81,7 +81,7 @@ private void addUpTakenCredit() { private void addUpChapelTakenCreditToCommonCulture() { this.detailGraduationResults.stream() - .filter(detailGraduationResult -> detailGraduationResult.getCategoryName().equals(COMMON_CULTURE.getName())) + .filter(detailGraduationResult -> detailGraduationResult.getGraduationCategory() ==COMMON_CULTURE) .forEach( detailGraduationResult -> detailGraduationResult.addCredit(this.chapelResult.getTakenChapelCredit())); } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/FindCompletedCreditAdapterTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/FindCompletedCreditAdapterTest.java deleted file mode 100644 index f1cf244e..00000000 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/FindCompletedCreditAdapterTest.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence; - -import static org.assertj.core.api.Assertions.assertThat; - -import java.util.List; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; - -import com.plzgraduate.myongjigraduatebe.completedcredit.domain.model.CompletedCredit; -import com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.entity.CompletedCreditJpaEntity; -import com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.repository.CompletedCreditRepository; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; -import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; -import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; -import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.mapper.UserMapper; -import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.repository.UserRepository; - -class FindCompletedCreditAdapterTest extends PersistenceTestSupport { - - @Autowired - private UserRepository userRepository; - @Autowired - private UserMapper userMapper; - @Autowired - private CompletedCreditRepository completedCreditRepository; - @Autowired - private FindCompletedCreditAdapter findCompletedCreditAdapter; - - - @DisplayName("유저의 이수학점을 조회 후 도메인 모델로 반환한다.") - @Test - void findCompletedCredit() { - //given - UserJpaEntity userJpaEntity = UserJpaEntity.builder() - .id(1L) - .authId("test") - .password("test") - .studentNumber("60191111").build(); - - CompletedCreditJpaEntity commonCultureCompletedCreditJpaEntity = CompletedCreditJpaEntity.builder() - .userJpaEntity(userJpaEntity) - .category(GraduationCategory.COMMON_CULTURE) - .totalCredit(10) - .takenCredit(10).build(); - - CompletedCreditJpaEntity coreCultureCompletedCreditJpaEntity = CompletedCreditJpaEntity.builder() - .userJpaEntity(userJpaEntity) - .category(GraduationCategory.CORE_CULTURE) - .totalCredit(10) - .takenCredit(10).build(); - - userRepository.save(userJpaEntity); - completedCreditRepository.saveAll( - List.of(commonCultureCompletedCreditJpaEntity, coreCultureCompletedCreditJpaEntity)); - - //when - List completedCredits = findCompletedCreditAdapter.findCompletedCredit( - userMapper.mapToDomainEntity(userJpaEntity)); - - //then - assertThat(completedCredits).hasSize(2); - } - -} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/FreeElectiveGraduationResultTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/FreeElectiveGraduationResultTest.java index 709b13d8..3e28a8c3 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/FreeElectiveGraduationResultTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/FreeElectiveGraduationResultTest.java @@ -40,7 +40,7 @@ void createFreeElectiveGraduationResult() { TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); DetailGraduationResult detailGraduationResult = DetailGraduationResult.builder() - .categoryName(FREE_ELECTIVE.getName()) + .graduationCategory(FREE_ELECTIVE) .detailCategory(List.of( DetailCategoryResult.builder() .detailCategoryName(CHRISTIAN_A.getName()) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationResultTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationResultTest.java index 4ce63d99..18e9cfce 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationResultTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationResultTest.java @@ -84,7 +84,7 @@ void checkCompletedGraduated() { .isCompleted(true).build(); List detailGraduationResults = List.of(DetailGraduationResult.builder() .isCompleted(true) - .categoryName(COMMON_CULTURE.getName()) + .graduationCategory(COMMON_CULTURE) .totalCredit(detailCategoryTotalCredit) .takenCredit(detailCategoryTakenCredit).build()); NormalCultureGraduationResult normalCultureGraduationResult = NormalCultureGraduationResult.builder() @@ -139,7 +139,7 @@ static Stream graduationResultFields() { ChapelResult.builder().isCompleted(true).build(), List.of(DetailGraduationResult.builder() .isCompleted(true) - .categoryName(COMMON_CULTURE.getName()).build()), + .graduationCategory(COMMON_CULTURE).build()), NormalCultureGraduationResult.builder().isCompleted(true).build(), FreeElectiveGraduationResult.builder().isCompleted(false).build() ), @@ -147,7 +147,7 @@ static Stream graduationResultFields() { ChapelResult.builder().isCompleted(true).build(), List.of(DetailGraduationResult.builder() .isCompleted(true) - .categoryName(COMMON_CULTURE.getName()).build()), + .graduationCategory(COMMON_CULTURE).build()), NormalCultureGraduationResult.builder().isCompleted(false).build(), FreeElectiveGraduationResult.builder().isCompleted(true).build() ), @@ -155,7 +155,7 @@ static Stream graduationResultFields() { ChapelResult.builder().isCompleted(true).build(), List.of(DetailGraduationResult.builder() .isCompleted(false) - .categoryName(COMMON_CULTURE.getName()).build()), + .graduationCategory(COMMON_CULTURE).build()), NormalCultureGraduationResult.builder().isCompleted(true).build(), FreeElectiveGraduationResult.builder().isCompleted(true).build() ), @@ -163,7 +163,7 @@ static Stream graduationResultFields() { ChapelResult.builder().isCompleted(false).build(), List.of(DetailGraduationResult.builder() .isCompleted(true) - .categoryName(COMMON_CULTURE.getName()).build()), + .graduationCategory(COMMON_CULTURE).build()), NormalCultureGraduationResult.builder().isCompleted(true).build(), FreeElectiveGraduationResult.builder().isCompleted(true).build() ) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/NormalCultureGraduationResultTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/NormalCultureGraduationResultTest.java index 12b71acf..d7627193 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/NormalCultureGraduationResultTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/NormalCultureGraduationResultTest.java @@ -39,7 +39,7 @@ void createNormalCultureGraduationResult() { TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); DetailGraduationResult detailGraduationResult = DetailGraduationResult.builder() - .categoryName(COMMON_CULTURE.getName()) + .graduationCategory(COMMON_CULTURE) .detailCategory(List.of( DetailCategoryResult.builder() .detailCategoryName(CHRISTIAN_A.getName()) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/BusinessBasicAcademicalManagerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/BusinessBasicAcademicalManagerTest.java index 59f2251e..150aa36e 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/BusinessBasicAcademicalManagerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/BusinessBasicAcademicalManagerTest.java @@ -1,5 +1,6 @@ package com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.*; import static org.assertj.core.api.Assertions.assertThat; import java.util.HashSet; @@ -54,12 +55,12 @@ class 경영학과_학문기초교양 { //then assertThat(detailGraduationResult) - .extracting("categoryName", "isCompleted", "totalCredit", "takenCredit") - .contains("학문기초교양", true, 6, 6); + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(PRIMARY_BASIC_ACADEMICAL_CULTURE, true, 6, 6); assertThat(detailCategoryResult) .extracting("detailCategoryName", "isCompleted", "totalCredits", "takenCredits") - .contains("학문기초교양", true, 6, 6); + .contains("주 학문기초교양", true, 6, 6); assertThat(detailCategoryResult.getTakenLectures()).hasSize(2); assertThat(detailCategoryResult.getHaveToLectures()).isEmpty(); @@ -87,12 +88,12 @@ class 경영학과_학문기초교양 { //then assertThat(detailGraduationResult) - .extracting("categoryName", "isCompleted", "totalCredit", "takenCredit") - .contains("학문기초교양", false, 6, 3.0); + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(PRIMARY_BASIC_ACADEMICAL_CULTURE, false, 6, 3.0); assertThat(detailCategoryResult) .extracting("detailCategoryName", "isCompleted", "totalCredits", "takenCredits") - .contains("학문기초교양", false, 6, 3); + .contains("주 학문기초교양", false, 6, 3); assertThat(detailCategoryResult.getTakenLectures()).hasSize(1); assertThat(detailCategoryResult.getHaveToLectures()).hasSize(1); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/DefaultBasicAcademicalManagerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/DefaultBasicAcademicalManagerTest.java index 8d8ae6d9..451d22de 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/DefaultBasicAcademicalManagerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/DefaultBasicAcademicalManagerTest.java @@ -15,6 +15,7 @@ import com.plzgraduate.myongjigraduatebe.fixture.UserFixture; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailCategoryResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.Semester; @@ -32,7 +33,7 @@ class 인문대_학문기초교양 { Map mockLectureMap = LectureFixture.getMockLectureMap(); Set basicAcademicalLectures = BasicAcademicalLectureFixture.인문대_학문기초교양(); - @DisplayName("학문기초교양을 추가해서 들어도 12학점을 초과하지 않으며 통과한다.") + @DisplayName("학문기초교양을 추가해서 들어도 12학점을 초과하지 않으면 통과한다.") @Test void 영문학과_12학점_이상() { //given @@ -54,12 +55,12 @@ class 인문대_학문기초교양 { //then assertThat(detailGraduationResult) - .extracting("categoryName", "isCompleted", "totalCredit", "takenCredit") - .contains("학문기초교양", true, 12, 12); + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE, true, 12, 12); assertThat(detailCategoryResult) .extracting("detailCategoryName", "isCompleted", "totalCredits", "takenCredits") - .contains("학문기초교양", true, 12, 12); + .contains("주 학문기초교양", true, 12, 12); assertThat(detailCategoryResult.getTakenLectures()).hasSize(5); assertThat(detailCategoryResult.getHaveToLectures()).isEmpty(); @@ -85,12 +86,12 @@ class 인문대_학문기초교양 { //then assertThat(detailGraduationResult) - .extracting("categoryName", "isCompleted", "totalCredit", "takenCredit") - .contains("학문기초교양", false, 12, 9.0); + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE, false, 12, 9.0); assertThat(detailCategoryResult) .extracting("detailCategoryName", "isCompleted", "totalCredits", "takenCredits") - .contains("학문기초교양", false, 12, 9); + .contains("주 학문기초교양", false, 12, 9); assertThat(detailCategoryResult.getTakenLectures()).hasSize(3); assertThat(detailCategoryResult.getHaveToLectures()).hasSize(10); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/SocialScienceBasicAcademicManagerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/SocialScienceBasicAcademicManagerTest.java index 18fe4b5b..e2a69378 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/SocialScienceBasicAcademicManagerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/SocialScienceBasicAcademicManagerTest.java @@ -15,6 +15,7 @@ import com.plzgraduate.myongjigraduatebe.fixture.UserFixture; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailCategoryResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.Semester; @@ -53,12 +54,12 @@ class 이십삼년도_이후_교과목_포함 { //then assertThat(detailGraduationResult) - .extracting("categoryName", "isCompleted", "totalCredit", "takenCredit") - .contains("학문기초교양", true, 12, 12); + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE, true, 12, 12); assertThat(detailCategoryResult) .extracting("detailCategoryName", "isCompleted", "totalCredits", "takenCredits") - .contains("학문기초교양", true, 12, 12); + .contains("주 학문기초교양", true, 12, 12); assertThat(detailCategoryResult.getTakenLectures()).hasSize(4); assertThat(detailCategoryResult.getHaveToLectures()).isEmpty(); @@ -85,12 +86,12 @@ class 이십삼년도_이후_교과목_포함 { //then assertThat(detailGraduationResult) - .extracting("categoryName", "isCompleted", "totalCredit", "takenCredit") - .contains("학문기초교양", false, 12, 6.0); + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE, 12, 6.0); assertThat(detailCategoryResult) .extracting("detailCategoryName", "isCompleted", "totalCredits", "takenCredits") - .contains("학문기초교양", false, 12, 6); + .contains("주 학문기초교양", false, 12, 6); assertThat(detailCategoryResult.getTakenLectures()).hasSize(2); assertThat(detailCategoryResult.getHaveToLectures()).hasSize(17); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureGraduationManagerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureGraduationManagerTest.java index 30c52c8a..f1e93f58 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureGraduationManagerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureGraduationManagerTest.java @@ -1,6 +1,7 @@ package com.plzgraduate.myongjigraduatebe.graduation.domain.service.commonculture; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.*; import static org.assertj.core.api.Assertions.*; import java.util.HashSet; @@ -14,6 +15,7 @@ import com.plzgraduate.myongjigraduatebe.fixture.CommonCultureFixture; import com.plzgraduate.myongjigraduatebe.fixture.LectureFixture; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; import com.plzgraduate.myongjigraduatebe.graduation.domain.service.GraduationManager; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCulture; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; @@ -56,8 +58,8 @@ void generateCompletedDetailGraduationResult(User user, Set gradu //then assertThat(detailGraduationResult) - .extracting("categoryName", "isCompleted") - .contains("공통교양", true); + .extracting("graduationCategory", "isCompleted") + .contains(COMMON_CULTURE, true); } @DisplayName("모든 공통교양 세부 카테고리가 이수 완료가 아닐 경우 이수 미 완료 공통교양 전체 졸업 결과를 생성한다.") @@ -78,8 +80,8 @@ void generateUnCompletedDetailGraduationResult(User user, Set gra //then assertThat(detailGraduationResult) - .extracting("categoryName", "isCompleted") - .contains("공통교양", false); + .extracting("graduationCategory", "isCompleted") + .contains(COMMON_CULTURE, false); } } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/coreculture/CoreCultureGraduationManagerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/coreculture/CoreCultureGraduationManagerTest.java index 6c6f5b08..bd8e3df8 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/coreculture/CoreCultureGraduationManagerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/coreculture/CoreCultureGraduationManagerTest.java @@ -1,5 +1,6 @@ package com.plzgraduate.myongjigraduatebe.graduation.domain.service.coreculture; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.CORE_CULTURE; import static org.assertj.core.api.Assertions.assertThat; import java.util.HashSet; @@ -67,8 +68,8 @@ void generateCompletedDetailGraduationResult() { //then assertThat(detailGraduationResult) - .extracting("categoryName", "isCompleted") - .contains("핵심교양", true); + .extracting("graduationCategory", "isCompleted") + .contains(CORE_CULTURE, true); } @DisplayName("모든 핵심교양 세부 카테고리가 이수 완료가 아닐 경우 이수 미 완료 핵심교양 전체 졸업 결과를 생성한다.") @@ -98,8 +99,8 @@ void generateUnCompletedDetailGraduationResult() { //then assertThat(detailGraduationResult) - .extracting("categoryName", "isCompleted") - .contains("핵심교양", false); + .extracting("graduationCategory", "isCompleted") + .contains(CORE_CULTURE, false); } } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/submajor/SubMajorManagerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/submajor/SubMajorManagerTest.java index a0a95452..f660182b 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/submajor/SubMajorManagerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/submajor/SubMajorManagerTest.java @@ -54,8 +54,8 @@ void createDetailGraduationResult() { .contains( tuple("전공선택", true, true, subMajorGraduationCredit, majorCredit * takenLecturesCount)); assertThat(detailGraduationResult) - .extracting("categoryName", "isCompleted", "totalCredit", "takenCredit") - .contains(SUB_MAJOR.getName(), true, subMajorGraduationCredit, (double)majorCredit * takenLecturesCount); + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(SUB_MAJOR, true, subMajorGraduationCredit, (double)majorCredit * takenLecturesCount); } From 83182779620c90158058c310a4f988f87f03ad30 Mon Sep 17 00:00:00 2001 From: 5uhwann <5uhwann27@gmail.com> Date: Tue, 2 Apr 2024 19:10:04 +0900 Subject: [PATCH 23/37] =?UTF-8?q?feat:=20GenerateOrModifyCompletedCreditPo?= =?UTF-8?q?rt=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GenerateOrModifyCompletedCreditPort.java | 10 ++ ...enerateOrModifyCompletedCreditService.java | 119 ++++++++++++++++++ ...enerateOrModifyCompletedCreditUseCase.java | 9 ++ ...nerateOrModifyCompletedCreditsAdapter.java | 30 +++++ .../entity/CompletedCreditJpaEntity.java | 9 +- .../CompletedCreditPersistenceMapper.java | 16 ++- ...teOrModifyCompletedCreditsAdapterTest.java | 63 ++++++++++ .../CompletedCreditPersistenceMapperTest.java | 32 ++++- .../CompletedCreditRepositoryTest.java | 4 +- 9 files changed, 282 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/port/GenerateOrModifyCompletedCreditPort.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/usecase/GenerateOrModifyCompletedCreditUseCase.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/GenerateOrModifyCompletedCreditsAdapter.java create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/GenerateOrModifyCompletedCreditsAdapterTest.java diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/port/GenerateOrModifyCompletedCreditPort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/port/GenerateOrModifyCompletedCreditPort.java new file mode 100644 index 00000000..bdb04067 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/port/GenerateOrModifyCompletedCreditPort.java @@ -0,0 +1,10 @@ +package com.plzgraduate.myongjigraduatebe.completedcredit.application.port; + +import java.util.List; + +import com.plzgraduate.myongjigraduatebe.completedcredit.domain.model.CompletedCredit; + +public interface GenerateOrModifyCompletedCreditPort { + + void generateOrModifyCompletedCredits(List completedCredits); +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java new file mode 100644 index 00000000..f6bb13e0 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java @@ -0,0 +1,119 @@ +package com.plzgraduate.myongjigraduatebe.completedcredit.application.service; + +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.*; + +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Function; +import java.util.stream.Collectors; + +import org.springframework.transaction.annotation.Transactional; + +import com.plzgraduate.myongjigraduatebe.completedcredit.application.port.FindCompletedCreditPort; +import com.plzgraduate.myongjigraduatebe.completedcredit.application.port.GenerateOrModifyCompletedCreditPort; +import com.plzgraduate.myongjigraduatebe.completedcredit.application.usecase.GenerateOrModifyCompletedCreditUseCase; +import com.plzgraduate.myongjigraduatebe.completedcredit.domain.model.CompletedCredit; +import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.ChapelResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationResult; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +import lombok.RequiredArgsConstructor; + +@UseCase +@Transactional +@RequiredArgsConstructor +public class GenerateOrModifyCompletedCreditService implements GenerateOrModifyCompletedCreditUseCase { + + private final FindCompletedCreditPort findCompletedCreditPort; + private final GenerateOrModifyCompletedCreditPort generateOrModifyCompletedCreditPort; + + @Override + public void generateOrModifyCompletedCredit(User user, GraduationResult graduationResult) { + List completedCredits = findCompletedCreditPort.findCompletedCredit(user); + List detailGraduationResults = graduationResult.getDetailGraduationResults(); + + Map> resultMap = detailGraduationResults.stream() + .collect(Collectors.toMap( + Function.identity(), + detailGraduationResult -> completedCredits.stream() + .filter(cc -> cc.getGraduationCategory().equals(detailGraduationResult.getGraduationCategory())) + .findFirst() + )); + + List completedCreditModels = resultMap.keySet().stream() + .map(completedCredit -> createCompletedCreditModel(completedCredit, resultMap.get(completedCredit))) + .collect(Collectors.toList()); + + CompletedCredit chapelCompletedCreditModel = createChapelCompletedCreditModel(completedCredits, + graduationResult); + CompletedCredit normalCultureCompletedCreditModel = createNormalCultureCompletedCreditModel(completedCredits, + graduationResult); + CompletedCredit freeElectiveCompletedCreditModel = createFreeElectiveCompletedCreditModel(completedCredits, + graduationResult); + + completedCredits.addAll( + List.of(chapelCompletedCreditModel, normalCultureCompletedCreditModel, freeElectiveCompletedCreditModel)); + generateOrModifyCompletedCreditPort.generateOrModifyCompletedCredits(completedCreditModels); + } + + private CompletedCredit createCompletedCreditModel(DetailGraduationResult detailGraduationResult, + Optional completedCredit) { + return CompletedCredit.builder() + .id(completedCredit.map(CompletedCredit::getId).orElse(null)) + .totalCredit(detailGraduationResult.getTotalCredit()) + .takenCredit(detailGraduationResult.getTakenCredit()) + .graduationCategory(detailGraduationResult.getGraduationCategory()) + .build(); + } + + private CompletedCredit createChapelCompletedCreditModel(List completedCredits, + GraduationResult graduationResult) { + return completedCredits.stream() + .filter(completedCredit -> completedCredit.getGraduationCategory() == CHAPEL) + .map(completedCredit -> CompletedCredit.builder() + .id(completedCredit.getId()) + .totalCredit(ChapelResult.GRADUATION_COUNT) + .takenCredit(graduationResult.getChapelResult().getTakenChapelCredit()) + .graduationCategory(CHAPEL).build()) + .findFirst() + .orElse(CompletedCredit.builder() + .totalCredit(ChapelResult.GRADUATION_COUNT) + .takenCredit(graduationResult.getChapelResult().getTakenChapelCredit()) + .graduationCategory(CHAPEL).build()); + } + + private CompletedCredit createNormalCultureCompletedCreditModel(List completedCredits, + GraduationResult graduationResult) { + return completedCredits.stream() + .filter(completedCredit -> completedCredit.getGraduationCategory() == NORMAL_CULTURE) + .map(completedCredit -> CompletedCredit.builder() + .id(completedCredit.getId()) + .totalCredit(graduationResult.getNormalCultureGraduationResult().getTotalCredit()) + .takenCredit(graduationResult.getNormalCultureGraduationResult().getTakenCredit()) + .graduationCategory(NORMAL_CULTURE).build()) + .findFirst() + .orElse(CompletedCredit.builder() + .totalCredit(graduationResult.getNormalCultureGraduationResult().getTotalCredit()) + .takenCredit(graduationResult.getNormalCultureGraduationResult().getTakenCredit()) + .graduationCategory(NORMAL_CULTURE).build()); + } + + private CompletedCredit createFreeElectiveCompletedCreditModel(List completedCredits, + GraduationResult graduationResult) { + return completedCredits.stream() + .filter(completedCredit -> completedCredit.getGraduationCategory() == FREE_ELECTIVE) + .map(completedCredit -> CompletedCredit.builder() + .id(completedCredit.getId()) + .totalCredit(graduationResult.getFreeElectiveGraduationResult().getTotalCredit()) + .takenCredit(graduationResult.getFreeElectiveGraduationResult().getTakenCredit()) + .graduationCategory(FREE_ELECTIVE).build()) + .findFirst() + .orElse(CompletedCredit.builder() + .totalCredit(graduationResult.getFreeElectiveGraduationResult().getTotalCredit()) + .takenCredit(graduationResult.getFreeElectiveGraduationResult().getTakenCredit()) + .graduationCategory(FREE_ELECTIVE).build()); + } +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/usecase/GenerateOrModifyCompletedCreditUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/usecase/GenerateOrModifyCompletedCreditUseCase.java new file mode 100644 index 00000000..ffdde9c4 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/usecase/GenerateOrModifyCompletedCreditUseCase.java @@ -0,0 +1,9 @@ +package com.plzgraduate.myongjigraduatebe.completedcredit.application.usecase; + +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationResult; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +public interface GenerateOrModifyCompletedCreditUseCase { + + void generateOrModifyCompletedCredit(User user, GraduationResult graduationResult); +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/GenerateOrModifyCompletedCreditsAdapter.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/GenerateOrModifyCompletedCreditsAdapter.java new file mode 100644 index 00000000..1dc225d3 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/GenerateOrModifyCompletedCreditsAdapter.java @@ -0,0 +1,30 @@ +package com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence; + +import java.util.List; +import java.util.stream.Collectors; + +import com.plzgraduate.myongjigraduatebe.completedcredit.application.port.GenerateOrModifyCompletedCreditPort; +import com.plzgraduate.myongjigraduatebe.completedcredit.domain.model.CompletedCredit; +import com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.entity.CompletedCreditJpaEntity; +import com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.mapper.CompletedCreditPersistenceMapper; +import com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.repository.CompletedCreditRepository; +import com.plzgraduate.myongjigraduatebe.core.meta.PersistenceAdapter; + +import lombok.RequiredArgsConstructor; + +@PersistenceAdapter +@RequiredArgsConstructor +public class GenerateOrModifyCompletedCreditsAdapter implements GenerateOrModifyCompletedCreditPort { + + private final CompletedCreditPersistenceMapper completedCreditPersistenceMapper; + private final CompletedCreditRepository completedCreditRepository; + + @Override + public void generateOrModifyCompletedCredits(List completedCredits) { + List completedCreditJpaEntities = completedCredits.stream() + .map(completedCreditPersistenceMapper::mapToJpaEntity) + .collect(Collectors.toList()); + + completedCreditRepository.saveAll(completedCreditJpaEntities); + } +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/entity/CompletedCreditJpaEntity.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/entity/CompletedCreditJpaEntity.java index 06cba9cc..e7661ba7 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/entity/CompletedCreditJpaEntity.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/entity/CompletedCreditJpaEntity.java @@ -34,17 +34,18 @@ public class CompletedCreditJpaEntity { private UserJpaEntity userJpaEntity; @Enumerated(value = EnumType.STRING) - private GraduationCategory category; + private GraduationCategory graduationCategory; private int totalCredit; - private int takenCredit; + private double takenCredit; @Builder - private CompletedCreditJpaEntity(Long id, UserJpaEntity userJpaEntity, GraduationCategory category, int totalCredit, int takenCredit) { + private CompletedCreditJpaEntity(Long id, UserJpaEntity userJpaEntity, GraduationCategory graduationCategory, + int totalCredit, double takenCredit) { this.id = id; this.userJpaEntity = userJpaEntity; - this.category = category; + this.graduationCategory = graduationCategory; this.totalCredit = totalCredit; this.takenCredit = takenCredit; } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/mapper/CompletedCreditPersistenceMapper.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/mapper/CompletedCreditPersistenceMapper.java index 87d739ab..b3665bf2 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/mapper/CompletedCreditPersistenceMapper.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/mapper/CompletedCreditPersistenceMapper.java @@ -4,17 +4,31 @@ import com.plzgraduate.myongjigraduatebe.completedcredit.domain.model.CompletedCredit; import com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.entity.CompletedCreditJpaEntity; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; @Component public class CompletedCreditPersistenceMapper { public CompletedCredit mapToDomainModel(CompletedCreditJpaEntity completedCreditJpaEntity) { return CompletedCredit.builder() - .category(completedCreditJpaEntity.getCategory()) + .id(completedCreditJpaEntity.getId()) + .userId(completedCreditJpaEntity.getUserJpaEntity().getId()) + .graduationCategory(completedCreditJpaEntity.getGraduationCategory()) .totalCredit(completedCreditJpaEntity.getTotalCredit()) .takenCredit(completedCreditJpaEntity.getTakenCredit()).build(); } + public CompletedCreditJpaEntity mapToJpaEntity(CompletedCredit completedCredit) { + return CompletedCreditJpaEntity.builder() + .id(completedCredit.getId()) + .graduationCategory(completedCredit.getGraduationCategory()) + .userJpaEntity(UserJpaEntity.builder() + .id(completedCredit.getUserId()) + .build()) + .totalCredit(completedCredit.getTotalCredit()) + .takenCredit(completedCredit.getTakenCredit()).build(); + } + } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/GenerateOrModifyCompletedCreditsAdapterTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/GenerateOrModifyCompletedCreditsAdapterTest.java new file mode 100644 index 00000000..647ebe34 --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/GenerateOrModifyCompletedCreditsAdapterTest.java @@ -0,0 +1,63 @@ +package com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence; + + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.List; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import com.plzgraduate.myongjigraduatebe.completedcredit.domain.model.CompletedCredit; +import com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.entity.CompletedCreditJpaEntity; +import com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.repository.CompletedCreditRepository; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; +import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.repository.UserRepository; + +class GenerateOrModifyCompletedCreditsAdapterTest extends PersistenceTestSupport { + + @Autowired + private UserRepository userRepository; + @Autowired + private CompletedCreditRepository completedCreditRepository; + @Autowired + private GenerateOrModifyCompletedCreditsAdapter generateOrModifyCompletedCreditsAdapter; + + @DisplayName("이수 학점을 저장 혹은 업데이트한다.") + @Test + void saveOrModifyCompletedCredits() { + //given + UserJpaEntity userJpaEntity = UserJpaEntity.builder() + .id(1L) + .authId("test") + .password("test") + .studentNumber("60191111").build(); + userRepository.save(userJpaEntity); + + List completedCredits = List.of(CompletedCredit.builder() + .id(1L) + .userId(1L) + .graduationCategory(GraduationCategory.COMMON_CULTURE) + .totalCredit(10) + .takenCredit(5).build(), + CompletedCredit.builder() + .userId(1L) + .graduationCategory(GraduationCategory.COMMON_CULTURE) + .totalCredit(10) + .takenCredit(5).build()); + + //when + generateOrModifyCompletedCreditsAdapter.generateOrModifyCompletedCredits(completedCredits); + + //then + List foundCompletedCredits = completedCreditRepository.findAllByUserJpaEntity( + userJpaEntity); + assertThat(foundCompletedCredits).hasSize(completedCredits.size()) + .extracting("userJpaEntity.id") + .contains(1L); + } + +} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/mapper/CompletedCreditPersistenceMapperTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/mapper/CompletedCreditPersistenceMapperTest.java index 76085f47..c17d125e 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/mapper/CompletedCreditPersistenceMapperTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/mapper/CompletedCreditPersistenceMapperTest.java @@ -1,5 +1,6 @@ package com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.mapper; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.COMMON_CULTURE; import static org.assertj.core.api.Assertions.assertThat; import org.junit.jupiter.api.DisplayName; @@ -7,7 +8,7 @@ import com.plzgraduate.myongjigraduatebe.completedcredit.domain.model.CompletedCredit; import com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.entity.CompletedCreditJpaEntity; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; class CompletedCreditPersistenceMapperTest { @@ -19,7 +20,9 @@ void mapToDomainModel() { //given CompletedCreditJpaEntity completedCreditJpaEntity = CompletedCreditJpaEntity.builder() .id(1L) - .category(GraduationCategory.COMMON_CULTURE) + .userJpaEntity(UserJpaEntity.builder() + .id(1L).build()) + .graduationCategory(COMMON_CULTURE) .totalCredit(10) .takenCredit(5).build(); @@ -27,9 +30,32 @@ void mapToDomainModel() { CompletedCredit completedCredit = completedCreditPersistenceMapper.mapToDomainModel(completedCreditJpaEntity); //then - assertThat(completedCredit.getCategory()).isEqualTo(completedCreditJpaEntity.getCategory()); + assertThat(completedCredit.getGraduationCategory()).isEqualTo(completedCreditJpaEntity.getGraduationCategory()); assertThat(completedCredit.getTotalCredit()).isEqualTo(completedCreditJpaEntity.getTotalCredit()); assertThat(completedCredit.getTakenCredit()).isEqualTo(completedCreditJpaEntity.getTakenCredit()); } + @DisplayName("CompletedCredit 도메인 모델을 JpaEntity로 매핑한다.") + @Test + void mapToJpaEntity() { + //given + CompletedCredit completedCredit = CompletedCredit.builder() + .id(1L) + .userId(1L) + .graduationCategory(COMMON_CULTURE) + .totalCredit(10) + .takenCredit(5).build(); + + //when + CompletedCreditJpaEntity completedCreditJpaEntity = completedCreditPersistenceMapper.mapToJpaEntity( + completedCredit); + + //then + assertThat(completedCreditJpaEntity.getId()).isEqualTo(completedCredit.getId()); + assertThat(completedCreditJpaEntity.getUserJpaEntity().getId()).isEqualTo(completedCredit.getUserId()); + assertThat(completedCreditJpaEntity.getGraduationCategory()).isEqualTo(completedCredit.getGraduationCategory()); + assertThat(completedCreditJpaEntity.getTotalCredit()).isEqualTo(completedCredit.getTotalCredit()); + assertThat(completedCreditJpaEntity.getTakenCredit()).isEqualTo(completedCredit.getTakenCredit()); + } + } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/repository/CompletedCreditRepositoryTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/repository/CompletedCreditRepositoryTest.java index 1630d34b..70944497 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/repository/CompletedCreditRepositoryTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/repository/CompletedCreditRepositoryTest.java @@ -32,13 +32,13 @@ void findAllByUserJpaEntity() { CompletedCreditJpaEntity commonCultureCompletedCreditJpaEntity = CompletedCreditJpaEntity.builder() .userJpaEntity(userJpaEntity) - .category(GraduationCategory.COMMON_CULTURE) + .graduationCategory(GraduationCategory.COMMON_CULTURE) .totalCredit(10) .takenCredit(10).build(); CompletedCreditJpaEntity coreCultureCompletedCreditJpaEntity = CompletedCreditJpaEntity.builder() .userJpaEntity(userJpaEntity) - .category(GraduationCategory.CORE_CULTURE) + .graduationCategory(GraduationCategory.CORE_CULTURE) .totalCredit(10) .takenCredit(10).build(); From 3d825dbb177cb18cabdb29507315c867926394a0 Mon Sep 17 00:00:00 2001 From: 5uhwann <5uhwann27@gmail.com> Date: Wed, 3 Apr 2024 09:57:11 +0900 Subject: [PATCH 24/37] =?UTF-8?q?feat:=20GenerateOrModifyCompletedCreditUs?= =?UTF-8?q?eCase=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...enerateOrModifyCompletedCreditService.java | 33 +++-- .../domain/model/CompletedCredit.java | 12 +- .../graduation/domain/model/ChapelResult.java | 2 +- ...ateOrModifyCompletedCreditServiceTest.java | 120 ++++++++++++++++++ 4 files changed, 150 insertions(+), 17 deletions(-) create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditServiceTest.java diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java index f6bb13e0..a09910e0 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java @@ -2,6 +2,7 @@ import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.*; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Optional; @@ -44,74 +45,82 @@ public void generateOrModifyCompletedCredit(User user, GraduationResult graduati )); List completedCreditModels = resultMap.keySet().stream() - .map(completedCredit -> createCompletedCreditModel(completedCredit, resultMap.get(completedCredit))) + .map(completedCredit -> createCompletedCreditModel(user, completedCredit, resultMap.get(completedCredit))) .collect(Collectors.toList()); - CompletedCredit chapelCompletedCreditModel = createChapelCompletedCreditModel(completedCredits, - graduationResult); - CompletedCredit normalCultureCompletedCreditModel = createNormalCultureCompletedCreditModel(completedCredits, - graduationResult); - CompletedCredit freeElectiveCompletedCreditModel = createFreeElectiveCompletedCreditModel(completedCredits, + CompletedCredit chapelCompletedCreditModel = createChapelCompletedCreditModel(user, completedCredits, graduationResult); + CompletedCredit normalCultureCompletedCreditModel = createNormalCultureCompletedCreditModel(user, + completedCredits, graduationResult); + CompletedCredit freeElectiveCompletedCreditModel = createFreeElectiveCompletedCreditModel(user, + completedCredits, graduationResult); - completedCredits.addAll( + ArrayList allCompletedCreditModels = new ArrayList<>(completedCreditModels); + allCompletedCreditModels.addAll( List.of(chapelCompletedCreditModel, normalCultureCompletedCreditModel, freeElectiveCompletedCreditModel)); - generateOrModifyCompletedCreditPort.generateOrModifyCompletedCredits(completedCreditModels); + generateOrModifyCompletedCreditPort.generateOrModifyCompletedCredits(allCompletedCreditModels); } - private CompletedCredit createCompletedCreditModel(DetailGraduationResult detailGraduationResult, + private CompletedCredit createCompletedCreditModel(User user, DetailGraduationResult detailGraduationResult, Optional completedCredit) { return CompletedCredit.builder() .id(completedCredit.map(CompletedCredit::getId).orElse(null)) + .userId(completedCredit.map(CompletedCredit::getUserId).orElse(user.getId())) .totalCredit(detailGraduationResult.getTotalCredit()) .takenCredit(detailGraduationResult.getTakenCredit()) .graduationCategory(detailGraduationResult.getGraduationCategory()) .build(); } - private CompletedCredit createChapelCompletedCreditModel(List completedCredits, + private CompletedCredit createChapelCompletedCreditModel(User user, List completedCredits, GraduationResult graduationResult) { return completedCredits.stream() .filter(completedCredit -> completedCredit.getGraduationCategory() == CHAPEL) .map(completedCredit -> CompletedCredit.builder() .id(completedCredit.getId()) + .userId(completedCredit.getUserId()) .totalCredit(ChapelResult.GRADUATION_COUNT) .takenCredit(graduationResult.getChapelResult().getTakenChapelCredit()) .graduationCategory(CHAPEL).build()) .findFirst() .orElse(CompletedCredit.builder() + .userId(user.getId()) .totalCredit(ChapelResult.GRADUATION_COUNT) .takenCredit(graduationResult.getChapelResult().getTakenChapelCredit()) .graduationCategory(CHAPEL).build()); } - private CompletedCredit createNormalCultureCompletedCreditModel(List completedCredits, + private CompletedCredit createNormalCultureCompletedCreditModel(User user, List completedCredits, GraduationResult graduationResult) { return completedCredits.stream() .filter(completedCredit -> completedCredit.getGraduationCategory() == NORMAL_CULTURE) .map(completedCredit -> CompletedCredit.builder() .id(completedCredit.getId()) + .userId(completedCredit.getUserId()) .totalCredit(graduationResult.getNormalCultureGraduationResult().getTotalCredit()) .takenCredit(graduationResult.getNormalCultureGraduationResult().getTakenCredit()) .graduationCategory(NORMAL_CULTURE).build()) .findFirst() .orElse(CompletedCredit.builder() + .userId(user.getId()) .totalCredit(graduationResult.getNormalCultureGraduationResult().getTotalCredit()) .takenCredit(graduationResult.getNormalCultureGraduationResult().getTakenCredit()) .graduationCategory(NORMAL_CULTURE).build()); } - private CompletedCredit createFreeElectiveCompletedCreditModel(List completedCredits, + private CompletedCredit createFreeElectiveCompletedCreditModel(User user, List completedCredits, GraduationResult graduationResult) { return completedCredits.stream() .filter(completedCredit -> completedCredit.getGraduationCategory() == FREE_ELECTIVE) .map(completedCredit -> CompletedCredit.builder() .id(completedCredit.getId()) + .userId(completedCredit.getUserId()) .totalCredit(graduationResult.getFreeElectiveGraduationResult().getTotalCredit()) .takenCredit(graduationResult.getFreeElectiveGraduationResult().getTakenCredit()) .graduationCategory(FREE_ELECTIVE).build()) .findFirst() .orElse(CompletedCredit.builder() + .userId(user.getId()) .totalCredit(graduationResult.getFreeElectiveGraduationResult().getTotalCredit()) .takenCredit(graduationResult.getFreeElectiveGraduationResult().getTakenCredit()) .graduationCategory(FREE_ELECTIVE).build()); diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/domain/model/CompletedCredit.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/domain/model/CompletedCredit.java index e4052c10..144e0000 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/domain/model/CompletedCredit.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/domain/model/CompletedCredit.java @@ -8,13 +8,17 @@ @Getter public class CompletedCredit { - private final GraduationCategory category; + private final Long id; + private final Long userId; + private final GraduationCategory graduationCategory; private final int totalCredit; - private final int takenCredit; + private final double takenCredit; @Builder - private CompletedCredit(GraduationCategory category, int totalCredit, int takenCredit) { - this.category = category; + private CompletedCredit(Long id, Long userId, GraduationCategory graduationCategory, int totalCredit, double takenCredit) { + this.id = id; + this.userId = userId; + this.graduationCategory = graduationCategory; this.totalCredit = totalCredit; this.takenCredit = takenCredit; } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/ChapelResult.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/ChapelResult.java index ca91f7bb..cc9d9b6d 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/ChapelResult.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/ChapelResult.java @@ -9,7 +9,7 @@ public class ChapelResult { private static final String CHAPEL_LECTURE_CODE = "KMA02101"; - private static final int GRADUATION_COUNT = 4; + public static final int GRADUATION_COUNT = 4; private final int takenCount; private boolean isCompleted; diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditServiceTest.java new file mode 100644 index 00000000..1ba17549 --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditServiceTest.java @@ -0,0 +1,120 @@ +package com.plzgraduate.myongjigraduatebe.completedcredit.application.service; + +import static org.assertj.core.groups.Tuple.tuple; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.then; + +import java.util.List; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import com.plzgraduate.myongjigraduatebe.completedcredit.application.port.FindCompletedCreditPort; +import com.plzgraduate.myongjigraduatebe.completedcredit.application.port.GenerateOrModifyCompletedCreditPort; +import com.plzgraduate.myongjigraduatebe.completedcredit.domain.model.CompletedCredit; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.ChapelResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.FreeElectiveGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.NormalCultureGraduationResult; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +@ExtendWith(MockitoExtension.class) +class GenerateOrModifyCompletedCreditServiceTest { + + @Mock + private FindCompletedCreditPort findCompletedCreditPort; + @Mock + private GenerateOrModifyCompletedCreditPort generateOrModifyCompletedCreditPort; + + @InjectMocks + private GenerateOrModifyCompletedCreditService generateOrModifyCompletedCreditService; + + @DisplayName("새로운 기이수 학점을 저장한다.") + @Test + void generateOrModifyCompletedCreditPort() { + //given + User user = User.builder() + .id(1L).build(); + given(findCompletedCreditPort.findCompletedCredit(user)).willReturn(List.of()); + + int eachDetailGraduationResultTotalCredit = 10; + int eachDetailGraduationResultTakenCredit = 5; + + List detailGraduationResults = createDetailGraduationResults( + eachDetailGraduationResultTotalCredit, eachDetailGraduationResultTakenCredit); + + GraduationResult graduationResult = GraduationResult.builder() + .detailGraduationResults(detailGraduationResults) + .chapelResult( + ChapelResult.builder() + .takenCount(3) + .build()) + .normalCultureGraduationResult( + NormalCultureGraduationResult.builder() + .totalCredit(eachDetailGraduationResultTotalCredit) + .takenCredit(eachDetailGraduationResultTakenCredit) + .build()) + .freeElectiveGraduationResult( + FreeElectiveGraduationResult.builder() + .totalCredit(eachDetailGraduationResultTotalCredit) + .takenCredit(eachDetailGraduationResultTakenCredit) + .build()) + .build(); + ArgumentCaptor> completedCreditArgumentCaptor = ArgumentCaptor.forClass(List.class); + + //when + generateOrModifyCompletedCreditService.generateOrModifyCompletedCredit(user, graduationResult); + + //then + then(generateOrModifyCompletedCreditPort).should() + .generateOrModifyCompletedCredits(completedCreditArgumentCaptor.capture()); + List savedCompletedCredits = completedCreditArgumentCaptor.getValue(); + Assertions.assertThat(savedCompletedCredits).hasSize(detailGraduationResults.size() + 3) + .extracting("userId", "graduationCategory", "totalCredit", "takenCredit") + .containsOnly( + tuple(1L, GraduationCategory.COMMON_CULTURE, eachDetailGraduationResultTotalCredit, + (double)eachDetailGraduationResultTakenCredit), + tuple(1L, GraduationCategory.CORE_CULTURE, eachDetailGraduationResultTotalCredit, + (double)eachDetailGraduationResultTakenCredit), + tuple(1L, GraduationCategory.PRIMARY_MAJOR, eachDetailGraduationResultTotalCredit, + (double)eachDetailGraduationResultTakenCredit), + tuple(1L, GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE, eachDetailGraduationResultTotalCredit, + (double)eachDetailGraduationResultTakenCredit), + tuple(1L, GraduationCategory.CHAPEL, 4, 1.5), + tuple(1L, GraduationCategory.NORMAL_CULTURE, eachDetailGraduationResultTotalCredit, + (double)eachDetailGraduationResultTakenCredit), + tuple(1L, GraduationCategory.FREE_ELECTIVE, eachDetailGraduationResultTotalCredit, + (double)eachDetailGraduationResultTakenCredit)); + + } + + private List createDetailGraduationResults(int totalCredit, int takenCredit) { + return List.of(DetailGraduationResult.builder() + .graduationCategory(GraduationCategory.COMMON_CULTURE) + .totalCredit(totalCredit) + .takenCredit(takenCredit).build(), + DetailGraduationResult.builder() + .graduationCategory(GraduationCategory.CORE_CULTURE) + .totalCredit(totalCredit) + .takenCredit(takenCredit) + .build(), + DetailGraduationResult.builder() + .graduationCategory(GraduationCategory.PRIMARY_MAJOR) + .totalCredit(totalCredit) + .takenCredit(takenCredit) + .build(), + DetailGraduationResult.builder() + .graduationCategory(GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE) + .totalCredit(totalCredit) + .takenCredit(takenCredit) + .build()); + } +} From cf49e7911bb11f9e80fcc371ca9689fdb0114329 Mon Sep 17 00:00:00 2001 From: 5uhwann <5uhwann27@gmail.com> Date: Wed, 3 Apr 2024 22:01:24 +0900 Subject: [PATCH 25/37] =?UTF-8?q?refactor:=20=EC=84=B1=EC=A0=81=ED=91=9C?= =?UTF-8?q?=20=EC=97=85=EB=A1=9C=EB=93=9C=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20?= =?UTF-8?q?=EC=9D=B4=EC=88=98=20=ED=95=99=EC=A0=90=20=EC=97=85=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/FindCompletedCreditService.java | 2 +- .../GenerateOrModifyCompletedCreditService.java | 2 +- .../service/CalculateGraduationService.java | 13 ++++--------- .../usecase/CalculateGraduationUseCase.java | 6 +++++- .../SaveTakenLectureFromParsingTextService.java | 10 ++++++++++ .../SaveTakenLectureFromParsingTextServiceTest.java | 11 +++++++++++ 6 files changed, 32 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/FindCompletedCreditService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/FindCompletedCreditService.java index 853c3736..5ab64627 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/FindCompletedCreditService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/FindCompletedCreditService.java @@ -16,7 +16,7 @@ @UseCase @RequiredArgsConstructor @Transactional(readOnly = true) -public class FindCompletedCreditService implements FindCompletedCreditUseCase { +class FindCompletedCreditService implements FindCompletedCreditUseCase { private final FindUserUseCase findUserUseCase; private final FindCompletedCreditPort findCompletedCreditPort; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java index a09910e0..9eb717a5 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java @@ -26,7 +26,7 @@ @UseCase @Transactional @RequiredArgsConstructor -public class GenerateOrModifyCompletedCreditService implements GenerateOrModifyCompletedCreditUseCase { +class GenerateOrModifyCompletedCreditService implements GenerateOrModifyCompletedCreditUseCase { private final FindCompletedCreditPort findCompletedCreditPort; private final GenerateOrModifyCompletedCreditPort generateOrModifyCompletedCreditPort; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java index cd1fa509..145ce8b4 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java @@ -29,9 +29,8 @@ import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCulture; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CoreCulture; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.FindTakenLecturePort; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; -import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; import com.plzgraduate.myongjigraduatebe.user.domain.model.College; import com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @@ -41,22 +40,18 @@ @UseCase @Transactional(readOnly = true) @RequiredArgsConstructor +//TODO: 로직 분리 후 테스트 코드 작성 class CalculateGraduationService implements CalculateGraduationUseCase { - private final FindUserUseCase findUserUseCase; - - private final FindTakenLecturePort findTakenLecturePort; private final FindCommonCulturePort findCommonCulturePort; private final FindCoreCulturePort findCoreCulturePort; private final FindBasicAcademicalCulturePort findBasicAcademicalCulturePort; private final FindMajorPort findMajorPort; @Override - public GraduationResult calculateGraduation(Long userId) { - User user = findUserUseCase.findUserById(userId); + public GraduationResult calculateGraduation(User user, Set takenLectures) { GraduationRequirement graduationRequirement = determineGraduationRequirement(user); - TakenLectureInventory takenLectureInventory = TakenLectureInventory.from( - findTakenLecturePort.findTakenLectureSetByUser(user)); + TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); ChapelResult chapelResult = generateChapelResult(takenLectureInventory); List detailGraduationResults = generateDetailGraduationResults(user, diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateGraduationUseCase.java index b69a85d2..795348f1 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateGraduationUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateGraduationUseCase.java @@ -1,8 +1,12 @@ package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; +import java.util.Set; + import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationResult; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; public interface CalculateGraduationUseCase { - GraduationResult calculateGraduation(Long userId); + GraduationResult calculateGraduation(User user, Set takenLectures); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/save/SaveTakenLectureFromParsingTextService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/save/SaveTakenLectureFromParsingTextService.java index 6ac719aa..a80630a4 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/save/SaveTakenLectureFromParsingTextService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/save/SaveTakenLectureFromParsingTextService.java @@ -1,5 +1,6 @@ package com.plzgraduate.myongjigraduatebe.takenlecture.application.service.save; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Optional; @@ -8,7 +9,10 @@ import org.springframework.transaction.annotation.Transactional; +import com.plzgraduate.myongjigraduatebe.completedcredit.application.usecase.GenerateOrModifyCompletedCreditUseCase; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationResult; import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.FindLecturesUseCase; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.SaveTakenLecturePort; @@ -26,12 +30,18 @@ class SaveTakenLectureFromParsingTextService implements SaveTakenLectureFromPars private final SaveTakenLecturePort saveTakenLecturePort; private final FindLecturesUseCase findLecturesUseCase; + private final CalculateGraduationUseCase calculateGraduationUseCase; + private final GenerateOrModifyCompletedCreditUseCase generateOrModifyCompletedCreditUseCase; @Override public void saveTakenLectures(User user, List takenLectureInformationList) { Map lectureMap = makeLectureMapByLectureCodes(takenLectureInformationList); List takenLectures = makeTakenLectures(user, takenLectureInformationList, lectureMap); saveTakenLecturePort.saveTakenLectures(takenLectures); + + GraduationResult graduationResult = calculateGraduationUseCase.calculateGraduation(user, + new HashSet<>(takenLectures)); + generateOrModifyCompletedCreditUseCase.generateOrModifyCompletedCredit(user, graduationResult); } private List makeTakenLectures(User user, List takenLectureInformationList, diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/save/SaveTakenLectureFromParsingTextServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/save/SaveTakenLectureFromParsingTextServiceTest.java index 9c2b8327..46b12313 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/save/SaveTakenLectureFromParsingTextServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/save/SaveTakenLectureFromParsingTextServiceTest.java @@ -7,6 +7,7 @@ import static org.mockito.BDDMockito.then; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import org.junit.jupiter.api.DisplayName; @@ -17,6 +18,9 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import com.plzgraduate.myongjigraduatebe.completedcredit.application.usecase.GenerateOrModifyCompletedCreditUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationResult; import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.FindLecturesUseCase; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.SaveTakenLecturePort; @@ -31,7 +35,11 @@ class SaveTakenLectureFromParsingTextServiceTest { @Mock private SaveTakenLecturePort saveTakenLecturePort; @Mock + private CalculateGraduationUseCase calculateGraduationUseCase; + @Mock private FindLecturesUseCase findLecturesUseCase; + @Mock + private GenerateOrModifyCompletedCreditUseCase generateOrModifyCompletedCreditUseCase; @InjectMocks private SaveTakenLectureFromParsingTextService saveTakenLectureFromParsingTextService; @@ -55,6 +63,9 @@ void saveTakenLectures() { //then then(saveTakenLecturePort).should().saveTakenLectures(takenLectureListCaptor.capture()); + GraduationResult graduationResult = then(calculateGraduationUseCase).should() + .calculateGraduation(user, new HashSet<>(takenLectureListCaptor.getValue())); + then(generateOrModifyCompletedCreditUseCase).should().generateOrModifyCompletedCredit(user, graduationResult); List capturesTakenLectures = takenLectureListCaptor.getValue(); assertThat(capturesTakenLectures) .hasSize(2) From a55741d50b2e12d12dc2b47aaf885186afdd6188 Mon Sep 17 00:00:00 2001 From: 5uhwann <5uhwann27@gmail.com> Date: Wed, 3 Apr 2024 23:05:10 +0900 Subject: [PATCH 26/37] =?UTF-8?q?feat:=20CompletedCreditController=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/FindCompletedCreditController.java | 29 +++++ .../api/dto/CompletedCreditResponse.java | 34 +++++ .../GenerateOrModifyCompletedCreditPort.java | 3 +- ...enerateOrModifyCompletedCreditService.java | 9 +- .../domain/model/CompletedCredit.java | 5 +- ...nerateOrModifyCompletedCreditsAdapter.java | 5 +- .../CompletedCreditPersistenceMapper.java | 9 +- .../api/CompletedCreditControllerTest.java | 54 ++++++++ ...ateOrModifyCompletedCreditServiceTest.java | 20 +-- ...teOrModifyCompletedCreditsAdapterTest.java | 9 +- .../CompletedCreditPersistenceMapperTest.java | 12 +- .../CompletedCreditRepositoryTest.java | 118 +++++++++--------- .../ParsingTextHistoryAdapterTest.java | 1 - .../support/WebAdaptorTestSupport.java | 9 +- 14 files changed, 219 insertions(+), 98 deletions(-) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditController.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/dto/CompletedCreditResponse.java create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/CompletedCreditControllerTest.java diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditController.java new file mode 100644 index 00000000..23eb26bb --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditController.java @@ -0,0 +1,29 @@ +package com.plzgraduate.myongjigraduatebe.completedcredit.api; + +import java.util.List; +import java.util.stream.Collectors; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.plzgraduate.myongjigraduatebe.completedcredit.api.dto.CompletedCreditResponse; +import com.plzgraduate.myongjigraduatebe.completedcredit.application.usecase.FindCompletedCreditUseCase; +import com.plzgraduate.myongjigraduatebe.core.meta.LoginUser; + +import lombok.RequiredArgsConstructor; + +@RestController +@RequestMapping(value = "/api/v1/graduations/credit") +@RequiredArgsConstructor +public class FindCompletedCreditController { + + private final FindCompletedCreditUseCase findCompletedCreditUseCase; + + @GetMapping() + public List getCompletedCredits(@LoginUser Long userId) { + return findCompletedCreditUseCase.findCompletedCredits(userId).stream() + .map(CompletedCreditResponse::from) + .collect(Collectors.toList()); + } +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/dto/CompletedCreditResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/dto/CompletedCreditResponse.java new file mode 100644 index 00000000..0d898703 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/dto/CompletedCreditResponse.java @@ -0,0 +1,34 @@ +package com.plzgraduate.myongjigraduatebe.completedcredit.api.dto; + +import com.plzgraduate.myongjigraduatebe.completedcredit.domain.model.CompletedCredit; + +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +public class CompletedCreditResponse { + + private String category; + private int totalCredit; + private double takenCredit; + private boolean completed; + + @Builder + private CompletedCreditResponse(String category, int totalCredit, double takenCredit, boolean completed) { + this.category = category; + this.totalCredit = totalCredit; + this.takenCredit = takenCredit; + this.completed = completed; + } + + public static CompletedCreditResponse from(CompletedCredit completedCredit) { + return CompletedCreditResponse.builder() + .category(completedCredit.getGraduationCategory().name()) + .totalCredit(completedCredit.getTotalCredit()) + .takenCredit(completedCredit.getTakenCredit()) + .completed(completedCredit.getTakenCredit() >= completedCredit.getTotalCredit()) + .build(); + } +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/port/GenerateOrModifyCompletedCreditPort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/port/GenerateOrModifyCompletedCreditPort.java index bdb04067..f06c785b 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/port/GenerateOrModifyCompletedCreditPort.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/port/GenerateOrModifyCompletedCreditPort.java @@ -3,8 +3,9 @@ import java.util.List; import com.plzgraduate.myongjigraduatebe.completedcredit.domain.model.CompletedCredit; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; public interface GenerateOrModifyCompletedCreditPort { - void generateOrModifyCompletedCredits(List completedCredits); + void generateOrModifyCompletedCredits(User user, List completedCredits); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java index 9eb717a5..a93341a2 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java @@ -58,14 +58,13 @@ public void generateOrModifyCompletedCredit(User user, GraduationResult graduati ArrayList allCompletedCreditModels = new ArrayList<>(completedCreditModels); allCompletedCreditModels.addAll( List.of(chapelCompletedCreditModel, normalCultureCompletedCreditModel, freeElectiveCompletedCreditModel)); - generateOrModifyCompletedCreditPort.generateOrModifyCompletedCredits(allCompletedCreditModels); + generateOrModifyCompletedCreditPort.generateOrModifyCompletedCredits(user, allCompletedCreditModels); } private CompletedCredit createCompletedCreditModel(User user, DetailGraduationResult detailGraduationResult, Optional completedCredit) { return CompletedCredit.builder() .id(completedCredit.map(CompletedCredit::getId).orElse(null)) - .userId(completedCredit.map(CompletedCredit::getUserId).orElse(user.getId())) .totalCredit(detailGraduationResult.getTotalCredit()) .takenCredit(detailGraduationResult.getTakenCredit()) .graduationCategory(detailGraduationResult.getGraduationCategory()) @@ -78,13 +77,11 @@ private CompletedCredit createChapelCompletedCreditModel(User user, List completedCredit.getGraduationCategory() == CHAPEL) .map(completedCredit -> CompletedCredit.builder() .id(completedCredit.getId()) - .userId(completedCredit.getUserId()) .totalCredit(ChapelResult.GRADUATION_COUNT) .takenCredit(graduationResult.getChapelResult().getTakenChapelCredit()) .graduationCategory(CHAPEL).build()) .findFirst() .orElse(CompletedCredit.builder() - .userId(user.getId()) .totalCredit(ChapelResult.GRADUATION_COUNT) .takenCredit(graduationResult.getChapelResult().getTakenChapelCredit()) .graduationCategory(CHAPEL).build()); @@ -96,13 +93,11 @@ private CompletedCredit createNormalCultureCompletedCreditModel(User user, List< .filter(completedCredit -> completedCredit.getGraduationCategory() == NORMAL_CULTURE) .map(completedCredit -> CompletedCredit.builder() .id(completedCredit.getId()) - .userId(completedCredit.getUserId()) .totalCredit(graduationResult.getNormalCultureGraduationResult().getTotalCredit()) .takenCredit(graduationResult.getNormalCultureGraduationResult().getTakenCredit()) .graduationCategory(NORMAL_CULTURE).build()) .findFirst() .orElse(CompletedCredit.builder() - .userId(user.getId()) .totalCredit(graduationResult.getNormalCultureGraduationResult().getTotalCredit()) .takenCredit(graduationResult.getNormalCultureGraduationResult().getTakenCredit()) .graduationCategory(NORMAL_CULTURE).build()); @@ -114,13 +109,11 @@ private CompletedCredit createFreeElectiveCompletedCreditModel(User user, List completedCredit.getGraduationCategory() == FREE_ELECTIVE) .map(completedCredit -> CompletedCredit.builder() .id(completedCredit.getId()) - .userId(completedCredit.getUserId()) .totalCredit(graduationResult.getFreeElectiveGraduationResult().getTotalCredit()) .takenCredit(graduationResult.getFreeElectiveGraduationResult().getTakenCredit()) .graduationCategory(FREE_ELECTIVE).build()) .findFirst() .orElse(CompletedCredit.builder() - .userId(user.getId()) .totalCredit(graduationResult.getFreeElectiveGraduationResult().getTotalCredit()) .takenCredit(graduationResult.getFreeElectiveGraduationResult().getTakenCredit()) .graduationCategory(FREE_ELECTIVE).build()); diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/domain/model/CompletedCredit.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/domain/model/CompletedCredit.java index 144e0000..1c0ff5e6 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/domain/model/CompletedCredit.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/domain/model/CompletedCredit.java @@ -9,15 +9,14 @@ public class CompletedCredit { private final Long id; - private final Long userId; private final GraduationCategory graduationCategory; private final int totalCredit; private final double takenCredit; @Builder - private CompletedCredit(Long id, Long userId, GraduationCategory graduationCategory, int totalCredit, double takenCredit) { + private CompletedCredit(Long id, GraduationCategory graduationCategory, int totalCredit, + double takenCredit) { this.id = id; - this.userId = userId; this.graduationCategory = graduationCategory; this.totalCredit = totalCredit; this.takenCredit = takenCredit; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/GenerateOrModifyCompletedCreditsAdapter.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/GenerateOrModifyCompletedCreditsAdapter.java index 1dc225d3..5f15d0da 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/GenerateOrModifyCompletedCreditsAdapter.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/GenerateOrModifyCompletedCreditsAdapter.java @@ -9,6 +9,7 @@ import com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.mapper.CompletedCreditPersistenceMapper; import com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.repository.CompletedCreditRepository; import com.plzgraduate.myongjigraduatebe.core.meta.PersistenceAdapter; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; @@ -20,9 +21,9 @@ public class GenerateOrModifyCompletedCreditsAdapter implements GenerateOrModify private final CompletedCreditRepository completedCreditRepository; @Override - public void generateOrModifyCompletedCredits(List completedCredits) { + public void generateOrModifyCompletedCredits(User user, List completedCredits) { List completedCreditJpaEntities = completedCredits.stream() - .map(completedCreditPersistenceMapper::mapToJpaEntity) + .map(completedCredit -> completedCreditPersistenceMapper.mapToJpaEntity(user, completedCredit)) .collect(Collectors.toList()); completedCreditRepository.saveAll(completedCreditJpaEntities); diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/mapper/CompletedCreditPersistenceMapper.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/mapper/CompletedCreditPersistenceMapper.java index b3665bf2..97e801d3 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/mapper/CompletedCreditPersistenceMapper.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/mapper/CompletedCreditPersistenceMapper.java @@ -4,6 +4,7 @@ import com.plzgraduate.myongjigraduatebe.completedcredit.domain.model.CompletedCredit; import com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.entity.CompletedCreditJpaEntity; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; @Component @@ -12,23 +13,19 @@ public class CompletedCreditPersistenceMapper { public CompletedCredit mapToDomainModel(CompletedCreditJpaEntity completedCreditJpaEntity) { return CompletedCredit.builder() .id(completedCreditJpaEntity.getId()) - .userId(completedCreditJpaEntity.getUserJpaEntity().getId()) .graduationCategory(completedCreditJpaEntity.getGraduationCategory()) .totalCredit(completedCreditJpaEntity.getTotalCredit()) .takenCredit(completedCreditJpaEntity.getTakenCredit()).build(); } - public CompletedCreditJpaEntity mapToJpaEntity(CompletedCredit completedCredit) { + public CompletedCreditJpaEntity mapToJpaEntity(User user, CompletedCredit completedCredit) { return CompletedCreditJpaEntity.builder() .id(completedCredit.getId()) .graduationCategory(completedCredit.getGraduationCategory()) .userJpaEntity(UserJpaEntity.builder() - .id(completedCredit.getUserId()) + .id(user.getId()) .build()) .totalCredit(completedCredit.getTotalCredit()) .takenCredit(completedCredit.getTakenCredit()).build(); } - - - } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/CompletedCreditControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/CompletedCreditControllerTest.java new file mode 100644 index 00000000..a0e5f446 --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/CompletedCreditControllerTest.java @@ -0,0 +1,54 @@ +package com.plzgraduate.myongjigraduatebe.completedcredit.api; + +import static org.mockito.BDDMockito.given; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import java.util.List; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import com.plzgraduate.myongjigraduatebe.completedcredit.domain.model.CompletedCredit; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; +import com.plzgraduate.myongjigraduatebe.support.WebAdaptorTestSupport; +import com.plzgraduate.myongjigraduatebe.support.WithMockAuthenticationUser; + +class CompletedCreditControllerTest extends WebAdaptorTestSupport { + + @WithMockAuthenticationUser + @DisplayName("유저의 이수 학점을 조회한다.") + @Test + void findCompletedCredits() throws Exception { + //given + List completedCredits = List.of( + CompletedCredit.builder() + .graduationCategory(GraduationCategory.COMMON_CULTURE) + .totalCredit(10) + .takenCredit(10) + .build(), + CompletedCredit.builder() + .graduationCategory(GraduationCategory.CORE_CULTURE) + .totalCredit(10) + .takenCredit(5) + .build()); + given(findCompletedCreditUseCase.findCompletedCredits(1L)).willReturn(completedCredits); + + //when //then + mockMvc.perform(get("/api/v1/graduations/credit")) + .andDo(print()) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.length()").value(completedCredits.size())) + .andExpect(jsonPath("$[0].category").value(GraduationCategory.COMMON_CULTURE.name())) + .andExpect(jsonPath("$[0].totalCredit").value(10)) + .andExpect(jsonPath("$[0].takenCredit").value(10)) + .andExpect(jsonPath("$[0].completed").value(true)) + .andExpect(jsonPath("$[1].category").value(GraduationCategory.CORE_CULTURE.name())) + .andExpect(jsonPath("$[1].totalCredit").value(10)) + .andExpect(jsonPath("$[1].takenCredit").value(5)) + .andExpect(jsonPath("$[1].completed").value(false)); + + } +} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditServiceTest.java index 1ba17549..0c7bbc50 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditServiceTest.java @@ -69,32 +69,34 @@ void generateOrModifyCompletedCreditPort() { .build()) .build(); ArgumentCaptor> completedCreditArgumentCaptor = ArgumentCaptor.forClass(List.class); + ArgumentCaptor userArgumentCaptor = ArgumentCaptor.forClass(User.class); //when generateOrModifyCompletedCreditService.generateOrModifyCompletedCredit(user, graduationResult); //then then(generateOrModifyCompletedCreditPort).should() - .generateOrModifyCompletedCredits(completedCreditArgumentCaptor.capture()); + .generateOrModifyCompletedCredits(userArgumentCaptor.capture(), completedCreditArgumentCaptor.capture()); List savedCompletedCredits = completedCreditArgumentCaptor.getValue(); Assertions.assertThat(savedCompletedCredits).hasSize(detailGraduationResults.size() + 3) - .extracting("userId", "graduationCategory", "totalCredit", "takenCredit") + .extracting("graduationCategory", "totalCredit", "takenCredit") .containsOnly( - tuple(1L, GraduationCategory.COMMON_CULTURE, eachDetailGraduationResultTotalCredit, + tuple(GraduationCategory.COMMON_CULTURE, eachDetailGraduationResultTotalCredit, (double)eachDetailGraduationResultTakenCredit), - tuple(1L, GraduationCategory.CORE_CULTURE, eachDetailGraduationResultTotalCredit, + tuple(GraduationCategory.CORE_CULTURE, eachDetailGraduationResultTotalCredit, (double)eachDetailGraduationResultTakenCredit), - tuple(1L, GraduationCategory.PRIMARY_MAJOR, eachDetailGraduationResultTotalCredit, + tuple(GraduationCategory.PRIMARY_MAJOR, eachDetailGraduationResultTotalCredit, (double)eachDetailGraduationResultTakenCredit), - tuple(1L, GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE, eachDetailGraduationResultTotalCredit, + tuple(GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE, eachDetailGraduationResultTotalCredit, (double)eachDetailGraduationResultTakenCredit), - tuple(1L, GraduationCategory.CHAPEL, 4, 1.5), - tuple(1L, GraduationCategory.NORMAL_CULTURE, eachDetailGraduationResultTotalCredit, + tuple(GraduationCategory.CHAPEL, 4, 1.5), + tuple(GraduationCategory.NORMAL_CULTURE, eachDetailGraduationResultTotalCredit, (double)eachDetailGraduationResultTakenCredit), - tuple(1L, GraduationCategory.FREE_ELECTIVE, eachDetailGraduationResultTotalCredit, + tuple(GraduationCategory.FREE_ELECTIVE, eachDetailGraduationResultTotalCredit, (double)eachDetailGraduationResultTakenCredit)); } + //TODO: update 테스트 케이스 추가 private List createDetailGraduationResults(int totalCredit, int takenCredit) { return List.of(DetailGraduationResult.builder() diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/GenerateOrModifyCompletedCreditsAdapterTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/GenerateOrModifyCompletedCreditsAdapterTest.java index 647ebe34..b245daf5 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/GenerateOrModifyCompletedCreditsAdapterTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/GenerateOrModifyCompletedCreditsAdapterTest.java @@ -1,6 +1,5 @@ package com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence; - import static org.assertj.core.api.Assertions.assertThat; import java.util.List; @@ -14,6 +13,7 @@ import com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.repository.CompletedCreditRepository; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.repository.UserRepository; @@ -30,6 +30,9 @@ class GenerateOrModifyCompletedCreditsAdapterTest extends PersistenceTestSupport @Test void saveOrModifyCompletedCredits() { //given + User user = User.builder() + .id(1L) + .build(); UserJpaEntity userJpaEntity = UserJpaEntity.builder() .id(1L) .authId("test") @@ -39,18 +42,16 @@ void saveOrModifyCompletedCredits() { List completedCredits = List.of(CompletedCredit.builder() .id(1L) - .userId(1L) .graduationCategory(GraduationCategory.COMMON_CULTURE) .totalCredit(10) .takenCredit(5).build(), CompletedCredit.builder() - .userId(1L) .graduationCategory(GraduationCategory.COMMON_CULTURE) .totalCredit(10) .takenCredit(5).build()); //when - generateOrModifyCompletedCreditsAdapter.generateOrModifyCompletedCredits(completedCredits); + generateOrModifyCompletedCreditsAdapter.generateOrModifyCompletedCredits(user, completedCredits); //then List foundCompletedCredits = completedCreditRepository.findAllByUserJpaEntity( diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/mapper/CompletedCreditPersistenceMapperTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/mapper/CompletedCreditPersistenceMapperTest.java index c17d125e..1b47daee 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/mapper/CompletedCreditPersistenceMapperTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/mapper/CompletedCreditPersistenceMapperTest.java @@ -8,6 +8,7 @@ import com.plzgraduate.myongjigraduatebe.completedcredit.domain.model.CompletedCredit; import com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.entity.CompletedCreditJpaEntity; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; class CompletedCreditPersistenceMapperTest { @@ -21,7 +22,8 @@ void mapToDomainModel() { CompletedCreditJpaEntity completedCreditJpaEntity = CompletedCreditJpaEntity.builder() .id(1L) .userJpaEntity(UserJpaEntity.builder() - .id(1L).build()) + .id(1L) + .build()) .graduationCategory(COMMON_CULTURE) .totalCredit(10) .takenCredit(5).build(); @@ -39,20 +41,22 @@ void mapToDomainModel() { @Test void mapToJpaEntity() { //given + User user = User.builder() + .id(1L) + .build(); CompletedCredit completedCredit = CompletedCredit.builder() .id(1L) - .userId(1L) .graduationCategory(COMMON_CULTURE) .totalCredit(10) .takenCredit(5).build(); //when - CompletedCreditJpaEntity completedCreditJpaEntity = completedCreditPersistenceMapper.mapToJpaEntity( + CompletedCreditJpaEntity completedCreditJpaEntity = completedCreditPersistenceMapper.mapToJpaEntity(user, completedCredit); //then assertThat(completedCreditJpaEntity.getId()).isEqualTo(completedCredit.getId()); - assertThat(completedCreditJpaEntity.getUserJpaEntity().getId()).isEqualTo(completedCredit.getUserId()); + assertThat(completedCreditJpaEntity.getUserJpaEntity().getId()).isEqualTo(user.getId()); assertThat(completedCreditJpaEntity.getGraduationCategory()).isEqualTo(completedCredit.getGraduationCategory()); assertThat(completedCreditJpaEntity.getTotalCredit()).isEqualTo(completedCredit.getTotalCredit()); assertThat(completedCreditJpaEntity.getTakenCredit()).isEqualTo(completedCredit.getTakenCredit()); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/repository/CompletedCreditRepositoryTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/repository/CompletedCreditRepositoryTest.java index 70944497..96ea6a64 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/repository/CompletedCreditRepositoryTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/repository/CompletedCreditRepositoryTest.java @@ -1,59 +1,59 @@ -package com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.repository; - -import java.util.List; - -import org.assertj.core.api.Assertions; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; - -import com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.entity.CompletedCreditJpaEntity; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; -import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; -import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; -import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.repository.UserRepository; - -class CompletedCreditRepositoryTest extends PersistenceTestSupport { - - @Autowired - private UserRepository userRepository; - @Autowired - private CompletedCreditRepository completedCreditRepository; - - @DisplayName("유저의 이수 학점을 조회 한다.") - @Test - void findAllByUserJpaEntity() { - //given - UserJpaEntity userJpaEntity = UserJpaEntity.builder() - .id(1L) - .authId("test") - .password("test") - .studentNumber("60191111").build(); - - CompletedCreditJpaEntity commonCultureCompletedCreditJpaEntity = CompletedCreditJpaEntity.builder() - .userJpaEntity(userJpaEntity) - .graduationCategory(GraduationCategory.COMMON_CULTURE) - .totalCredit(10) - .takenCredit(10).build(); - - CompletedCreditJpaEntity coreCultureCompletedCreditJpaEntity = CompletedCreditJpaEntity.builder() - .userJpaEntity(userJpaEntity) - .graduationCategory(GraduationCategory.CORE_CULTURE) - .totalCredit(10) - .takenCredit(10).build(); - - userRepository.save(userJpaEntity); - completedCreditRepository.saveAll( - List.of(commonCultureCompletedCreditJpaEntity, coreCultureCompletedCreditJpaEntity)); - - //when - List foundCompletedCredits = completedCreditRepository.findAllByUserJpaEntity( - userJpaEntity); - - //then - Assertions.assertThat(foundCompletedCredits).hasSize(2) - .extracting("userJpaEntity.id") - .contains(1L); - } - -} +// package com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.repository; +// +// import java.util.List; +// +// import org.assertj.core.api.Assertions; +// import org.junit.jupiter.api.DisplayName; +// import org.junit.jupiter.api.Test; +// import org.springframework.beans.factory.annotation.Autowired; +// +// import com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.entity.CompletedCreditJpaEntity; +// import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; +// import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; +// import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; +// import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.repository.UserRepository; +// +// class CompletedCreditRepositoryTest extends PersistenceTestSupport { +// +// @Autowired +// private UserRepository userRepository; +// @Autowired +// private CompletedCreditRepository completedCreditRepository; +// +// @DisplayName("유저의 이수 학점을 조회 한다.") +// @Test +// void findAllByUserJpaEntity() { +// //given +// UserJpaEntity userJpaEntity = UserJpaEntity.builder() +// .id(1L) +// .authId("test1234") +// .password("test") +// .studentNumber("60191112").build(); +// userRepository.save(userJpaEntity); +// +// CompletedCreditJpaEntity commonCultureCompletedCreditJpaEntity = CompletedCreditJpaEntity.builder() +// .userJpaEntity(userJpaEntity) +// .graduationCategory(GraduationCategory.COMMON_CULTURE) +// .totalCredit(10) +// .takenCredit(10).build(); +// +// CompletedCreditJpaEntity coreCultureCompletedCreditJpaEntity = CompletedCreditJpaEntity.builder() +// .userJpaEntity(userJpaEntity) +// .graduationCategory(GraduationCategory.CORE_CULTURE) +// .totalCredit(10) +// .takenCredit(10).build(); +// +// completedCreditRepository.saveAll( +// List.of(commonCultureCompletedCreditJpaEntity, coreCultureCompletedCreditJpaEntity)); +// +// //when +// List foundCompletedCredits = completedCreditRepository.findAllByUserJpaEntity( +// userJpaEntity); +// +// //then +// Assertions.assertThat(foundCompletedCredits).hasSize(2) +// .extracting("userJpaEntity.id") +// .contains(1L); +// } +// +// } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/ParsingTextHistoryAdapterTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/ParsingTextHistoryAdapterTest.java index cb447e33..7faff174 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/ParsingTextHistoryAdapterTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/ParsingTextHistoryAdapterTest.java @@ -9,7 +9,6 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import com.plzgraduate.myongjigraduatebe.parsing.infrastructure.adapter.persistence.ParsingTextHistoryAdapter; import com.plzgraduate.myongjigraduatebe.parsing.infrastructure.adapter.persistence.entity.ParsingTextHistoryJpaEntity; import com.plzgraduate.myongjigraduatebe.parsing.infrastructure.adapter.persistence.repository.ParsingTextRepository; import com.plzgraduate.myongjigraduatebe.parsing.domain.ParsingResult; diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java b/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java index 455e7768..c9157901 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java @@ -12,12 +12,15 @@ import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; + import com.fasterxml.jackson.databind.ObjectMapper; import com.plzgraduate.myongjigraduatebe.auth.api.signin.SignInController; import com.plzgraduate.myongjigraduatebe.auth.api.token.TokenController; import com.plzgraduate.myongjigraduatebe.auth.application.usecase.signin.SignInUseCase; import com.plzgraduate.myongjigraduatebe.auth.application.usecase.token.TokenUseCase; import com.plzgraduate.myongjigraduatebe.auth.security.TokenProvider; +import com.plzgraduate.myongjigraduatebe.completedcredit.api.FindCompletedCreditController; +import com.plzgraduate.myongjigraduatebe.completedcredit.application.usecase.FindCompletedCreditUseCase; import com.plzgraduate.myongjigraduatebe.core.config.JpaAuditingConfig; import com.plzgraduate.myongjigraduatebe.core.config.QuerydslConfig; import com.plzgraduate.myongjigraduatebe.core.config.SecurityConfig; @@ -63,7 +66,8 @@ FindTakenLectureController.class, ResetPasswordController.class, SignUpController.class, - FindAuthIdController.class + FindAuthIdController.class, + FindCompletedCreditController.class }) public abstract class WebAdaptorTestSupport { @@ -127,6 +131,9 @@ public abstract class WebAdaptorTestSupport { @MockBean protected CheckStudentNumberDuplicationUseCase checkStudentNumberDuplicationUseCase; + @MockBean + protected FindCompletedCreditUseCase findCompletedCreditUseCase; + @BeforeEach void setUp() { mockMvc = MockMvcBuilders.webAppContextSetup(context) From 6aad94e43a60437230b0305035848eade49e97fe Mon Sep 17 00:00:00 2001 From: 5uhwann <5uhwann27@gmail.com> Date: Fri, 5 Apr 2024 11:17:43 +0900 Subject: [PATCH 27/37] =?UTF-8?q?test:=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...teOrModifyCompletedCreditsAdapterTest.java | 14 +-- .../CompletedCreditRepositoryTest.java | 117 +++++++++--------- .../ParsingTextHistoryAdapterTest.java | 42 +++---- 3 files changed, 79 insertions(+), 94 deletions(-) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/GenerateOrModifyCompletedCreditsAdapterTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/GenerateOrModifyCompletedCreditsAdapterTest.java index b245daf5..df52a445 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/GenerateOrModifyCompletedCreditsAdapterTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/GenerateOrModifyCompletedCreditsAdapterTest.java @@ -30,15 +30,13 @@ class GenerateOrModifyCompletedCreditsAdapterTest extends PersistenceTestSupport @Test void saveOrModifyCompletedCredits() { //given - User user = User.builder() - .id(1L) - .build(); - UserJpaEntity userJpaEntity = UserJpaEntity.builder() - .id(1L) + UserJpaEntity userJpaEntity = userRepository.save( UserJpaEntity.builder() .authId("test") .password("test") - .studentNumber("60191111").build(); - userRepository.save(userJpaEntity); + .studentNumber("60191111").build()); + User user = User.builder() + .id(userJpaEntity.getId()) + .build(); List completedCredits = List.of(CompletedCredit.builder() .id(1L) @@ -58,7 +56,7 @@ void saveOrModifyCompletedCredits() { userJpaEntity); assertThat(foundCompletedCredits).hasSize(completedCredits.size()) .extracting("userJpaEntity.id") - .contains(1L); + .contains(user.getId()); } } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/repository/CompletedCreditRepositoryTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/repository/CompletedCreditRepositoryTest.java index 96ea6a64..1f301ca9 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/repository/CompletedCreditRepositoryTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/repository/CompletedCreditRepositoryTest.java @@ -1,59 +1,58 @@ -// package com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.repository; -// -// import java.util.List; -// -// import org.assertj.core.api.Assertions; -// import org.junit.jupiter.api.DisplayName; -// import org.junit.jupiter.api.Test; -// import org.springframework.beans.factory.annotation.Autowired; -// -// import com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.entity.CompletedCreditJpaEntity; -// import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; -// import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; -// import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; -// import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.repository.UserRepository; -// -// class CompletedCreditRepositoryTest extends PersistenceTestSupport { -// -// @Autowired -// private UserRepository userRepository; -// @Autowired -// private CompletedCreditRepository completedCreditRepository; -// -// @DisplayName("유저의 이수 학점을 조회 한다.") -// @Test -// void findAllByUserJpaEntity() { -// //given -// UserJpaEntity userJpaEntity = UserJpaEntity.builder() -// .id(1L) -// .authId("test1234") -// .password("test") -// .studentNumber("60191112").build(); -// userRepository.save(userJpaEntity); -// -// CompletedCreditJpaEntity commonCultureCompletedCreditJpaEntity = CompletedCreditJpaEntity.builder() -// .userJpaEntity(userJpaEntity) -// .graduationCategory(GraduationCategory.COMMON_CULTURE) -// .totalCredit(10) -// .takenCredit(10).build(); -// -// CompletedCreditJpaEntity coreCultureCompletedCreditJpaEntity = CompletedCreditJpaEntity.builder() -// .userJpaEntity(userJpaEntity) -// .graduationCategory(GraduationCategory.CORE_CULTURE) -// .totalCredit(10) -// .takenCredit(10).build(); -// -// completedCreditRepository.saveAll( -// List.of(commonCultureCompletedCreditJpaEntity, coreCultureCompletedCreditJpaEntity)); -// -// //when -// List foundCompletedCredits = completedCreditRepository.findAllByUserJpaEntity( -// userJpaEntity); -// -// //then -// Assertions.assertThat(foundCompletedCredits).hasSize(2) -// .extracting("userJpaEntity.id") -// .contains(1L); -// } -// -// } +package com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.repository; + +import java.util.List; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.entity.CompletedCreditJpaEntity; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; +import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.repository.UserRepository; + +class CompletedCreditRepositoryTest extends PersistenceTestSupport { + + @Autowired + private UserRepository userRepository; + @Autowired + private CompletedCreditRepository completedCreditRepository; + + @DisplayName("유저의 이수 학점을 조회 한다.") + @Test + void findAllByUserJpaEntity() { + //given + UserJpaEntity userJpaEntity = UserJpaEntity.builder() + .authId("test1234") + .password("test") + .studentNumber("60191112").build(); + userRepository.save(userJpaEntity); + + CompletedCreditJpaEntity commonCultureCompletedCreditJpaEntity = CompletedCreditJpaEntity.builder() + .userJpaEntity(userJpaEntity) + .graduationCategory(GraduationCategory.COMMON_CULTURE) + .totalCredit(10) + .takenCredit(10).build(); + + CompletedCreditJpaEntity coreCultureCompletedCreditJpaEntity = CompletedCreditJpaEntity.builder() + .userJpaEntity(userJpaEntity) + .graduationCategory(GraduationCategory.CORE_CULTURE) + .totalCredit(10) + .takenCredit(10).build(); + + completedCreditRepository.saveAll( + List.of(commonCultureCompletedCreditJpaEntity, coreCultureCompletedCreditJpaEntity)); + + //when + List foundCompletedCredits = completedCreditRepository.findAllByUserJpaEntity( + userJpaEntity); + + //then + Assertions.assertThat(foundCompletedCredits).hasSize(2) + .extracting("userJpaEntity.authId") + .contains(userJpaEntity.getAuthId()); + } + +} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/ParsingTextHistoryAdapterTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/ParsingTextHistoryAdapterTest.java index 7faff174..e668d1df 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/ParsingTextHistoryAdapterTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/ParsingTextHistoryAdapterTest.java @@ -4,19 +4,18 @@ import java.util.Optional; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import com.plzgraduate.myongjigraduatebe.parsing.infrastructure.adapter.persistence.entity.ParsingTextHistoryJpaEntity; -import com.plzgraduate.myongjigraduatebe.parsing.infrastructure.adapter.persistence.repository.ParsingTextRepository; import com.plzgraduate.myongjigraduatebe.parsing.domain.ParsingResult; import com.plzgraduate.myongjigraduatebe.parsing.domain.ParsingTextHistory; +import com.plzgraduate.myongjigraduatebe.parsing.infrastructure.adapter.persistence.entity.ParsingTextHistoryJpaEntity; +import com.plzgraduate.myongjigraduatebe.parsing.infrastructure.adapter.persistence.repository.ParsingTextRepository; import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.repository.UserRepository; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; class ParsingTextHistoryAdapterTest extends PersistenceTestSupport { @@ -29,34 +28,24 @@ class ParsingTextHistoryAdapterTest extends PersistenceTestSupport { @Autowired private UserRepository userRepository; - @AfterEach - void afterEach() { - this.entityManager - .createNativeQuery("ALTER TABLE parsing_text_history AUTO_INCREMENT = 1") - .executeUpdate(); - } - @DisplayName("ParsingTextHistory를 저장한다.") @Test void saveParsingTextHistory() { //given + UserJpaEntity userJpaEntity = userRepository.save(UserJpaEntity.builder() + .authId("authId") + .password("password!") + .studentNumber("60181666") + .build()); User user = User.builder() - .id(1L) + .id(userJpaEntity.getId()) .build(); - ParsingTextHistory parsingTextHistory = ParsingTextHistory.builder() .user(user) .parsingText("text") .parsingResult(ParsingResult.SUCCESS) .build(); - userRepository.save(UserJpaEntity.builder() - .id(1L) - .authId("authId") - .password("password!") - .studentNumber("60181666") - .build()); - //when parsingTextHistoryAdapter.saveParsingTextHistory(parsingTextHistory); @@ -73,8 +62,13 @@ void saveParsingTextHistory() { @Test void deleteUserParsingTextHistory() { //given + UserJpaEntity userJpaEntity = userRepository.save(UserJpaEntity.builder() + .studentNumber("test") + .authId("test") + .password("test") + .build()); User user = User.builder() - .id(1L) + .id(userJpaEntity.getId()) .authId("test") .password("test") .studentNumber("test") @@ -84,12 +78,6 @@ void deleteUserParsingTextHistory() { .parsingText("text") .parsingResult(ParsingResult.SUCCESS) .build(); - userRepository.save(UserJpaEntity.builder() - .id(1L) - .studentNumber("test") - .authId("test") - .password("test") - .build()); parsingTextHistoryAdapter.saveParsingTextHistory(parsingTextHistory); //when From b8183aefed471d81f9ac0aff113cf773cd385bf8 Mon Sep 17 00:00:00 2001 From: 5uhwann <5uhwann27@gmail.com> Date: Fri, 5 Apr 2024 11:18:07 +0900 Subject: [PATCH 28/37] =?UTF-8?q?build:=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EB=A1=AC=EB=B3=B5=20=EC=9D=98=EC=A1=B4?= =?UTF-8?q?=EC=84=B1=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index f2f2ffad..5743937e 100644 --- a/build.gradle +++ b/build.gradle @@ -39,7 +39,7 @@ dependencies { implementation "com.google.guava:guava:32.1.3-jre" implementation "com.querydsl:querydsl-jpa:${queryDslVersion}" implementation "com.querydsl:querydsl-apt:${queryDslVersion}" - //implementation 'org.flywaydb:flyway-core:6.4.2' +// implementation 'org.flywaydb:flyway-core:6.4.2' implementation 'org.springdoc:springdoc-openapi-ui:1.6.9' implementation 'io.sentry:sentry-logback:1.7.30' @@ -56,6 +56,8 @@ dependencies { testImplementation 'org.testcontainers:testcontainers:1.19.0' testImplementation 'org.testcontainers:mysql:1.19.0' testImplementation 'org.testcontainers:junit-jupiter:1.13.0' + testCompileOnly 'org.projectlombok:lombok' + testAnnotationProcessor 'org.projectlombok:lombok' } From dadbcfdc89a9b854bf084755c8ac8103922cd762 Mon Sep 17 00:00:00 2001 From: 5uhwann <5uhwann27@gmail.com> Date: Fri, 5 Apr 2024 11:20:58 +0900 Subject: [PATCH 29/37] =?UTF-8?q?refactor:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=20=EC=9D=98=EC=A1=B4=EC=84=B1=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../graduation/api/dto/response/MajorInfoResponse.java | 2 +- .../domain/model/DefaultGraduationRequirementType.java | 1 - .../service/GenerateOrModifyCompletedCreditServiceTest.java | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/MajorInfoResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/MajorInfoResponse.java index b8402b94..0514e477 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/MajorInfoResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/MajorInfoResponse.java @@ -28,8 +28,8 @@ private MajorInfoResponse(String primaryMajor, String doubleMajor, String subMaj public static MajorInfoResponse from(User user) { return MajorInfoResponse.builder() .primaryMajor(user.getPrimaryMajor()) - .subMajor(user.getSubMajor()) .doubleMajor(null) //TODO: 복수전공 추가 + .subMajor(user.getSubMajor()) .build(); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DefaultGraduationRequirementType.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DefaultGraduationRequirementType.java index 635ef599..bab6fc03 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DefaultGraduationRequirementType.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DefaultGraduationRequirementType.java @@ -58,7 +58,6 @@ public GraduationRequirement convertToProfitGraduationRequirement(User user) { .freeElectiveCredit(this.freeElectiveLectureCredit).build(); checkIsEnglishFreeUserAndTransferCredit(user, graduationRequirement); - //TODO: Additional Major에 따른 졸업요건 변화 체크 후 졸업 요건 학점 변화 적용 checkIsMultiMajorUserAndTransferCredit(user, graduationRequirement); return graduationRequirement; } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditServiceTest.java index 0c7bbc50..55dbdf94 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditServiceTest.java @@ -96,7 +96,6 @@ void generateOrModifyCompletedCreditPort() { (double)eachDetailGraduationResultTakenCredit)); } - //TODO: update 테스트 케이스 추가 private List createDetailGraduationResults(int totalCredit, int takenCredit) { return List.of(DetailGraduationResult.builder() From 6ff36608afa10933d6fbdec454dcf23b752892d8 Mon Sep 17 00:00:00 2001 From: 5uhwann <5uhwann27@gmail.com> Date: Fri, 5 Apr 2024 11:59:01 +0900 Subject: [PATCH 30/37] =?UTF-8?q?refactor:=20=EB=B6=80=EC=A0=95=ED=99=95?= =?UTF-8?q?=20=EB=A1=9C=EC=A7=81=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../graduation/domain/model/GraduationRequirement.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationRequirement.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationRequirement.java index 85476d02..ad752d3f 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationRequirement.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationRequirement.java @@ -43,8 +43,6 @@ public void modifyCreditForSubMajor() { } public void modifyCreditForDualMajor(int primaryMajorCredit, int dualMajorCredit) { - normalCultureCredit = 0; - this.primaryMajorCredit = primaryMajorCredit; - this.dualMajorCredit = dualMajorCredit; + //TODO: 복수 전공의 정확한 졸업요건 체크 후 로직 작성 } } From 82d7a003950acc9c066cebaf3ac7bc864cc466df Mon Sep 17 00:00:00 2001 From: 5uhwann <5uhwann27@gmail.com> Date: Fri, 5 Apr 2024 12:24:29 +0900 Subject: [PATCH 31/37] =?UTF-8?q?refactor:=20swagger=20=EC=BD=94=EB=93=9C?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FindCompletedCreditApiPresentation.java | 18 ++++++++++++++++++ .../api/FindCompletedCreditController.java | 5 +++-- 2 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditApiPresentation.java diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditApiPresentation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditApiPresentation.java new file mode 100644 index 00000000..28691b65 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditApiPresentation.java @@ -0,0 +1,18 @@ +package com.plzgraduate.myongjigraduatebe.completedcredit.api; + +import java.util.List; + +import com.plzgraduate.myongjigraduatebe.completedcredit.api.dto.CompletedCreditResponse; +import com.plzgraduate.myongjigraduatebe.core.meta.LoginUser; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; + +@Tag(name = "CompletdCredit") +public interface FindCompletedCreditApiPresentation { + + @Operation(summary = "기이수 학점 조회", description = "유저의 기이수 학점 조회 API") + @Parameter(name = "userId", description = "로그인한 유저의 PK값 - 자동 적용") + List getCompletedCredits(@LoginUser Long userId); +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditController.java index 23eb26bb..47153b1d 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditController.java @@ -10,13 +10,14 @@ import com.plzgraduate.myongjigraduatebe.completedcredit.api.dto.CompletedCreditResponse; import com.plzgraduate.myongjigraduatebe.completedcredit.application.usecase.FindCompletedCreditUseCase; import com.plzgraduate.myongjigraduatebe.core.meta.LoginUser; +import com.plzgraduate.myongjigraduatebe.core.meta.WebAdapter; import lombok.RequiredArgsConstructor; -@RestController +@WebAdapter @RequestMapping(value = "/api/v1/graduations/credit") @RequiredArgsConstructor -public class FindCompletedCreditController { +public class FindCompletedCreditController implements FindCompletedCreditApiPresentation{ private final FindCompletedCreditUseCase findCompletedCreditUseCase; From f3b6a6fcb38f74fdeac242c459e577368dcc75dd Mon Sep 17 00:00:00 2001 From: 5uhwann <5uhwann27@gmail.com> Date: Fri, 5 Apr 2024 12:36:35 +0900 Subject: [PATCH 32/37] =?UTF-8?q?refactor:=20endpoint=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...itController.java => FindCompletedCreditsController.java} | 5 ++--- ...llerTest.java => FindCompletedCreditsControllerTest.java} | 4 ++-- .../myongjigraduatebe/support/WebAdaptorTestSupport.java | 4 ++-- 3 files changed, 6 insertions(+), 7 deletions(-) rename src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/{FindCompletedCreditController.java => FindCompletedCreditsController.java} (82%) rename src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/{CompletedCreditControllerTest.java => FindCompletedCreditsControllerTest.java} (94%) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditsController.java similarity index 82% rename from src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditController.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditsController.java index 47153b1d..7531d17f 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditsController.java @@ -5,7 +5,6 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; import com.plzgraduate.myongjigraduatebe.completedcredit.api.dto.CompletedCreditResponse; import com.plzgraduate.myongjigraduatebe.completedcredit.application.usecase.FindCompletedCreditUseCase; @@ -15,9 +14,9 @@ import lombok.RequiredArgsConstructor; @WebAdapter -@RequestMapping(value = "/api/v1/graduations/credit") +@RequestMapping(value = "/api/v1/graduations/credits") @RequiredArgsConstructor -public class FindCompletedCreditController implements FindCompletedCreditApiPresentation{ +public class FindCompletedCreditsController implements FindCompletedCreditApiPresentation{ private final FindCompletedCreditUseCase findCompletedCreditUseCase; diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/CompletedCreditControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditsControllerTest.java similarity index 94% rename from src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/CompletedCreditControllerTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditsControllerTest.java index a0e5f446..987f3d9d 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/CompletedCreditControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditsControllerTest.java @@ -16,7 +16,7 @@ import com.plzgraduate.myongjigraduatebe.support.WebAdaptorTestSupport; import com.plzgraduate.myongjigraduatebe.support.WithMockAuthenticationUser; -class CompletedCreditControllerTest extends WebAdaptorTestSupport { +class FindCompletedCreditsControllerTest extends WebAdaptorTestSupport { @WithMockAuthenticationUser @DisplayName("유저의 이수 학점을 조회한다.") @@ -37,7 +37,7 @@ void findCompletedCredits() throws Exception { given(findCompletedCreditUseCase.findCompletedCredits(1L)).willReturn(completedCredits); //when //then - mockMvc.perform(get("/api/v1/graduations/credit")) + mockMvc.perform(get("/api/v1/graduations/credits")) .andDo(print()) .andExpect(status().isOk()) .andExpect(jsonPath("$.length()").value(completedCredits.size())) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java b/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java index c9157901..66ba82b3 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java @@ -19,7 +19,7 @@ import com.plzgraduate.myongjigraduatebe.auth.application.usecase.signin.SignInUseCase; import com.plzgraduate.myongjigraduatebe.auth.application.usecase.token.TokenUseCase; import com.plzgraduate.myongjigraduatebe.auth.security.TokenProvider; -import com.plzgraduate.myongjigraduatebe.completedcredit.api.FindCompletedCreditController; +import com.plzgraduate.myongjigraduatebe.completedcredit.api.FindCompletedCreditsController; import com.plzgraduate.myongjigraduatebe.completedcredit.application.usecase.FindCompletedCreditUseCase; import com.plzgraduate.myongjigraduatebe.core.config.JpaAuditingConfig; import com.plzgraduate.myongjigraduatebe.core.config.QuerydslConfig; @@ -67,7 +67,7 @@ ResetPasswordController.class, SignUpController.class, FindAuthIdController.class, - FindCompletedCreditController.class + FindCompletedCreditsController.class }) public abstract class WebAdaptorTestSupport { From 9a0e40dbf467cc5bbc49d30fa4f04ebc06cfbac7 Mon Sep 17 00:00:00 2001 From: 5uhwann <5uhwann27@gmail.com> Date: Fri, 5 Apr 2024 15:06:06 +0900 Subject: [PATCH 33/37] =?UTF-8?q?refactor:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=20=EC=BD=94=EB=93=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...enerateOrModifyCompletedCreditService.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java index a93341a2..3d9ee714 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java @@ -45,15 +45,15 @@ public void generateOrModifyCompletedCredit(User user, GraduationResult graduati )); List completedCreditModels = resultMap.keySet().stream() - .map(completedCredit -> createCompletedCreditModel(user, completedCredit, resultMap.get(completedCredit))) + .map(completedCredit -> createCompletedCreditModel(completedCredit, resultMap.get(completedCredit))) .collect(Collectors.toList()); - CompletedCredit chapelCompletedCreditModel = createChapelCompletedCreditModel(user, completedCredits, + CompletedCredit chapelCompletedCreditModel = createChapelCompletedCreditModel(completedCredits, + graduationResult); + CompletedCredit normalCultureCompletedCreditModel = createNormalCultureCompletedCreditModel(completedCredits, + graduationResult); + CompletedCredit freeElectiveCompletedCreditModel = createFreeElectiveCompletedCreditModel(completedCredits, graduationResult); - CompletedCredit normalCultureCompletedCreditModel = createNormalCultureCompletedCreditModel(user, - completedCredits, graduationResult); - CompletedCredit freeElectiveCompletedCreditModel = createFreeElectiveCompletedCreditModel(user, - completedCredits, graduationResult); ArrayList allCompletedCreditModels = new ArrayList<>(completedCreditModels); allCompletedCreditModels.addAll( @@ -61,7 +61,7 @@ public void generateOrModifyCompletedCredit(User user, GraduationResult graduati generateOrModifyCompletedCreditPort.generateOrModifyCompletedCredits(user, allCompletedCreditModels); } - private CompletedCredit createCompletedCreditModel(User user, DetailGraduationResult detailGraduationResult, + private CompletedCredit createCompletedCreditModel(DetailGraduationResult detailGraduationResult, Optional completedCredit) { return CompletedCredit.builder() .id(completedCredit.map(CompletedCredit::getId).orElse(null)) @@ -71,7 +71,7 @@ private CompletedCredit createCompletedCreditModel(User user, DetailGraduationRe .build(); } - private CompletedCredit createChapelCompletedCreditModel(User user, List completedCredits, + private CompletedCredit createChapelCompletedCreditModel(List completedCredits, GraduationResult graduationResult) { return completedCredits.stream() .filter(completedCredit -> completedCredit.getGraduationCategory() == CHAPEL) @@ -87,7 +87,7 @@ private CompletedCredit createChapelCompletedCreditModel(User user, List completedCredits, + private CompletedCredit createNormalCultureCompletedCreditModel(List completedCredits, GraduationResult graduationResult) { return completedCredits.stream() .filter(completedCredit -> completedCredit.getGraduationCategory() == NORMAL_CULTURE) @@ -103,7 +103,7 @@ private CompletedCredit createNormalCultureCompletedCreditModel(User user, List< .graduationCategory(NORMAL_CULTURE).build()); } - private CompletedCredit createFreeElectiveCompletedCreditModel(User user, List completedCredits, + private CompletedCredit createFreeElectiveCompletedCreditModel(List completedCredits, GraduationResult graduationResult) { return completedCredits.stream() .filter(completedCredit -> completedCredit.getGraduationCategory() == FREE_ELECTIVE) From 37a8bfe4dbc71f1c93fd2e13b66d4885f0f482ba Mon Sep 17 00:00:00 2001 From: 5uhwann <5uhwann27@gmail.com> Date: Fri, 5 Apr 2024 16:28:25 +0900 Subject: [PATCH 34/37] =?UTF-8?q?refactor:=20=EC=B1=84=ED=94=8C=20?= =?UTF-8?q?=EC=9D=B4=EC=88=98=20=ED=95=99=EC=A0=90=20=EC=98=A4=EB=A5=98=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 --- .../service/GenerateOrModifyCompletedCreditService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java index 3d9ee714..e50ceadd 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java @@ -40,7 +40,7 @@ public void generateOrModifyCompletedCredit(User user, GraduationResult graduati .collect(Collectors.toMap( Function.identity(), detailGraduationResult -> completedCredits.stream() - .filter(cc -> cc.getGraduationCategory().equals(detailGraduationResult.getGraduationCategory())) + .filter(completedCredit -> completedCredit.getGraduationCategory().equals(detailGraduationResult.getGraduationCategory())) .findFirst() )); @@ -78,7 +78,7 @@ private CompletedCredit createChapelCompletedCreditModel(List c .map(completedCredit -> CompletedCredit.builder() .id(completedCredit.getId()) .totalCredit(ChapelResult.GRADUATION_COUNT) - .takenCredit(graduationResult.getChapelResult().getTakenChapelCredit()) + .takenCredit(graduationResult.getChapelResult().getTakenCount()) .graduationCategory(CHAPEL).build()) .findFirst() .orElse(CompletedCredit.builder() From a2f9a867282fa214837118c0bb23ce7c18c49b7d Mon Sep 17 00:00:00 2001 From: 5uhwann <5uhwann27@gmail.com> Date: Sun, 7 Apr 2024 14:59:31 +0900 Subject: [PATCH 35/37] =?UTF-8?q?refactor:=20GenerateOrModifyCompletedCred?= =?UTF-8?q?itUseCase=20=EC=82=AC=EC=9A=A9=20=EC=9C=84=EC=B9=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GenerateOrModifyCompletedCreditService.java | 10 ++++++++-- .../GenerateOrModifyCompletedCreditUseCase.java | 3 +-- .../service/CalculateGraduationService.java | 7 ++++--- .../usecase/CalculateGraduationUseCase.java | 5 +---- .../application/service/ParsingTextService.java | 12 ++++++++---- .../SaveTakenLectureFromParsingTextService.java | 14 ++------------ ...GenerateOrModifyCompletedCreditServiceTest.java | 7 +++++-- .../service/ParsingTextServiceTest.java | 4 ++++ ...SaveTakenLectureFromParsingTextServiceTest.java | 11 ----------- 9 files changed, 33 insertions(+), 40 deletions(-) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java index e50ceadd..9ffd6c9c 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java @@ -1,6 +1,8 @@ package com.plzgraduate.myongjigraduatebe.completedcredit.application.service; -import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.*; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.CHAPEL; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.FREE_ELECTIVE; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.NORMAL_CULTURE; import java.util.ArrayList; import java.util.List; @@ -16,6 +18,7 @@ import com.plzgraduate.myongjigraduatebe.completedcredit.application.usecase.GenerateOrModifyCompletedCreditUseCase; import com.plzgraduate.myongjigraduatebe.completedcredit.domain.model.CompletedCredit; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.ChapelResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationResult; @@ -31,9 +34,12 @@ class GenerateOrModifyCompletedCreditService implements GenerateOrModifyComplete private final FindCompletedCreditPort findCompletedCreditPort; private final GenerateOrModifyCompletedCreditPort generateOrModifyCompletedCreditPort; + private final CalculateGraduationUseCase calculateGraduationUseCase; + @Override - public void generateOrModifyCompletedCredit(User user, GraduationResult graduationResult) { + public void generateOrModifyCompletedCredit(User user) { List completedCredits = findCompletedCreditPort.findCompletedCredit(user); + GraduationResult graduationResult = calculateGraduationUseCase.calculateGraduation(user); List detailGraduationResults = graduationResult.getDetailGraduationResults(); Map> resultMap = detailGraduationResults.stream() diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/usecase/GenerateOrModifyCompletedCreditUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/usecase/GenerateOrModifyCompletedCreditUseCase.java index ffdde9c4..7fa6905a 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/usecase/GenerateOrModifyCompletedCreditUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/usecase/GenerateOrModifyCompletedCreditUseCase.java @@ -1,9 +1,8 @@ package com.plzgraduate.myongjigraduatebe.completedcredit.application.usecase; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationResult; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; public interface GenerateOrModifyCompletedCreditUseCase { - void generateOrModifyCompletedCredit(User user, GraduationResult graduationResult); + void generateOrModifyCompletedCredit(User user); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java index 145ce8b4..545213d5 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java @@ -29,7 +29,7 @@ import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCulture; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CoreCulture; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureUseCase; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; import com.plzgraduate.myongjigraduatebe.user.domain.model.College; import com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory; @@ -47,11 +47,12 @@ class CalculateGraduationService implements CalculateGraduationUseCase { private final FindCoreCulturePort findCoreCulturePort; private final FindBasicAcademicalCulturePort findBasicAcademicalCulturePort; private final FindMajorPort findMajorPort; + private final FindTakenLectureUseCase findTakenLectureUseCase; @Override - public GraduationResult calculateGraduation(User user, Set takenLectures) { + public GraduationResult calculateGraduation(User user) { GraduationRequirement graduationRequirement = determineGraduationRequirement(user); - TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); + TakenLectureInventory takenLectureInventory = findTakenLectureUseCase.findTakenLectures(user.getId()); ChapelResult chapelResult = generateChapelResult(takenLectureInventory); List detailGraduationResults = generateDetailGraduationResults(user, diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateGraduationUseCase.java index 795348f1..b5b9c8dc 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateGraduationUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateGraduationUseCase.java @@ -1,12 +1,9 @@ package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; -import java.util.Set; - import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationResult; -import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; public interface CalculateGraduationUseCase { - GraduationResult calculateGraduation(User user, Set takenLectures); + GraduationResult calculateGraduation(User user); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextService.java index ada84695..10c83fac 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextService.java @@ -1,12 +1,14 @@ package com.plzgraduate.myongjigraduatebe.parsing.application.service; -import static com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory.*; +import static com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory.ASSOCIATED_MAJOR; +import static com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory.DOUBLE_SUB; import java.util.List; import java.util.stream.Collectors; import org.springframework.transaction.annotation.Transactional; +import com.plzgraduate.myongjigraduatebe.completedcredit.application.usecase.GenerateOrModifyCompletedCreditUseCase; import com.plzgraduate.myongjigraduatebe.core.exception.InvalidPdfException; import com.plzgraduate.myongjigraduatebe.core.exception.PdfParsingException; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; @@ -35,6 +37,8 @@ class ParsingTextService implements ParsingTextUseCase { private final SaveTakenLectureFromParsingTextUseCase saveTakenLectureFromParsingTextUseCase; private final DeleteTakenLectureByUserUseCase deleteTakenLectureByUserUseCase; + private final GenerateOrModifyCompletedCreditUseCase generateOrModifyCompletedCreditUseCase; + @Override public void enrollParsingText(Long userId, String parsingText) { User user = findUserUseCase.findUserById(userId); @@ -46,6 +50,7 @@ public void enrollParsingText(Long userId, String parsingText) { updateUser(user, parsingInformation); deleteTakenLecturesIfAlreadyEnrolled(user); saveTakenLectures(user, parsingInformation); + generateOrModifyCompletedCreditUseCase.generateOrModifyCompletedCredit(user); } catch (InvalidPdfException | IllegalArgumentException e) { throw e; } catch (Exception e) { @@ -59,8 +64,7 @@ private void deleteTakenLecturesIfAlreadyEnrolled(User user) { private void saveTakenLectures(User user, ParsingInformation parsingInformation) { List parsingTakenLectureDtoList = parsingInformation.getTakenLectureInformation(); - List saveTakenLectureCommand = getSaveTakenLectureCommand(user, - parsingTakenLectureDtoList); + List saveTakenLectureCommand = getSaveTakenLectureCommand(parsingTakenLectureDtoList); saveTakenLectureFromParsingTextUseCase.saveTakenLectures(user, saveTakenLectureCommand); } @@ -84,7 +88,7 @@ private void validateStudentNumber(User user, ParsingInformation parsingInformat } } - private List getSaveTakenLectureCommand(User user, + private List getSaveTakenLectureCommand( List parsingTakenLectureDtoList) { return parsingTakenLectureDtoList.stream() .map(parsingTakenLectureDto -> diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/save/SaveTakenLectureFromParsingTextService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/save/SaveTakenLectureFromParsingTextService.java index a80630a4..b4456c5e 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/save/SaveTakenLectureFromParsingTextService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/save/SaveTakenLectureFromParsingTextService.java @@ -1,6 +1,5 @@ package com.plzgraduate.myongjigraduatebe.takenlecture.application.service.save; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Optional; @@ -9,10 +8,7 @@ import org.springframework.transaction.annotation.Transactional; -import com.plzgraduate.myongjigraduatebe.completedcredit.application.usecase.GenerateOrModifyCompletedCreditUseCase; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateGraduationUseCase; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationResult; import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.FindLecturesUseCase; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.SaveTakenLecturePort; @@ -30,24 +26,18 @@ class SaveTakenLectureFromParsingTextService implements SaveTakenLectureFromPars private final SaveTakenLecturePort saveTakenLecturePort; private final FindLecturesUseCase findLecturesUseCase; - private final CalculateGraduationUseCase calculateGraduationUseCase; - private final GenerateOrModifyCompletedCreditUseCase generateOrModifyCompletedCreditUseCase; @Override public void saveTakenLectures(User user, List takenLectureInformationList) { Map lectureMap = makeLectureMapByLectureCodes(takenLectureInformationList); List takenLectures = makeTakenLectures(user, takenLectureInformationList, lectureMap); saveTakenLecturePort.saveTakenLectures(takenLectures); - - GraduationResult graduationResult = calculateGraduationUseCase.calculateGraduation(user, - new HashSet<>(takenLectures)); - generateOrModifyCompletedCreditUseCase.generateOrModifyCompletedCredit(user, graduationResult); } private List makeTakenLectures(User user, List takenLectureInformationList, Map lectureMap) { - return takenLectureInformationList.stream().map( - takenLectureInformation -> { + return takenLectureInformationList.stream() + .map(takenLectureInformation -> { Lecture lecture = getLectureFromLectureMap(lectureMap, takenLectureInformation); return TakenLecture.of(user, lecture, takenLectureInformation.getYear(), takenLectureInformation.getSemester()); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditServiceTest.java index 55dbdf94..4919b52d 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditServiceTest.java @@ -18,6 +18,7 @@ import com.plzgraduate.myongjigraduatebe.completedcredit.application.port.FindCompletedCreditPort; import com.plzgraduate.myongjigraduatebe.completedcredit.application.port.GenerateOrModifyCompletedCreditPort; import com.plzgraduate.myongjigraduatebe.completedcredit.domain.model.CompletedCredit; +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.ChapelResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.FreeElectiveGraduationResult; @@ -33,7 +34,8 @@ class GenerateOrModifyCompletedCreditServiceTest { private FindCompletedCreditPort findCompletedCreditPort; @Mock private GenerateOrModifyCompletedCreditPort generateOrModifyCompletedCreditPort; - + @Mock + private CalculateGraduationUseCase calculateGraduationUseCase; @InjectMocks private GenerateOrModifyCompletedCreditService generateOrModifyCompletedCreditService; @@ -68,11 +70,12 @@ void generateOrModifyCompletedCreditPort() { .takenCredit(eachDetailGraduationResultTakenCredit) .build()) .build(); + given(calculateGraduationUseCase.calculateGraduation(user)).willReturn(graduationResult); ArgumentCaptor> completedCreditArgumentCaptor = ArgumentCaptor.forClass(List.class); ArgumentCaptor userArgumentCaptor = ArgumentCaptor.forClass(User.class); //when - generateOrModifyCompletedCreditService.generateOrModifyCompletedCredit(user, graduationResult); + generateOrModifyCompletedCreditService.generateOrModifyCompletedCredit(user); //then then(generateOrModifyCompletedCreditPort).should() diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextServiceTest.java index cc4ae4d8..293ca9bc 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextServiceTest.java @@ -14,6 +14,7 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import com.plzgraduate.myongjigraduatebe.completedcredit.application.usecase.GenerateOrModifyCompletedCreditUseCase; import com.plzgraduate.myongjigraduatebe.core.exception.InvalidPdfException; import com.plzgraduate.myongjigraduatebe.core.exception.PdfParsingException; import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.delete.DeleteTakenLectureByUserUseCase; @@ -35,6 +36,8 @@ class ParsingTextServiceTest{ private SaveTakenLectureFromParsingTextUseCase saveTakenLectureFromParsingTextUseCase; @Mock private DeleteTakenLectureByUserUseCase deleteTakenLectureByUserUseCase; + @Mock + private GenerateOrModifyCompletedCreditUseCase generateOrModifyCompletedCreditUseCase; @InjectMocks private ParsingTextService parsingTextService; @@ -61,6 +64,7 @@ class ParsingTextServiceTest{ then(updateStudentInformationUseCase).should().updateUser(any(UpdateStudentInformationCommand.class)); then(deleteTakenLectureByUserUseCase).should().deleteAllTakenLecturesByUser(any(User.class)); then(saveTakenLectureFromParsingTextUseCase).should().saveTakenLectures(any(User.class), any()); + then(generateOrModifyCompletedCreditUseCase).should().generateOrModifyCompletedCredit(any(User.class)); } @DisplayName("PDF 파싱 텍스트가 빈 문자열로 오면 InvalidPdfException을 반환한다.") diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/save/SaveTakenLectureFromParsingTextServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/save/SaveTakenLectureFromParsingTextServiceTest.java index 46b12313..9c2b8327 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/save/SaveTakenLectureFromParsingTextServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/save/SaveTakenLectureFromParsingTextServiceTest.java @@ -7,7 +7,6 @@ import static org.mockito.BDDMockito.then; import java.util.ArrayList; -import java.util.HashSet; import java.util.List; import org.junit.jupiter.api.DisplayName; @@ -18,9 +17,6 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import com.plzgraduate.myongjigraduatebe.completedcredit.application.usecase.GenerateOrModifyCompletedCreditUseCase; -import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateGraduationUseCase; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationResult; import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.FindLecturesUseCase; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.SaveTakenLecturePort; @@ -35,11 +31,7 @@ class SaveTakenLectureFromParsingTextServiceTest { @Mock private SaveTakenLecturePort saveTakenLecturePort; @Mock - private CalculateGraduationUseCase calculateGraduationUseCase; - @Mock private FindLecturesUseCase findLecturesUseCase; - @Mock - private GenerateOrModifyCompletedCreditUseCase generateOrModifyCompletedCreditUseCase; @InjectMocks private SaveTakenLectureFromParsingTextService saveTakenLectureFromParsingTextService; @@ -63,9 +55,6 @@ void saveTakenLectures() { //then then(saveTakenLecturePort).should().saveTakenLectures(takenLectureListCaptor.capture()); - GraduationResult graduationResult = then(calculateGraduationUseCase).should() - .calculateGraduation(user, new HashSet<>(takenLectureListCaptor.getValue())); - then(generateOrModifyCompletedCreditUseCase).should().generateOrModifyCompletedCredit(user, graduationResult); List capturesTakenLectures = takenLectureListCaptor.getValue(); assertThat(capturesTakenLectures) .hasSize(2) From 2749bd1e5623f62fed92e4ac367db61638fe057e Mon Sep 17 00:00:00 2001 From: 5uhwann <5uhwann27@gmail.com> Date: Sun, 7 Apr 2024 15:02:32 +0900 Subject: [PATCH 36/37] =?UTF-8?q?refactor:=20=EC=B1=84=ED=94=8C=20?= =?UTF-8?q?=EA=B8=B0=EC=9D=B4=EC=88=98=20=ED=95=99=EC=A0=90=20=EC=82=B0?= =?UTF-8?q?=EC=A0=95=20=EB=B0=A9=EC=8B=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/GenerateOrModifyCompletedCreditService.java | 6 +++--- .../service/GenerateOrModifyCompletedCreditServiceTest.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java index 9ffd6c9c..d5f3b2bf 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java @@ -83,12 +83,12 @@ private CompletedCredit createChapelCompletedCreditModel(List c .filter(completedCredit -> completedCredit.getGraduationCategory() == CHAPEL) .map(completedCredit -> CompletedCredit.builder() .id(completedCredit.getId()) - .totalCredit(ChapelResult.GRADUATION_COUNT) - .takenCredit(graduationResult.getChapelResult().getTakenCount()) + .totalCredit(ChapelResult.GRADUATION_COUNT / 2) + .takenCredit(graduationResult.getChapelResult().getTakenChapelCredit()) .graduationCategory(CHAPEL).build()) .findFirst() .orElse(CompletedCredit.builder() - .totalCredit(ChapelResult.GRADUATION_COUNT) + .totalCredit(ChapelResult.GRADUATION_COUNT / 2) .takenCredit(graduationResult.getChapelResult().getTakenChapelCredit()) .graduationCategory(CHAPEL).build()); } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditServiceTest.java index 4919b52d..87d5f1dc 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditServiceTest.java @@ -92,7 +92,7 @@ void generateOrModifyCompletedCreditPort() { (double)eachDetailGraduationResultTakenCredit), tuple(GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE, eachDetailGraduationResultTotalCredit, (double)eachDetailGraduationResultTakenCredit), - tuple(GraduationCategory.CHAPEL, 4, 1.5), + tuple(GraduationCategory.CHAPEL, 2, 1.5), tuple(GraduationCategory.NORMAL_CULTURE, eachDetailGraduationResultTotalCredit, (double)eachDetailGraduationResultTakenCredit), tuple(GraduationCategory.FREE_ELECTIVE, eachDetailGraduationResultTotalCredit, From a866f9ae7a7ddaf4a0d31f0629f1377001d919e1 Mon Sep 17 00:00:00 2001 From: 5uhwann <5uhwann27@gmail.com> Date: Sun, 7 Apr 2024 19:11:39 +0900 Subject: [PATCH 37/37] =?UTF-8?q?refactor:=20GenerateOrModifyCompletedCred?= =?UTF-8?q?it=20=EB=AA=A8=EB=8D=B8=20=EC=83=9D=EC=84=B1=20=EC=9C=84?= =?UTF-8?q?=EC=B9=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...enerateOrModifyCompletedCreditService.java | 113 +++++++++--------- .../domain/model/CompletedCredit.java | 47 +++++++- .../FindCompletedCreditAdapter.java | 1 + 3 files changed, 103 insertions(+), 58 deletions(-) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java index d5f3b2bf..bbd7e619 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java @@ -1,5 +1,6 @@ package com.plzgraduate.myongjigraduatebe.completedcredit.application.service; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.ChapelResult.GRADUATION_COUNT; import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.CHAPEL; import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.FREE_ELECTIVE; import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.NORMAL_CULTURE; @@ -19,8 +20,8 @@ import com.plzgraduate.myongjigraduatebe.completedcredit.domain.model.CompletedCredit; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateGraduationUseCase; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.ChapelResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationResult; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @@ -42,29 +43,35 @@ public void generateOrModifyCompletedCredit(User user) { GraduationResult graduationResult = calculateGraduationUseCase.calculateGraduation(user); List detailGraduationResults = graduationResult.getDetailGraduationResults(); + List updatedCompletedCredits = createGeneralCompletedCreditModel(completedCredits, + detailGraduationResults); + CompletedCredit chapelCompletedCreditModel = createOrUpdateChapelCompletedCreditModel(completedCredits, + graduationResult); + CompletedCredit normalCultureCompletedCreditModel = createOrUpdateNormalCultureCompletedCreditModel( + completedCredits, graduationResult); + CompletedCredit freeElectiveCompletedCreditModel = createOrUpdateFreeElectiveCompletedCreditModel( + completedCredits, graduationResult); + + ArrayList allCompletedCreditModels = new ArrayList<>(updatedCompletedCredits); + allCompletedCreditModels.addAll( + List.of(chapelCompletedCreditModel, normalCultureCompletedCreditModel, freeElectiveCompletedCreditModel)); + generateOrModifyCompletedCreditPort.generateOrModifyCompletedCredits(user, allCompletedCreditModels); + } + + private List createGeneralCompletedCreditModel( + List completedCredits, List detailGraduationResults) { Map> resultMap = detailGraduationResults.stream() .collect(Collectors.toMap( Function.identity(), detailGraduationResult -> completedCredits.stream() - .filter(completedCredit -> completedCredit.getGraduationCategory().equals(detailGraduationResult.getGraduationCategory())) + .filter(completedCredit -> completedCredit.getGraduationCategory() + .equals(detailGraduationResult.getGraduationCategory())) .findFirst() )); - - List completedCreditModels = resultMap.keySet().stream() - .map(completedCredit -> createCompletedCreditModel(completedCredit, resultMap.get(completedCredit))) + return resultMap.keySet().stream() + .map(detailGraduationResult -> createCompletedCreditModel(detailGraduationResult, + resultMap.get(detailGraduationResult))) .collect(Collectors.toList()); - - CompletedCredit chapelCompletedCreditModel = createChapelCompletedCreditModel(completedCredits, - graduationResult); - CompletedCredit normalCultureCompletedCreditModel = createNormalCultureCompletedCreditModel(completedCredits, - graduationResult); - CompletedCredit freeElectiveCompletedCreditModel = createFreeElectiveCompletedCreditModel(completedCredits, - graduationResult); - - ArrayList allCompletedCreditModels = new ArrayList<>(completedCreditModels); - allCompletedCreditModels.addAll( - List.of(chapelCompletedCreditModel, normalCultureCompletedCreditModel, freeElectiveCompletedCreditModel)); - generateOrModifyCompletedCreditPort.generateOrModifyCompletedCredits(user, allCompletedCreditModels); } private CompletedCredit createCompletedCreditModel(DetailGraduationResult detailGraduationResult, @@ -77,51 +84,47 @@ private CompletedCredit createCompletedCreditModel(DetailGraduationResult detail .build(); } - private CompletedCredit createChapelCompletedCreditModel(List completedCredits, + private CompletedCredit createOrUpdateChapelCompletedCreditModel(List completedCredits, GraduationResult graduationResult) { - return completedCredits.stream() - .filter(completedCredit -> completedCredit.getGraduationCategory() == CHAPEL) - .map(completedCredit -> CompletedCredit.builder() - .id(completedCredit.getId()) - .totalCredit(ChapelResult.GRADUATION_COUNT / 2) - .takenCredit(graduationResult.getChapelResult().getTakenChapelCredit()) - .graduationCategory(CHAPEL).build()) - .findFirst() - .orElse(CompletedCredit.builder() - .totalCredit(ChapelResult.GRADUATION_COUNT / 2) - .takenCredit(graduationResult.getChapelResult().getTakenChapelCredit()) - .graduationCategory(CHAPEL).build()); + Optional chapelCompletedCredit = findCompletedCreditByCategory(completedCredits, CHAPEL); + return chapelCompletedCredit.map( + completedCredit -> updateCompletedCredit(completedCredit, GRADUATION_COUNT / 2, + graduationResult.getChapelResult().getTakenChapelCredit())) + .orElseGet(() -> CompletedCredit.createChapelCompletedCreditModel(graduationResult.getChapelResult())); } - private CompletedCredit createNormalCultureCompletedCreditModel(List completedCredits, + private CompletedCredit createOrUpdateNormalCultureCompletedCreditModel(List completedCredits, GraduationResult graduationResult) { - return completedCredits.stream() - .filter(completedCredit -> completedCredit.getGraduationCategory() == NORMAL_CULTURE) - .map(completedCredit -> CompletedCredit.builder() - .id(completedCredit.getId()) - .totalCredit(graduationResult.getNormalCultureGraduationResult().getTotalCredit()) - .takenCredit(graduationResult.getNormalCultureGraduationResult().getTakenCredit()) - .graduationCategory(NORMAL_CULTURE).build()) - .findFirst() - .orElse(CompletedCredit.builder() - .totalCredit(graduationResult.getNormalCultureGraduationResult().getTotalCredit()) - .takenCredit(graduationResult.getNormalCultureGraduationResult().getTakenCredit()) - .graduationCategory(NORMAL_CULTURE).build()); + Optional normalCultureCompletedCredit = findCompletedCreditByCategory(completedCredits, + NORMAL_CULTURE); + return normalCultureCompletedCredit.map(completedCredit -> updateCompletedCredit(completedCredit, + graduationResult.getNormalCultureGraduationResult().getTotalCredit(), + graduationResult.getNormalCultureGraduationResult().getTakenCredit())) + .orElseGet(() -> CompletedCredit.createNormalCultureCompletedCreditModel( + graduationResult.getNormalCultureGraduationResult())); } - private CompletedCredit createFreeElectiveCompletedCreditModel(List completedCredits, + private CompletedCredit createOrUpdateFreeElectiveCompletedCreditModel(List completedCredits, GraduationResult graduationResult) { + Optional freeElectiveCompletedCredit = findCompletedCreditByCategory(completedCredits, + FREE_ELECTIVE); + return freeElectiveCompletedCredit.map(completedCredit -> updateCompletedCredit(completedCredit, + graduationResult.getFreeElectiveGraduationResult().getTotalCredit(), + graduationResult.getFreeElectiveGraduationResult().getTakenCredit())) + .orElseGet(() -> CompletedCredit.createFreeElectiveCompletedCreditModel( + graduationResult.getFreeElectiveGraduationResult())); + } + + private Optional findCompletedCreditByCategory(List completedCredits, + GraduationCategory category) { return completedCredits.stream() - .filter(completedCredit -> completedCredit.getGraduationCategory() == FREE_ELECTIVE) - .map(completedCredit -> CompletedCredit.builder() - .id(completedCredit.getId()) - .totalCredit(graduationResult.getFreeElectiveGraduationResult().getTotalCredit()) - .takenCredit(graduationResult.getFreeElectiveGraduationResult().getTakenCredit()) - .graduationCategory(FREE_ELECTIVE).build()) - .findFirst() - .orElse(CompletedCredit.builder() - .totalCredit(graduationResult.getFreeElectiveGraduationResult().getTotalCredit()) - .takenCredit(graduationResult.getFreeElectiveGraduationResult().getTakenCredit()) - .graduationCategory(FREE_ELECTIVE).build()); + .filter(completedCredit -> completedCredit.getGraduationCategory() == category) + .findFirst(); + } + + private CompletedCredit updateCompletedCredit(CompletedCredit completedCredit, + int totalCredit, double takenCredit) { + completedCredit.updateCredit(totalCredit, takenCredit); + return completedCredit; } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/domain/model/CompletedCredit.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/domain/model/CompletedCredit.java index 1c0ff5e6..60ccb25a 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/domain/model/CompletedCredit.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/domain/model/CompletedCredit.java @@ -1,6 +1,12 @@ package com.plzgraduate.myongjigraduatebe.completedcredit.domain.model; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.*; + +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.ChapelResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.FreeElectiveGraduationResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.NormalCultureGraduationResult; import lombok.Builder; import lombok.Getter; @@ -10,15 +16,50 @@ public class CompletedCredit { private final Long id; private final GraduationCategory graduationCategory; - private final int totalCredit; - private final double takenCredit; + private int totalCredit; + private double takenCredit; @Builder - private CompletedCredit(Long id, GraduationCategory graduationCategory, int totalCredit, + private CompletedCredit(Long id, GraduationCategory graduationCategory, int totalCredit, double takenCredit) { this.id = id; this.graduationCategory = graduationCategory; this.totalCredit = totalCredit; this.takenCredit = takenCredit; } + + public static CompletedCredit from(DetailGraduationResult detailGraduationResults) { + return CompletedCredit.builder() + .graduationCategory(detailGraduationResults.getGraduationCategory()) + .totalCredit(detailGraduationResults.getTotalCredit()) + .takenCredit(detailGraduationResults.getTakenCredit()).build(); + } + + public static CompletedCredit createChapelCompletedCreditModel(ChapelResult chapelResult) { + return CompletedCredit.builder() + .graduationCategory(CHAPEL) + .totalCredit(ChapelResult.GRADUATION_COUNT / 2) + .takenCredit(chapelResult.getTakenChapelCredit()).build(); + } + + public static CompletedCredit createNormalCultureCompletedCreditModel( + NormalCultureGraduationResult normalCultureGraduationResult) { + return CompletedCredit.builder() + .graduationCategory(NORMAL_CULTURE) + .totalCredit(normalCultureGraduationResult.getTotalCredit()) + .takenCredit(normalCultureGraduationResult.getTakenCredit()).build(); + } + + public static CompletedCredit createFreeElectiveCompletedCreditModel( + FreeElectiveGraduationResult freeElectiveGraduationResult) { + return CompletedCredit.builder() + .graduationCategory(FREE_ELECTIVE) + .totalCredit(freeElectiveGraduationResult.getTotalCredit()) + .takenCredit(freeElectiveGraduationResult.getTakenCredit()).build(); + } + + public void updateCredit(int totalCredit, double takenCredit) { + this.totalCredit = totalCredit; + this.takenCredit = takenCredit; + } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/FindCompletedCreditAdapter.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/FindCompletedCreditAdapter.java index b1df18f9..8e09162f 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/FindCompletedCreditAdapter.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/FindCompletedCreditAdapter.java @@ -20,6 +20,7 @@ public class FindCompletedCreditAdapter implements FindCompletedCreditPort { private final UserMapper userMapper; private final CompletedCreditPersistenceMapper completedCreditPersistenceMapper; private final CompletedCreditRepository completedCreditRepository; + @Override public List findCompletedCredit(User user) { return completedCreditRepository.findAllByUserJpaEntity(userMapper.mapToJpaEntity(user)).stream()