From 742257d878a926aee74415e5f64b7e3f4d68101b Mon Sep 17 00:00:00 2001 From: 5uhwann <106325839+5uhwann@users.noreply.github.com> Date: Fri, 19 Jan 2024 20:41:52 +0900 Subject: [PATCH 01/27] =?UTF-8?q?refactor:=20=EC=A1=B8=EC=97=85=EC=9A=94?= =?UTF-8?q?=EA=B1=B4=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=BD=94=EB=93=9C?= =?UTF-8?q?=ED=99=94=20=EC=9E=91=EC=97=85=20(#235)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: 전공/ 부전공 여부에 따른 졸업 과목 조회 구분 로직 위치 수정 FindGraduationRequirementPersistenceAdapter -> CalculateGraduationService * refactor: college 한국어명 변수 수정 * refactor: 줄바꿈 오타 수정 * refactor: GraduationRequirement Enum 관리 및 엔티티 제거 * refactor: GraduationRequirementType 클래스명 및 메서드 시그니처 수정 review 반영 * refactor: GraduationRequirementType 필드값 설명 주석 추가 --- ...aduationRequirementPersistenceAdapter.java | 45 ------ .../GraduationRequirementMapper.java | 23 --- .../GraduationRequirementRepository.java | 23 --- .../GraduationRequirementJpaEntity.java | 68 --------- .../port/CalculateGraduationService.java | 25 ++-- .../out/FindGraduationRequirementPort.java | 9 -- .../domain/model/GraduationRequirement.java | 2 +- ...icAcademicalCulturePersistenceAdapter.java | 4 +- .../user/domain/model/College.java | 6 +- .../model/GraduationRequirementType.java | 65 ++++++++ ...tionRequirementPersistenceAdapterTest.java | 141 ------------------ .../GraduationRequirementMapperTest.java | 33 ---- .../GraduationRequirementRepositoryTest.java | 110 -------------- .../port/CalculateGraduationServiceTest.java | 129 ---------------- .../model/GraduationRequirementTest.java | 2 +- ...ademicalCulturePersistenceAdapterTest.java | 6 +- .../model/GraduationRequirementTypeTest.java | 71 +++++++++ 17 files changed, 161 insertions(+), 601 deletions(-) delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/out/persistence/FindGraduationRequirementPersistenceAdapter.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/out/persistence/GraduationRequirementMapper.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/out/persistence/GraduationRequirementRepository.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/out/persistence/entity/GraduationRequirementJpaEntity.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/out/FindGraduationRequirementPort.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/GraduationRequirementType.java delete mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/out/persistence/FindGraduationRequirementPersistenceAdapterTest.java delete mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/out/persistence/GraduationRequirementMapperTest.java delete mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/adpater/out/persistence/GraduationRequirementRepositoryTest.java delete mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/CalculateGraduationServiceTest.java create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/user/domain/model/GraduationRequirementTypeTest.java diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/out/persistence/FindGraduationRequirementPersistenceAdapter.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/out/persistence/FindGraduationRequirementPersistenceAdapter.java deleted file mode 100644 index 888f983a..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/out/persistence/FindGraduationRequirementPersistenceAdapter.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.adpater.out.persistence; - -import com.plzgraduate.myongjigraduatebe.core.meta.PersistenceAdapter; -import com.plzgraduate.myongjigraduatebe.graduation.adpater.out.persistence.entity.GraduationRequirementJpaEntity; -import com.plzgraduate.myongjigraduatebe.graduation.application.port.out.FindGraduationRequirementPort; -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.User; - -import lombok.RequiredArgsConstructor; - -@PersistenceAdapter -@RequiredArgsConstructor -class FindGraduationRequirementPersistenceAdapter implements FindGraduationRequirementPort { - - private final GraduationRequirementRepository graduationRequirementRepository; - private final GraduationRequirementMapper mapper; - - @Override - public GraduationRequirement findGraduationRequirement(User user) { - if (isDualMajorUser(user)) { - GraduationRequirementJpaEntity dualMajorRequirementEntity = graduationRequirementRepository.findDualMajorRequirementByUser( - College.findBelongingCollege(user.getMajor()), user.getEntryYear()); - GraduationRequirement graduationRequirement = mapper.mapToDomainModel(dualMajorRequirementEntity); - checkUserEnglishLevel(user, graduationRequirement); - return graduationRequirement; - } - GraduationRequirementJpaEntity singleMajorRequirementEntity = graduationRequirementRepository.findSingleMajorRequirementByUser( - College.findBelongingCollege(user.getMajor()), user.getEntryYear()); - GraduationRequirement graduationRequirement = mapper.mapToDomainModel(singleMajorRequirementEntity); - checkUserEnglishLevel(user, graduationRequirement); - return graduationRequirement; - } - - private boolean isDualMajorUser(User user) { - return user.getSubMajor() != null; - } - - private void checkUserEnglishLevel(User user, GraduationRequirement graduationRequirement) { - if (user.getEnglishLevel() == EnglishLevel.FREE) { - graduationRequirement.transferEnglishCategoryCredit(); - } - } -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/out/persistence/GraduationRequirementMapper.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/out/persistence/GraduationRequirementMapper.java deleted file mode 100644 index 8c45d015..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/out/persistence/GraduationRequirementMapper.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.adpater.out.persistence; - -import org.springframework.stereotype.Component; - -import com.plzgraduate.myongjigraduatebe.graduation.adpater.out.persistence.entity.GraduationRequirementJpaEntity; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; - -@Component -public class GraduationRequirementMapper { - - public GraduationRequirement mapToDomainModel(GraduationRequirementJpaEntity entity) { - return GraduationRequirement.builder() - .totalCredit(entity.getTotalCredit()) - .majorCredit(entity.getMajorCredit()) - .subMajorCredit(entity.getSubMajorCredit()) - .basicAcademicalCredit(entity.getBasicAcademicalCredit()) - .commonCultureCredit(entity.getCommonCultureCredit()) - .coreCultureCredit(entity.getCoreCultureCredit()) - .normalCultureCredit(entity.getNormalCultureCredit()) - .freeElectiveCredit(entity.getFreeElectiveCredit()) - .build(); - } -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/out/persistence/GraduationRequirementRepository.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/out/persistence/GraduationRequirementRepository.java deleted file mode 100644 index 0c3bd0be..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/out/persistence/GraduationRequirementRepository.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.adpater.out.persistence; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; - -import com.plzgraduate.myongjigraduatebe.graduation.adpater.out.persistence.entity.GraduationRequirementJpaEntity; -import com.plzgraduate.myongjigraduatebe.user.domain.model.College; - -public interface GraduationRequirementRepository extends JpaRepository { - - @Query("select gr from GraduationRequirementJpaEntity gr where gr.college = :college and gr.startEntryYear <= :entryYear and gr.endEntryYear >= :entryYear and gr.subMajorCredit = 0") - GraduationRequirementJpaEntity findSingleMajorRequirementByUser( - @Param("college") College college, - @Param("entryYear") int startEntryYear - ); - - @Query("select gr from GraduationRequirementJpaEntity gr where gr.college = :college and gr.startEntryYear <= :entryYear and gr.endEntryYear >= :entryYear and gr.subMajorCredit > 0") - GraduationRequirementJpaEntity findDualMajorRequirementByUser( - @Param("college") College college, - @Param("entryYear") int startEntryYear - ); -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/out/persistence/entity/GraduationRequirementJpaEntity.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/out/persistence/entity/GraduationRequirementJpaEntity.java deleted file mode 100644 index 203141f0..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/out/persistence/entity/GraduationRequirementJpaEntity.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.adpater.out.persistence.entity; - -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; - -import com.plzgraduate.myongjigraduatebe.user.domain.model.College; - -import lombok.AccessLevel; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Entity -@Table(name = "graduation_requirement") -@Getter -@NoArgsConstructor(access = AccessLevel.PROTECTED) -public class GraduationRequirementJpaEntity{ - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - private int totalCredit; - - private int majorCredit; - - private int subMajorCredit; - - private int basicAcademicalCredit; - - private int commonCultureCredit; - - private int coreCultureCredit; - - private int normalCultureCredit; - - private int freeElectiveCredit; - - @Enumerated(value = EnumType.STRING) - private College college; - - private int startEntryYear; - - private int endEntryYear; - - @Builder - private GraduationRequirementJpaEntity(Long id, int totalCredit, int majorCredit, int subMajorCredit, - int basicAcademicalCredit, int commonCultureCredit, int coreCultureCredit, int normalCultureCredit, - int freeElectiveCredit, College college, int startEntryYear, int endEntryYear) { - this.id = id; - this.totalCredit = totalCredit; - this.majorCredit = majorCredit; - this.subMajorCredit = subMajorCredit; - this.basicAcademicalCredit = basicAcademicalCredit; - this.commonCultureCredit = commonCultureCredit; - this.coreCultureCredit = coreCultureCredit; - this.normalCultureCredit = normalCultureCredit; - this.freeElectiveCredit = freeElectiveCredit; - this.college = college; - this.startEntryYear = startEntryYear; - this.endEntryYear = endEntryYear; - } -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/CalculateGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/CalculateGraduationService.java index 118c2e85..65fc1385 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/CalculateGraduationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/CalculateGraduationService.java @@ -1,7 +1,5 @@ package com.plzgraduate.myongjigraduatebe.graduation.application.port; -import static com.plzgraduate.myongjigraduatebe.user.domain.model.College.*; - import java.util.List; import java.util.Set; @@ -10,7 +8,6 @@ import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; import com.plzgraduate.myongjigraduatebe.graduation.application.port.in.response.GraduationResponse; import com.plzgraduate.myongjigraduatebe.graduation.application.port.in.CalculateGraduationUseCase; -import com.plzgraduate.myongjigraduatebe.graduation.application.port.out.FindGraduationRequirementPort; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.ChapelResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; @@ -33,6 +30,8 @@ import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.out.FindTakenLecturePort; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.domain.model.College; +import com.plzgraduate.myongjigraduatebe.user.domain.model.GraduationRequirementType; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; @@ -44,7 +43,6 @@ class CalculateGraduationService implements CalculateGraduationUseCase { private final FindUserUseCase findUserUseCase; - private final FindGraduationRequirementPort findGraduationRequirementPort; private final FindTakenLecturePort findTakenLecturePort; private final FindCommonCulturePort findCommonCulturePort; private final FindCoreCulturePort findCoreCulturePort; @@ -54,21 +52,26 @@ class CalculateGraduationService implements CalculateGraduationUseCase { @Override public GraduationResponse calculateGraduation(Long userId) { User user = findUserUseCase.findUserById(userId); - GraduationRequirement graduationRequirement = findGraduationRequirementPort.findGraduationRequirement(user); + GraduationRequirement graduationRequirement = determineGraduationRequirement(user); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from( findTakenLecturePort.findTakenLectureSetByUser(user)); ChapelResult chapelResult = generateChapelResult(takenLectureInventory); - List detailGraduationResults = generateDetailGraduationResults(user, takenLectureInventory, graduationRequirement); - GraduationResult graduationResult = generateGraduationResult(chapelResult, detailGraduationResults, takenLectureInventory, graduationRequirement); return GraduationResponse.of(user, graduationResult); } + private GraduationRequirement determineGraduationRequirement(User user) { + College userCollage = College.findBelongingCollege(user); + GraduationRequirementType defaultGraduationRequirement = GraduationRequirementType.determineGraduationRequirement( + userCollage, user); + return defaultGraduationRequirement.convertToProfitGraduationRequirement(user); + } + private ChapelResult generateChapelResult(TakenLectureInventory takenLectureInventory) { ChapelResult chapelResult = ChapelResult.create(takenLectureInventory); chapelResult.checkCompleted(); @@ -89,6 +92,8 @@ private List generateDetailGraduationResults(User user, DetailGraduationResult majorDetailGraduationResult = generateMajorDetailGraduationResult( user, takenLectureInventory, graduationRequirement); + // TODO: Additional Major check - DetailGraduationResult + return List.of(commonCultureGraduationResult, coreCultureDetailGraduationResult, basicAcademicalDetailGraduationResult, majorDetailGraduationResult); } @@ -123,7 +128,7 @@ private DetailGraduationResult generteBasicAcademicalDetailGraduationResult(User private GraduationManager determineBasicAcademicalCultureGraduationManager( User user) { GraduationManager basicAcademicalCultureGraduationManager; - switch (findBelongingCollege(user.getMajor())) { + switch (College.findBelongingCollege(user)) { case BUSINESS: basicAcademicalCultureGraduationManager = new BusinessBasicAcademicalManager(); break; @@ -146,8 +151,8 @@ private DetailGraduationResult generateMajorDetailGraduationResult(User user, } private GraduationResult generateGraduationResult(ChapelResult chapelResult, - List detailGraduationResults, - TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { + List detailGraduationResults, TakenLectureInventory takenLectureInventory, + GraduationRequirement graduationRequirement) { GraduationResult graduationResult = GraduationResult.create(chapelResult, detailGraduationResults); graduationResult.handleLeftTakenLectures(takenLectureInventory, graduationRequirement); graduationResult.checkGraduated(); diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/out/FindGraduationRequirementPort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/out/FindGraduationRequirementPort.java deleted file mode 100644 index 6759933b..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/out/FindGraduationRequirementPort.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.port.out; - -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; - -public interface FindGraduationRequirementPort { - - GraduationRequirement findGraduationRequirement(User user); -} 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 84dff855..6a7438c2 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 @@ -30,7 +30,7 @@ private GraduationRequirement(int totalCredit, int majorCredit, int subMajorCred this.freeElectiveCredit = freeElectiveCredit; } - public void transferEnglishCategoryCredit() { + public void transferEnglishCreditCommonToNormal() { commonCultureCredit -= ENGLISH.getTotalCredit(); normalCultureCredit += ENGLISH.getTotalCredit(); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindBasicAcademicalCulturePersistenceAdapter.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindBasicAcademicalCulturePersistenceAdapter.java index c6fb7b6d..eaef6507 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindBasicAcademicalCulturePersistenceAdapter.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindBasicAcademicalCulturePersistenceAdapter.java @@ -21,8 +21,8 @@ class FindBasicAcademicalCulturePersistenceAdapter implements FindBasicAcademica @Override public Set findBasicAcademicalCulture(User user) { - College userCollege = College.findBelongingCollege(user.getMajor()); - return basicAcademicalCultureRepository.findAllByCollege(userCollege.getText()).stream() + College userCollege = College.findBelongingCollege(user); + 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 e29591e9..b0b86c7d 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 @@ -17,12 +17,12 @@ public enum College { LAW("법대", List.of("법학과")), ICT("ICT융합대", List.of("디지털콘텐츠디자인학과", "응용소프트웨어전공", "데이터테크놀로지전공")); - private final String text; + private final String name; private final List holdingMajors; - public static College findBelongingCollege(String major) { + public static College findBelongingCollege(User user) { return Arrays.stream(College.values()) - .filter(college -> college.getHoldingMajors().contains(major)) + .filter(college -> college.getHoldingMajors().contains(user.getMajor())) .findFirst() .orElseThrow(() -> new IllegalArgumentException("소속 단과대가 존재하지 않습니다.")); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/GraduationRequirementType.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/GraduationRequirementType.java new file mode 100644 index 00000000..2b514f20 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/GraduationRequirementType.java @@ -0,0 +1,65 @@ +package com.plzgraduate.myongjigraduatebe.user.domain.model; + +import java.util.Arrays; +import java.util.NoSuchElementException; + +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum GraduationRequirementType { + // 단과대명|전공학점|공통교양학점|핵심교양학점|학문기초교양학점|일반교양학점|자유선택학점|전체학점|적용시작입학년도|적용마감입학년도 + 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), + BUSINESS_16_17("경영대", 63, 15, 12, 6, 10, 22, 128, 16, 17), + LAW_16_17("법과대", 63, 15, 12, 9, 10, 19, 128, 16, 17), + ICT_16_17("ICT융합대", 70, 15, 12, 18, 10, 9, 134, 16, 17), + HUMANITIES_18_99("인문대", 63, 17, 12, 12, 10, 14, 128, 18, 99), + SOCIAL_SCIENCE_18_99("사회과학대", 63, 17, 12, 12, 19, 14, 128, 18, 99), + BUSINESS_18_99("경영대", 63, 17, 12, 6, 10, 20, 128, 18, 99), + LAW_18_99("법과대", 63, 17, 12, 9, 10, 17, 128, 18, 99), + ICT_18_99("ICT융합대", 70, 17, 12, 18, 10, 7, 134, 18, 99); + + private final String collageName; + private final int majorLectureCredit; + private final int commonCultureCredit; + private final int coreCultureCredit; + private final int basicAcademicalLectureCredit; + private final int normalLectureCredit; + private final int freeElectiveLectureCredit; + private final int totalCredit; + private final int startEntryYear; + private final int endEntryYear; + + public static GraduationRequirementType determineGraduationRequirement(College college, User user) { + return Arrays.stream(GraduationRequirementType.values()) + .filter(gr -> gr.getCollageName().equals(college.getName())) + .filter(gr -> gr.getStartEntryYear() <= user.getEntryYear()&& gr.getEndEntryYear() >= user.getEntryYear()) + .findFirst() + .orElseThrow(() -> new NoSuchElementException("일치하는 졸업 요건이 존재하지 않습니다.")); + } + + public GraduationRequirement convertToProfitGraduationRequirement(User user) { + GraduationRequirement graduationRequirement = GraduationRequirement.builder() + .totalCredit(this.totalCredit) + .majorCredit(this.majorLectureCredit) + .basicAcademicalCredit(this.basicAcademicalLectureCredit) + .commonCultureCredit(this.commonCultureCredit) + .coreCultureCredit(this.coreCultureCredit) + .normalCultureCredit(this.normalLectureCredit) + .freeElectiveCredit(this.freeElectiveLectureCredit).build(); + + checkUserEnglishLevel(user, graduationRequirement); + //TODO: Additional Major에 따른 졸업요건 변화 체크 후 졸업 요건 학점 변화 적용 + return graduationRequirement; + } + + private void checkUserEnglishLevel(User user, GraduationRequirement graduationRequirement) { + if (user.getEnglishLevel() == EnglishLevel.FREE) { + graduationRequirement.transferEnglishCreditCommonToNormal(); + } + } +} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/out/persistence/FindGraduationRequirementPersistenceAdapterTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/out/persistence/FindGraduationRequirementPersistenceAdapterTest.java deleted file mode 100644 index 921ab857..00000000 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/out/persistence/FindGraduationRequirementPersistenceAdapterTest.java +++ /dev/null @@ -1,141 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.adpater.out.persistence; - -import static com.plzgraduate.myongjigraduatebe.user.domain.model.College.BUSINESS; - -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.fixture.UserFixture; -import com.plzgraduate.myongjigraduatebe.graduation.adpater.out.persistence.entity.GraduationRequirementJpaEntity; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; -import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; - -class FindGraduationRequirementPersistenceAdapterTest extends PersistenceTestSupport { - - private static final int SUB_MAJOR_CREDIT = 10; - - @Autowired - private GraduationRequirementRepository graduationRequirementRepository; - @Autowired - private FindGraduationRequirementPersistenceAdapter loadGraduationRequirementPersistenceAdapter; - - @DisplayName("단일 전공 유저의 입학년도에 해당하는 졸업요건을 반환한다.") - @Test - void findSingleMajorUserGraduationRequirement() { - //given - List graduationRequirements = createBusinessGraduationRequirements(); - graduationRequirementRepository.saveAll(graduationRequirements); - - User user = UserFixture.경영학과_19학번_ENG34(); - - //when - GraduationRequirement graduationRequirement = loadGraduationRequirementPersistenceAdapter.findGraduationRequirement( - user); - - //then - Assertions.assertThat(graduationRequirement) - .extracting("commonCultureCredit", "coreCultureCredit", "basicAcademica" - + "lCredit", "normalCultureCredit", "majorCredit", "freeElectiveCredit") - .contains(17, 12, 6, 10, 63, 20); - } - - @DisplayName("복수 전공 유저의 입학년도에 해당하는 졸업요건을 반환한다.") - @Test - void findDualMajorUserGraduationRequirement() { - //given - List graduationRequirements = createBusinessGraduationRequirements(); - graduationRequirementRepository.saveAll(graduationRequirements); - - User user = UserFixture.경영학과_19학번_ENG34_복수전공(); - - //when - GraduationRequirement graduationRequirement = loadGraduationRequirementPersistenceAdapter.findGraduationRequirement( - user); - - //then - Assertions.assertThat(graduationRequirement) - .extracting("subMajorCredit", "commonCultureCredit", "coreCultureCredit", "basicAcademica" - + "lCredit", "normalCultureCredit", "majorCredit", "freeElectiveCredit") - .contains(SUB_MAJOR_CREDIT, 15, 12, 6, 10, 63, 22); - } - - @DisplayName("영어 면제 유저의 졸업요건은 공통교양의 영어 카테고리 학점(6)이 일반교양 학점으로 이관된 졸업 요건이다.") - @Test - void findFreeEnglishLevelUserGraduationRequirement() { - //given - List graduationRequirements = createBusinessGraduationRequirements(); - graduationRequirementRepository.saveAll(graduationRequirements); - - User user = UserFixture.경영학과_19학번_영어_면제(); - - //when - GraduationRequirement graduationRequirement = loadGraduationRequirementPersistenceAdapter.findGraduationRequirement( - user); - - //then - Assertions.assertThat(graduationRequirement) - .extracting("commonCultureCredit", "normalCultureCredit") - .contains(11, 16); - } - - private List createBusinessGraduationRequirements() { - - //16~17 경영대 졸업 요건 - GraduationRequirementJpaEntity graduationRequirementJpaEntityA = GraduationRequirementJpaEntity.builder() - .college(BUSINESS) - .subMajorCredit(0) - .startEntryYear(16) - .endEntryYear(17) - .commonCultureCredit(15) - .coreCultureCredit(12) - .basicAcademicalCredit(6) - .normalCultureCredit(10) - .majorCredit(63) - .freeElectiveCredit(22).build(); - - GraduationRequirementJpaEntity graduationRequirementJpaEntityB = GraduationRequirementJpaEntity.builder() - .college(BUSINESS) - .subMajorCredit(SUB_MAJOR_CREDIT) - .startEntryYear(16) - .endEntryYear(17).commonCultureCredit(15) - .coreCultureCredit(12) - .basicAcademicalCredit(6) - .normalCultureCredit(10) - .majorCredit(63) - .freeElectiveCredit(22).build(); - - //18~23 경영대 졸업 요건 - GraduationRequirementJpaEntity graduationRequirementJpaEntityC = GraduationRequirementJpaEntity.builder() - .college(BUSINESS) - .subMajorCredit(0) - .startEntryYear(18) - .endEntryYear(23) - .commonCultureCredit(17) - .coreCultureCredit(12) - .basicAcademicalCredit(6) - .normalCultureCredit(10) - .majorCredit(63) - .freeElectiveCredit(20).build(); - - GraduationRequirementJpaEntity graduationRequirementJpaEntityD = GraduationRequirementJpaEntity.builder() - .college(BUSINESS) - .subMajorCredit(SUB_MAJOR_CREDIT) - .startEntryYear(18) - .endEntryYear(23) - .commonCultureCredit(15) - .coreCultureCredit(12) - .basicAcademicalCredit(6) - .normalCultureCredit(10) - .majorCredit(63) - .freeElectiveCredit(22).build(); - - return List.of(graduationRequirementJpaEntityA, graduationRequirementJpaEntityB, - graduationRequirementJpaEntityC, graduationRequirementJpaEntityD); - } - -} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/out/persistence/GraduationRequirementMapperTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/out/persistence/GraduationRequirementMapperTest.java deleted file mode 100644 index 6956e250..00000000 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/out/persistence/GraduationRequirementMapperTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.adpater.out.persistence; - -import static 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.graduation.adpater.out.persistence.entity.GraduationRequirementJpaEntity; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; -import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; - -class GraduationRequirementMapperTest extends PersistenceTestSupport { - - @Autowired - private GraduationRequirementMapper mapper; - - @DisplayName("졸업결과 jpa entitiy를 도메인 모델로 매핑한다.") - @Test - void mapToDomainModel() { - //given - int totalCredit = 10; - GraduationRequirementJpaEntity graduationRequirementJpaEntity = GraduationRequirementJpaEntity.builder() - .totalCredit(totalCredit).build(); - - //when - GraduationRequirement graduationRequirement = mapper.mapToDomainModel(graduationRequirementJpaEntity); - - //then - assertThat(graduationRequirement.getTotalCredit()).isEqualTo(totalCredit); - } - -} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/adpater/out/persistence/GraduationRequirementRepositoryTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/adpater/out/persistence/GraduationRequirementRepositoryTest.java deleted file mode 100644 index 8a89dcda..00000000 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/adpater/out/persistence/GraduationRequirementRepositoryTest.java +++ /dev/null @@ -1,110 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.adpater.out.persistence; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Stream; - -import org.assertj.core.api.Assertions; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.Arguments; -import org.junit.jupiter.params.provider.MethodSource; -import org.springframework.beans.factory.annotation.Autowired; - -import com.plzgraduate.myongjigraduatebe.fixture.UserFixture; -import com.plzgraduate.myongjigraduatebe.graduation.adpater.out.persistence.GraduationRequirementRepository; -import com.plzgraduate.myongjigraduatebe.graduation.adpater.out.persistence.entity.GraduationRequirementJpaEntity; -import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; -import com.plzgraduate.myongjigraduatebe.user.domain.model.College; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; - -class GraduationRequirementRepositoryTest extends PersistenceTestSupport { - - @Autowired - private GraduationRequirementRepository requirementRepository; - private static final int SUB_MAJOR_CREDIT = 10; - - - @BeforeEach - void setUp() { - List graduationRequirementJpaEntityList = new ArrayList<>(); - for (College college : College.values()) { - graduationRequirementJpaEntityList.addAll(List.of( - GraduationRequirementJpaEntity.builder() - .college(college) - .subMajorCredit(0) - .startEntryYear(16) - .endEntryYear(17).build(), - - GraduationRequirementJpaEntity.builder() - .college(college) - .subMajorCredit(0) - .startEntryYear(18) - .endEntryYear(23).build(), - - GraduationRequirementJpaEntity.builder() - .college(college) - .subMajorCredit(SUB_MAJOR_CREDIT) - .startEntryYear(16) - .endEntryYear(17).build(), - - GraduationRequirementJpaEntity.builder() - .college(college) - .subMajorCredit(SUB_MAJOR_CREDIT) - .startEntryYear(18) - .endEntryYear(23).build())); - } - requirementRepository.saveAll(graduationRequirementJpaEntityList); - } - - @DisplayName("유저의 소속 단과대명이 일치하고, 유저의 입학년도가 적용시작 년도, 적용마감 년도 사이에 속하는 단일 전공 졸업 조건을 조회한다.") - @ParameterizedTest - @MethodSource("users") - void findSingleMajorRequirementByUser(User user) { - //given - //when - GraduationRequirementJpaEntity graduationRequirementJpaEntity = requirementRepository.findSingleMajorRequirementByUser( - College.findBelongingCollege(user.getMajor()), - user.getEntryYear()); - - //then - Assertions.assertThat(graduationRequirementJpaEntity) - .extracting("college", "subMajorCredit") - .contains(College.findBelongingCollege(user.getMajor()), 0); - Assertions.assertThat(graduationRequirementJpaEntity.getStartEntryYear()) - .isLessThanOrEqualTo(user.getEntryYear()); - Assertions.assertThat(graduationRequirementJpaEntity.getEndEntryYear()) - .isGreaterThanOrEqualTo(user.getEntryYear()); - } - - @DisplayName("유저의 소속 단과대명이 일치하고, 유저의 입학년도가 적용시작 년도, 적용마감 년도 사이에 속하는 단일 전공 졸업 조건을 조회한다.") - @ParameterizedTest - @MethodSource("users") - void findDualMajorRequirementByUser(User user) { - //given - //when - GraduationRequirementJpaEntity graduationRequirementJpaEntity = requirementRepository.findDualMajorRequirementByUser( - College.findBelongingCollege(user.getMajor()), - user.getEntryYear()); - - //then - Assertions.assertThat(graduationRequirementJpaEntity) - .extracting("college", "subMajorCredit") - .contains(College.findBelongingCollege(user.getMajor()), SUB_MAJOR_CREDIT); - Assertions.assertThat(graduationRequirementJpaEntity.getStartEntryYear()) - .isLessThanOrEqualTo(user.getEntryYear()); - Assertions.assertThat(graduationRequirementJpaEntity.getEndEntryYear()) - .isGreaterThanOrEqualTo(user.getEntryYear()); - } - - static Stream users() { - return Stream.of( - Arguments.arguments(UserFixture.영문학과_16학번()), - Arguments.arguments(UserFixture.응용소프트웨어학과_17학번()), - Arguments.arguments(UserFixture.데이테크놀로지학과_18학번()), - Arguments.arguments(UserFixture.디지털콘텐츠디자인학과_23학번()) - ); - } - -} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/CalculateGraduationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/CalculateGraduationServiceTest.java deleted file mode 100644 index 3bd24d78..00000000 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/CalculateGraduationServiceTest.java +++ /dev/null @@ -1,129 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.port; - -import static com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCultureCategory.*; -import static com.plzgraduate.myongjigraduatebe.lecture.domain.model.CoreCultureCategory.*; -import static com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.Semester.*; -import static com.plzgraduate.myongjigraduatebe.user.domain.model.College.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.anyLong; -import static org.mockito.BDDMockito.given; - -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -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.fixture.LectureFixture; -import com.plzgraduate.myongjigraduatebe.fixture.UserFixture; -import com.plzgraduate.myongjigraduatebe.graduation.application.port.in.response.GraduationResponse; -import com.plzgraduate.myongjigraduatebe.graduation.application.port.out.FindGraduationRequirementPort; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.out.FindBasicAcademicalCulturePort; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.out.FindCommonCulturePort; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.out.FindCoreCulturePort; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.out.FindMajorPort; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCulture; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CoreCulture; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.out.FindTakenLecturePort; -import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; - -@ExtendWith(MockitoExtension.class) -class CalculateGraduationServiceTest { - - Map mockLectureMap = LectureFixture.getMockLectureMap(); - - @Mock - private FindUserUseCase findUserUseCase; - @Mock - private FindGraduationRequirementPort findGraduationRequirementPort; - @Mock - private FindTakenLecturePort findTakenLecturePort; - @Mock - private FindCommonCulturePort findCommonCulturePort; - @Mock - private FindCoreCulturePort findCoreCulturePort; - @Mock - private FindBasicAcademicalCulturePort findBasicAcademicalCulturePort; - @Mock - private FindMajorPort findMajorPort; - @InjectMocks - private CalculateGraduationService checkGraduationService; - - @DisplayName("유저 정보, 유저의 수강 과목 정보로 졸업 결과를 확인한다.") - @Test - void calculateGraduation() { - //given - User user = UserFixture.응용소프트웨어학과_19학번_영어_면제(); - given(findUserUseCase.findUserById(anyLong())).willReturn(user); - given(findGraduationRequirementPort.findGraduationRequirement(user)) - .willReturn(GraduationRequirement.builder() - .commonCultureCredit(9) - .coreCultureCredit(12) - .basicAcademicalCredit(3) - .majorCredit(3) - .normalCultureCredit(9) - .freeElectiveCredit(3) - .totalCredit(41).build()); - given(findTakenLecturePort.findTakenLectureSetByUser(user)) - .willReturn(new HashSet<>(Set.of( - TakenLecture.of(user, mockLectureMap.get("KMA00101"), 2019, FIRST), - TakenLecture.of(user, mockLectureMap.get("KMA02102"), 2019, FIRST), - TakenLecture.of(user, mockLectureMap.get("KMA02104"), 2019, FIRST), - TakenLecture.of(user, mockLectureMap.get("KMA02106"), 2019, FIRST), - TakenLecture.of(user, mockLectureMap.get("KMA02107"), 2019, FIRST), - TakenLecture.of(user, mockLectureMap.get("KMA02108"), 2019, FIRST), - TakenLecture.of(user, mockLectureMap.get("KMA02109"), 2019, FIRST), - TakenLecture.of(user, mockLectureMap.get("KMA02137"), 2019, FIRST), - TakenLecture.of(user, mockLectureMap.get("KMA02112"), 2019, FIRST), - TakenLecture.of(user, mockLectureMap.get("KMA02114"), 2019, FIRST), - TakenLecture.of(user, mockLectureMap.get("KMA02128"), 2019, FIRST), - TakenLecture.of(user, mockLectureMap.get("KMA02135"), 2019, FIRST), - TakenLecture.of(user, mockLectureMap.get("KMB02123"), 2019, FIRST), - TakenLecture.of(user, mockLectureMap.get("HED01206"), 2019, FIRST), - TakenLecture.of(user, mockLectureMap.get("KMA02101"), 2019, FIRST), - TakenLecture.of(user, mockLectureMap.get("KMA02101"), 2019, SECOND), - TakenLecture.of(user, mockLectureMap.get("KMA02101"), 2020, FIRST), - TakenLecture.of(user, mockLectureMap.get("KMA02101"), 2020, SECOND), - TakenLecture.of(user, mockLectureMap.get("KMA02113"), 2020, SECOND), - TakenLecture.of(user, mockLectureMap.get("KMA02130"), 2020, SECOND) - ))); - given(findCommonCulturePort.findCommonCulture(user)) - .willReturn(new HashSet<>(Set.of( - CommonCulture.of(mockLectureMap.get("KMA00101"), CHRISTIAN_A), - CommonCulture.of(mockLectureMap.get("KMA02102"), CHRISTIAN_A), - CommonCulture.of(mockLectureMap.get("KMA02104"), EXPRESSION), - CommonCulture.of(mockLectureMap.get("KMA02106"), ENGLISH), - CommonCulture.of(mockLectureMap.get("KMA02107"), ENGLISH), - CommonCulture.of(mockLectureMap.get("KMA02108"), ENGLISH), - CommonCulture.of(mockLectureMap.get("KMA02109"), ENGLISH), - CommonCulture.of(mockLectureMap.get("KMA02137"), CAREER)))); - given(findCoreCulturePort.findCoreCulture(user)) - .willReturn(new HashSet<>(Set.of( - CoreCulture.of(mockLectureMap.get("KMA02112"), HISTORY_PHILOSOPHY), - CoreCulture.of(mockLectureMap.get("KMA02114"), SOCIETY_COMMUNITY), - CoreCulture.of(mockLectureMap.get("KMA02128"), CULTURE_ART), - CoreCulture.of(mockLectureMap.get("KMA02135"), SCIENCE_TECHNOLOGY)))); - given(findBasicAcademicalCulturePort.findBasicAcademicalCulture(user)) - .willReturn(new HashSet<>( - Set.of(BasicAcademicalCultureLecture.of(mockLectureMap.get("KMB02123"), ICT.getText())))); - given((findMajorPort.findMajor(user))) - .willReturn(new HashSet<>(Set.of(MajorLecture.of(mockLectureMap.get("HED01206"), "응용소프트웨어", 1, 18, 20)))); - - //when - GraduationResponse graduationResponse = checkGraduationService.calculateGraduation(user.getId()); - - //then - assertThat(graduationResponse.isGraduated()).isTrue(); - } -} 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 d275891d..4bd88a29 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 @@ -19,7 +19,7 @@ void transferEnglishCategoryCredit() { .normalCultureCredit(beforeTransferNormalCultureCredit).build(); //when - graduationRequirement.transferEnglishCategoryCredit(); + graduationRequirement.transferEnglishCreditCommonToNormal(); //then assertThat(graduationRequirement.getCommonCultureCredit()) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindBasicAcademicalCulturePersistenceAdapterTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindBasicAcademicalCulturePersistenceAdapterTest.java index fe61843d..a69a4cdb 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindBasicAcademicalCulturePersistenceAdapterTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindBasicAcademicalCulturePersistenceAdapterTest.java @@ -44,11 +44,11 @@ void findBasicAcademicalCulture() { BasicAcademicalCultureLectureJpaEntity basicAcademicalCultureLectureJpaEntityA = BasicAcademicalCultureLectureJpaEntity.builder() .lectureJpaEntity(lectureJpaEntityA) - .college(ICT.getText()).build(); + .college(ICT.getName()).build(); BasicAcademicalCultureLectureJpaEntity basicAcademicalCultureLectureJpaEntityB = BasicAcademicalCultureLectureJpaEntity.builder() .lectureJpaEntity(lectureJpaEntityA) - .college(BUSINESS.getText()).build(); + .college(BUSINESS.getName()).build(); basicAcademicalCultureRepository.saveAll( List.of(basicAcademicalCultureLectureJpaEntityA, basicAcademicalCultureLectureJpaEntityB)); @@ -58,7 +58,7 @@ void findBasicAcademicalCulture() { //then assertThat(basicAcademicalCulture).hasSize(1) .extracting("college") - .contains(ICT.getText()); + .contains(ICT.getName()); } } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/domain/model/GraduationRequirementTypeTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/domain/model/GraduationRequirementTypeTest.java new file mode 100644 index 00000000..718e0848 --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/domain/model/GraduationRequirementTypeTest.java @@ -0,0 +1,71 @@ +package com.plzgraduate.myongjigraduatebe.user.domain.model; + +import static com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCultureCategory.*; +import static org.assertj.core.api.Assertions.*; + +import java.util.NoSuchElementException; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +import com.plzgraduate.myongjigraduatebe.fixture.UserFixture; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; + +class GraduationRequirementTypeTest { + + @DisplayName("학생의 소속 단과대와 입학년도로 기본졸업요건을 결정한다.") + @ParameterizedTest() + @ValueSource(ints = {16, 18}) + void determineGraduationRequirement(int entryYear) { + //given + College ict = College.ICT; + User user = User.builder() + .entryYear(entryYear).build(); + + //when + GraduationRequirementType graduationRequirement = GraduationRequirementType.determineGraduationRequirement(ict, + user); + + //then + assertThat(graduationRequirement.getCollageName()).isEqualTo(ict.getName()); + assertThat(graduationRequirement.getStartEntryYear()).isLessThanOrEqualTo(user.getEntryYear()); + assertThat(graduationRequirement.getEndEntryYear()).isGreaterThan(user.getEntryYear()); + } + + @DisplayName("학생의 입학년도가 16년도 미만일 경우 에러를 발생시킨다.") + @ParameterizedTest() + @ValueSource(ints = {14, 15}) + void determineGraduationRequirementWithIllegalUser(int entryYear) { + //given + College ict = College.ICT; + User user = User.builder() + .entryYear(entryYear).build(); + + //when //then + assertThatThrownBy(() -> GraduationRequirementType.determineGraduationRequirement(ict, user)) + .isInstanceOf(NoSuchElementException.class) + .hasMessage("일치하는 졸업 요건이 존재하지 않습니다."); + } + + @DisplayName("영어 면제 학생의 졸업요건을 매핑한다.") + @Test() + void convertToProfitGraduationRequirementWithFreeEnglishUser() { + //given + User freeEnglishUser = UserFixture.경영학과_19학번_영어_면제(); + College ict = College.ICT; + GraduationRequirementType graduationRequirementType = GraduationRequirementType.determineGraduationRequirement( + ict, freeEnglishUser); + + //when + GraduationRequirement graduationRequirement = graduationRequirementType.convertToProfitGraduationRequirement( + freeEnglishUser); + + // then + assertThat(graduationRequirement.getCommonCultureCredit()).isEqualTo( + graduationRequirementType.getCommonCultureCredit() - ENGLISH.getTotalCredit()); + assertThat(graduationRequirement.getNormalCultureCredit()).isEqualTo( + graduationRequirementType.getNormalLectureCredit() + ENGLISH.getTotalCredit()); + } +} From 2b7fdcbd8425c0c8a78709ead93ec80037bff29b Mon Sep 17 00:00:00 2001 From: 5uhwann <106325839+5uhwann@users.noreply.github.com> Date: Mon, 22 Jan 2024 12:59:18 +0900 Subject: [PATCH 02/27] =?UTF-8?q?chore:=20dn-rule=20=EC=9B=8C=ED=81=AC?= =?UTF-8?q?=ED=94=8C=EB=A1=9C=EC=9A=B0=20=EC=8A=A4=ED=81=AC=EB=A6=BD?= =?UTF-8?q?=ED=8A=B8=20=EC=9E=91=EC=84=B1=20(#237)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: dn-rule 워크플로우 스크립트 작성 * chore: dn-rule 워크플로우 스크립트 수정 * chore: dn-rule 워크플로우 스크립트 수정 * chore: dn-rule 워크플로우 스크립트 수정 * chore: dn-rule 워크플로우 pull_request 적용 타입 수정 --- .github/workflows/dn-rule.yml | 68 +++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 .github/workflows/dn-rule.yml diff --git a/.github/workflows/dn-rule.yml b/.github/workflows/dn-rule.yml new file mode 100644 index 00000000..4fb5d42c --- /dev/null +++ b/.github/workflows/dn-rule.yml @@ -0,0 +1,68 @@ +name: PR Label Automation +on: + pull_request: + types: [ opened ] + schedule: + - cron: '0 0 * * *' # 매일 자정에 실행 + +jobs: + update-labels: + runs-on: ubuntu-latest + steps: + - name: Check and Update PR Labels + uses: actions/github-script@v5 + with: + script: | + const repo = context.repo; + const prNumber = context.payload.pull_request ? context.payload.pull_request.number : context.issue.number; + + // PR 레이블 가져오기 + const { data: pr } = await github.rest.pulls.get({ + owner: repo.owner, + repo: repo.repo, + pull_number: prNumber, + }); + + let labels = pr.labels.map(label => label.name); + const hasDLabel = labels.some(label => label.startsWith("D-")); + + // 'D-' 레이블이 없는 경우 'D-5' 레이블 추가 + if (!hasDLabel) { + await github.rest.issues.addLabels({ + owner: repo.owner, + repo: repo.repo, + issue_number: prNumber, + labels: ['D-5'], + }); + console.log("Added D-5 label to PR"); + } + + // 'D-x' 레이블 확인 및 업데이트 + for (let label of labels) { + if (label.startsWith("D-") && label !== "D-0") { + let day = parseInt(label.split("-")[1]); + if (day > 0) { + let newLabel = `D-${day - 1}`; + // 먼저 기존 레이블을 제거 + await github.rest.issues.removeLabel({ + owner: repo.owner, + repo: repo.repo, + issue_number: prNumber, + name: label, + }); + // 새 레이블 추가 + await github.rest.issues.addLabels({ + owner: repo.owner, + repo: repo.repo, + issue_number: prNumber, + labels: [newLabel], + }); + console.log(`Updated label from ${label} to ${newLabel}`); + } + + if (day === 1) { + // 'D-0' 처리 로직 + } + break; + } + } From 2bfdc84b41ac37248ca00eac993f27208956ac5a Mon Sep 17 00:00:00 2001 From: 5uhwann <5uhwann27@gmail.com> Date: Fri, 9 Feb 2024 14:21:43 +0900 Subject: [PATCH 03/27] =?UTF-8?q?fix:=20=EA=B3=BC=EB=AA=A9=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95=20=ED=8F=90?= =?UTF-8?q?=EC=A7=80=20=EC=97=AC=EB=B6=80=EA=B0=80=20=EB=B0=98=EB=8C=80?= =?UTF-8?q?=EB=A1=9C=20=EB=82=98=EC=98=A4=EB=8A=94=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 --- .../lecture/application/port/in/search/LectureResponse.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/in/search/LectureResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/in/search/LectureResponse.java index 9af79bb0..140b64bc 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/in/search/LectureResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/in/search/LectureResponse.java @@ -34,7 +34,7 @@ public static LectureResponse of(Lecture lecture) { .lectureCode(lecture.getLectureCode()) .name(lecture.getName()) .credit(lecture.getCredit()) - .isRevoked(lecture.getIsRevoked() == 0) + .isRevoked(lecture.getIsRevoked() != 0) .build(); } } From 673a36f6678b49bd4884279c204a8df05ab0c5f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=EC=A7=80=ED=99=98?= <64758861+stophwan@users.noreply.github.com> Date: Thu, 15 Feb 2024 23:31:08 +0900 Subject: [PATCH 04/27] =?UTF-8?q?fix:=20github=20actions=20test=20?= =?UTF-8?q?=EA=B9=A8=EC=A7=90=20=ED=95=B4=EA=B2=B0=20(#240)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: add hibernate dialect * fix: test containers 에러 해결 * fix: 과목검색 test 깨짐 수정 * fix: sonarqube jdk 수정 --------- Co-authored-by: 5uhwann <5uhwann27@gmail.com> --- .github/workflows/sonarqube.yml | 23 ++++++++++++------- build.gradle | 16 +++++-------- .../port/in/search/SearchLectureResponse.java | 1 + .../search/SearchLectureServiceTest.java | 4 ++-- src/test/resources/application-test.yml | 3 ++- 5 files changed, 26 insertions(+), 21 deletions(-) diff --git a/.github/workflows/sonarqube.yml b/.github/workflows/sonarqube.yml index 88b0f44f..5fc5c729 100644 --- a/.github/workflows/sonarqube.yml +++ b/.github/workflows/sonarqube.yml @@ -32,19 +32,26 @@ jobs: uses: actions/cache@v3 with: path: | - ~/.gradle/caches - ~/.gradle/wrapper + ~/.gradle/caches + ~/.gradle/wrapper key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} restore-keys: | - ${{ runner.os }}-gradle- + ${{ runner.os }}-gradle- - - # Gradle wrapper 파일 실행 권한주기 - name: Grant execute permission for gradlew run: chmod +x gradlew - - name: Build and analyze + - name: Build with Gradle + run: ./gradlew build --info + + - name: Set up JDK 17 for SonarQube + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: 17 + + - name: Run SonarQube analysis with JDK 17 env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - run: ./gradlew build sonarqube --info + run: ./gradlew sonarqube --info diff --git a/build.gradle b/build.gradle index d7c2a754..0744852a 100644 --- a/build.gradle +++ b/build.gradle @@ -26,7 +26,6 @@ repositories { ext { set('snippetsDir', file("build/generated-snippets")) - set('testcontainersVersion', "1.17.3") set('queryDslVersion', "5.0.0") } @@ -46,8 +45,9 @@ 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' runtimeOnly 'mysql:mysql-connector-java' compileOnly 'org.projectlombok:lombok' @@ -55,23 +55,19 @@ dependencies { annotationProcessor 'org.projectlombok:lombok' annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor' - testImplementation 'org.testng:testng:7.1.0' + testImplementation 'org.testng:testng:7.9.0' testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.restdocs:spring-restdocs-mockmvc' testImplementation 'org.springframework.security:spring-security-test' testImplementation 'org.testcontainers:junit-jupiter' - testImplementation 'org.testcontainers:mysql' + testImplementation 'org.testcontainers:testcontainers:1.19.0' + testImplementation 'org.testcontainers:mysql:1.19.0' + testImplementation 'org.testcontainers:junit-jupiter:1.13.0' asciidoctorExt 'org.springframework.restdocs:spring-restdocs-asciidoctor' } -dependencyManagement { - imports { - mavenBom "org.testcontainers:testcontainers-bom:${testcontainersVersion}" - } -} - tasks.named('asciidoctor') { inputs.dir snippetsDir diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/in/search/SearchLectureResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/in/search/SearchLectureResponse.java index 4ec70014..1ae2a1ce 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/in/search/SearchLectureResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/in/search/SearchLectureResponse.java @@ -9,6 +9,7 @@ @Getter @NoArgsConstructor public class SearchLectureResponse { + private List lectures; @Builder diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/search/SearchLectureServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/search/SearchLectureServiceTest.java index a57526e7..d3480101 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/search/SearchLectureServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/search/SearchLectureServiceTest.java @@ -47,8 +47,8 @@ void searchLectures() { .hasSize(2) .extracting("id", "lectureCode", "name", "credit", "isRevoked") .containsExactlyInAnyOrder( - tuple(1L, "code1", "기초웹프로그래밍", 3, true), - tuple(2L, "code2", "앱과웹기초", 2, false) + tuple(1L, "code1", "기초웹프로그래밍", 3, false), + tuple(2L, "code2", "앱과웹기초", 2, true) ); } diff --git a/src/test/resources/application-test.yml b/src/test/resources/application-test.yml index 3d8ffcda..4fd5754e 100644 --- a/src/test/resources/application-test.yml +++ b/src/test/resources/application-test.yml @@ -4,7 +4,7 @@ spring: on-profile: test datasource: - url: jdbc:tc:mysql:8:///mju-graduate + url: jdbc:tc:mysql:8.0.29:///mju-graduate driver-class-name: org.testcontainers.jdbc.ContainerDatabaseDriver username: password: @@ -16,6 +16,7 @@ spring: properties: hibernate: format_sql: false + dialect: org.hibernate.dialect.MySQL8Dialect server: port: 8080 From 825ca3ffab0b2e8c87bdde7f6de546ff9b49ae72 Mon Sep 17 00:00:00 2001 From: 5uhwann <106325839+5uhwann@users.noreply.github.com> Date: Fri, 16 Feb 2024 00:01:36 +0900 Subject: [PATCH 05/27] =?UTF-8?q?feat:=20=EB=B6=80=EC=A0=84=EA=B3=B5=20?= =?UTF-8?q?=ED=95=99=EC=83=9D=20=EC=A1=B8=EC=97=85=20=EC=9A=94=EA=B1=B4=20?= =?UTF-8?q?=EA=B2=80=EC=82=AC=20=EA=B8=B0=EB=8A=A5=20(#238)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 부전공 학생 졸업 요건 조정 자유선택 졸업 학점 -> 0 * refactor: FindMajorPort 메서드 시그니처 수정 * feat: SubMajor DetailGraduationResult 생성 구현 * feat: 부전공 졸업 검사 전체 결과 response & user MajorResponse 추가 * feat: jackson - null값 필드 생략 설정 추가 * refactor: 복수전공 파싱 추가 * refactor: 불필요 어노테이션 삭제 * refactor: warning 제거 * refactor: 불필요 주석 삭제 * chore: dn-rule 워크플로우 스크립트 작성 (#237) * chore: dn-rule 워크플로우 스크립트 작성 * chore: dn-rule 워크플로우 스크립트 수정 * chore: dn-rule 워크플로우 스크립트 수정 * chore: dn-rule 워크플로우 스크립트 수정 * chore: dn-rule 워크플로우 pull_request 적용 타입 수정 * chore: dn-rule 워크플로우 수정 * refactor: 리뷰내용 반영 * chore: 깃헙 워크플로우 action 버전 수정 * build: 불필요 의존성 제거 * chore: 깃헙 워크플로우 삭제 * chore: pr-test 워크플로우 수정 * chore: pr-test 워크플로우 수정 * chore: 워크플로우 스크립트 버전 수정 * chore: application-test.yml database dialect 명시 * chore: application-test.yml database dialect 수정 * chore: testContainer를 위한 docker 설치 step 추가 * chore: testContainer를 위한 docker 설치 step 추가 * chore: 워크플로우 수정 * chore: 워크플로우 수정 * chore: 워크플로우 수정 * chore: 워크플로우 수정 * chore: 워크플로우 수정 * chore: 워크플로우 수정 * chore: 워크플로우 테스트 * refactor: 복수전공 상세 졸업결과 카테고리 미 존재 시 exception 제거 * test: 과목 검색 오류 수정 테스트 수정 폐지 여부가 반대로 나오는 오류 수정 * test: 과목 검색 오류 수정 테스트 수정 폐지 여부가 반대로 나오는 오류 수정 * chore: dn-rule 수정 * chore: 워크플로우 스크립트 버전 수정 --- .github/workflows/dn-rule.yml | 70 +++++------ .github/workflows/pr-test.yml | 2 +- .husky/prepare-commit-msg | 1 + .../port/CalculateGraduationService.java | 42 ++++--- .../port/in/response/BasicInfoResponse.java | 7 +- .../port/in/response/GraduationResponse.java | 10 +- .../port/in/response/MajorInfoResponse.java | 36 ++++++ .../domain/model/GraduationCategory.java | 1 + .../domain/model/GraduationRequirement.java | 6 +- .../service/submajor/SubMajorManager.java | 53 ++++++++ .../FindMajorPersistenceAdapter.java | 4 +- .../application/port/out/FindMajorPort.java | 3 +- .../service/ParsingTextService.java | 16 ++- .../parsing/domain/ParsingInformation.java | 7 +- .../model/GraduationRequirementType.java | 11 +- .../user/domain/model/StudentCategory.java | 3 +- src/main/resources/application.yml | 3 + .../fixture/UserFixture.java | 5 + .../model/GraduationRequirementTest.java | 14 +++ .../service/submajor/SubMajorManagerTest.java | 113 ++++++++++++++++++ .../FindMajorPersistenceAdapterTest.java | 2 +- .../service/ParsingTextServiceTest.java | 63 +++++++--- .../domain/ParsingInformationTest.java | 23 +++- .../model/GraduationRequirementTypeTest.java | 20 +++- 24 files changed, 418 insertions(+), 97 deletions(-) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/MajorInfoResponse.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/submajor/SubMajorManager.java create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/submajor/SubMajorManagerTest.java diff --git a/.github/workflows/dn-rule.yml b/.github/workflows/dn-rule.yml index 4fb5d42c..c9503b83 100644 --- a/.github/workflows/dn-rule.yml +++ b/.github/workflows/dn-rule.yml @@ -1,9 +1,7 @@ name: PR Label Automation on: - pull_request: - types: [ opened ] schedule: - - cron: '0 0 * * *' # 매일 자정에 실행 + - cron: '0 0 * * *' # Executes daily at midnight jobs: update-labels: @@ -14,55 +12,49 @@ jobs: with: script: | const repo = context.repo; - const prNumber = context.payload.pull_request ? context.payload.pull_request.number : context.issue.number; - // PR 레이블 가져오기 - const { data: pr } = await github.rest.pulls.get({ + // Fetch all open PRs + const prs = await github.rest.pulls.list({ owner: repo.owner, repo: repo.repo, - pull_number: prNumber, + state: 'open', }); - let labels = pr.labels.map(label => label.name); - const hasDLabel = labels.some(label => label.startsWith("D-")); + for (const pr of prs.data) { + const prNumber = pr.number; + let labels = pr.labels.map(label => label.name); - // 'D-' 레이블이 없는 경우 'D-5' 레이블 추가 - if (!hasDLabel) { - await github.rest.issues.addLabels({ - owner: repo.owner, - repo: repo.repo, - issue_number: prNumber, - labels: ['D-5'], - }); - console.log("Added D-5 label to PR"); - } - - // 'D-x' 레이블 확인 및 업데이트 - for (let label of labels) { - if (label.startsWith("D-") && label !== "D-0") { - let day = parseInt(label.split("-")[1]); - if (day > 0) { - let newLabel = `D-${day - 1}`; - // 먼저 기존 레이블을 제거 + // Function to update label + async function updateLabel(oldLabel, newLabel) { + if (oldLabel) { await github.rest.issues.removeLabel({ owner: repo.owner, repo: repo.repo, issue_number: prNumber, - name: label, + name: oldLabel, }); - // 새 레이블 추가 - await github.rest.issues.addLabels({ - owner: repo.owner, - repo: repo.repo, - issue_number: prNumber, - labels: [newLabel], - }); - console.log(`Updated label from ${label} to ${newLabel}`); } + await github.rest.issues.addLabels({ + owner: repo.owner, + repo: repo.repo, + issue_number: prNumber, + labels: [newLabel], + }); + } - if (day === 1) { - // 'D-0' 처리 로직 + // Check and update 'D-x' labels + let dLabel = labels.find(label => label.startsWith("D-")); + if (dLabel) { + let day = parseInt(dLabel.split("-")[1]); + if (day > 0) { + await updateLabel(dLabel, `D-${day - 1}`); + console.log(`Updated label from ${dLabel} to D-${day - 1} on PR #${prNumber}`); + } else if (day === 0) { + // Handle 'D-0' logic here } - break; + } else { + // Add 'D-5' label if no 'D-' label is present + await updateLabel(null, 'D-5'); + console.log(`Added D-5 label to PR #${prNumber}`); } } diff --git a/.github/workflows/pr-test.yml b/.github/workflows/pr-test.yml index 7bea960a..af4eeb22 100644 --- a/.github/workflows/pr-test.yml +++ b/.github/workflows/pr-test.yml @@ -36,7 +36,7 @@ jobs: # Gradle test를 실행 후 report 추출 - name: Test with Gradle run: ./gradlew build jacocoTestReport - + # report 업로드하기 - name: Upload coverage to Codecov uses: codecov/codecov-action@v3.1.1 diff --git a/.husky/prepare-commit-msg b/.husky/prepare-commit-msg index 1937ee57..511ddbdf 100755 --- a/.husky/prepare-commit-msg +++ b/.husky/prepare-commit-msg @@ -10,6 +10,7 @@ TYPE_LIST=( style chore test + build docs ) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/CalculateGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/CalculateGraduationService.java index 65fc1385..14e6a383 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/CalculateGraduationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/CalculateGraduationService.java @@ -1,5 +1,6 @@ package com.plzgraduate.myongjigraduatebe.graduation.application.port; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -19,6 +20,7 @@ import com.plzgraduate.myongjigraduatebe.graduation.domain.service.commonculture.CommonCultureGraduationManager; import com.plzgraduate.myongjigraduatebe.graduation.domain.service.coreculture.CoreCultureGraduationManager; import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorManager; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.submajor.SubMajorManager; import com.plzgraduate.myongjigraduatebe.lecture.application.port.out.FindBasicAcademicalCulturePort; import com.plzgraduate.myongjigraduatebe.lecture.application.port.out.FindCommonCulturePort; import com.plzgraduate.myongjigraduatebe.lecture.application.port.out.FindCoreCulturePort; @@ -32,6 +34,7 @@ import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserUseCase; import com.plzgraduate.myongjigraduatebe.user.domain.model.College; import com.plzgraduate.myongjigraduatebe.user.domain.model.GraduationRequirementType; +import com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; @@ -59,6 +62,7 @@ public GraduationResponse calculateGraduation(Long userId) { ChapelResult chapelResult = generateChapelResult(takenLectureInventory); List detailGraduationResults = generateDetailGraduationResults(user, takenLectureInventory, graduationRequirement); + GraduationResult graduationResult = generateGraduationResult(chapelResult, detailGraduationResults, takenLectureInventory, graduationRequirement); @@ -80,22 +84,23 @@ private ChapelResult generateChapelResult(TakenLectureInventory takenLectureInve private List generateDetailGraduationResults(User user, TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { - DetailGraduationResult commonCultureGraduationResult = generateCommonCultureDetailGraduationResult( - user, takenLectureInventory, graduationRequirement); - - DetailGraduationResult coreCultureDetailGraduationResult = generateCoreCultureDetailGraduationResult( - user, takenLectureInventory, graduationRequirement); - - DetailGraduationResult basicAcademicalDetailGraduationResult = generteBasicAcademicalDetailGraduationResult( - user, takenLectureInventory, graduationRequirement); - - DetailGraduationResult majorDetailGraduationResult = generateMajorDetailGraduationResult( - user, takenLectureInventory, graduationRequirement); + List detailGraduationResults = new ArrayList<>(List.of( + generateCommonCultureDetailGraduationResult( + user, takenLectureInventory, graduationRequirement), + generateCoreCultureDetailGraduationResult( + user, takenLectureInventory, graduationRequirement), + generteBasicAcademicalDetailGraduationResult( + user, takenLectureInventory, graduationRequirement), + generateMajorDetailGraduationResult( + user, takenLectureInventory, graduationRequirement) + )); // TODO: Additional Major check - DetailGraduationResult + if (user.getStudentCategory() == StudentCategory.SUB_MAJOR) { + detailGraduationResults.add(generateSubMajorDetailGraduationResult(user, takenLectureInventory)); + } - return List.of(commonCultureGraduationResult, coreCultureDetailGraduationResult, - basicAcademicalDetailGraduationResult, majorDetailGraduationResult); + return detailGraduationResults; } private DetailGraduationResult generateCommonCultureDetailGraduationResult(User user, @@ -144,12 +149,21 @@ private GraduationManager determineBasicAcademica private DetailGraduationResult generateMajorDetailGraduationResult(User user, TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { - Set graduationMajorLectures = findMajorPort.findMajor(user); + Set graduationMajorLectures = findMajorPort.findMajor(user.getMajor()); GraduationManager majorGraduationManager = new MajorManager(); return majorGraduationManager.createDetailGraduationResult(user, takenLectureInventory, graduationMajorLectures, graduationRequirement.getMajorCredit()); } + private DetailGraduationResult generateSubMajorDetailGraduationResult(User user, + TakenLectureInventory takenLectureInventory) { + int requireSubMajorCredit = 21; + Set graduationSubMajorLectures = findMajorPort.findMajor(user.getSubMajor()); + GraduationManager subMajorManager = new SubMajorManager(); + return subMajorManager.createDetailGraduationResult(user, takenLectureInventory, graduationSubMajorLectures, + requireSubMajorCredit); + } + private GraduationResult generateGraduationResult(ChapelResult chapelResult, List detailGraduationResults, TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/BasicInfoResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/BasicInfoResponse.java index 44dd4dee..6961fc10 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/BasicInfoResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/BasicInfoResponse.java @@ -14,15 +14,14 @@ public class BasicInfoResponse { private final String name; @Schema(name = "studentNumber", example = "60202000") private final String studentNumber; - @Schema(name = "major", example = "응용소프트웨어전공") - private final String major; + private final MajorInfoResponse major; @Schema(name = "totalCredit", example = "132") private final int totalCredit; @Schema(name = "takenCredit", example = "50") private final double takenCredit; @Builder - private BasicInfoResponse(String name, String studentNumber, String major, int totalCredit, double takenCredit) { + private BasicInfoResponse(String name, String studentNumber, MajorInfoResponse major, int totalCredit, double takenCredit) { this.name = name; this.studentNumber = studentNumber; this.major = major; @@ -34,7 +33,7 @@ public static BasicInfoResponse of(User user, GraduationResult graduationResult) return BasicInfoResponse.builder() .name(user.getName()) .studentNumber(user.getStudentNumber()) - .major(user.getMajor()) + .major(MajorInfoResponse.from(user)) .totalCredit(graduationResult.getTotalCredit()) .takenCredit(graduationResult.getTakenCredit()).build(); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/GraduationResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/GraduationResponse.java index bca04f67..2e0ebe77 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/GraduationResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/GraduationResponse.java @@ -19,6 +19,9 @@ public class GraduationResponse { 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") @@ -28,13 +31,15 @@ public class GraduationResponse { private GraduationResponse(BasicInfoResponse basicInfo, ChapelResultResponse chapelResult, DetailGraduationResultResponse commonCulture, DetailGraduationResultResponse coreCulture, DetailGraduationResultResponse basicAcademicalCulture, DetailGraduationResultResponse major, - RestResultResponse normalCulture, RestResultResponse freeElective, boolean graduated) { + 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; @@ -48,6 +53,7 @@ public static GraduationResponse of(User user, GraduationResult graduationResult .coreCulture(findDetailGraduationResultResponse(graduationResult, CORE_CULTURE)) .basicAcademicalCulture(findDetailGraduationResultResponse(graduationResult, BASIC_ACADEMICAL_CULTURE)) .major(findDetailGraduationResultResponse(graduationResult, MAJOR)) + .subMajor(findDetailGraduationResultResponse(graduationResult, SUB_MAJOR)) .normalCulture( RestResultResponse.fromNormalCultureResult(graduationResult.getNormalCultureGraduationResult())) .freeElective(RestResultResponse.fromFreeElectiveResult(graduationResult.getFreeElectiveGraduationResult())) @@ -62,6 +68,6 @@ private static DetailGraduationResultResponse findDetailGraduationResultResponse .equals(graduationCategory.getName())) .map(DetailGraduationResultResponse::from) .findFirst() - .orElseThrow(IllegalArgumentException::new); + .orElse(null); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/MajorInfoResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/MajorInfoResponse.java new file mode 100644 index 00000000..77308621 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/MajorInfoResponse.java @@ -0,0 +1,36 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.port.in.response; + + +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 MajorInfoResponse { + + @Schema(name = "primaryMajor", example = "데이터테크놀로지전공") + private final String primaryMajor; + @Schema(name = "doubleMajor", example = "융합소프트웨어전공", nullable = true) + private final String doubleMajor; + @Schema(name = "subMajor", example = "융합소프트웨어전공", nullable = true) + private final String subMajor; + + @Builder + private MajorInfoResponse(String primaryMajor, String doubleMajor, String subMajor) { + this.primaryMajor = primaryMajor; + this.doubleMajor = doubleMajor; + this.subMajor = subMajor; + } + + public static MajorInfoResponse from(User user) { + return MajorInfoResponse.builder() + .primaryMajor(user.getMajor()) + .subMajor(user.getSubMajor()) + .doubleMajor(null) //TODO: 복수전공 추가 + .build(); + } + +} 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 01deb02d..866ad752 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 @@ -15,6 +15,7 @@ public enum GraduationCategory { CORE_CULTURE("핵심교양"), BASIC_ACADEMICAL_CULTURE("학문기초교양"), MAJOR("전공"), + SUB_MAJOR("부전공"), NORMAL_CULTURE("일반교양"), FREE_ELECTIVE("자유선택"); 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 6a7438c2..ac248d29 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 @@ -15,7 +15,7 @@ public class GraduationRequirement { private int commonCultureCredit; private final int coreCultureCredit; private int normalCultureCredit; - private final int freeElectiveCredit; + private int freeElectiveCredit; @Builder private GraduationRequirement(int totalCredit, int majorCredit, int subMajorCredit, int basicAcademicalCredit, @@ -34,4 +34,8 @@ public void transferEnglishCreditCommonToNormal() { commonCultureCredit -= ENGLISH.getTotalCredit(); normalCultureCredit += ENGLISH.getTotalCredit(); } + + public void deleteFreeElectiveCredit() { + freeElectiveCredit = 0; + } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/submajor/SubMajorManager.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/submajor/SubMajorManager.java new file mode 100644 index 00000000..2c5fd986 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/submajor/SubMajorManager.java @@ -0,0 +1,53 @@ +package com.plzgraduate.myongjigraduatebe.graduation.domain.service.submajor; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +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.graduation.domain.service.GraduationManager; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +public class SubMajorManager implements GraduationManager { + + @Override + public DetailGraduationResult createDetailGraduationResult(User user, TakenLectureInventory takenLectureInventory, + Set graduationLectures, int graduationResultTotalCredit) { + Set removedTakenLecture = new HashSet<>(); + DetailCategoryResult detailCategoryResult = generateDetailCategoryResult(takenLectureInventory, + graduationLectures, removedTakenLecture, graduationResultTotalCredit); + + takenLectureInventory.handleFinishedTakenLectures(removedTakenLecture); + + return DetailGraduationResult.create(GraduationCategory.SUB_MAJOR, graduationResultTotalCredit, + List.of(detailCategoryResult)); + } + + private DetailCategoryResult generateDetailCategoryResult(TakenLectureInventory takenLectureInventory, + Set graduationLectures, Set removedTakenLecture, int graduationResultTotalCredit) { + boolean isSatisfiedMandatory = true; + Set subMajorGraduationLectures = graduationLectures.stream() + .map(MajorLecture::getLecture) + .collect(Collectors.toSet()); + Set taken = new HashSet<>(); + + takenLectureInventory.getTakenLectures().stream() + .filter(takenLecture -> subMajorGraduationLectures.contains(takenLecture.getLecture())) + .forEach(takenLecture -> { + removedTakenLecture.add(takenLecture); + taken.add(takenLecture.getLecture()); + }); + + DetailCategoryResult detailCategoryResult = DetailCategoryResult.create("전공선택", isSatisfiedMandatory, + graduationResultTotalCredit); + detailCategoryResult.calculate(taken, subMajorGraduationLectures); + return detailCategoryResult; + } +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindMajorPersistenceAdapter.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindMajorPersistenceAdapter.java index ff5eecba..83917e59 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindMajorPersistenceAdapter.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindMajorPersistenceAdapter.java @@ -19,8 +19,8 @@ class FindMajorPersistenceAdapter implements FindMajorPort { private final LectureMapper mapper; @Override - public Set findMajor(User user) { - return majorLectureRepository.findAllByMajor(user.getMajor()).stream() + public Set findMajor(String major) { + return majorLectureRepository.findAllByMajor(major).stream() .map(mapper::mapToMajorLectureModel) .collect(Collectors.toSet()); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/out/FindMajorPort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/out/FindMajorPort.java index df1cf623..bc26e55b 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/out/FindMajorPort.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/out/FindMajorPort.java @@ -3,9 +3,8 @@ import java.util.Set; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; public interface FindMajorPort { - Set findMajor(User user); + Set findMajor(String major); } 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 8ba7699e..86452fb4 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,5 +1,7 @@ package com.plzgraduate.myongjigraduatebe.parsing.application.service; +import static com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory.*; + import java.util.List; import java.util.stream.Collectors; @@ -18,7 +20,6 @@ import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserUseCase; import com.plzgraduate.myongjigraduatebe.user.application.port.in.update.UpdateStudentInformationUseCase; import com.plzgraduate.myongjigraduatebe.user.application.port.in.update.UpdateStudentInformationCommand; -import com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; @@ -54,12 +55,11 @@ public void enrollParsingText(ParsingTextCommand parsingTextCommand) { } } - private void deleteTakenLecturesIfAlreadyEnrolled(User user) { deleteTakenLectureByUserUseCase.deleteAllTakenLecturesByUser(user); } - private void saveTakenLectures(User user, ParsingInformation parsingInformation){ + private void saveTakenLectures(User user, ParsingInformation parsingInformation) { List parsingTakenLectureDtoList = parsingInformation.getTakenLectureInformation(); SaveTakenLectureCommand saveTakenLectureCommand = getSaveTakenLectureCommand( user, parsingTakenLectureDtoList); @@ -69,7 +69,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.getAssociatedMajor(), parsingInformation.getSubMajor(), + parsingInformation.getStudentCategory()); updateStudentInformationUseCase.updateUser(updateStudentInfoCommand); } @@ -99,8 +100,11 @@ private SaveTakenLectureCommand getSaveTakenLectureCommand(User user, } private void checkIfNormal(ParsingInformation parsingInformation) { - if(parsingInformation.getStudentCategory() != StudentCategory.NORMAL) { - throw new IllegalArgumentException("전과생, 복수전공, 연계전공은 참여가 어렵습니다. 빠른 시일 내에 업데이트하도록 하겠습니다."); + //TODO: 복수전공 파싱 통과 추가 + if (!(parsingInformation.getStudentCategory() == NORMAL + || parsingInformation.getStudentCategory() == CHANGE_MAJOR + || parsingInformation.getStudentCategory() == SUB_MAJOR)) { + 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 a9a9881b..11eb6f5e 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/domain/ParsingInformation.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/domain/ParsingInformation.java @@ -1,9 +1,7 @@ package com.plzgraduate.myongjigraduatebe.parsing.domain; import java.util.ArrayList; -import java.util.HashSet; import java.util.List; -import java.util.Set; import java.util.regex.Pattern; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.Semester; @@ -91,7 +89,10 @@ private static ParsingStudentCategoryDto parseStudentCategory(String[] splitText } for (String part : parts) { - if (part.startsWith("복수전공 - ")) { + if (part.startsWith("부전공 - ")) { + categories.add("부전공"); + subMajor = part.substring("부전공 - ".length()); + } else if (part.startsWith("복수전공 - ")) { categories.add("복수전공"); subMajor = part.substring("복수전공 - ".length()); } else if (part.startsWith("연계전공 - ")) { diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/GraduationRequirementType.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/GraduationRequirementType.java index 2b514f20..d060db9c 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/GraduationRequirementType.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/GraduationRequirementType.java @@ -52,14 +52,21 @@ public GraduationRequirement convertToProfitGraduationRequirement(User user) { .normalCultureCredit(this.normalLectureCredit) .freeElectiveCredit(this.freeElectiveLectureCredit).build(); - checkUserEnglishLevel(user, graduationRequirement); + checkIsEnglishFreeUserAndTransferCredit(user, graduationRequirement); //TODO: Additional Major에 따른 졸업요건 변화 체크 후 졸업 요건 학점 변화 적용 + checkIsSubMajorUserAndTransferCredit(user, graduationRequirement); return graduationRequirement; } - private void checkUserEnglishLevel(User user, GraduationRequirement graduationRequirement) { + private void checkIsEnglishFreeUserAndTransferCredit(User user, GraduationRequirement graduationRequirement) { if (user.getEnglishLevel() == EnglishLevel.FREE) { graduationRequirement.transferEnglishCreditCommonToNormal(); } } + + private void checkIsSubMajorUserAndTransferCredit(User user, GraduationRequirement graduationRequirement) { + if (user.getStudentCategory() == StudentCategory.SUB_MAJOR) { + graduationRequirement.deleteFreeElectiveCredit(); + } + } } 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 ae123103..adc3bf6c 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 @@ -14,9 +14,10 @@ public enum StudentCategory { NORMAL(List.of()), CHANGE_MAJOR(List.of("전과")), + SUB_MAJOR(List.of("부전공")), DOUBLE_MAJOR(List.of("복수전공")), ASSOCIATED_MAJOR(List.of("연계전공")), - DOUBLE_ASSOCIATED(List.of("복수전공", "연계전공")); + DOUBLE_SUB(List.of("복수전공", "부전공")); private final List categories; diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 7f27501e..b94aa2a4 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -17,6 +17,9 @@ spring: format_sql: true open-in-view: false + jackson: + default-property-inclusion: non_null + logging: level: p6spy: info diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/fixture/UserFixture.java b/src/test/java/com/plzgraduate/myongjigraduatebe/fixture/UserFixture.java index 9e596571..96c1fcfd 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/fixture/UserFixture.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/fixture/UserFixture.java @@ -55,6 +55,11 @@ public class UserFixture { StudentCategory.NORMAL); } + public static User 경영학과_23학번_국제통상학과_부전공() { + return createUser("mj22", "1234", EnglishLevel.ENG34, "김경영", "60231022", 23, "경영학과", "국제통상학과", + StudentCategory.SUB_MAJOR); + } + public static User 국제통상학과_19학번() { return createUser("mj31", "1234", EnglishLevel.ENG34, "김국통", "60192021", 19, "국제통상학과", null, StudentCategory.NORMAL); 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 4bd88a29..0c52436d 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,4 +28,18 @@ void transferEnglishCategoryCredit() { .isEqualTo(beforeTransferNormalCultureCredit + ENGLISH.getTotalCredit()); } + @DisplayName("자유선택 졸업 학점을 0점으로 한다.") + @Test + void deleteFreeElectiveCredit() { + //given + GraduationRequirement graduationRequirement = GraduationRequirement.builder() + .freeElectiveCredit(10).build(); + + //when + graduationRequirement.deleteFreeElectiveCredit(); + + //then + assertThat(graduationRequirement.getFreeElectiveCredit()).isZero(); + } + } 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 new file mode 100644 index 00000000..a0a95452 --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/submajor/SubMajorManagerTest.java @@ -0,0 +1,113 @@ +package com.plzgraduate.myongjigraduatebe.graduation.domain.service.submajor; + +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.SUB_MAJOR; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.tuple; + +import java.util.HashSet; +import java.util.Set; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import com.plzgraduate.myongjigraduatebe.fixture.UserFixture; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.GraduationManager; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.Semester; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +class SubMajorManagerTest { + + @DisplayName("부전공 학생의 부전공 졸업 결과를 생성한다.") + @Test + void createDetailGraduationResult() { + //given + User user = UserFixture.응용소프트웨어학과_19학번(); + Set takenLectures = new HashSet<>((Set.of( + TakenLecture.of(user, Lecture.builder().lectureCode("HEC01313").credit(3).build(), 2019, Semester.FIRST), + TakenLecture.of(user, Lecture.builder().lectureCode("HEC01310").credit(3).build(), 2020, Semester.FIRST), + TakenLecture.of(user, Lecture.builder().lectureCode("HEC01309").credit(3).build(), 2021, Semester.FIRST), + TakenLecture.of(user, Lecture.builder().lectureCode("HEC01306").credit(3).build(), 2021, Semester.SECOND), + TakenLecture.of(user, Lecture.builder().lectureCode("HEC01304").credit(3).build(), 2022, Semester.FIRST), + TakenLecture.of(user, Lecture.builder().lectureCode("HEC01212").credit(3).build(), 2023, Semester.FIRST), + TakenLecture.of(user, Lecture.builder().lectureCode("HEC01209").credit(3).build(), 2023, Semester.SECOND) + ))); + TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); + Set graduationLectures = lectureSet(); + int subMajorGraduationCredit = 21; + int takenLecturesCount = takenLectures.size(); + + GraduationManager subMajorManager = new SubMajorManager(); + + //when + DetailGraduationResult detailGraduationResult = subMajorManager.createDetailGraduationResult(user, + takenLectureInventory, graduationLectures, subMajorGraduationCredit); + + //then + int majorCredit = 3; + assertThat(detailGraduationResult.getDetailCategory()).hasSize(1) + .extracting("detailCategoryName", "isCompleted", "isSatisfiedMandatory", "totalCredits", "takenCredits") + .contains( + tuple("전공선택", true, true, subMajorGraduationCredit, majorCredit * takenLecturesCount)); + assertThat(detailGraduationResult) + .extracting("categoryName", "isCompleted", "totalCredit", "takenCredit") + .contains(SUB_MAJOR.getName(), true, subMajorGraduationCredit, (double)majorCredit * takenLecturesCount); + + } + + private Set lectureSet() { + Set lectureSet = new HashSet<>(); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01313"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01310"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01309"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01306"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01304"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01212"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01209"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01211"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01203"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01206"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01301"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01302"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01401"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01314"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01305"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01204"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01210"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01207"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01205"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01202"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01208"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEB01103"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEB01101"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01405"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01307"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01311"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01318"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01402"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01406"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01317"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01316"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01303"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01201"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01408"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01404"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01407"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01315"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01403"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01308"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01312"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01409"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01410"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01411"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01412"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01413"), "응용소프트웨어전공", 0, 16, 99)); + lectureSet.add(MajorLecture.of(Lecture.from("HEC01414"), "응용소프트웨어전공", 0, 16, 99)); + return lectureSet; + } + +} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindMajorPersistenceAdapterTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindMajorPersistenceAdapterTest.java index ef71b29c..79878ed2 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindMajorPersistenceAdapterTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindMajorPersistenceAdapterTest.java @@ -50,7 +50,7 @@ void findMajor() { majorLectureRepository.saveAll(List.of(majorLectureJpaEntityA, majorLectureJpaEntityB)); //when - Set majors = majorPersistenceAdapter.findMajor(user); + Set majors = majorPersistenceAdapter.findMajor(user.getMajor()); //then assertThat(majors).hasSize(1) 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 bfbd59f3..052e3883 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 @@ -40,8 +40,8 @@ class ParsingTextServiceTest{ @Test void 성공() { //given - User user = createUser(1L, "mju1001!", "1q2w3e4r!", EnglishLevel.ENG12, "정지환", - "60181666", 18, "융합소프트웨어학부", null, StudentCategory.NORMAL); + User user = createUser( + "60181666"); String parsingText = "출력일자 : 2023/09/01|1/1" + "|ICT융합대학 융합소프트웨어학부 데이터테크놀로지전공, 정지환(60181666), 현학적 - 재학, 이수 - 7, 입학 - 신입학(2018/03/02)" + "|토익 - 570, 영어교과목면제 - 면제없음, 최종학적변동 - 불일치복학(2022/07/15)" @@ -95,8 +95,8 @@ class ParsingTextServiceTest{ + "|총 취득학점 - 118, 총점 - 436, 평균평점 - 3.82" + "|이수구분|수강년도/학기|한글코드|과목코드|과목명|학점|등급|중복|공통교양|2019년 2학기|교필137|KMA02137|4차산업혁명시대의진로선택|2|P|공통교양|2022년 동계계절|교필104|KMA02104|글쓰기|3|C0|공통교양|2020년 1학기|교필122|KMA02122|기독교와문화|2|B0|공통교양|2019년 2학기|교필127|KMA00101|성서와인간이해|2|B+|공통교양|2019년 하계계절|교필106|KMA02106|영어1|2|B+|2|공통교양|2019년 2학기|교필107|KMA02107|영어2|2|B+|공통교양|2022년 동계계절|교필108|KMA02108|영어회화1|1|B+|3|공통교양|2023년 1학기|교필109|KMA02109|영어회화2|1|A0|공통교양|2020년 1학기|교필101|KMA02101|채플|0.5|P|공통교양|2020년 2학기|교필101|KMA02101|채플|0.5|P|공통교양|2022년 2학기|교필101|KMA02101|채플|0.5|P|공통교양|2023년 1학기|교필101|KMA02101|채플|0.5|P|핵심교양|2022년 2학기|교선130|KMA02130|고전으로읽는인문학|3|A0|핵심교양|2019년 2학기|교선113|KMA02113|세계화와사회변화|3|B+|핵심교양|2018년 1학기|교선135|KMA02135|우주,생명,마음|3|C+|핵심교양|2020년 2학기|교선111|KMA02111|한국근현대사의이해|3|A+|학문기초교양|2019년 1학기|기사133|KMD02133|ICT비즈니스와경영|3|B+|학문기초교양|2022년 2학기|기사123|KMD02123|경제학원론|3|A+|학문기초교양|2022년 2학기|기사103|KMD02103|대중문화와매스컴|3|A0|학문기초교양|2019년 1학기|기자107|KME02107|선형대수학개론|3|B0|6|학문기초교양|2019년 하계계절|기인107|KMB02107|인간심리의이해|3|B+|5|학문기초교양|2020년 2학기|기자106|KME02106|통계학개론|3|A+|일반교양|2022년 2학기|균여111|KMO02111|교양볼링|2|B+|일반교양|2020년 1학기|기컴118|KMI02118|엑셀기초및실무활용|3|B+|4|전공1단계|2019년 1학기|데테202|HED01202|R통계분석|3|A0|전공1단계|2022년 2학기|데테314|HED01314|게임프로그래밍|3|A+|전공1단계|2020년 1학기|데테316|HED01316|고급웹프로그래밍|3|A0|전공1단계|2019년 2학기|데테206|HED01206|기초웹프로그래밍|3|B+|전공1단계|2019년 1학기|융소102|HEB01102|기초프로그래밍|3|B+|1|전공1단계|2019년 2학기|융소105|HEB01105|기초프로그래밍2|3|C+|전공1단계|2019년 2학기|데테318|HED01203|데이터베이스|3|A0|전공1단계|2023년 1학기|데테317|HED01317|데이터베이스프로젝트|3|A+|전공1단계|2023년 1학기|데테407|HED01407|딥러닝|3|B+|전공1단계|2023년 1학기|데테319|HED01318|모바일컴퓨팅|3|A+|전공1단계|2020년 2학기|데테403|HED01403|블록체인기초|3|A+|전공1단계|2023년 1학기|데테404|HED01404|빅데이터기술특론1|3|B0|전공1단계|2022년 2학기|데테306|HED01306|빅데이터프로그래밍|3|A0|전공1단계|2020년 1학기|데테301|HED01301|소프트웨어공학|3|A+|전공1단계|2020년 2학기|데테209|HED01307|알고리즘|3|A+|전공1단계|2020년 2학기|데테303|HED01303|운영체제|3|A+|전공1단계|2020년 1학기|데테315|HED01315|인공지능|3|B+|전공1단계|2019년 1학기|데테201|HED01201|자료구조|3|A0|전공1단계|2023년 1학기|데테413|HED01413|캡스톤디자인|3|A+|전공1단계|2020년 1학기|데테309|HED01309|컴퓨터아키텍쳐|3|A0|전공1단계|2020년 2학기|데테313|HED01313|컴퓨터통신|3|A+|자유선택|2023년 1학기|교선136|KMA02136|SW프로그래밍입문|3|A+|공통교양|2019년 2학기|교필101|KMA02101|채플|0.5|N|공통교양|2018년 1학기|교필106|KMA02106|영어1|0|R|2|공통교양|2018년 1학기|교필108|KMA02108|영어회화1|0|R|3|공통교양|2020년 1학기|교필108|KMA02108|영어회화1|0|R|3|학문기초교양|2018년 1학기|기자107|KME02107|선형대수학개론|0|R|6|학문기초교양|2018년 1학기|기인107|KMB02107|인간심리의이해|0|R|5|일반교양|2018년 1학기|기컴118|KMI02118|엑셀기초및실무활용|0|R|4|전공1단계|2018년 1학기|융소102|HEB01102|기초프로그래밍|0|R|1|"; - User user = createUser(1L, "mju1001!", "1q2w3e4r!", EnglishLevel.ENG12, "정지환", - "60181665", 18, "융합소프트웨어학부", null, StudentCategory.NORMAL); + User user = createUser( + "60181665"); ParsingTextCommand command = ParsingTextCommand.builder() .userId(1L) @@ -125,8 +125,8 @@ class ParsingTextServiceTest{ + "|총 취득학점 - 118, 총점 - 436, 평균평점 - 3.82" + "|이수구분|수강년도/학기|한글코드|과목코드|과목명|학점|등급|중복|공통교양|2019년 2학기|교필137|KMA02137|4차산업혁명시대의진로선택|2|P|공통교양|2022년 동계계절|교필104|KMA02104|글쓰기|3|C0|공통교양|2020년 1학기|교필122|KMA02122|기독교와문화|2|B0|공통교양|2019년 2학기|교필127|KMA00101|성서와인간이해|2|B+|공통교양|2019년 하계계절|교필106|KMA02106|영어1|2|B+|2|공통교양|2019년 2학기|교필107|KMA02107|영어2|2|B+|공통교양|2022년 동계계절|교필108|KMA02108|영어회화1|1|B+|3|공통교양|2023년 1학기|교필109|KMA02109|영어회화2|1|A0|공통교양|2020년 1학기|교필101|KMA02101|채플|0.5|P|공통교양|2020년 2학기|교필101|KMA02101|채플|0.5|P|공통교양|2022년 2학기|교필101|KMA02101|채플|0.5|P|공통교양|2023년 1학기|교필101|KMA02101|채플|0.5|P|핵심교양|2022년 2학기|교선130|KMA02130|고전으로읽는인문학|3|A0|핵심교양|2019년 2학기|교선113|KMA02113|세계화와사회변화|3|B+|핵심교양|2018년 1학기|교선135|KMA02135|우주,생명,마음|3|C+|핵심교양|2020년 2학기|교선111|KMA02111|한국근현대사의이해|3|A+|학문기초교양|2019년 1학기|기사133|KMD02133|ICT비즈니스와경영|3|B+|학문기초교양|2022년 2학기|기사123|KMD02123|경제학원론|3|A+|학문기초교양|2022년 2학기|기사103|KMD02103|대중문화와매스컴|3|A0|학문기초교양|2019년 1학기|기자107|KME02107|선형대수학개론|3|B0|6|학문기초교양|2019년 하계계절|기인107|KMB02107|인간심리의이해|3|B+|5|학문기초교양|2020년 2학기|기자106|KME02106|통계학개론|3|A+|일반교양|2022년 2학기|균여111|KMO02111|교양볼링|2|B+|일반교양|2020년 1학기|기컴118|KMI02118|엑셀기초및실무활용|3|B+|4|전공1단계|2019년 1학기|데테202|HED01202|R통계분석|3|A0|전공1단계|2022년 2학기|데테314|HED01314|게임프로그래밍|3|A+|전공1단계|2020년 1학기|데테316|HED01316|고급웹프로그래밍|3|A0|전공1단계|2019년 2학기|데테206|HED01206|기초웹프로그래밍|3|B+|전공1단계|2019년 1학기|융소102|HEB01102|기초프로그래밍|3|B+|1|전공1단계|2019년 2학기|융소105|HEB01105|기초프로그래밍2|3|C+|전공1단계|2019년 2학기|데테318|HED01203|데이터베이스|3|A0|전공1단계|2023년 1학기|데테317|HED01317|데이터베이스프로젝트|3|A+|전공1단계|2023년 1학기|데테407|HED01407|딥러닝|3|B+|전공1단계|2023년 1학기|데테319|HED01318|모바일컴퓨팅|3|A+|전공1단계|2020년 2학기|데테403|HED01403|블록체인기초|3|A+|전공1단계|2023년 1학기|데테404|HED01404|빅데이터기술특론1|3|B0|전공1단계|2022년 2학기|데테306|HED01306|빅데이터프로그래밍|3|A0|전공1단계|2020년 1학기|데테301|HED01301|소프트웨어공학|3|A+|전공1단계|2020년 2학기|데테209|HED01307|알고리즘|3|A+|전공1단계|2020년 2학기|데테303|HED01303|운영체제|3|A+|전공1단계|2020년 1학기|데테315|HED01315|인공지능|3|B+|전공1단계|2019년 1학기|데테201|HED01201|자료구조|3|A0|전공1단계|2023년 1학기|데테413|HED01413|캡스톤디자인|3|A+|전공1단계|2020년 1학기|데테309|HED01309|컴퓨터아키텍쳐|3|A0|전공1단계|2020년 2학기|데테313|HED01313|컴퓨터통신|3|A+|자유선택|2023년 1학기|교선136|KMA02136|SW프로그래밍입문|3|A+|공통교양|2019년 2학기|교필101|KMA02101|채플|0.5|N|공통교양|2018년 1학기|교필106|KMA02106|영어1|0|R|2|공통교양|2018년 1학기|교필108|KMA02108|영어회화1|0|R|3|공통교양|2020년 1학기|교필108|KMA02108|영어회화1|0|R|3|학문기초교양|2018년 1학기|기자107|KME02107|선형대수학개론|0|R|6|학문기초교양|2018년 1학기|기인107|KMB02107|인간심리의이해|0|R|5|일반교양|2018년 1학기|기컴118|KMI02118|엑셀기초및실무활용|0|R|4|전공1단계|2018년 1학기|융소102|HEB01102|기초프로그래밍|0|R|1|"; - User user = createUser(1L, "mju1001!", "1q2w3e4r!", EnglishLevel.ENG12, "정지환", - "60181666", 18, "융합소프트웨어학부", null, StudentCategory.NORMAL); + User user = createUser( + "60181666"); //when ParsingTextCommand command = ParsingTextCommand.builder() @@ -144,19 +144,48 @@ class ParsingTextServiceTest{ .hasMessage("PDF에서 정보를 읽어오는데 실패했습니다. 채널톡으로 문의 바랍니다."); } - private User createUser(Long id, String authId, String password, EnglishLevel englishLevel, String name, - String studentNumber, int entryYear, String major, String subMajor, StudentCategory studentCategory) { + @DisplayName("파싱 텍스트에서 정보를 추출해 성공적으로 메서드를 호출한다. - 부전공 학생") + @Test + void 성공_부전공() { + //given + User user = createUser( + "60181666"); + String parsingText = "출력일자 : 2023/09/01|1/1" + + "|ICT융합대학 융합소프트웨어학부 데이터테크놀로지전공, 부전공 - 응용소프트웨어전공, 정지환(60181666), 현학적 - 재학, 이수 - 7, 입학 - 신입학(2018/03/02)" + + "|토익 - 570, 영어교과목면제 - 면제없음, 최종학적변동 - 불일치복학(2022/07/15)" + + "|편입생 인정학점 - 교양 0, 전공 0, 자유선택 0, 성경과인간이해 0" + + "|교환학생 인정학점 - 학문기초교양 0, 일반교양 0, 전공 0, 복수전공학문기초교양 0, 복수전공 0, 연계전공 0, 부전공 0, 자유선택 0" + + "|공통교양 17, 핵심교양 12, 학문기초교양 18, 일반교양 5, 전공 63, 복수전공 0, 연계전공 0, 부전공 0, 교직 0, 자유선택 3" + + "|총 취득학점 - 118, 총점 - 436, 평균평점 - 3.82" + + "|이수구분|수강년도/학기|한글코드|과목코드|과목명|학점|등급|중복|공통교양|2019년 2학기|교필137|KMA02137|4차산업혁명시대의진로선택|2|P|공통교양|2022년 동계계절|교필104|KMA02104|글쓰기|3|C0|공통교양|2020년 1학기|교필122|KMA02122|기독교와문화|2|B0|공통교양|2019년 2학기|교필127|KMA00101|성서와인간이해|2|B+|공통교양|2019년 하계계절|교필106|KMA02106|영어1|2|B+|2|공통교양|2019년 2학기|교필107|KMA02107|영어2|2|B+|공통교양|2022년 동계계절|교필108|KMA02108|영어회화1|1|B+|3|공통교양|2023년 1학기|교필109|KMA02109|영어회화2|1|A0|공통교양|2020년 1학기|교필101|KMA02101|채플|0.5|P|공통교양|2020년 2학기|교필101|KMA02101|채플|0.5|P|공통교양|2022년 2학기|교필101|KMA02101|채플|0.5|P|공통교양|2023년 1학기|교필101|KMA02101|채플|0.5|P|핵심교양|2022년 2학기|교선130|KMA02130|고전으로읽는인문학|3|A0|핵심교양|2019년 2학기|교선113|KMA02113|세계화와사회변화|3|B+|핵심교양|2018년 1학기|교선135|KMA02135|우주,생명,마음|3|C+|핵심교양|2020년 2학기|교선111|KMA02111|한국근현대사의이해|3|A+|학문기초교양|2019년 1학기|기사133|KMD02133|ICT비즈니스와경영|3|B+|학문기초교양|2022년 2학기|기사123|KMD02123|경제학원론|3|A+|학문기초교양|2022년 2학기|기사103|KMD02103|대중문화와매스컴|3|A0|학문기초교양|2019년 1학기|기자107|KME02107|선형대수학개론|3|B0|6|학문기초교양|2019년 하계계절|기인107|KMB02107|인간심리의이해|3|B+|5|학문기초교양|2020년 2학기|기자106|KME02106|통계학개론|3|A+|일반교양|2022년 2학기|균여111|KMO02111|교양볼링|2|B+|일반교양|2020년 1학기|기컴118|KMI02118|엑셀기초및실무활용|3|B+|4|전공1단계|2019년 1학기|데테202|HED01202|R통계분석|3|A0|전공1단계|2022년 2학기|데테314|HED01314|게임프로그래밍|3|A+|전공1단계|2020년 1학기|데테316|HED01316|고급웹프로그래밍|3|A0|전공1단계|2019년 2학기|데테206|HED01206|기초웹프로그래밍|3|B+|전공1단계|2019년 1학기|융소102|HEB01102|기초프로그래밍|3|B+|1|전공1단계|2019년 2학기|융소105|HEB01105|기초프로그래밍2|3|C+|전공1단계|2019년 2학기|데테318|HED01203|데이터베이스|3|A0|전공1단계|2023년 1학기|데테317|HED01317|데이터베이스프로젝트|3|A+|전공1단계|2023년 1학기|데테407|HED01407|딥러닝|3|B+|전공1단계|2023년 1학기|데테319|HED01318|모바일컴퓨팅|3|A+|전공1단계|2020년 2학기|데테403|HED01403|블록체인기초|3|A+|전공1단계|2023년 1학기|데테404|HED01404|빅데이터기술특론1|3|B0|전공1단계|2022년 2학기|데테306|HED01306|빅데이터프로그래밍|3|A0|전공1단계|2020년 1학기|데테301|HED01301|소프트웨어공학|3|A+|전공1단계|2020년 2학기|데테209|HED01307|알고리즘|3|A+|전공1단계|2020년 2학기|데테303|HED01303|운영체제|3|A+|전공1단계|2020년 1학기|데테315|HED01315|인공지능|3|B+|전공1단계|2019년 1학기|데테201|HED01201|자료구조|3|A0|전공1단계|2023년 1학기|데테413|HED01413|캡스톤디자인|3|A+|전공1단계|2020년 1학기|데테309|HED01309|컴퓨터아키텍쳐|3|A0|전공1단계|2020년 2학기|데테313|HED01313|컴퓨터통신|3|A+|자유선택|2023년 1학기|교선136|KMA02136|SW프로그래밍입문|3|A+|공통교양|2019년 2학기|교필101|KMA02101|채플|0.5|N|공통교양|2018년 1학기|교필106|KMA02106|영어1|0|R|2|공통교양|2018년 1학기|교필108|KMA02108|영어회화1|0|R|3|공통교양|2020년 1학기|교필108|KMA02108|영어회화1|0|R|3|학문기초교양|2018년 1학기|기자107|KME02107|선형대수학개론|0|R|6|학문기초교양|2018년 1학기|기인107|KMB02107|인간심리의이해|0|R|5|일반교양|2018년 1학기|기컴118|KMI02118|엑셀기초및실무활용|0|R|4|전공1단계|2018년 1학기|융소102|HEB01102|기초프로그래밍|0|R|1|"; + + ParsingTextCommand command = ParsingTextCommand.builder() + .userId(1L) + .parsingText(parsingText) + .build(); + + given(findUserUseCase.findUserById(anyLong())).willReturn(user); + //when + parsingTextService.enrollParsingText(command); + + //then + then(updateStudentInformationUseCase).should().updateUser(any(UpdateStudentInformationCommand.class)); + then(deleteTakenLectureByUserUseCase).should().deleteAllTakenLecturesByUser(any(User.class)); + then(saveTakenLectureFromParsingTextUseCase).should().saveTakenLectures(any(SaveTakenLectureCommand.class)); + } + + private User createUser(String studentNumber) { return User.builder() - .id(id) - .authId(authId) - .password(password) - .name(name) + .id(1L) + .authId("mju1001!") + .password("1q2w3e4r!") + .name("정지환") .studentNumber(studentNumber) - .entryYear(entryYear) - .englishLevel(englishLevel) - .major(major) - .subMajor(subMajor) - .studentCategory(studentCategory) + .entryYear(18) + .englishLevel(EnglishLevel.ENG12) + .major("융합소프트웨어학부") + .subMajor(null) + .studentCategory(StudentCategory.NORMAL) .build(); } } 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 c1f69051..09d27f12 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/domain/ParsingInformationTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/domain/ParsingInformationTest.java @@ -1,7 +1,6 @@ package com.plzgraduate.myongjigraduatebe.parsing.domain; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -74,6 +73,28 @@ void test() { .contains("나경호", "60202455", "데이터테크놀로지전공", null, null, StudentCategory.CHANGE_MAJOR); } + @DisplayName("전과을 할 경우 StudentCategory는 CHANGE_MAJOR이다.") + @Test + void 부전공생_확인() { + //given + String parsingText = "출력일자 : 2023/09/01|1/1" + + "|ICT융합대학 융합소프트웨어학부 데이터테크놀로지전공, 부전공 - 응용소프트웨어전공, 정지환(60181666), 현학적 - 재학, 이수 - 7, 입학 - 신입학(2018/03/02)" + + "|토익 - 570, 영어교과목면제 - 면제없음, 최종학적변동 - 불일치복학(2022/07/15)" + + "|편입생 인정학점 - 교양 0, 전공 0, 자유선택 0, 성경과인간이해 0" + + "|교환학생 인정학점 - 학문기초교양 0, 일반교양 0, 전공 0, 복수전공학문기초교양 0, 복수전공 0, 연계전공 0, 부전공 0, 자유선택 0" + + "|공통교양 17, 핵심교양 12, 학문기초교양 18, 일반교양 5, 전공 63, 복수전공 0, 연계전공 0, 부전공 0, 교직 0, 자유선택 3" + + "|총 취득학점 - 118, 총점 - 436, 평균평점 - 3.82" + + "|이수구분|수강년도/학기|한글코드|과목코드|과목명|학점|등급|중복|공통교양|2019년 2학기|교필137|KMA02137|4차산업혁명시대의진로선택|2|P|공통교양|2022년 동계계절|교필104|KMA02104|글쓰기|3|C0|공통교양|2020년 1학기|교필122|KMA02122|기독교와문화|2|B0|공통교양|2019년 2학기|교필127|KMA00101|성서와인간이해|2|B+|공통교양|2019년 하계계절|교필106|KMA02106|영어1|2|B+|2|공통교양|2019년 2학기|교필107|KMA02107|영어2|2|B+|공통교양|2022년 동계계절|교필108|KMA02108|영어회화1|1|B+|3|공통교양|2023년 1학기|교필109|KMA02109|영어회화2|1|A0|공통교양|2020년 1학기|교필101|KMA02101|채플|0.5|P|공통교양|2020년 2학기|교필101|KMA02101|채플|0.5|P|공통교양|2022년 2학기|교필101|KMA02101|채플|0.5|P|공통교양|2023년 1학기|교필101|KMA02101|채플|0.5|P|핵심교양|2022년 2학기|교선130|KMA02130|고전으로읽는인문학|3|A0|핵심교양|2019년 2학기|교선113|KMA02113|세계화와사회변화|3|B+|핵심교양|2018년 1학기|교선135|KMA02135|우주,생명,마음|3|C+|핵심교양|2020년 2학기|교선111|KMA02111|한국근현대사의이해|3|A+|학문기초교양|2019년 1학기|기사133|KMD02133|ICT비즈니스와경영|3|B+|학문기초교양|2022년 2학기|기사123|KMD02123|경제학원론|3|A+|학문기초교양|2022년 2학기|기사103|KMD02103|대중문화와매스컴|3|A0|학문기초교양|2019년 1학기|기자107|KME02107|선형대수학개론|3|B0|6|학문기초교양|2019년 하계계절|기인107|KMB02107|인간심리의이해|3|B+|5|학문기초교양|2020년 2학기|기자106|KME02106|통계학개론|3|A+|일반교양|2022년 2학기|균여111|KMO02111|교양볼링|2|B+|일반교양|2020년 1학기|기컴118|KMI02118|엑셀기초및실무활용|3|B+|4|전공1단계|2019년 1학기|데테202|HED01202|R통계분석|3|A0|전공1단계|2022년 2학기|데테314|HED01314|게임프로그래밍|3|A+|전공1단계|2020년 1학기|데테316|HED01316|고급웹프로그래밍|3|A0|전공1단계|2019년 2학기|데테206|HED01206|기초웹프로그래밍|3|B+|전공1단계|2019년 1학기|융소102|HEB01102|기초프로그래밍|3|B+|1|전공1단계|2019년 2학기|융소105|HEB01105|기초프로그래밍2|3|C+|전공1단계|2019년 2학기|데테318|HED01203|데이터베이스|3|A0|전공1단계|2023년 1학기|데테317|HED01317|데이터베이스프로젝트|3|A+|전공1단계|2023년 1학기|데테407|HED01407|딥러닝|3|B+|전공1단계|2023년 1학기|데테319|HED01318|모바일컴퓨팅|3|A+|전공1단계|2020년 2학기|데테403|HED01403|블록체인기초|3|A+|전공1단계|2023년 1학기|데테404|HED01404|빅데이터기술특론1|3|B0|전공1단계|2022년 2학기|데테306|HED01306|빅데이터프로그래밍|3|A0|전공1단계|2020년 1학기|데테301|HED01301|소프트웨어공학|3|A+|전공1단계|2020년 2학기|데테209|HED01307|알고리즘|3|A+|전공1단계|2020년 2학기|데테303|HED01303|운영체제|3|A+|전공1단계|2020년 1학기|데테315|HED01315|인공지능|3|B+|전공1단계|2019년 1학기|데테201|HED01201|자료구조|3|A0|전공1단계|2023년 1학기|데테413|HED01413|캡스톤디자인|3|A+|전공1단계|2020년 1학기|데테309|HED01309|컴퓨터아키텍쳐|3|A0|전공1단계|2020년 2학기|데테313|HED01313|컴퓨터통신|3|A+|자유선택|2023년 1학기|교선136|KMA02136|SW프로그래밍입문|3|A+|공통교양|2019년 2학기|교필101|KMA02101|채플|0.5|N|공통교양|2018년 1학기|교필106|KMA02106|영어1|0|R|2|공통교양|2018년 1학기|교필108|KMA02108|영어회화1|0|R|3|공통교양|2020년 1학기|교필108|KMA02108|영어회화1|0|R|3|학문기초교양|2018년 1학기|기자107|KME02107|선형대수학개론|0|R|6|학문기초교양|2018년 1학기|기인107|KMB02107|인간심리의이해|0|R|5|일반교양|2018년 1학기|기컴118|KMI02118|엑셀기초및실무활용|0|R|4|전공1단계|2018년 1학기|융소102|HEB01102|기초프로그래밍|0|R|1|"; + + //when + ParsingInformation parsingInformation = ParsingInformation.parsing(parsingText); + + //then + assertThat(parsingInformation) + .extracting("studentName", "studentNumber", "major", "subMajor", "associatedMajor", "studentCategory") + .contains("정지환", "60181666", "데이터테크놀로지전공", null, "응용소프트웨어전공", StudentCategory.SUB_MAJOR); + } + @DisplayName("재수강, F학점, Non pass인 경우 수강 정보를 추출하지 않는다.") @Test diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/domain/model/GraduationRequirementTypeTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/domain/model/GraduationRequirementTypeTest.java index 718e0848..6c2c4eeb 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/domain/model/GraduationRequirementTypeTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/domain/model/GraduationRequirementTypeTest.java @@ -49,7 +49,7 @@ void determineGraduationRequirementWithIllegalUser(int entryYear) { .hasMessage("일치하는 졸업 요건이 존재하지 않습니다."); } - @DisplayName("영어 면제 학생의 졸업요건을 매핑한다.") + @DisplayName("영어 면제 학생의 졸업요건을 결정한다.") @Test() void convertToProfitGraduationRequirementWithFreeEnglishUser() { //given @@ -68,4 +68,22 @@ void convertToProfitGraduationRequirementWithFreeEnglishUser() { assertThat(graduationRequirement.getNormalCultureCredit()).isEqualTo( graduationRequirementType.getNormalLectureCredit() + ENGLISH.getTotalCredit()); } + + @DisplayName("부전공 학생의 졸업요건을 결정한다.") + @Test() + void convertToProfitGraduationRequirementWithSubMajorUser() { + //given + User subMajorUser = UserFixture.경영학과_23학번_국제통상학과_부전공(); + College ict = College.BUSINESS; + GraduationRequirementType graduationRequirementType = GraduationRequirementType.determineGraduationRequirement( + ict, subMajorUser); + + //when + GraduationRequirement graduationRequirement = graduationRequirementType.convertToProfitGraduationRequirement( + subMajorUser); + + // then + assertThat(graduationRequirement.getFreeElectiveCredit()).isZero(); + + } } From e98453b56bf229e945cdb6a0d752cd9a87d388fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EA=B2=BD=ED=98=B8?= Date: Fri, 16 Feb 2024 00:14:52 +0900 Subject: [PATCH 06/27] =?UTF-8?q?chore:=20spring=20RestDocs=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EC=84=A4=EC=A0=95=20=EC=A0=9C=EA=B1=B0=20(#239)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: spring RestDocs 관련 설정 제거 * chore: spring RestDocs docs 파일 제거 --------- Co-authored-by: 5uhwann <5uhwann27@gmail.com> --- build.gradle | 33 --------------------------------- src/docs/asciidoc/index.adoc | 10 ---------- 2 files changed, 43 deletions(-) delete mode 100644 src/docs/asciidoc/index.adoc diff --git a/build.gradle b/build.gradle index 0744852a..f2f2ffad 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,6 @@ plugins { id 'java' id 'org.springframework.boot' version '2.7.4' id 'io.spring.dependency-management' version '1.0.14.RELEASE' - id 'org.asciidoctor.jvm.convert' version '3.3.2' id 'jacoco' id "org.sonarqube" version "3.4.0.2513" id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" @@ -13,11 +12,7 @@ version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { - compileOnly { - extendsFrom annotationProcessor - } querydsl.extendsFrom compileClasspath - asciidoctorExt } repositories { @@ -25,7 +20,6 @@ repositories { } ext { - set('snippetsDir', file("build/generated-snippets")) set('queryDslVersion', "5.0.0") } @@ -57,25 +51,15 @@ dependencies { testImplementation 'org.testng:testng:7.9.0' testImplementation 'org.springframework.boot:spring-boot-starter-test' - testImplementation 'org.springframework.restdocs:spring-restdocs-mockmvc' testImplementation 'org.springframework.security:spring-security-test' testImplementation 'org.testcontainers:junit-jupiter' testImplementation 'org.testcontainers:testcontainers:1.19.0' testImplementation 'org.testcontainers:mysql:1.19.0' testImplementation 'org.testcontainers:junit-jupiter:1.13.0' - asciidoctorExt 'org.springframework.restdocs:spring-restdocs-asciidoctor' } - - -tasks.named('asciidoctor') { - inputs.dir snippetsDir - dependsOn test -} - tasks.named('test') { - outputs.dir snippetsDir useJUnitPlatform() finalizedBy 'jacocoTestReport' } @@ -108,16 +92,6 @@ sonarqube { } } -asciidoctor { - inputs.dir snippetsDir - configurations 'asciidoctorExt' - sources { - include("**/index.adoc") - } - baseDirFollowsSourceFile() - dependsOn test -} - jar { enabled = false } @@ -136,10 +110,3 @@ sourceSets { compileQuerydsl { options.annotationProcessorPath = configurations.querydsl } - -bootJar { - dependsOn asciidoctor - from("${asciidoctor.outputDir}/html5") { - into 'static/docs' - } -} diff --git a/src/docs/asciidoc/index.adoc b/src/docs/asciidoc/index.adoc deleted file mode 100644 index 20f7e49c..00000000 --- a/src/docs/asciidoc/index.adoc +++ /dev/null @@ -1,10 +0,0 @@ -ifndef::snippets[] -:snippets: ../../build/generated-snippets -endif::[] -= 졸업을 부탁해 API 명세서 -:doctype: book -:icons: font -:source-highlighter: highlightjs -:toc: left -:toclevels: 2 -:sectlinks: From bf6e1798457acdde38aa205b1b584675c5d33dce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EA=B2=BD=ED=98=B8?= Date: Fri, 8 Mar 2024 13:48:45 +0900 Subject: [PATCH 07/27] =?UTF-8?q?[DEV-4]=20refactor:=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=20=EA=B5=AC=EC=A1=B0=20=EC=88=98=EC=A0=95=20(#243)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: 패키지 구조 수정 * refactor: 패키지 구조 수정 * refactor: 패키지 구조 수정 * refactor: auth 패키지 구조 수정 * refactor: test 패키지 구조 수정 --- .../signin/SignInApiPresentation.java | 5 +- .../web => api}/signin/SignInController.java | 7 ++- .../signin/dto/request}/SignInRequest.java | 4 +- .../signin/dto/response}/TokenResponse.java | 2 +- .../token/TokenApiPresentation.java | 5 +- .../in/web => api}/token/TokenController.java | 7 ++- .../token/dto/request}/TokenRequest.java | 4 +- .../dto/response}/AccessTokenResponse.java | 2 +- .../port/{out => }/FindRefreshTokenPort.java | 2 +- .../port/{out => }/SaveRefreshTokenPort.java | 2 +- .../port/in/signin/SignInUseCase.java | 7 --- .../port/in/token/TokenUseCase.java | 7 --- .../service/signin/SignInService.java | 8 +-- .../service/token/TokenService.java | 8 +-- .../in => usecase}/signin/SignInCommand.java | 2 +- .../usecase/signin/SignInUseCase.java | 7 +++ .../in => usecase}/token/TokenCommand.java | 2 +- .../usecase/token/TokenUseCase.java | 7 +++ .../repository}/InMemoryTokenRepository.java | 6 +- .../security/JwtAuthenticationProvider.java | 2 +- .../core/config/SecurityConfig.java | 2 +- .../CalculateGraduationApiPresentation.java | 4 +- .../CalculateGraduationController.java | 6 +- .../dto}/response/BasicInfoResponse.java | 2 +- .../dto}/response/ChapelResultResponse.java | 2 +- ...etailGraduationCategoryResultResponse.java | 2 +- .../DetailGraduationResultResponse.java | 2 +- .../dto}/response/GraduationResponse.java | 2 +- .../dto}/response/LectureResponse.java | 2 +- .../dto}/response/MajorInfoResponse.java | 2 +- .../dto}/response/RestResultResponse.java | 2 +- .../CalculateGraduationService.java | 18 +++--- .../CalculateGraduationUseCase.java | 4 +- .../SearchLectureApiPresentation.java | 4 +- .../web => api}/SearchLectureController.java | 8 +-- .../dto/response}/LectureResponse.java | 2 +- .../dto/response}/SearchLectureResponse.java | 2 +- .../FindBasicAcademicalCulturePort.java | 2 +- .../port/{out => }/FindCommonCulturePort.java | 2 +- .../port/{out => }/FindCoreCulturePort.java | 2 +- .../port/{out => }/FindLecturePort.java | 2 +- .../port/{out => }/FindMajorPort.java | 2 +- .../port/{out => }/SearchLecturePort.java | 2 +- .../port/in/search/SearchLectureUseCase.java | 5 -- .../{find => }/FindLecturesByIdService.java | 6 +- .../FindLecturesByLectureCodeService.java | 6 +- .../{search => }/SearchLectureService.java | 12 ++-- .../FindLecturesByIdUseCase.java | 2 +- .../FindLecturesByLectureCodeUseCase.java | 2 +- .../SearchLectureCommand.java | 2 +- .../usecase/SearchLectureUseCase.java | 7 +++ ...icAcademicalCulturePersistenceAdapter.java | 9 +-- .../FindCommonCulturePersistenceAdapter.java | 9 +-- .../FindCoreCulturePersistenceAdapter.java | 9 +-- .../FindMajorPersistenceAdapter.java | 10 ++-- .../LecturePersistenceAdapter.java} | 15 ++--- ...asicAcademicalCultureLectureJpaEntity.java | 2 +- .../entity/CommonCultureJpaEntity.java | 2 +- .../entity/CoreCultureJpaEntity.java | 2 +- .../persistence/entity/LectureJpaEntity.java | 2 +- .../entity/MajorLectureJpaEntity.java | 2 +- .../persistence/mapper}/LectureMapper.java | 22 +++---- .../BasicAcademicalCultureRepository.java | 4 +- .../repository/CommonCultureRepository.java | 4 +- .../repository/CoreCultureRepository.java | 4 +- .../repository/LectureQueryRepository.java | 6 +- .../repository/LectureRepository.java | 4 +- .../repository/MajorLectureRepository.java | 4 +- .../persistence/ParsingTextRepository.java | 11 ---- .../ParsingTextApiPresentation.java | 3 +- .../in/web => api}/ParsingTextController.java | 9 +-- .../dto/request}/ParsingTextRequest.java | 6 +- .../DeleteParsingTextHistoryPort.java | 2 +- .../{out => }/SaveParsingTextHistoryPort.java | 2 +- .../service/ParsingTextHistoryService.java | 8 +-- .../service/ParsingTextService.java | 16 ++--- .../in => usecase}/ParsingTextCommand.java | 2 +- .../ParsingTextHistoryUseCase.java | 2 +- .../in => usecase}/ParsingTextUseCase.java | 2 +- .../ParsingTextHistoryAdapter.java} | 10 ++-- .../entity}/ParsingTextHistoryJpaEntity.java | 4 +- .../mapper}/ParsingTextHistoryMapper.java | 11 ++-- .../repository/ParsingTextRepository.java | 12 ++++ .../FindTakenLectureApiPresentation.java | 4 +- .../FindTakenLectureController.java | 6 +- .../UpdateTakenLectureApiPresentation.java | 3 +- .../UpdateTakenLectureController.java | 5 +- .../request}/UpdateTakenLectureRequest.java | 4 +- .../{out => }/DeleteTakenLecturePort.java | 2 +- .../port/{out => }/FindTakenLecturePort.java | 2 +- .../port/{out => }/SaveTakenLecturePort.java | 2 +- .../DeleteTakenLectureByUserService.java | 4 +- .../service/find/FindTakenLectureService.java | 10 ++-- ...aveTakenLectureFromParsingTextService.java | 8 +-- .../update/UpdateTakenLectureService.java | 12 ++-- .../DeleteTakenLectureByUserUseCase.java | 2 +- .../find/FindTakenLectureResponse.java | 2 +- .../find/FindTakenLectureUseCase.java | 2 +- .../find/TakenLectureResponse.java | 2 +- .../save/SaveTakenLectureCommand.java | 2 +- ...aveTakenLectureFromParsingTextUseCase.java | 2 +- .../update/UpdateTakenLectureCommand.java | 2 +- .../update/UpdateTakenLectureUseCase.java | 2 +- .../TakenLecturePersistenceAdapter.java} | 14 +++-- .../persistence/TakenLectureRepository.java | 5 +- .../entity}/TakenLectureJpaEntity.java | 6 +- .../mapper}/TakenLectureMapper.java | 15 ++--- .../findauthid/FindAuthIdApiPresentation.java | 4 +- .../findauthid/FindAuthIdController.java | 6 +- .../dto/response}/UserAuthIdResponse.java | 2 +- .../FindUserInformationApiPresentation.java | 4 +- .../FindUserInformationController.java | 6 +- .../response}/UserInformationResponse.java | 2 +- .../ResetPasswordApiPresentation.java | 4 +- .../ResetPasswordController.java | 8 +-- .../resetpassword/ResetPasswordRequest.java | 4 +- .../dto/response}/ValidateUserResponse.java | 2 +- .../signup/SignUpApiPresentation.java | 6 +- .../web => api}/signup/SignUpController.java | 12 ++-- .../in/web => api}/signup/SignUpRequest.java | 4 +- .../response}/AuthIdDuplicationResponse.java | 3 +- .../StudentNumberDuplicationResponse.java | 2 +- .../withdraw/WithDrawApiPresentation.java | 2 +- .../withdraw/WithDrawController.java | 4 +- .../web => api}/withdraw/WithDrawRequest.java | 4 +- .../port/{out => }/CheckUserPort.java | 2 +- .../port/{out => }/DeleteUserPort.java | 2 +- .../port/{out => }/FindUserPort.java | 2 +- .../port/{out => }/SaveUserPort.java | 2 +- .../port/{out => }/UpdateUserPort.java | 2 +- .../check/CheckAuthIdDuplicationUseCase.java | 6 -- .../CheckStudentNumberDuplicationUseCase.java | 6 -- .../port/in/find/FindUserAuthIdUseCase.java | 6 -- .../in/find/FindUserInformationUseCase.java | 6 -- .../port/in/validate/ValidateUserUseCase.java | 6 -- .../check/CheckAuthIdDuplicationService.java | 6 +- .../CheckStudentNumberDuplicationService.java | 6 +- .../service/find/FindUserAuthIdService.java | 6 +- .../find/FindUserInformationService.java | 6 +- .../service/find/FindUserService.java | 4 +- .../resetpassword/ResetPasswordService.java | 8 +-- .../service/signup/SignUpService.java | 8 +-- .../UpdateStudentInformationService.java | 6 +- .../service/validate/ValidateUserService.java | 6 +- .../service/withdraw/WithDrawUserService.java | 12 ++-- .../check/CheckAuthIdDuplicationUseCase.java | 8 +++ .../CheckStudentNumberDuplicationUseCase.java | 8 +++ .../usecase/find/FindUserAuthIdUseCase.java | 8 +++ .../find/FindUserInformationUseCase.java | 8 +++ .../in => usecase}/find/FindUserUseCase.java | 2 +- .../resetpassword/ResetPasswordCommand.java | 2 +- .../resetpassword/ResetPasswordUseCase.java | 2 +- .../in => usecase}/signup/SignUpCommand.java | 2 +- .../in => usecase}/signup/SignUpUseCase.java | 2 +- .../UpdateStudentInformationCommand.java | 2 +- .../UpdateStudentInformationUseCase.java | 2 +- .../usecase/validate/ValidateUserUseCase.java | 8 +++ .../withdraw/WithDrawCommand.java | 2 +- .../withdraw/WithDrawUserUseCase.java | 2 +- .../persistence/UserPersistenceAdapter.java} | 17 +++--- .../persistence/entity}/UserJpaEntity.java | 2 +- .../persistence/mapper}/UserMapper.java | 9 +-- .../repository}/UserRepository.java | 4 +- .../signin/SignInControllerTest.java | 3 +- .../token/TokenControllerTest.java | 5 +- .../service/signin/SignInServiceTest.java | 6 +- .../service/token/TokenServiceTest.java | 6 +- .../InMemoryTokenRepositoryTest.java | 3 +- .../CalculateGraduationControllerTest.java | 12 ++-- .../SearchLectureControllerTest.java | 6 +- .../find/FindLecturesByIdServiceTest.java | 3 +- .../FindLecturesByLectureCodeServiceTest.java | 3 +- .../search/SearchLectureServiceTest.java | 7 ++- ...ademicalCulturePersistenceAdapterTest.java | 11 ++-- ...ndCommonCulturePersistenceAdapterTest.java | 11 ++-- ...FindCoreCulturePersistenceAdapterTest.java | 11 ++-- .../FindMajorPersistenceAdapterTest.java | 11 ++-- .../LecturePersistenceAdapterTest.java} | 19 +++--- .../mapper}/LectureMapperTest.java | 13 +++-- .../query}/LectureQueryRepositoryTest.java | 8 +-- .../query}/TestQuerydslConfig.java | 4 +- ...cademicalCultureLectureRepositoryTest.java | 10 ++-- .../CommonCultureRepositoryTest.java | 10 ++-- .../CoreCultureRepositoryTest.java | 10 ++-- .../MajorLectureRepositoryTest.java | 10 ++-- .../ParsingTextControllerTest.java | 5 +- .../ParsingTextHistoryServiceTest.java | 7 +-- .../service/ParsingTextServiceTest.java | 14 ++--- .../ParsingTextHistoryAdapterTest.java} | 21 +++---- .../mapper}/ParsingTextHistoryMapperTest.java | 4 +- .../support/WebAdaptorTestSupport.java | 58 +++++++++---------- .../find/FindTakenLectureControllerTest.java | 6 +- .../UpdateTakenLectureControllerTest.java | 3 +- .../DeleteTakenLectureByUserServiceTest.java | 3 +- .../find/FindTakenLectureServiceTest.java | 8 +-- ...akenLectureFromParsingTextServiceTest.java | 6 +- .../update/UpdateTakenLectureServiceTest.java | 10 ++-- .../mapper}/TakenLectureMapperTest.java | 8 ++- .../TakenLectureRepositoryTest.java | 12 ++-- .../findauthid/FindAuthIdControllerTest.java | 4 +- .../FindUserInformationControllerTest.java | 4 +- .../ResetPasswordControllerTest.java | 5 +- .../signup/SignUpControllerTest.java | 7 ++- .../withdraw/WithDrawControllerTest.java | 5 +- .../CheckAuthIdDuplicationServiceTest.java | 4 +- ...ckStudentNumberDuplicationServiceTest.java | 4 +- .../find/FindUserAuthIdServiceTest.java | 4 +- .../find/FindUserInformationServiceTest.java | 4 +- .../service/find/FindUserServiceTest.java | 2 +- .../ResetPasswordServiceTest.java | 6 +- .../service/signup/SignUpServiceTest.java | 6 +- .../UpdateStudentInformationServiceTest.java | 5 +- .../validate/ValidateUserServiceTest.java | 4 +- .../withdraw/WithDrawUserServiceTest.java | 10 ++-- .../UserPersistenceAdapterTest.java} | 23 ++++---- .../persistence/mapper}/UserMapperTest.java | 4 +- .../repository}/UserRepositoryTest.java | 4 +- 217 files changed, 668 insertions(+), 605 deletions(-) rename src/main/java/com/plzgraduate/myongjigraduatebe/auth/{adaptor/in/web => api}/signin/SignInApiPresentation.java (70%) rename src/main/java/com/plzgraduate/myongjigraduatebe/auth/{adaptor/in/web => api}/signin/SignInController.java (74%) rename src/main/java/com/plzgraduate/myongjigraduatebe/auth/{adaptor/in/web/signin => api/signin/dto/request}/SignInRequest.java (82%) rename src/main/java/com/plzgraduate/myongjigraduatebe/auth/{application/port/in => api/signin/dto/response}/TokenResponse.java (92%) rename src/main/java/com/plzgraduate/myongjigraduatebe/auth/{adaptor/in/web => api}/token/TokenApiPresentation.java (58%) rename src/main/java/com/plzgraduate/myongjigraduatebe/auth/{adaptor/in/web => api}/token/TokenController.java (69%) rename src/main/java/com/plzgraduate/myongjigraduatebe/auth/{adaptor/in/web/token => api/token/dto/request}/TokenRequest.java (80%) rename src/main/java/com/plzgraduate/myongjigraduatebe/auth/{application/port/in => api/token/dto/response}/AccessTokenResponse.java (90%) rename src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/{out => }/FindRefreshTokenPort.java (64%) rename src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/{out => }/SaveRefreshTokenPort.java (59%) delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/in/signin/SignInUseCase.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/in/token/TokenUseCase.java rename src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/{port/in => usecase}/signin/SignInCommand.java (80%) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/signin/SignInUseCase.java rename src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/{port/in => usecase}/token/TokenCommand.java (77%) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/token/TokenUseCase.java rename src/main/java/com/plzgraduate/myongjigraduatebe/auth/{adaptor/out => infrastructure/adapter/repository}/InMemoryTokenRepository.java (75%) rename src/main/java/com/plzgraduate/myongjigraduatebe/graduation/{adpater/in/web => api}/CalculateGraduationApiPresentation.java (72%) rename src/main/java/com/plzgraduate/myongjigraduatebe/graduation/{adpater/in/web => api}/CalculateGraduationController.java (78%) rename src/main/java/com/plzgraduate/myongjigraduatebe/graduation/{application/port/in => api/dto}/response/BasicInfoResponse.java (93%) rename src/main/java/com/plzgraduate/myongjigraduatebe/graduation/{application/port/in => api/dto}/response/ChapelResultResponse.java (89%) rename src/main/java/com/plzgraduate/myongjigraduatebe/graduation/{application/port/in => api/dto}/response/DetailGraduationCategoryResultResponse.java (95%) rename src/main/java/com/plzgraduate/myongjigraduatebe/graduation/{application/port/in => api/dto}/response/DetailGraduationResultResponse.java (94%) rename src/main/java/com/plzgraduate/myongjigraduatebe/graduation/{application/port/in => api/dto}/response/GraduationResponse.java (97%) rename src/main/java/com/plzgraduate/myongjigraduatebe/graduation/{application/port/in => api/dto}/response/LectureResponse.java (91%) rename src/main/java/com/plzgraduate/myongjigraduatebe/graduation/{application/port/in => api/dto}/response/MajorInfoResponse.java (92%) rename src/main/java/com/plzgraduate/myongjigraduatebe/graduation/{application/port/in => api/dto}/response/RestResultResponse.java (94%) rename src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/{port => service}/CalculateGraduationService.java (96%) rename src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/{port/in => usecase}/CalculateGraduationUseCase.java (60%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/in/web => api}/SearchLectureApiPresentation.java (81%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/in/web => api}/SearchLectureController.java (72%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/{application/port/in/search => api/dto/response}/LectureResponse.java (93%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/{application/port/in/search => api/dto/response}/SearchLectureResponse.java (85%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/{out => }/FindBasicAcademicalCulturePort.java (97%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/{out => }/FindCommonCulturePort.java (97%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/{out => }/FindCoreCulturePort.java (97%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/{out => }/FindLecturePort.java (97%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/{out => }/FindMajorPort.java (96%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/{out => }/SearchLecturePort.java (97%) delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/in/search/SearchLectureUseCase.java rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/{find => }/FindLecturesByIdService.java (84%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/{find => }/FindLecturesByLectureCodeService.java (84%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/{search => }/SearchLectureService.java (67%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/{port/in/find => usecase}/FindLecturesByIdUseCase.java (72%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/{port/in/find => usecase}/FindLecturesByLectureCodeUseCase.java (74%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/{port/in/search => usecase}/SearchLectureCommand.java (85%) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/SearchLectureUseCase.java rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out => infrastructure/adapter}/persistence/FindBasicAcademicalCulturePersistenceAdapter.java (68%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out => infrastructure/adapter}/persistence/FindCommonCulturePersistenceAdapter.java (79%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out => infrastructure/adapter}/persistence/FindCoreCulturePersistenceAdapter.java (64%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out => infrastructure/adapter}/persistence/FindMajorPersistenceAdapter.java (62%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out/persistence/LecturePersistenceAdaptor.java => infrastructure/adapter/persistence/LecturePersistenceAdapter.java} (69%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out => infrastructure/adapter}/persistence/entity/BasicAcademicalCultureLectureJpaEntity.java (91%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out => infrastructure/adapter}/persistence/entity/CommonCultureJpaEntity.java (93%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out => infrastructure/adapter}/persistence/entity/CoreCultureJpaEntity.java (93%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out => infrastructure/adapter}/persistence/entity/LectureJpaEntity.java (91%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out => infrastructure/adapter}/persistence/entity/MajorLectureJpaEntity.java (92%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out/persistence => infrastructure/adapter/persistence/mapper}/LectureMapper.java (73%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out => infrastructure/adapter}/persistence/repository/BasicAcademicalCultureRepository.java (70%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out => infrastructure/adapter}/persistence/repository/CommonCultureRepository.java (86%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out => infrastructure/adapter}/persistence/repository/CoreCultureRepository.java (71%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out => infrastructure/adapter}/persistence/repository/LectureQueryRepository.java (71%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out => infrastructure/adapter}/persistence/repository/LectureRepository.java (59%) rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out => infrastructure/adapter}/persistence/repository/MajorLectureRepository.java (69%) delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/out/persistence/ParsingTextRepository.java rename src/main/java/com/plzgraduate/myongjigraduatebe/parsing/{adaptor/in/web => api}/ParsingTextApiPresentation.java (80%) rename src/main/java/com/plzgraduate/myongjigraduatebe/parsing/{adaptor/in/web => api}/ParsingTextController.java (72%) rename src/main/java/com/plzgraduate/myongjigraduatebe/parsing/{adaptor/in/web => api/dto/request}/ParsingTextRequest.java (94%) rename src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/port/{out => }/DeleteParsingTextHistoryPort.java (96%) rename src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/port/{out => }/SaveParsingTextHistoryPort.java (97%) rename src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/{port/in => usecase}/ParsingTextCommand.java (82%) rename src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/{port/in => usecase}/ParsingTextHistoryUseCase.java (73%) rename src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/{port/in => usecase}/ParsingTextUseCase.java (59%) rename src/main/java/com/plzgraduate/myongjigraduatebe/parsing/{adaptor/out/persistence/ParsingTextHistoryAdaptor.java => infrastructure/adapter/persistence/ParsingTextHistoryAdapter.java} (64%) rename src/main/java/com/plzgraduate/myongjigraduatebe/parsing/{adaptor/out/persistence => infrastructure/adapter/persistence/entity}/ParsingTextHistoryJpaEntity.java (84%) rename src/main/java/com/plzgraduate/myongjigraduatebe/parsing/{adaptor/out/persistence => infrastructure/adapter/persistence/mapper}/ParsingTextHistoryMapper.java (64%) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/repository/ParsingTextRepository.java rename src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/{adaptor/in/web/find => api}/FindTakenLectureApiPresentation.java (81%) rename src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/{adaptor/in/web/find => api}/FindTakenLectureController.java (83%) rename src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/{adaptor/in/web/update => api}/UpdateTakenLectureApiPresentation.java (79%) rename src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/{adaptor/in/web/update => api}/UpdateTakenLectureController.java (82%) rename src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/{adaptor/in/web/update => api/dto/request}/UpdateTakenLectureRequest.java (88%) rename src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/{out => }/DeleteTakenLecturePort.java (95%) rename src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/{out => }/FindTakenLecturePort.java (96%) rename src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/{out => }/SaveTakenLecturePort.java (95%) rename src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/{port/in => usecase}/delete/DeleteTakenLectureByUserUseCase.java (92%) rename src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/{port/in => usecase}/find/FindTakenLectureResponse.java (97%) rename src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/{port/in => usecase}/find/FindTakenLectureUseCase.java (90%) rename src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/{port/in => usecase}/find/TakenLectureResponse.java (98%) rename src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/{port/in => usecase}/save/SaveTakenLectureCommand.java (98%) rename src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/{port/in => usecase}/save/SaveTakenLectureFromParsingTextUseCase.java (92%) rename src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/{port/in => usecase}/update/UpdateTakenLectureCommand.java (96%) rename src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/{port/in => usecase}/update/UpdateTakenLectureUseCase.java (90%) rename src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/{adaptor/out/persistence/TakenLecturePersistenceAdaptor.java => infrastructure/adapter/persistence/TakenLecturePersistenceAdapter.java} (78%) rename src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/{adaptor/out => infrastructure/adapter}/persistence/TakenLectureRepository.java (70%) rename src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/{adaptor/out/persistence => infrastructure/adapter/persistence/entity}/TakenLectureJpaEntity.java (75%) rename src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/{adaptor/out/persistence => infrastructure/adapter/persistence/mapper}/TakenLectureMapper.java (78%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/{adaptor/in/web => api}/findauthid/FindAuthIdApiPresentation.java (76%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/{adaptor/in/web => api}/findauthid/FindAuthIdController.java (73%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/{application/port/in/find => api/findauthid/dto/response}/UserAuthIdResponse.java (90%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/{adaptor/in/web => api}/finduserinformation/FindUserInformationApiPresentation.java (71%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/{adaptor/in/web => api}/finduserinformation/FindUserInformationController.java (71%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/{application/port/in/find => api/finduserinformation/dto/response}/UserInformationResponse.java (88%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/{adaptor/in/web => api}/resetpassword/ResetPasswordApiPresentation.java (87%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/{adaptor/in/web => api}/resetpassword/ResetPasswordController.java (76%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/{adaptor/in/web => api}/resetpassword/ResetPasswordRequest.java (88%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/{application/port/in/validate => api/resetpassword/dto/response}/ValidateUserResponse.java (82%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/{adaptor/in/web => api}/signup/SignUpApiPresentation.java (78%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/{adaptor/in/web => api}/signup/SignUpController.java (71%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/{adaptor/in/web => api}/signup/SignUpRequest.java (91%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/{application/port/in/check => api/signup/dto/response}/AuthIdDuplicationResponse.java (81%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/{application/port/in/check => api/signup/dto/response}/StudentNumberDuplicationResponse.java (87%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/{adaptor/in/web => api}/withdraw/WithDrawApiPresentation.java (87%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/{adaptor/in/web => api}/withdraw/WithDrawController.java (81%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/{adaptor/in/web => api}/withdraw/WithDrawRequest.java (77%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/{out => }/CheckUserPort.java (67%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/{out => }/DeleteUserPort.java (65%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/{out => }/FindUserPort.java (80%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/{out => }/SaveUserPort.java (64%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/{out => }/UpdateUserPort.java (65%) delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/check/CheckAuthIdDuplicationUseCase.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/check/CheckStudentNumberDuplicationUseCase.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/find/FindUserAuthIdUseCase.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/find/FindUserInformationUseCase.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/validate/ValidateUserUseCase.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/check/CheckAuthIdDuplicationUseCase.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/check/CheckStudentNumberDuplicationUseCase.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/find/FindUserAuthIdUseCase.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/find/FindUserInformationUseCase.java rename src/main/java/com/plzgraduate/myongjigraduatebe/user/application/{port/in => usecase}/find/FindUserUseCase.java (75%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/application/{port/in => usecase}/resetpassword/ResetPasswordCommand.java (84%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/application/{port/in => usecase}/resetpassword/ResetPasswordUseCase.java (56%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/application/{port/in => usecase}/signup/SignUpCommand.java (88%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/application/{port/in => usecase}/signup/SignUpUseCase.java (51%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/application/{port/in => usecase}/update/UpdateStudentInformationCommand.java (93%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/application/{port/in => usecase}/update/UpdateStudentInformationUseCase.java (64%) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/validate/ValidateUserUseCase.java rename src/main/java/com/plzgraduate/myongjigraduatebe/user/application/{port/in => usecase}/withdraw/WithDrawCommand.java (72%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/application/{port/in => usecase}/withdraw/WithDrawUserUseCase.java (57%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/{adaptor/out/persistence/UserPersistenceAdaptor.java => infrastructure/adapter/persistence/UserPersistenceAdapter.java} (65%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/{adaptor/out/persistence => infrastructure/adapter/persistence/entity}/UserJpaEntity.java (93%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/{adaptor/out/persistence => infrastructure/adapter/persistence/mapper}/UserMapper.java (76%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/{adaptor/out/persistence => infrastructure/adapter/persistence/repository}/UserRepository.java (66%) rename src/test/java/com/plzgraduate/myongjigraduatebe/auth/{adaptor/in/web => api}/signin/SignInControllerTest.java (95%) rename src/test/java/com/plzgraduate/myongjigraduatebe/auth/{adaptor/in/web => api}/token/TokenControllerTest.java (90%) rename src/test/java/com/plzgraduate/myongjigraduatebe/auth/{adaptor/out => infrastructure/adapter/repository}/InMemoryTokenRepositoryTest.java (88%) rename src/test/java/com/plzgraduate/myongjigraduatebe/graduation/{adpater/in/web => api}/CalculateGraduationControllerTest.java (79%) rename src/test/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/in/web => api}/SearchLectureControllerTest.java (89%) rename src/test/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out => infrastructure/adapter}/persistence/FindBasicAcademicalCulturePersistenceAdapterTest.java (77%) rename src/test/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out => infrastructure/adapter}/persistence/FindCommonCulturePersistenceAdapterTest.java (83%) rename src/test/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out => infrastructure/adapter}/persistence/FindCoreCulturePersistenceAdapterTest.java (77%) rename src/test/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out => infrastructure/adapter}/persistence/FindMajorPersistenceAdapterTest.java (74%) rename src/test/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out/persistence/LecturePersistenceAdaptorTest.java => infrastructure/adapter/persistence/LecturePersistenceAdapterTest.java} (78%) rename src/test/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out/persistence => infrastructure/adapter/persistence/mapper}/LectureMapperTest.java (79%) rename src/test/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out => infrastructure/adapter/persistence/query}/LectureQueryRepositoryTest.java (84%) rename src/test/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out => infrastructure/adapter/persistence/query}/TestQuerydslConfig.java (73%) rename src/test/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out/persistence => infrastructure/adapter/persistence/repository}/BasicAcademicalCultureLectureRepositoryTest.java (81%) rename src/test/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out/persistence => infrastructure/adapter/persistence/repository}/CommonCultureRepositoryTest.java (91%) rename src/test/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out/persistence => infrastructure/adapter/persistence/repository}/CoreCultureRepositoryTest.java (74%) rename src/test/java/com/plzgraduate/myongjigraduatebe/lecture/{adapter/out/persistence => infrastructure/adapter/persistence/repository}/MajorLectureRepositoryTest.java (72%) rename src/test/java/com/plzgraduate/myongjigraduatebe/parsing/{adaptor/in/web => api}/ParsingTextControllerTest.java (92%) rename src/test/java/com/plzgraduate/myongjigraduatebe/parsing/{adaptor/out/persistence/ParsingTextHistoryAdaptorTest.java => infrastructure/adapter/persistence/ParsingTextHistoryAdapterTest.java} (69%) rename src/test/java/com/plzgraduate/myongjigraduatebe/parsing/{adaptor/out/persistence => infrastructure/adapter/persistence/mapper}/ParsingTextHistoryMapperTest.java (79%) rename src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/{adaptor/in/web => api}/find/FindTakenLectureControllerTest.java (91%) rename src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/{adaptor/in/web => api}/update/UpdateTakenLectureControllerTest.java (88%) rename src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/{adaptor/out/persistence => infrastructure/adapter/persistence/mapper}/TakenLectureMapperTest.java (90%) rename src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/{adaptor/out/persistence => infrastructure/adapter/persistence/respository}/TakenLectureRepositoryTest.java (65%) rename src/test/java/com/plzgraduate/myongjigraduatebe/user/{adaptor/in/web => api}/findauthid/FindAuthIdControllerTest.java (92%) rename src/test/java/com/plzgraduate/myongjigraduatebe/user/{adaptor/in/web => api}/finduserinformation/FindUserInformationControllerTest.java (89%) rename src/test/java/com/plzgraduate/myongjigraduatebe/user/{adaptor/in/web => api}/resetpassword/ResetPasswordControllerTest.java (94%) rename src/test/java/com/plzgraduate/myongjigraduatebe/user/{adaptor/in/web => api}/signup/SignUpControllerTest.java (94%) rename src/test/java/com/plzgraduate/myongjigraduatebe/user/{adaptor/in/web => api}/withdraw/WithDrawControllerTest.java (85%) rename src/test/java/com/plzgraduate/myongjigraduatebe/user/{adaptor/out/persistence/UserPersistenceAdaptorTest.java => infrastructure/adapter/persistence/UserPersistenceAdapterTest.java} (76%) rename src/test/java/com/plzgraduate/myongjigraduatebe/user/{adaptor/out/persistence => infrastructure/adapter/persistence/mapper}/UserMapperTest.java (90%) rename src/test/java/com/plzgraduate/myongjigraduatebe/user/{adaptor/out/persistence => infrastructure/adapter/persistence/repository}/UserRepositoryTest.java (88%) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/in/web/signin/SignInApiPresentation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/SignInApiPresentation.java similarity index 70% rename from src/main/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/in/web/signin/SignInApiPresentation.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/SignInApiPresentation.java index 4924752a..bc96cc07 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/in/web/signin/SignInApiPresentation.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/SignInApiPresentation.java @@ -1,10 +1,11 @@ -package com.plzgraduate.myongjigraduatebe.auth.adaptor.in.web.signin; +package com.plzgraduate.myongjigraduatebe.auth.api.signin; import javax.validation.Valid; import org.springframework.web.bind.annotation.RequestBody; -import com.plzgraduate.myongjigraduatebe.auth.application.port.in.TokenResponse; +import com.plzgraduate.myongjigraduatebe.auth.api.signin.dto.request.SignInRequest; +import com.plzgraduate.myongjigraduatebe.auth.api.signin.dto.response.TokenResponse; import com.plzgraduate.myongjigraduatebe.core.meta.LoginUser; import io.swagger.v3.oas.annotations.Hidden; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/in/web/signin/SignInController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/SignInController.java similarity index 74% rename from src/main/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/in/web/signin/SignInController.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/SignInController.java index f19e860f..811b9c46 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/in/web/signin/SignInController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/SignInController.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.auth.adaptor.in.web.signin; +package com.plzgraduate.myongjigraduatebe.auth.api.signin; import javax.validation.Valid; @@ -7,8 +7,9 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; -import com.plzgraduate.myongjigraduatebe.auth.application.port.in.signin.SignInUseCase; -import com.plzgraduate.myongjigraduatebe.auth.application.port.in.TokenResponse; +import com.plzgraduate.myongjigraduatebe.auth.api.signin.dto.request.SignInRequest; +import com.plzgraduate.myongjigraduatebe.auth.application.usecase.signin.SignInUseCase; +import com.plzgraduate.myongjigraduatebe.auth.api.signin.dto.response.TokenResponse; import com.plzgraduate.myongjigraduatebe.core.meta.LoginUser; import com.plzgraduate.myongjigraduatebe.core.meta.WebAdapter; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/in/web/signin/SignInRequest.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/dto/request/SignInRequest.java similarity index 82% rename from src/main/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/in/web/signin/SignInRequest.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/dto/request/SignInRequest.java index c1d77a54..ec85c1ae 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/in/web/signin/SignInRequest.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/dto/request/SignInRequest.java @@ -1,8 +1,8 @@ -package com.plzgraduate.myongjigraduatebe.auth.adaptor.in.web.signin; +package com.plzgraduate.myongjigraduatebe.auth.api.signin.dto.request; import javax.validation.constraints.NotBlank; -import com.plzgraduate.myongjigraduatebe.auth.application.port.in.signin.SignInCommand; +import com.plzgraduate.myongjigraduatebe.auth.application.usecase.signin.SignInCommand; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/in/TokenResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/dto/response/TokenResponse.java similarity index 92% rename from src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/in/TokenResponse.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/dto/response/TokenResponse.java index 9b33df87..37f085a6 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/in/TokenResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/dto/response/TokenResponse.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.auth.application.port.in; +package com.plzgraduate.myongjigraduatebe.auth.api.signin.dto.response; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/in/web/token/TokenApiPresentation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/token/TokenApiPresentation.java similarity index 58% rename from src/main/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/in/web/token/TokenApiPresentation.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/token/TokenApiPresentation.java index 8a6d2ba9..5e36c94a 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/in/web/token/TokenApiPresentation.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/token/TokenApiPresentation.java @@ -1,10 +1,11 @@ -package com.plzgraduate.myongjigraduatebe.auth.adaptor.in.web.token; +package com.plzgraduate.myongjigraduatebe.auth.api.token; import javax.validation.Valid; import org.springframework.web.bind.annotation.RequestBody; -import com.plzgraduate.myongjigraduatebe.auth.application.port.in.AccessTokenResponse; +import com.plzgraduate.myongjigraduatebe.auth.api.token.dto.request.TokenRequest; +import com.plzgraduate.myongjigraduatebe.auth.api.token.dto.response.AccessTokenResponse; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/in/web/token/TokenController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/token/TokenController.java similarity index 69% rename from src/main/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/in/web/token/TokenController.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/token/TokenController.java index 521277c5..de62094b 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/in/web/token/TokenController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/token/TokenController.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.auth.adaptor.in.web.token; +package com.plzgraduate.myongjigraduatebe.auth.api.token; import javax.validation.Valid; @@ -6,8 +6,9 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; -import com.plzgraduate.myongjigraduatebe.auth.application.port.in.AccessTokenResponse; -import com.plzgraduate.myongjigraduatebe.auth.application.port.in.token.TokenUseCase; +import com.plzgraduate.myongjigraduatebe.auth.api.token.dto.request.TokenRequest; +import com.plzgraduate.myongjigraduatebe.auth.api.token.dto.response.AccessTokenResponse; +import com.plzgraduate.myongjigraduatebe.auth.application.usecase.token.TokenUseCase; import com.plzgraduate.myongjigraduatebe.core.meta.WebAdapter; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/in/web/token/TokenRequest.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/token/dto/request/TokenRequest.java similarity index 80% rename from src/main/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/in/web/token/TokenRequest.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/token/dto/request/TokenRequest.java index 771900b4..ddb0a7b7 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/in/web/token/TokenRequest.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/token/dto/request/TokenRequest.java @@ -1,8 +1,8 @@ -package com.plzgraduate.myongjigraduatebe.auth.adaptor.in.web.token; +package com.plzgraduate.myongjigraduatebe.auth.api.token.dto.request; import javax.validation.constraints.NotBlank; -import com.plzgraduate.myongjigraduatebe.auth.application.port.in.token.TokenCommand; +import com.plzgraduate.myongjigraduatebe.auth.application.usecase.token.TokenCommand; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/in/AccessTokenResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/token/dto/response/AccessTokenResponse.java similarity index 90% rename from src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/in/AccessTokenResponse.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/token/dto/response/AccessTokenResponse.java index e0d08cb6..0bc9f732 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/in/AccessTokenResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/token/dto/response/AccessTokenResponse.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.auth.application.port.in; +package com.plzgraduate.myongjigraduatebe.auth.api.token.dto.response; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/out/FindRefreshTokenPort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/FindRefreshTokenPort.java similarity index 64% rename from src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/out/FindRefreshTokenPort.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/FindRefreshTokenPort.java index 5d712355..1091014f 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/out/FindRefreshTokenPort.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/FindRefreshTokenPort.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.auth.application.port.out; +package com.plzgraduate.myongjigraduatebe.auth.application.port; import java.util.Optional; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/out/SaveRefreshTokenPort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/SaveRefreshTokenPort.java similarity index 59% rename from src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/out/SaveRefreshTokenPort.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/SaveRefreshTokenPort.java index 76c40eda..98c5b469 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/out/SaveRefreshTokenPort.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/SaveRefreshTokenPort.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.auth.application.port.out; +package com.plzgraduate.myongjigraduatebe.auth.application.port; public interface SaveRefreshTokenPort { diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/in/signin/SignInUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/in/signin/SignInUseCase.java deleted file mode 100644 index 175e515b..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/in/signin/SignInUseCase.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.auth.application.port.in.signin; - -import com.plzgraduate.myongjigraduatebe.auth.application.port.in.TokenResponse; - -public interface SignInUseCase { - TokenResponse signIn(SignInCommand signInCommand); -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/in/token/TokenUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/in/token/TokenUseCase.java deleted file mode 100644 index 66873117..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/in/token/TokenUseCase.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.auth.application.port.in.token; - -import com.plzgraduate.myongjigraduatebe.auth.application.port.in.AccessTokenResponse; - -public interface TokenUseCase { - AccessTokenResponse createNewToken(TokenCommand tokenCommand); -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/service/signin/SignInService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/service/signin/SignInService.java index 7b363331..a45ee6e4 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/service/signin/SignInService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/service/signin/SignInService.java @@ -5,10 +5,10 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.transaction.annotation.Transactional; -import com.plzgraduate.myongjigraduatebe.auth.application.port.in.signin.SignInUseCase; -import com.plzgraduate.myongjigraduatebe.auth.application.port.in.signin.SignInCommand; -import com.plzgraduate.myongjigraduatebe.auth.application.port.in.TokenResponse; -import com.plzgraduate.myongjigraduatebe.auth.application.port.out.SaveRefreshTokenPort; +import com.plzgraduate.myongjigraduatebe.auth.application.usecase.signin.SignInUseCase; +import com.plzgraduate.myongjigraduatebe.auth.application.usecase.signin.SignInCommand; +import com.plzgraduate.myongjigraduatebe.auth.api.signin.dto.response.TokenResponse; +import com.plzgraduate.myongjigraduatebe.auth.application.port.SaveRefreshTokenPort; import com.plzgraduate.myongjigraduatebe.auth.security.JwtAuthenticationToken; import com.plzgraduate.myongjigraduatebe.auth.security.TokenProvider; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/service/token/TokenService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/service/token/TokenService.java index 6e96fffd..77ca2f16 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/service/token/TokenService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/service/token/TokenService.java @@ -1,9 +1,9 @@ package com.plzgraduate.myongjigraduatebe.auth.application.service.token; -import com.plzgraduate.myongjigraduatebe.auth.application.port.in.AccessTokenResponse; -import com.plzgraduate.myongjigraduatebe.auth.application.port.in.token.TokenCommand; -import com.plzgraduate.myongjigraduatebe.auth.application.port.in.token.TokenUseCase; -import com.plzgraduate.myongjigraduatebe.auth.application.port.out.FindRefreshTokenPort; +import com.plzgraduate.myongjigraduatebe.auth.api.token.dto.response.AccessTokenResponse; +import com.plzgraduate.myongjigraduatebe.auth.application.usecase.token.TokenCommand; +import com.plzgraduate.myongjigraduatebe.auth.application.usecase.token.TokenUseCase; +import com.plzgraduate.myongjigraduatebe.auth.application.port.FindRefreshTokenPort; import com.plzgraduate.myongjigraduatebe.auth.security.TokenProvider; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/in/signin/SignInCommand.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/signin/SignInCommand.java similarity index 80% rename from src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/in/signin/SignInCommand.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/signin/SignInCommand.java index 9f587b78..82bb5888 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/in/signin/SignInCommand.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/signin/SignInCommand.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.auth.application.port.in.signin; +package com.plzgraduate.myongjigraduatebe.auth.application.usecase.signin; import lombok.Builder; import lombok.Getter; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/signin/SignInUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/signin/SignInUseCase.java new file mode 100644 index 00000000..ddc54c08 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/signin/SignInUseCase.java @@ -0,0 +1,7 @@ +package com.plzgraduate.myongjigraduatebe.auth.application.usecase.signin; + +import com.plzgraduate.myongjigraduatebe.auth.api.signin.dto.response.TokenResponse; + +public interface SignInUseCase { + TokenResponse signIn(SignInCommand signInCommand); +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/in/token/TokenCommand.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/token/TokenCommand.java similarity index 77% rename from src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/in/token/TokenCommand.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/token/TokenCommand.java index f9fff251..7f76ae59 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/port/in/token/TokenCommand.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/token/TokenCommand.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.auth.application.port.in.token; +package com.plzgraduate.myongjigraduatebe.auth.application.usecase.token; import lombok.Builder; import lombok.Getter; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/token/TokenUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/token/TokenUseCase.java new file mode 100644 index 00000000..706b20e8 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/token/TokenUseCase.java @@ -0,0 +1,7 @@ +package com.plzgraduate.myongjigraduatebe.auth.application.usecase.token; + +import com.plzgraduate.myongjigraduatebe.auth.api.token.dto.response.AccessTokenResponse; + +public interface TokenUseCase { + AccessTokenResponse createNewToken(TokenCommand tokenCommand); +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/out/InMemoryTokenRepository.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/infrastructure/adapter/repository/InMemoryTokenRepository.java similarity index 75% rename from src/main/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/out/InMemoryTokenRepository.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/auth/infrastructure/adapter/repository/InMemoryTokenRepository.java index 36d7994a..f7a863f7 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/out/InMemoryTokenRepository.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/infrastructure/adapter/repository/InMemoryTokenRepository.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.auth.adaptor.out; +package com.plzgraduate.myongjigraduatebe.auth.infrastructure.adapter.repository; import java.util.Optional; import java.util.concurrent.TimeUnit; @@ -7,8 +7,8 @@ import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; -import com.plzgraduate.myongjigraduatebe.auth.application.port.out.FindRefreshTokenPort; -import com.plzgraduate.myongjigraduatebe.auth.application.port.out.SaveRefreshTokenPort; +import com.plzgraduate.myongjigraduatebe.auth.application.port.FindRefreshTokenPort; +import com.plzgraduate.myongjigraduatebe.auth.application.port.SaveRefreshTokenPort; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/security/JwtAuthenticationProvider.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/security/JwtAuthenticationProvider.java index a23390d0..b0a713e0 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/security/JwtAuthenticationProvider.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/security/JwtAuthenticationProvider.java @@ -11,7 +11,7 @@ import org.springframework.security.crypto.password.PasswordEncoder; import com.plzgraduate.myongjigraduatebe.core.exception.UnAuthorizedException; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/core/config/SecurityConfig.java b/src/main/java/com/plzgraduate/myongjigraduatebe/core/config/SecurityConfig.java index 5223e5d4..ec886ccc 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/core/config/SecurityConfig.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/core/config/SecurityConfig.java @@ -20,7 +20,7 @@ import com.plzgraduate.myongjigraduatebe.auth.security.JwtAuthenticationProvider; import com.plzgraduate.myongjigraduatebe.auth.security.TokenAuthenticationFilter; import com.plzgraduate.myongjigraduatebe.auth.security.TokenProvider; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/in/web/CalculateGraduationApiPresentation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateGraduationApiPresentation.java similarity index 72% rename from src/main/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/in/web/CalculateGraduationApiPresentation.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateGraduationApiPresentation.java index 0185ad76..2528ed57 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/in/web/CalculateGraduationApiPresentation.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateGraduationApiPresentation.java @@ -1,7 +1,7 @@ -package com.plzgraduate.myongjigraduatebe.graduation.adpater.in.web; +package com.plzgraduate.myongjigraduatebe.graduation.api; import com.plzgraduate.myongjigraduatebe.core.meta.LoginUser; -import com.plzgraduate.myongjigraduatebe.graduation.application.port.in.response.GraduationResponse; +import com.plzgraduate.myongjigraduatebe.graduation.api.dto.response.GraduationResponse; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/in/web/CalculateGraduationController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateGraduationController.java similarity index 78% rename from src/main/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/in/web/CalculateGraduationController.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateGraduationController.java index a5c383bd..2b7d24ce 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/in/web/CalculateGraduationController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateGraduationController.java @@ -1,12 +1,12 @@ -package com.plzgraduate.myongjigraduatebe.graduation.adpater.in.web; +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.application.port.in.response.GraduationResponse; -import com.plzgraduate.myongjigraduatebe.graduation.application.port.in.CalculateGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.api.dto.response.GraduationResponse; +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateGraduationUseCase; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/BasicInfoResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/BasicInfoResponse.java similarity index 93% rename from src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/BasicInfoResponse.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/BasicInfoResponse.java index 6961fc10..52a33bc9 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/BasicInfoResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/BasicInfoResponse.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.port.in.response; +package com.plzgraduate.myongjigraduatebe.graduation.api.dto.response; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationResult; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/ChapelResultResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/ChapelResultResponse.java similarity index 89% rename from src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/ChapelResultResponse.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/ChapelResultResponse.java index 4468c799..b957f9b3 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/ChapelResultResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/ChapelResultResponse.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.port.in.response; +package com.plzgraduate.myongjigraduatebe.graduation.api.dto.response; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.ChapelResult; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/DetailGraduationCategoryResultResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/DetailGraduationCategoryResultResponse.java similarity index 95% rename from src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/DetailGraduationCategoryResultResponse.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/DetailGraduationCategoryResultResponse.java index 6bc7b217..f04d8456 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/DetailGraduationCategoryResultResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/DetailGraduationCategoryResultResponse.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.port.in.response; +package com.plzgraduate.myongjigraduatebe.graduation.api.dto.response; import java.util.List; import java.util.stream.Collectors; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/DetailGraduationResultResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/DetailGraduationResultResponse.java similarity index 94% rename from src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/DetailGraduationResultResponse.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/DetailGraduationResultResponse.java index 584f054b..6f16fa3d 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/DetailGraduationResultResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/DetailGraduationResultResponse.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.port.in.response; +package com.plzgraduate.myongjigraduatebe.graduation.api.dto.response; import java.util.List; import java.util.stream.Collectors; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/GraduationResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/GraduationResponse.java similarity index 97% rename from src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/GraduationResponse.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/GraduationResponse.java index 2e0ebe77..24d0c2ba 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/GraduationResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/GraduationResponse.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.port.in.response; +package com.plzgraduate.myongjigraduatebe.graduation.api.dto.response; import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.*; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/LectureResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/LectureResponse.java similarity index 91% rename from src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/LectureResponse.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/LectureResponse.java index e14cf547..a7c79467 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/LectureResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/LectureResponse.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.port.in.response; +package com.plzgraduate.myongjigraduatebe.graduation.api.dto.response; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/MajorInfoResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/MajorInfoResponse.java similarity index 92% rename from src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/MajorInfoResponse.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/MajorInfoResponse.java index 77308621..556098cd 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/MajorInfoResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/MajorInfoResponse.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.port.in.response; +package com.plzgraduate.myongjigraduatebe.graduation.api.dto.response; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/RestResultResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/RestResultResponse.java similarity index 94% rename from src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/RestResultResponse.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/RestResultResponse.java index c61e7260..740097f8 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/response/RestResultResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/RestResultResponse.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.port.in.response; +package com.plzgraduate.myongjigraduatebe.graduation.api.dto.response; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.FreeElectiveGraduationResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.NormalCultureGraduationResult; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/CalculateGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java similarity index 96% rename from src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/CalculateGraduationService.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java index 14e6a383..a315ce6d 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/CalculateGraduationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.port; +package com.plzgraduate.myongjigraduatebe.graduation.application.service; import java.util.ArrayList; import java.util.List; @@ -7,8 +7,8 @@ import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.graduation.application.port.in.response.GraduationResponse; -import com.plzgraduate.myongjigraduatebe.graduation.application.port.in.CalculateGraduationUseCase; +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.DetailGraduationResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; @@ -21,17 +21,17 @@ import com.plzgraduate.myongjigraduatebe.graduation.domain.service.coreculture.CoreCultureGraduationManager; import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorManager; import com.plzgraduate.myongjigraduatebe.graduation.domain.service.submajor.SubMajorManager; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.out.FindBasicAcademicalCulturePort; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.out.FindCommonCulturePort; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.out.FindCoreCulturePort; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.out.FindMajorPort; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindBasicAcademicalCulturePort; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindCommonCulturePort; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindCoreCulturePort; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindMajorPort; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; 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.out.FindTakenLecturePort; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.FindTakenLecturePort; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserUseCase; +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.user.domain.model.StudentCategory; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/CalculateGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateGraduationUseCase.java similarity index 60% rename from src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/CalculateGraduationUseCase.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateGraduationUseCase.java index 1c3101e1..20fb227d 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/port/in/CalculateGraduationUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateGraduationUseCase.java @@ -1,6 +1,6 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.port.in; +package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; -import com.plzgraduate.myongjigraduatebe.graduation.application.port.in.response.GraduationResponse; +import com.plzgraduate.myongjigraduatebe.graduation.api.dto.response.GraduationResponse; public interface CalculateGraduationUseCase { diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/in/web/SearchLectureApiPresentation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureApiPresentation.java similarity index 81% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/in/web/SearchLectureApiPresentation.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureApiPresentation.java index e2346b73..9f4bd5bf 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/in/web/SearchLectureApiPresentation.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureApiPresentation.java @@ -1,10 +1,10 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.in.web; +package com.plzgraduate.myongjigraduatebe.lecture.api; import javax.validation.constraints.Size; import org.springframework.web.bind.annotation.RequestParam; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.in.search.SearchLectureResponse; +import com.plzgraduate.myongjigraduatebe.lecture.api.dto.response.SearchLectureResponse; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/in/web/SearchLectureController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureController.java similarity index 72% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/in/web/SearchLectureController.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureController.java index b039fefb..49784bcf 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/in/web/SearchLectureController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureController.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.in.web; +package com.plzgraduate.myongjigraduatebe.lecture.api; import javax.validation.constraints.Size; @@ -8,9 +8,9 @@ import org.springframework.web.bind.annotation.RequestParam; import com.plzgraduate.myongjigraduatebe.core.meta.WebAdapter; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.in.search.SearchLectureCommand; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.in.search.SearchLectureResponse; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.in.search.SearchLectureUseCase; +import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.SearchLectureCommand; +import com.plzgraduate.myongjigraduatebe.lecture.api.dto.response.SearchLectureResponse; +import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.SearchLectureUseCase; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/in/search/LectureResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/dto/response/LectureResponse.java similarity index 93% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/in/search/LectureResponse.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/dto/response/LectureResponse.java index 140b64bc..ed47fed9 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/in/search/LectureResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/dto/response/LectureResponse.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.application.port.in.search; +package com.plzgraduate.myongjigraduatebe.lecture.api.dto.response; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/in/search/SearchLectureResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/dto/response/SearchLectureResponse.java similarity index 85% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/in/search/SearchLectureResponse.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/dto/response/SearchLectureResponse.java index 1ae2a1ce..48323fb0 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/in/search/SearchLectureResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/dto/response/SearchLectureResponse.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.application.port.in.search; +package com.plzgraduate.myongjigraduatebe.lecture.api.dto.response; import java.util.List; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/out/FindBasicAcademicalCulturePort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/FindBasicAcademicalCulturePort.java similarity index 97% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/out/FindBasicAcademicalCulturePort.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/FindBasicAcademicalCulturePort.java index 89540387..fa31cf39 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/out/FindBasicAcademicalCulturePort.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/FindBasicAcademicalCulturePort.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.application.port.out; +package com.plzgraduate.myongjigraduatebe.lecture.application.port; import java.util.Set; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/out/FindCommonCulturePort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/FindCommonCulturePort.java similarity index 97% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/out/FindCommonCulturePort.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/FindCommonCulturePort.java index e396828c..ce02c80e 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/out/FindCommonCulturePort.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/FindCommonCulturePort.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.application.port.out; +package com.plzgraduate.myongjigraduatebe.lecture.application.port; import java.util.Set; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/out/FindCoreCulturePort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/FindCoreCulturePort.java similarity index 97% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/out/FindCoreCulturePort.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/FindCoreCulturePort.java index 988e6258..1bd9ffb3 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/out/FindCoreCulturePort.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/FindCoreCulturePort.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.application.port.out; +package com.plzgraduate.myongjigraduatebe.lecture.application.port; import java.util.Set; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/out/FindLecturePort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/FindLecturePort.java similarity index 97% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/out/FindLecturePort.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/FindLecturePort.java index 18613cf6..2d1f97a4 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/out/FindLecturePort.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/FindLecturePort.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.application.port.out; +package com.plzgraduate.myongjigraduatebe.lecture.application.port; import java.util.List; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/out/FindMajorPort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/FindMajorPort.java similarity index 96% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/out/FindMajorPort.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/FindMajorPort.java index bc26e55b..df3954cf 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/out/FindMajorPort.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/FindMajorPort.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.application.port.out; +package com.plzgraduate.myongjigraduatebe.lecture.application.port; import java.util.Set; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/out/SearchLecturePort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/SearchLecturePort.java similarity index 97% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/out/SearchLecturePort.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/SearchLecturePort.java index b988e56e..1ed00380 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/out/SearchLecturePort.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/SearchLecturePort.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.application.port.out; +package com.plzgraduate.myongjigraduatebe.lecture.application.port; import java.util.List; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/in/search/SearchLectureUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/in/search/SearchLectureUseCase.java deleted file mode 100644 index 4d3ead93..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/in/search/SearchLectureUseCase.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.lecture.application.port.in.search; - -public interface SearchLectureUseCase { - SearchLectureResponse searchLectures(SearchLectureCommand searchLectureCommand); -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/find/FindLecturesByIdService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/FindLecturesByIdService.java similarity index 84% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/find/FindLecturesByIdService.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/FindLecturesByIdService.java index e2537796..7be10690 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/find/FindLecturesByIdService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/FindLecturesByIdService.java @@ -1,12 +1,12 @@ -package com.plzgraduate.myongjigraduatebe.lecture.application.service.find; +package com.plzgraduate.myongjigraduatebe.lecture.application.service; import java.util.List; import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.in.find.FindLecturesByIdUseCase; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.out.FindLecturePort; +import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.FindLecturesByIdUseCase; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindLecturePort; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/find/FindLecturesByLectureCodeService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/FindLecturesByLectureCodeService.java similarity index 84% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/find/FindLecturesByLectureCodeService.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/FindLecturesByLectureCodeService.java index 98a561a1..07e164e5 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/find/FindLecturesByLectureCodeService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/FindLecturesByLectureCodeService.java @@ -1,12 +1,12 @@ -package com.plzgraduate.myongjigraduatebe.lecture.application.service.find; +package com.plzgraduate.myongjigraduatebe.lecture.application.service; import java.util.List; import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.in.find.FindLecturesByLectureCodeUseCase; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.out.FindLecturePort; +import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.FindLecturesByLectureCodeUseCase; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindLecturePort; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/search/SearchLectureService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/SearchLectureService.java similarity index 67% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/search/SearchLectureService.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/SearchLectureService.java index 92712fad..2e9d014a 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/search/SearchLectureService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/SearchLectureService.java @@ -1,14 +1,14 @@ -package com.plzgraduate.myongjigraduatebe.lecture.application.service.search; +package com.plzgraduate.myongjigraduatebe.lecture.application.service; import java.util.List; import java.util.stream.Collectors; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.in.search.SearchLectureCommand; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.in.search.LectureResponse; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.in.search.SearchLectureResponse; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.in.search.SearchLectureUseCase; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.out.SearchLecturePort; +import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.SearchLectureCommand; +import com.plzgraduate.myongjigraduatebe.lecture.api.dto.response.LectureResponse; +import com.plzgraduate.myongjigraduatebe.lecture.api.dto.response.SearchLectureResponse; +import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.SearchLectureUseCase; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.SearchLecturePort; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/in/find/FindLecturesByIdUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/FindLecturesByIdUseCase.java similarity index 72% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/in/find/FindLecturesByIdUseCase.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/FindLecturesByIdUseCase.java index 17ea5bfb..de163b99 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/in/find/FindLecturesByIdUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/FindLecturesByIdUseCase.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.application.port.in.find; +package com.plzgraduate.myongjigraduatebe.lecture.application.usecase; import java.util.List; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/in/find/FindLecturesByLectureCodeUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/FindLecturesByLectureCodeUseCase.java similarity index 74% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/in/find/FindLecturesByLectureCodeUseCase.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/FindLecturesByLectureCodeUseCase.java index 4c2f22e2..4390da98 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/in/find/FindLecturesByLectureCodeUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/FindLecturesByLectureCodeUseCase.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.application.port.in.find; +package com.plzgraduate.myongjigraduatebe.lecture.application.usecase; import java.util.List; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/in/search/SearchLectureCommand.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/SearchLectureCommand.java similarity index 85% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/in/search/SearchLectureCommand.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/SearchLectureCommand.java index 0d46d4f0..72930fa9 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/in/search/SearchLectureCommand.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/SearchLectureCommand.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.application.port.in.search; +package com.plzgraduate.myongjigraduatebe.lecture.application.usecase; import lombok.Builder; import lombok.Getter; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/SearchLectureUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/SearchLectureUseCase.java new file mode 100644 index 00000000..7f763d03 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/SearchLectureUseCase.java @@ -0,0 +1,7 @@ +package com.plzgraduate.myongjigraduatebe.lecture.application.usecase; + +import com.plzgraduate.myongjigraduatebe.lecture.api.dto.response.SearchLectureResponse; + +public interface SearchLectureUseCase { + SearchLectureResponse searchLectures(SearchLectureCommand searchLectureCommand); +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindBasicAcademicalCulturePersistenceAdapter.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindBasicAcademicalCulturePersistenceAdapter.java similarity index 68% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindBasicAcademicalCulturePersistenceAdapter.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindBasicAcademicalCulturePersistenceAdapter.java index eaef6507..1e42da2b 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindBasicAcademicalCulturePersistenceAdapter.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindBasicAcademicalCulturePersistenceAdapter.java @@ -1,11 +1,12 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence; import java.util.Set; import java.util.stream.Collectors; import com.plzgraduate.myongjigraduatebe.core.meta.PersistenceAdapter; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository.BasicAcademicalCultureRepository; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.out.FindBasicAcademicalCulturePort; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.mapper.LectureMapper; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.BasicAcademicalCultureRepository; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindBasicAcademicalCulturePort; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; import com.plzgraduate.myongjigraduatebe.user.domain.model.College; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @@ -14,7 +15,7 @@ @PersistenceAdapter @RequiredArgsConstructor -class FindBasicAcademicalCulturePersistenceAdapter implements FindBasicAcademicalCulturePort { +public class FindBasicAcademicalCulturePersistenceAdapter implements FindBasicAcademicalCulturePort { private final BasicAcademicalCultureRepository basicAcademicalCultureRepository; private final LectureMapper lectureMapper; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindCommonCulturePersistenceAdapter.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindCommonCulturePersistenceAdapter.java similarity index 79% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindCommonCulturePersistenceAdapter.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindCommonCulturePersistenceAdapter.java index afd0f5f7..197f5114 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindCommonCulturePersistenceAdapter.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindCommonCulturePersistenceAdapter.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence; import static com.plzgraduate.myongjigraduatebe.user.domain.model.EnglishLevel.*; @@ -6,8 +6,9 @@ import java.util.stream.Collectors; import com.plzgraduate.myongjigraduatebe.core.meta.PersistenceAdapter; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository.CommonCultureRepository; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.out.FindCommonCulturePort; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.mapper.LectureMapper; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.CommonCultureRepository; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindCommonCulturePort; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCulture; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @@ -15,7 +16,7 @@ @PersistenceAdapter @RequiredArgsConstructor -class FindCommonCulturePersistenceAdapter implements FindCommonCulturePort { +public class FindCommonCulturePersistenceAdapter implements FindCommonCulturePort { private final CommonCultureRepository commonCultureRepository; private final LectureMapper lectureMapper; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindCoreCulturePersistenceAdapter.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindCoreCulturePersistenceAdapter.java similarity index 64% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindCoreCulturePersistenceAdapter.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindCoreCulturePersistenceAdapter.java index 4f722808..273099bd 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindCoreCulturePersistenceAdapter.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindCoreCulturePersistenceAdapter.java @@ -1,11 +1,12 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence; import java.util.Set; import java.util.stream.Collectors; import com.plzgraduate.myongjigraduatebe.core.meta.PersistenceAdapter; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository.CoreCultureRepository; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.out.FindCoreCulturePort; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.mapper.LectureMapper; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.CoreCultureRepository; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindCoreCulturePort; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CoreCulture; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @@ -13,7 +14,7 @@ @PersistenceAdapter @RequiredArgsConstructor -class FindCoreCulturePersistenceAdapter implements FindCoreCulturePort { +public class FindCoreCulturePersistenceAdapter implements FindCoreCulturePort { private final CoreCultureRepository coreCultureRepository; private final LectureMapper lectureMapper; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindMajorPersistenceAdapter.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindMajorPersistenceAdapter.java similarity index 62% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindMajorPersistenceAdapter.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindMajorPersistenceAdapter.java index 83917e59..b9a18e2c 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindMajorPersistenceAdapter.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindMajorPersistenceAdapter.java @@ -1,19 +1,19 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence; import java.util.Set; import java.util.stream.Collectors; import com.plzgraduate.myongjigraduatebe.core.meta.PersistenceAdapter; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository.MajorLectureRepository; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.out.FindMajorPort; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.mapper.LectureMapper; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.MajorLectureRepository; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindMajorPort; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; @PersistenceAdapter @RequiredArgsConstructor -class FindMajorPersistenceAdapter implements FindMajorPort { +public class FindMajorPersistenceAdapter implements FindMajorPort { private final MajorLectureRepository majorLectureRepository; private final LectureMapper mapper; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/LecturePersistenceAdaptor.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/LecturePersistenceAdapter.java similarity index 69% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/LecturePersistenceAdaptor.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/LecturePersistenceAdapter.java index 3d2b0454..7cce0595 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/LecturePersistenceAdaptor.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/LecturePersistenceAdapter.java @@ -1,21 +1,22 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence; import java.util.List; import java.util.stream.Collectors; import com.plzgraduate.myongjigraduatebe.core.meta.PersistenceAdapter; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.LectureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository.LectureQueryRepository; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository.LectureRepository; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.out.FindLecturePort; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.out.SearchLecturePort; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.LectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.mapper.LectureMapper; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.LectureQueryRepository; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.LectureRepository; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindLecturePort; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.SearchLecturePort; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import lombok.RequiredArgsConstructor; @PersistenceAdapter @RequiredArgsConstructor -class LecturePersistenceAdaptor implements FindLecturePort, SearchLecturePort { +public class LecturePersistenceAdapter implements FindLecturePort, SearchLecturePort { private final LectureQueryRepository lectureQueryRepository; private final LectureRepository lectureRepository; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/entity/BasicAcademicalCultureLectureJpaEntity.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/entity/BasicAcademicalCultureLectureJpaEntity.java similarity index 91% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/entity/BasicAcademicalCultureLectureJpaEntity.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/entity/BasicAcademicalCultureLectureJpaEntity.java index 1c971e8b..20da0ebd 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/entity/BasicAcademicalCultureLectureJpaEntity.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/entity/BasicAcademicalCultureLectureJpaEntity.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity; import javax.persistence.Entity; import javax.persistence.FetchType; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/entity/CommonCultureJpaEntity.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/entity/CommonCultureJpaEntity.java similarity index 93% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/entity/CommonCultureJpaEntity.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/entity/CommonCultureJpaEntity.java index 04b37fd4..b3fcc205 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/entity/CommonCultureJpaEntity.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/entity/CommonCultureJpaEntity.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity; import javax.persistence.Entity; import javax.persistence.EnumType; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/entity/CoreCultureJpaEntity.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/entity/CoreCultureJpaEntity.java similarity index 93% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/entity/CoreCultureJpaEntity.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/entity/CoreCultureJpaEntity.java index a47edd65..fe9d3ad2 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/entity/CoreCultureJpaEntity.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/entity/CoreCultureJpaEntity.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity; import javax.persistence.Entity; import javax.persistence.EnumType; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/entity/LectureJpaEntity.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/entity/LectureJpaEntity.java similarity index 91% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/entity/LectureJpaEntity.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/entity/LectureJpaEntity.java index 334e49ef..7bcc18bd 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/entity/LectureJpaEntity.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/entity/LectureJpaEntity.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity; import javax.persistence.Column; import javax.persistence.Entity; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/entity/MajorLectureJpaEntity.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/entity/MajorLectureJpaEntity.java similarity index 92% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/entity/MajorLectureJpaEntity.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/entity/MajorLectureJpaEntity.java index 11e9191f..d70ac703 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/entity/MajorLectureJpaEntity.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/entity/MajorLectureJpaEntity.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity; import javax.persistence.Entity; import javax.persistence.FetchType; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/LectureMapper.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/mapper/LectureMapper.java similarity index 73% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/LectureMapper.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/mapper/LectureMapper.java index 500d2796..cbe0ec18 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/LectureMapper.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/mapper/LectureMapper.java @@ -1,12 +1,12 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.mapper; import org.springframework.stereotype.Component; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.BasicAcademicalCultureLectureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.CommonCultureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.CoreCultureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.LectureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.MajorLectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.BasicAcademicalCultureLectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.CommonCultureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.CoreCultureJpaEntity; +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.domain.model.BasicAcademicalCultureLecture; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCulture; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CoreCulture; @@ -16,7 +16,7 @@ @Component public class LectureMapper { - Lecture mapToLectureModel(LectureJpaEntity lecture) { + public Lecture mapToLectureModel(LectureJpaEntity lecture) { return Lecture.builder() .id(lecture.getId()) @@ -28,7 +28,7 @@ Lecture mapToLectureModel(LectureJpaEntity lecture) { .build(); } - CommonCulture mapToCommonCultureModel(CommonCultureJpaEntity entity) { + public CommonCulture mapToCommonCultureModel(CommonCultureJpaEntity entity) { LectureJpaEntity lectureJpaEntity = entity.getLectureJpaEntity(); return CommonCulture.builder() .lecture( @@ -45,7 +45,7 @@ CommonCulture mapToCommonCultureModel(CommonCultureJpaEntity entity) { .build(); } - CoreCulture mapToCoreCultureModel(CoreCultureJpaEntity entity) { + public CoreCulture mapToCoreCultureModel(CoreCultureJpaEntity entity) { LectureJpaEntity lectureJpaEntity = entity.getLectureJpaEntity(); return CoreCulture.builder() .lecture( @@ -62,7 +62,7 @@ CoreCulture mapToCoreCultureModel(CoreCultureJpaEntity entity) { .build(); } - BasicAcademicalCultureLecture mapToBasicAcademicalCultureLectureModel( + public BasicAcademicalCultureLecture mapToBasicAcademicalCultureLectureModel( BasicAcademicalCultureLectureJpaEntity entity) { LectureJpaEntity lectureJpaEntity = entity.getLectureJpaEntity(); return BasicAcademicalCultureLecture.builder() @@ -80,7 +80,7 @@ BasicAcademicalCultureLecture mapToBasicAcademicalCultureLectureModel( .build(); } - MajorLecture mapToMajorLectureModel(MajorLectureJpaEntity entity) { + public MajorLecture mapToMajorLectureModel(MajorLectureJpaEntity entity) { LectureJpaEntity lectureJpaEntity = entity.getLectureJpaEntity(); return MajorLecture.builder() .lecture( diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/repository/BasicAcademicalCultureRepository.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/BasicAcademicalCultureRepository.java similarity index 70% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/repository/BasicAcademicalCultureRepository.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/BasicAcademicalCultureRepository.java index 87d9ac28..15d02955 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/repository/BasicAcademicalCultureRepository.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/BasicAcademicalCultureRepository.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository; import java.util.List; @@ -6,7 +6,7 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.BasicAcademicalCultureLectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.BasicAcademicalCultureLectureJpaEntity; public interface BasicAcademicalCultureRepository extends JpaRepository { diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/repository/CommonCultureRepository.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/CommonCultureRepository.java similarity index 86% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/repository/CommonCultureRepository.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/CommonCultureRepository.java index 53ca9071..562d862c 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/repository/CommonCultureRepository.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/CommonCultureRepository.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository; import java.util.List; @@ -6,7 +6,7 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.CommonCultureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.CommonCultureJpaEntity; public interface CommonCultureRepository extends JpaRepository { diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/repository/CoreCultureRepository.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/CoreCultureRepository.java similarity index 71% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/repository/CoreCultureRepository.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/CoreCultureRepository.java index 5c1ddbd8..bca19e7a 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/repository/CoreCultureRepository.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/CoreCultureRepository.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository; import java.util.List; @@ -6,7 +6,7 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.CoreCultureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.CoreCultureJpaEntity; public interface CoreCultureRepository extends JpaRepository { diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/repository/LectureQueryRepository.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/LectureQueryRepository.java similarity index 71% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/repository/LectureQueryRepository.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/LectureQueryRepository.java index 49743bae..b3ee17bd 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/repository/LectureQueryRepository.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/LectureQueryRepository.java @@ -1,11 +1,11 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository; import java.util.List; import org.springframework.stereotype.Repository; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.LectureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.QLectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.LectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.QLectureJpaEntity; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/repository/LectureRepository.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/LectureRepository.java similarity index 59% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/repository/LectureRepository.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/LectureRepository.java index bf36c370..231131a6 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/repository/LectureRepository.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/LectureRepository.java @@ -1,10 +1,10 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.LectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.LectureJpaEntity; public interface LectureRepository extends JpaRepository { diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/repository/MajorLectureRepository.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/MajorLectureRepository.java similarity index 69% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/repository/MajorLectureRepository.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/MajorLectureRepository.java index 2df093b0..0221acca 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/repository/MajorLectureRepository.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/MajorLectureRepository.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository; import java.util.List; @@ -6,7 +6,7 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.MajorLectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.MajorLectureJpaEntity; public interface MajorLectureRepository extends JpaRepository { diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/out/persistence/ParsingTextRepository.java b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/out/persistence/ParsingTextRepository.java deleted file mode 100644 index 889b7574..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/out/persistence/ParsingTextRepository.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.parsing.adaptor.out.persistence; - -import org.springframework.data.jpa.repository.JpaRepository; - -import com.plzgraduate.myongjigraduatebe.user.adaptor.out.persistence.UserJpaEntity; - -public interface ParsingTextRepository extends JpaRepository { - - void deleteAllByUser(UserJpaEntity user); - -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/in/web/ParsingTextApiPresentation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/api/ParsingTextApiPresentation.java similarity index 80% rename from src/main/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/in/web/ParsingTextApiPresentation.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/parsing/api/ParsingTextApiPresentation.java index 194b176c..13e868f2 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/in/web/ParsingTextApiPresentation.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/api/ParsingTextApiPresentation.java @@ -1,10 +1,11 @@ -package com.plzgraduate.myongjigraduatebe.parsing.adaptor.in.web; +package com.plzgraduate.myongjigraduatebe.parsing.api; import javax.validation.Valid; import org.springframework.web.bind.annotation.RequestBody; import com.plzgraduate.myongjigraduatebe.core.meta.LoginUser; +import com.plzgraduate.myongjigraduatebe.parsing.api.dto.request.ParsingTextRequest; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/in/web/ParsingTextController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/api/ParsingTextController.java similarity index 72% rename from src/main/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/in/web/ParsingTextController.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/parsing/api/ParsingTextController.java index 20e5aa96..c150dc8e 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/in/web/ParsingTextController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/api/ParsingTextController.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.parsing.adaptor.in.web; +package com.plzgraduate.myongjigraduatebe.parsing.api; import javax.validation.Valid; @@ -8,9 +8,10 @@ import com.plzgraduate.myongjigraduatebe.core.meta.LoginUser; import com.plzgraduate.myongjigraduatebe.core.meta.WebAdapter; -import com.plzgraduate.myongjigraduatebe.parsing.application.port.in.ParsingTextCommand; -import com.plzgraduate.myongjigraduatebe.parsing.application.port.in.ParsingTextHistoryUseCase; -import com.plzgraduate.myongjigraduatebe.parsing.application.port.in.ParsingTextUseCase; +import com.plzgraduate.myongjigraduatebe.parsing.api.dto.request.ParsingTextRequest; +import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.ParsingTextCommand; +import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.ParsingTextHistoryUseCase; +import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.ParsingTextUseCase; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/in/web/ParsingTextRequest.java b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/api/dto/request/ParsingTextRequest.java similarity index 94% rename from src/main/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/in/web/ParsingTextRequest.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/parsing/api/dto/request/ParsingTextRequest.java index b2bad2a3..19a6f844 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/in/web/ParsingTextRequest.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/api/dto/request/ParsingTextRequest.java @@ -1,8 +1,8 @@ -package com.plzgraduate.myongjigraduatebe.parsing.adaptor.in.web; +package com.plzgraduate.myongjigraduatebe.parsing.api.dto.request; import javax.validation.constraints.NotNull; -import com.plzgraduate.myongjigraduatebe.parsing.application.port.in.ParsingTextCommand; +import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.ParsingTextCommand; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; @@ -11,7 +11,7 @@ @Getter @NoArgsConstructor -class ParsingTextRequest { +public class ParsingTextRequest { @NotNull(message = "parsingText는 null값이 될 수 없습니다.") @Schema(name = "parsingText", example = "2023/12/08|1/1|ICT융합대학 융합소프트웨어학부 데이터테크놀로지전공, 나경호(60202455), 현학적 - 재학, 이수 - 3, 입학 - 신입학(2020/03/02)|토익 - 715, 영어교과목면제 - 면제없음, 최종학적변동 - 2/1전과(2023/01/27), 전과내역 - 기계공학과|편입생 인정학점 - 교양 0, 전공 0, 자유선택 0, 성경과인간이해 0|교환학생 인정학점 - 학문기초교양 0, 일반교양 0, 전공 0, 복수전공학문기초교양 0, 복수전공 0, 연계전공 0, 부전공 0, 자유선택 0|공통교양 16.5, 핵심교양 6, 학문기초교양 6, 일반교양 12, 전공 9, 복수전공 0, 연계전공 0, 부전공 0, 교직 0, 자유선택 7|총 취득학점 - 56.5, 총점 - 230.5, 평균평점 - 4.43|이수구분|수강년도/학기|한글코드|과목코드|과목명|학점|등급|중복|공통교양|2020년 2학기|교필141|KMA02141|4차산업혁명과미래사회진로선택|2|P|공통교양|2020년 2학기|교필122|KMA02122|기독교와문화|2|A+|공통교양|2023년 1학기|교필105|KMA02105|발표와토의|3|A0|공통교양|2020년 1학기|교필127|KMA00101|성서와인간이해|2|A+|공통교양|2020년 1학기|교필123|KMA02123|영어3|2|A+|공통교양|2020년 2학기|교필124|KMA02124|영어4|2|A+|공통교양|2020년 1학기|교필125|KMA02125|영어회화3|1|A0|공통교양|2020년 2학기|교필126|KMA02126|영어회화4|1|A+|공통교양|2020년 1학기|교필101|KMA02101|채플|0.5|P|공통교양|2020년 2학기|교필101|KMA02101|채플|0.5|P|공통교양|2023년 1학기|교필101|KMA02101|채플|0.5|P|핵심교양|2023년 1학기|교선128|KMA02128|글로벌문화|3|A0|핵심교양|2023년 1학기|교선114|KMA02114|민주주의와현대사회|3|A+|학문기초교양|2020년 1학기|기자111|KME02111|물리학1|3|A+|학문기초교양|2020년 1학기|기자101|KME02101|미적분학1|3|A+|일반교양|2020년 2학기|기자112|KME02112|물리학2|3|A+|일반교양|2020년 1학기|기자113|KME02113|물리학실험1|1|A+|일반교양|2020년 2학기|기자114|KME02114|물리학실험2|1|A+|일반교양|2020년 2학기|기자102|KME02102|미적분학2|3|A+|일반교양|2020년 1학기|기자121|KME02121|일반화학|3|A+|일반교양|2020년 1학기|기자122|KME02122|일반화학실험|1|A+|전공1단계|2023년 1학기|데테202|HED01202|R통계분석|3|A+|전공1단계|2023년 1학기|융소102|HEB01102|기초프로그래밍|3|A+|전공1단계|2023년 1학기|데테201|HED01201|자료구조|3|A+|자유선택|2020년 2학기|공과100|JEA00100|공학입문설계|3|A+|자유선택|2020년 1학기|기계207|JEP01207|기계신입생세미나|1|P|자유선택|2020년 2학기|기계209|JEP02209|정역학|3|A+|") diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/port/out/DeleteParsingTextHistoryPort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/port/DeleteParsingTextHistoryPort.java similarity index 96% rename from src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/port/out/DeleteParsingTextHistoryPort.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/port/DeleteParsingTextHistoryPort.java index 2fa3c0d8..490ecbc6 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/port/out/DeleteParsingTextHistoryPort.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/port/DeleteParsingTextHistoryPort.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.parsing.application.port.out; +package com.plzgraduate.myongjigraduatebe.parsing.application.port; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/port/out/SaveParsingTextHistoryPort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/port/SaveParsingTextHistoryPort.java similarity index 97% rename from src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/port/out/SaveParsingTextHistoryPort.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/port/SaveParsingTextHistoryPort.java index aff2a36f..b0598c53 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/port/out/SaveParsingTextHistoryPort.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/port/SaveParsingTextHistoryPort.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.parsing.application.port.out; +package com.plzgraduate.myongjigraduatebe.parsing.application.port; import com.plzgraduate.myongjigraduatebe.parsing.domain.ParsingTextHistory; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextHistoryService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextHistoryService.java index 8f61a555..c29c8695 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextHistoryService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextHistoryService.java @@ -3,11 +3,11 @@ import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.parsing.application.port.in.ParsingTextHistoryUseCase; -import com.plzgraduate.myongjigraduatebe.parsing.application.port.in.ParsingTextCommand; -import com.plzgraduate.myongjigraduatebe.parsing.application.port.out.SaveParsingTextHistoryPort; +import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.ParsingTextHistoryUseCase; +import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.ParsingTextCommand; +import com.plzgraduate.myongjigraduatebe.parsing.application.port.SaveParsingTextHistoryPort; import com.plzgraduate.myongjigraduatebe.parsing.domain.ParsingTextHistory; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; 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 86452fb4..edad5088 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 @@ -10,16 +10,16 @@ import com.plzgraduate.myongjigraduatebe.core.exception.InvalidPdfException; import com.plzgraduate.myongjigraduatebe.core.exception.PdfParsingException; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.parsing.application.port.in.ParsingTextUseCase; -import com.plzgraduate.myongjigraduatebe.parsing.application.port.in.ParsingTextCommand; +import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.ParsingTextUseCase; +import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.ParsingTextCommand; import com.plzgraduate.myongjigraduatebe.parsing.domain.ParsingInformation; import com.plzgraduate.myongjigraduatebe.parsing.domain.ParsingTakenLectureDto; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.delete.DeleteTakenLectureByUserUseCase; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.save.SaveTakenLectureCommand; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.save.SaveTakenLectureFromParsingTextUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.update.UpdateStudentInformationUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.update.UpdateStudentInformationCommand; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.delete.DeleteTakenLectureByUserUseCase; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.save.SaveTakenLectureCommand; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.save.SaveTakenLectureFromParsingTextUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.update.UpdateStudentInformationUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.update.UpdateStudentInformationCommand; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/port/in/ParsingTextCommand.java b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/usecase/ParsingTextCommand.java similarity index 82% rename from src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/port/in/ParsingTextCommand.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/usecase/ParsingTextCommand.java index 46ae9f64..0d1a1d65 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/port/in/ParsingTextCommand.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/usecase/ParsingTextCommand.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.parsing.application.port.in; +package com.plzgraduate.myongjigraduatebe.parsing.application.usecase; import lombok.Builder; import lombok.Getter; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/port/in/ParsingTextHistoryUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/usecase/ParsingTextHistoryUseCase.java similarity index 73% rename from src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/port/in/ParsingTextHistoryUseCase.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/usecase/ParsingTextHistoryUseCase.java index 91b6eb77..5c3f472b 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/port/in/ParsingTextHistoryUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/usecase/ParsingTextHistoryUseCase.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.parsing.application.port.in; +package com.plzgraduate.myongjigraduatebe.parsing.application.usecase; public interface ParsingTextHistoryUseCase { void saveParsingTextHistoryIfSuccess(ParsingTextCommand parsingTextCommand); diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/port/in/ParsingTextUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/usecase/ParsingTextUseCase.java similarity index 59% rename from src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/port/in/ParsingTextUseCase.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/usecase/ParsingTextUseCase.java index 270c3143..ace543ae 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/port/in/ParsingTextUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/usecase/ParsingTextUseCase.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.parsing.application.port.in; +package com.plzgraduate.myongjigraduatebe.parsing.application.usecase; public interface ParsingTextUseCase { diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/out/persistence/ParsingTextHistoryAdaptor.java b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/ParsingTextHistoryAdapter.java similarity index 64% rename from src/main/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/out/persistence/ParsingTextHistoryAdaptor.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/ParsingTextHistoryAdapter.java index 4b639288..d141a583 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/out/persistence/ParsingTextHistoryAdaptor.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/ParsingTextHistoryAdapter.java @@ -1,16 +1,18 @@ -package com.plzgraduate.myongjigraduatebe.parsing.adaptor.out.persistence; +package com.plzgraduate.myongjigraduatebe.parsing.infrastructure.adapter.persistence; import com.plzgraduate.myongjigraduatebe.core.meta.PersistenceAdapter; -import com.plzgraduate.myongjigraduatebe.parsing.application.port.out.DeleteParsingTextHistoryPort; -import com.plzgraduate.myongjigraduatebe.parsing.application.port.out.SaveParsingTextHistoryPort; +import com.plzgraduate.myongjigraduatebe.parsing.application.port.DeleteParsingTextHistoryPort; +import com.plzgraduate.myongjigraduatebe.parsing.application.port.SaveParsingTextHistoryPort; import com.plzgraduate.myongjigraduatebe.parsing.domain.ParsingTextHistory; +import com.plzgraduate.myongjigraduatebe.parsing.infrastructure.adapter.persistence.mapper.ParsingTextHistoryMapper; +import com.plzgraduate.myongjigraduatebe.parsing.infrastructure.adapter.persistence.repository.ParsingTextRepository; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; @PersistenceAdapter @RequiredArgsConstructor -class ParsingTextHistoryAdaptor implements SaveParsingTextHistoryPort, DeleteParsingTextHistoryPort { +public class ParsingTextHistoryAdapter implements SaveParsingTextHistoryPort, DeleteParsingTextHistoryPort { private final ParsingTextRepository parsingTextRepository; private final ParsingTextHistoryMapper parsingTextHistoryMapper; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/out/persistence/ParsingTextHistoryJpaEntity.java b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/entity/ParsingTextHistoryJpaEntity.java similarity index 84% rename from src/main/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/out/persistence/ParsingTextHistoryJpaEntity.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/entity/ParsingTextHistoryJpaEntity.java index 99d73973..6b058582 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/out/persistence/ParsingTextHistoryJpaEntity.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/entity/ParsingTextHistoryJpaEntity.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.parsing.adaptor.out.persistence; +package com.plzgraduate.myongjigraduatebe.parsing.infrastructure.adapter.persistence.entity; import javax.persistence.Column; import javax.persistence.Entity; @@ -13,7 +13,7 @@ import com.plzgraduate.myongjigraduatebe.core.entity.TimeBaseEntity; import com.plzgraduate.myongjigraduatebe.parsing.domain.ParsingResult; -import com.plzgraduate.myongjigraduatebe.user.adaptor.out.persistence.UserJpaEntity; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; import lombok.AccessLevel; import lombok.Getter; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/out/persistence/ParsingTextHistoryMapper.java b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/mapper/ParsingTextHistoryMapper.java similarity index 64% rename from src/main/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/out/persistence/ParsingTextHistoryMapper.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/mapper/ParsingTextHistoryMapper.java index fc65b845..0583ee8a 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/out/persistence/ParsingTextHistoryMapper.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/mapper/ParsingTextHistoryMapper.java @@ -1,15 +1,16 @@ -package com.plzgraduate.myongjigraduatebe.parsing.adaptor.out.persistence; +package com.plzgraduate.myongjigraduatebe.parsing.infrastructure.adapter.persistence.mapper; import org.springframework.stereotype.Component; +import com.plzgraduate.myongjigraduatebe.parsing.infrastructure.adapter.persistence.entity.ParsingTextHistoryJpaEntity; import com.plzgraduate.myongjigraduatebe.parsing.domain.ParsingTextHistory; -import com.plzgraduate.myongjigraduatebe.user.adaptor.out.persistence.UserJpaEntity; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @Component -class ParsingTextHistoryMapper { +public class ParsingTextHistoryMapper { - ParsingTextHistoryJpaEntity mapToJpaEntity(ParsingTextHistory parsingTextHistory) { + public ParsingTextHistoryJpaEntity mapToJpaEntity(ParsingTextHistory parsingTextHistory) { return ParsingTextHistoryJpaEntity.builder() .id(parsingTextHistory.getId()) @@ -19,7 +20,7 @@ ParsingTextHistoryJpaEntity mapToJpaEntity(ParsingTextHistory parsingTextHistory .build(); } - UserJpaEntity mapToUserJpaEntity(User user) { + public UserJpaEntity mapToUserJpaEntity(User user) { return UserJpaEntity.builder() .id(user.getId()) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/repository/ParsingTextRepository.java b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/repository/ParsingTextRepository.java new file mode 100644 index 00000000..9fdcbcd1 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/repository/ParsingTextRepository.java @@ -0,0 +1,12 @@ +package com.plzgraduate.myongjigraduatebe.parsing.infrastructure.adapter.persistence.repository; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.plzgraduate.myongjigraduatebe.parsing.infrastructure.adapter.persistence.entity.ParsingTextHistoryJpaEntity; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; + +public interface ParsingTextRepository extends JpaRepository { + + void deleteAllByUser(UserJpaEntity user); + +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/in/web/find/FindTakenLectureApiPresentation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/FindTakenLectureApiPresentation.java similarity index 81% rename from src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/in/web/find/FindTakenLectureApiPresentation.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/FindTakenLectureApiPresentation.java index 61e1f408..211fc285 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/in/web/find/FindTakenLectureApiPresentation.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/FindTakenLectureApiPresentation.java @@ -1,7 +1,7 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.adaptor.in.web.find; +package com.plzgraduate.myongjigraduatebe.takenlecture.api; import com.plzgraduate.myongjigraduatebe.core.meta.LoginUser; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.find.FindTakenLectureResponse; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureResponse; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/in/web/find/FindTakenLectureController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/FindTakenLectureController.java similarity index 83% rename from src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/in/web/find/FindTakenLectureController.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/FindTakenLectureController.java index 2a2db8b1..e4d38f54 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/in/web/find/FindTakenLectureController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/FindTakenLectureController.java @@ -1,12 +1,12 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.adaptor.in.web.find; +package com.plzgraduate.myongjigraduatebe.takenlecture.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.takenlecture.application.port.in.find.FindTakenLectureUseCase; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.find.FindTakenLectureResponse; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureUseCase; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureResponse; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/in/web/update/UpdateTakenLectureApiPresentation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/UpdateTakenLectureApiPresentation.java similarity index 79% rename from src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/in/web/update/UpdateTakenLectureApiPresentation.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/UpdateTakenLectureApiPresentation.java index 9b72c612..55d4fc8c 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/in/web/update/UpdateTakenLectureApiPresentation.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/UpdateTakenLectureApiPresentation.java @@ -1,10 +1,11 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.adaptor.in.web.update; +package com.plzgraduate.myongjigraduatebe.takenlecture.api; import javax.validation.Valid; import org.springframework.web.bind.annotation.RequestBody; import com.plzgraduate.myongjigraduatebe.core.meta.LoginUser; +import com.plzgraduate.myongjigraduatebe.takenlecture.api.dto.request.UpdateTakenLectureRequest; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/in/web/update/UpdateTakenLectureController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/UpdateTakenLectureController.java similarity index 82% rename from src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/in/web/update/UpdateTakenLectureController.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/UpdateTakenLectureController.java index c594cb25..a803ae75 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/in/web/update/UpdateTakenLectureController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/UpdateTakenLectureController.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.adaptor.in.web.update; +package com.plzgraduate.myongjigraduatebe.takenlecture.api; import javax.validation.Valid; @@ -8,7 +8,8 @@ import com.plzgraduate.myongjigraduatebe.core.meta.LoginUser; import com.plzgraduate.myongjigraduatebe.core.meta.WebAdapter; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.update.UpdateTakenLectureUseCase; +import com.plzgraduate.myongjigraduatebe.takenlecture.api.dto.request.UpdateTakenLectureRequest; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.update.UpdateTakenLectureUseCase; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/in/web/update/UpdateTakenLectureRequest.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/dto/request/UpdateTakenLectureRequest.java similarity index 88% rename from src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/in/web/update/UpdateTakenLectureRequest.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/dto/request/UpdateTakenLectureRequest.java index 6a341f7f..aeac016d 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/in/web/update/UpdateTakenLectureRequest.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/dto/request/UpdateTakenLectureRequest.java @@ -1,8 +1,8 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.adaptor.in.web.update; +package com.plzgraduate.myongjigraduatebe.takenlecture.api.dto.request; import java.util.List; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.update.UpdateTakenLectureCommand; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.update.UpdateTakenLectureCommand; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/out/DeleteTakenLecturePort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/DeleteTakenLecturePort.java similarity index 95% rename from src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/out/DeleteTakenLecturePort.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/DeleteTakenLecturePort.java index ab3b8677..c6d8d796 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/out/DeleteTakenLecturePort.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/DeleteTakenLecturePort.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.application.port.out; +package com.plzgraduate.myongjigraduatebe.takenlecture.application.port; import java.util.List; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/out/FindTakenLecturePort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/FindTakenLecturePort.java similarity index 96% rename from src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/out/FindTakenLecturePort.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/FindTakenLecturePort.java index fc2fb169..52f4e363 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/out/FindTakenLecturePort.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/FindTakenLecturePort.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.application.port.out; +package com.plzgraduate.myongjigraduatebe.takenlecture.application.port; import java.util.List; import java.util.Set; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/out/SaveTakenLecturePort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/SaveTakenLecturePort.java similarity index 95% rename from src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/out/SaveTakenLecturePort.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/SaveTakenLecturePort.java index 012e0d7b..88006c26 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/out/SaveTakenLecturePort.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/SaveTakenLecturePort.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.application.port.out; +package com.plzgraduate.myongjigraduatebe.takenlecture.application.port; import java.util.List; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/delete/DeleteTakenLectureByUserService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/delete/DeleteTakenLectureByUserService.java index 6ca3a69e..f1e5a943 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/delete/DeleteTakenLectureByUserService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/delete/DeleteTakenLectureByUserService.java @@ -3,8 +3,8 @@ import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.delete.DeleteTakenLectureByUserUseCase; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.out.DeleteTakenLecturePort; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.delete.DeleteTakenLectureByUserUseCase; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.DeleteTakenLecturePort; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/find/FindTakenLectureService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/find/FindTakenLectureService.java index 0de42ffd..97346844 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/find/FindTakenLectureService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/find/FindTakenLectureService.java @@ -8,12 +8,12 @@ import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.find.FindTakenLectureUseCase; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.find.FindTakenLectureResponse; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.find.TakenLectureResponse; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.out.FindTakenLecturePort; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureUseCase; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureResponse; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.TakenLectureResponse; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.FindTakenLecturePort; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; 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 c2bd0adf..3b979aab 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 @@ -9,11 +9,11 @@ import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.in.find.FindLecturesByLectureCodeUseCase; +import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.FindLecturesByLectureCodeUseCase; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.save.SaveTakenLectureCommand; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.save.SaveTakenLectureFromParsingTextUseCase; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.out.SaveTakenLecturePort; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.save.SaveTakenLectureCommand; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.save.SaveTakenLectureFromParsingTextUseCase; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.SaveTakenLecturePort; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/update/UpdateTakenLectureService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/update/UpdateTakenLectureService.java index 2ae4e843..b67cd397 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/update/UpdateTakenLectureService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/update/UpdateTakenLectureService.java @@ -6,14 +6,14 @@ import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.in.find.FindLecturesByIdUseCase; +import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.FindLecturesByIdUseCase; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.update.UpdateTakenLectureCommand; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.update.UpdateTakenLectureUseCase; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.out.DeleteTakenLecturePort; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.out.SaveTakenLecturePort; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.update.UpdateTakenLectureCommand; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.update.UpdateTakenLectureUseCase; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.DeleteTakenLecturePort; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.SaveTakenLecturePort; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/in/delete/DeleteTakenLectureByUserUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/delete/DeleteTakenLectureByUserUseCase.java similarity index 92% rename from src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/in/delete/DeleteTakenLectureByUserUseCase.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/delete/DeleteTakenLectureByUserUseCase.java index fc9a76bb..1012f5a3 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/in/delete/DeleteTakenLectureByUserUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/delete/DeleteTakenLectureByUserUseCase.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.delete; +package com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.delete; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/in/find/FindTakenLectureResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/find/FindTakenLectureResponse.java similarity index 97% rename from src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/in/find/FindTakenLectureResponse.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/find/FindTakenLectureResponse.java index 5b82045a..ee6fea4d 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/in/find/FindTakenLectureResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/find/FindTakenLectureResponse.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.find; +package com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find; import java.util.List; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/in/find/FindTakenLectureUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/find/FindTakenLectureUseCase.java similarity index 90% rename from src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/in/find/FindTakenLectureUseCase.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/find/FindTakenLectureUseCase.java index b2243ab4..c161479b 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/in/find/FindTakenLectureUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/find/FindTakenLectureUseCase.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.find; +package com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find; public interface FindTakenLectureUseCase { FindTakenLectureResponse getTakenLectures(Long userId); diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/in/find/TakenLectureResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/find/TakenLectureResponse.java similarity index 98% rename from src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/in/find/TakenLectureResponse.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/find/TakenLectureResponse.java index ffabaff7..bdc28d17 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/in/find/TakenLectureResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/find/TakenLectureResponse.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.find; +package com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/in/save/SaveTakenLectureCommand.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/save/SaveTakenLectureCommand.java similarity index 98% rename from src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/in/save/SaveTakenLectureCommand.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/save/SaveTakenLectureCommand.java index 0e9c0d71..4c88b9ae 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/in/save/SaveTakenLectureCommand.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/save/SaveTakenLectureCommand.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.save; +package com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.save; import java.util.List; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/in/save/SaveTakenLectureFromParsingTextUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/save/SaveTakenLectureFromParsingTextUseCase.java similarity index 92% rename from src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/in/save/SaveTakenLectureFromParsingTextUseCase.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/save/SaveTakenLectureFromParsingTextUseCase.java index c437d44b..625584a9 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/in/save/SaveTakenLectureFromParsingTextUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/save/SaveTakenLectureFromParsingTextUseCase.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.save; +package com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.save; public interface SaveTakenLectureFromParsingTextUseCase { diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/in/update/UpdateTakenLectureCommand.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/update/UpdateTakenLectureCommand.java similarity index 96% rename from src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/in/update/UpdateTakenLectureCommand.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/update/UpdateTakenLectureCommand.java index 1edc1b50..99bf4b26 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/in/update/UpdateTakenLectureCommand.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/update/UpdateTakenLectureCommand.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.update; +package com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.update; import java.util.List; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/in/update/UpdateTakenLectureUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/update/UpdateTakenLectureUseCase.java similarity index 90% rename from src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/in/update/UpdateTakenLectureUseCase.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/update/UpdateTakenLectureUseCase.java index 67e5d4de..f8168c7c 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/in/update/UpdateTakenLectureUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/update/UpdateTakenLectureUseCase.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.update; +package com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.update; public interface UpdateTakenLectureUseCase { diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/out/persistence/TakenLecturePersistenceAdaptor.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/TakenLecturePersistenceAdapter.java similarity index 78% rename from src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/out/persistence/TakenLecturePersistenceAdaptor.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/TakenLecturePersistenceAdapter.java index 274615d5..55751fa4 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/out/persistence/TakenLecturePersistenceAdaptor.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/TakenLecturePersistenceAdapter.java @@ -1,22 +1,24 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.adaptor.out.persistence; +package com.plzgraduate.myongjigraduatebe.takenlecture.infrastructure.adapter.persistence; import java.util.List; import java.util.Set; import java.util.stream.Collectors; import com.plzgraduate.myongjigraduatebe.core.meta.PersistenceAdapter; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.out.DeleteTakenLecturePort; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.out.FindTakenLecturePort; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.out.SaveTakenLecturePort; +import com.plzgraduate.myongjigraduatebe.takenlecture.infrastructure.adapter.persistence.entity.TakenLectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.takenlecture.infrastructure.adapter.persistence.mapper.TakenLectureMapper; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.DeleteTakenLecturePort; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.FindTakenLecturePort; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.SaveTakenLecturePort; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; -import com.plzgraduate.myongjigraduatebe.user.adaptor.out.persistence.UserJpaEntity; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; @PersistenceAdapter @RequiredArgsConstructor -class TakenLecturePersistenceAdaptor implements FindTakenLecturePort, SaveTakenLecturePort, DeleteTakenLecturePort { +class TakenLecturePersistenceAdapter implements FindTakenLecturePort, SaveTakenLecturePort, DeleteTakenLecturePort { private final TakenLectureRepository takenLectureRepository; private final TakenLectureMapper takenLectureMapper; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/out/persistence/TakenLectureRepository.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/TakenLectureRepository.java similarity index 70% rename from src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/out/persistence/TakenLectureRepository.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/TakenLectureRepository.java index c3685bfa..6ba91b45 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/out/persistence/TakenLectureRepository.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/TakenLectureRepository.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.adaptor.out.persistence; +package com.plzgraduate.myongjigraduatebe.takenlecture.infrastructure.adapter.persistence; import java.util.List; @@ -7,7 +7,8 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; -import com.plzgraduate.myongjigraduatebe.user.adaptor.out.persistence.UserJpaEntity; +import com.plzgraduate.myongjigraduatebe.takenlecture.infrastructure.adapter.persistence.entity.TakenLectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; public interface TakenLectureRepository extends JpaRepository { diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/out/persistence/TakenLectureJpaEntity.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/entity/TakenLectureJpaEntity.java similarity index 75% rename from src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/out/persistence/TakenLectureJpaEntity.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/entity/TakenLectureJpaEntity.java index b09f6a20..521624b1 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/out/persistence/TakenLectureJpaEntity.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/entity/TakenLectureJpaEntity.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.adaptor.out.persistence; +package com.plzgraduate.myongjigraduatebe.takenlecture.infrastructure.adapter.persistence.entity; import javax.persistence.Entity; import javax.persistence.FetchType; @@ -9,9 +9,9 @@ import javax.persistence.Table; import com.plzgraduate.myongjigraduatebe.core.entity.TimeBaseEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.LectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.LectureJpaEntity; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.Semester; -import com.plzgraduate.myongjigraduatebe.user.adaptor.out.persistence.UserJpaEntity; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; import lombok.AccessLevel; import lombok.Getter; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/out/persistence/TakenLectureMapper.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/mapper/TakenLectureMapper.java similarity index 78% rename from src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/out/persistence/TakenLectureMapper.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/mapper/TakenLectureMapper.java index 30a07921..5ec48452 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/out/persistence/TakenLectureMapper.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/mapper/TakenLectureMapper.java @@ -1,17 +1,18 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.adaptor.out.persistence; +package com.plzgraduate.myongjigraduatebe.takenlecture.infrastructure.adapter.persistence.mapper; import org.springframework.stereotype.Component; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.LectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.LectureJpaEntity; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.infrastructure.adapter.persistence.entity.TakenLectureJpaEntity; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; -import com.plzgraduate.myongjigraduatebe.user.adaptor.out.persistence.UserJpaEntity; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @Component -class TakenLectureMapper { +public class TakenLectureMapper { - TakenLecture mapToDomainEntity(TakenLectureJpaEntity takenLecture) { + public TakenLecture mapToDomainEntity(TakenLectureJpaEntity takenLecture) { return TakenLecture.builder() .id(takenLecture.getId()) @@ -23,7 +24,7 @@ TakenLecture mapToDomainEntity(TakenLectureJpaEntity takenLecture) { .build(); } - TakenLectureJpaEntity mapToJpaEntity(TakenLecture takenLecture) { + public TakenLectureJpaEntity mapToJpaEntity(TakenLecture takenLecture) { return TakenLectureJpaEntity.builder() .id(takenLecture.getId()) @@ -52,7 +53,7 @@ private User mapToUserDomainEntity(UserJpaEntity user) { .build(); } - UserJpaEntity mapToUserJpaEntity(User user) { + public UserJpaEntity mapToUserJpaEntity(User user) { return UserJpaEntity.builder() .id(user.getId()) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/findauthid/FindAuthIdApiPresentation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdApiPresentation.java similarity index 76% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/findauthid/FindAuthIdApiPresentation.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdApiPresentation.java index 6ff11d13..aad23168 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/findauthid/FindAuthIdApiPresentation.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdApiPresentation.java @@ -1,8 +1,8 @@ -package com.plzgraduate.myongjigraduatebe.user.adaptor.in.web.findauthid; +package com.plzgraduate.myongjigraduatebe.user.api.findauthid; import org.springframework.web.bind.annotation.PathVariable; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.UserAuthIdResponse; +import com.plzgraduate.myongjigraduatebe.user.api.findauthid.dto.response.UserAuthIdResponse; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/findauthid/FindAuthIdController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdController.java similarity index 73% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/findauthid/FindAuthIdController.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdController.java index 3a4060da..5ab85958 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/findauthid/FindAuthIdController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdController.java @@ -1,12 +1,12 @@ -package com.plzgraduate.myongjigraduatebe.user.adaptor.in.web.findauthid; +package com.plzgraduate.myongjigraduatebe.user.api.findauthid; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import com.plzgraduate.myongjigraduatebe.core.meta.WebAdapter; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserAuthIdUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.UserAuthIdResponse; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserAuthIdUseCase; +import com.plzgraduate.myongjigraduatebe.user.api.findauthid.dto.response.UserAuthIdResponse; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/find/UserAuthIdResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/dto/response/UserAuthIdResponse.java similarity index 90% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/find/UserAuthIdResponse.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/dto/response/UserAuthIdResponse.java index e284df0c..3274382d 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/find/UserAuthIdResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/dto/response/UserAuthIdResponse.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.application.port.in.find; +package com.plzgraduate.myongjigraduatebe.user.api.findauthid.dto.response; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/finduserinformation/FindUserInformationApiPresentation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/finduserinformation/FindUserInformationApiPresentation.java similarity index 71% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/finduserinformation/FindUserInformationApiPresentation.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/api/finduserinformation/FindUserInformationApiPresentation.java index 5d60f829..76b95205 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/finduserinformation/FindUserInformationApiPresentation.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/finduserinformation/FindUserInformationApiPresentation.java @@ -1,7 +1,7 @@ -package com.plzgraduate.myongjigraduatebe.user.adaptor.in.web.finduserinformation; +package com.plzgraduate.myongjigraduatebe.user.api.finduserinformation; import com.plzgraduate.myongjigraduatebe.core.meta.LoginUser; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.UserInformationResponse; +import com.plzgraduate.myongjigraduatebe.user.api.finduserinformation.dto.response.UserInformationResponse; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/finduserinformation/FindUserInformationController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/finduserinformation/FindUserInformationController.java similarity index 71% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/finduserinformation/FindUserInformationController.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/api/finduserinformation/FindUserInformationController.java index af481908..72a4edd3 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/finduserinformation/FindUserInformationController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/finduserinformation/FindUserInformationController.java @@ -1,12 +1,12 @@ -package com.plzgraduate.myongjigraduatebe.user.adaptor.in.web.finduserinformation; +package com.plzgraduate.myongjigraduatebe.user.api.finduserinformation; 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.user.application.port.in.find.FindUserInformationUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.UserInformationResponse; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserInformationUseCase; +import com.plzgraduate.myongjigraduatebe.user.api.finduserinformation.dto.response.UserInformationResponse; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/find/UserInformationResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/finduserinformation/dto/response/UserInformationResponse.java similarity index 88% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/find/UserInformationResponse.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/api/finduserinformation/dto/response/UserInformationResponse.java index 5f64f471..abed479c 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/find/UserInformationResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/finduserinformation/dto/response/UserInformationResponse.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.application.port.in.find; +package com.plzgraduate.myongjigraduatebe.user.api.finduserinformation.dto.response; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/resetpassword/ResetPasswordApiPresentation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordApiPresentation.java similarity index 87% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/resetpassword/ResetPasswordApiPresentation.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordApiPresentation.java index 97c5ea51..9e44f12b 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/resetpassword/ResetPasswordApiPresentation.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordApiPresentation.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.adaptor.in.web.resetpassword; +package com.plzgraduate.myongjigraduatebe.user.api.resetpassword; import javax.validation.Valid; @@ -7,7 +7,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.validate.ValidateUserResponse; +import com.plzgraduate.myongjigraduatebe.user.api.resetpassword.dto.response.ValidateUserResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/resetpassword/ResetPasswordController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordController.java similarity index 76% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/resetpassword/ResetPasswordController.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordController.java index 1102380c..c2d8f909 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/resetpassword/ResetPasswordController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordController.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.adaptor.in.web.resetpassword; +package com.plzgraduate.myongjigraduatebe.user.api.resetpassword; import javax.validation.Valid; @@ -10,9 +10,9 @@ import org.springframework.web.bind.annotation.RequestParam; import com.plzgraduate.myongjigraduatebe.core.meta.WebAdapter; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.resetpassword.ResetPasswordUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.validate.ValidateUserResponse; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.validate.ValidateUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.resetpassword.ResetPasswordUseCase; +import com.plzgraduate.myongjigraduatebe.user.api.resetpassword.dto.response.ValidateUserResponse; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.validate.ValidateUserUseCase; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/resetpassword/ResetPasswordRequest.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordRequest.java similarity index 88% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/resetpassword/ResetPasswordRequest.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordRequest.java index f0255392..6aaa1d2f 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/resetpassword/ResetPasswordRequest.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordRequest.java @@ -1,9 +1,9 @@ -package com.plzgraduate.myongjigraduatebe.user.adaptor.in.web.resetpassword; +package com.plzgraduate.myongjigraduatebe.user.api.resetpassword; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Pattern; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.resetpassword.ResetPasswordCommand; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.resetpassword.ResetPasswordCommand; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/validate/ValidateUserResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/dto/response/ValidateUserResponse.java similarity index 82% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/validate/ValidateUserResponse.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/dto/response/ValidateUserResponse.java index efc37a50..f7b6b7cd 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/validate/ValidateUserResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/dto/response/ValidateUserResponse.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.application.port.in.validate; +package com.plzgraduate.myongjigraduatebe.user.api.resetpassword.dto.response; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/signup/SignUpApiPresentation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpApiPresentation.java similarity index 78% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/signup/SignUpApiPresentation.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpApiPresentation.java index 4500bbf2..49825dbe 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/signup/SignUpApiPresentation.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpApiPresentation.java @@ -1,12 +1,12 @@ -package com.plzgraduate.myongjigraduatebe.user.adaptor.in.web.signup; +package com.plzgraduate.myongjigraduatebe.user.api.signup; import javax.validation.Valid; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.check.AuthIdDuplicationResponse; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.check.StudentNumberDuplicationResponse; +import com.plzgraduate.myongjigraduatebe.user.api.signup.dto.response.AuthIdDuplicationResponse; +import com.plzgraduate.myongjigraduatebe.user.api.signup.dto.response.StudentNumberDuplicationResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/signup/SignUpController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpController.java similarity index 71% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/signup/SignUpController.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpController.java index 6ac98ffb..e8f2fc18 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/signup/SignUpController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpController.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.adaptor.in.web.signup; +package com.plzgraduate.myongjigraduatebe.user.api.signup; import javax.validation.Valid; @@ -9,11 +9,11 @@ import org.springframework.web.bind.annotation.RequestParam; import com.plzgraduate.myongjigraduatebe.core.meta.WebAdapter; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.check.AuthIdDuplicationResponse; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.check.CheckAuthIdDuplicationUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.check.CheckStudentNumberDuplicationUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.check.StudentNumberDuplicationResponse; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.signup.SignUpUseCase; +import com.plzgraduate.myongjigraduatebe.user.api.signup.dto.response.AuthIdDuplicationResponse; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.check.CheckAuthIdDuplicationUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.check.CheckStudentNumberDuplicationUseCase; +import com.plzgraduate.myongjigraduatebe.user.api.signup.dto.response.StudentNumberDuplicationResponse; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.signup.SignUpUseCase; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/signup/SignUpRequest.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpRequest.java similarity index 91% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/signup/SignUpRequest.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpRequest.java index a9998a17..8d992623 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/signup/SignUpRequest.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpRequest.java @@ -1,10 +1,10 @@ -package com.plzgraduate.myongjigraduatebe.user.adaptor.in.web.signup; +package com.plzgraduate.myongjigraduatebe.user.api.signup; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.signup.SignUpCommand; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.signup.SignUpCommand; import com.plzgraduate.myongjigraduatebe.user.domain.model.EnglishLevel; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/check/AuthIdDuplicationResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/dto/response/AuthIdDuplicationResponse.java similarity index 81% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/check/AuthIdDuplicationResponse.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/dto/response/AuthIdDuplicationResponse.java index 9a2fc87f..72a8cad0 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/check/AuthIdDuplicationResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/dto/response/AuthIdDuplicationResponse.java @@ -1,9 +1,8 @@ -package com.plzgraduate.myongjigraduatebe.user.application.port.in.check; +package com.plzgraduate.myongjigraduatebe.user.api.signup.dto.response; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; import lombok.Getter; -import lombok.NoArgsConstructor; @Getter public class AuthIdDuplicationResponse { diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/check/StudentNumberDuplicationResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/dto/response/StudentNumberDuplicationResponse.java similarity index 87% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/check/StudentNumberDuplicationResponse.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/dto/response/StudentNumberDuplicationResponse.java index c511ea41..409bf35a 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/check/StudentNumberDuplicationResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/dto/response/StudentNumberDuplicationResponse.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.application.port.in.check; +package com.plzgraduate.myongjigraduatebe.user.api.signup.dto.response; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/withdraw/WithDrawApiPresentation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/WithDrawApiPresentation.java similarity index 87% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/withdraw/WithDrawApiPresentation.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/WithDrawApiPresentation.java index 467df438..ca84d557 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/withdraw/WithDrawApiPresentation.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/WithDrawApiPresentation.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.adaptor.in.web.withdraw; +package com.plzgraduate.myongjigraduatebe.user.api.withdraw; import org.springframework.web.bind.annotation.RequestBody; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/withdraw/WithDrawController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/WithDrawController.java similarity index 81% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/withdraw/WithDrawController.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/WithDrawController.java index f1d87d08..3b09918b 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/withdraw/WithDrawController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/WithDrawController.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.adaptor.in.web.withdraw; +package com.plzgraduate.myongjigraduatebe.user.api.withdraw; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -6,7 +6,7 @@ import com.plzgraduate.myongjigraduatebe.core.meta.LoginUser; import com.plzgraduate.myongjigraduatebe.core.meta.WebAdapter; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.withdraw.WithDrawUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.withdraw.WithDrawUserUseCase; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/withdraw/WithDrawRequest.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/WithDrawRequest.java similarity index 77% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/withdraw/WithDrawRequest.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/WithDrawRequest.java index 9c258bb9..52d07b32 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/withdraw/WithDrawRequest.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/WithDrawRequest.java @@ -1,8 +1,8 @@ -package com.plzgraduate.myongjigraduatebe.user.adaptor.in.web.withdraw; +package com.plzgraduate.myongjigraduatebe.user.api.withdraw; import javax.validation.constraints.NotBlank; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.withdraw.WithDrawCommand; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.withdraw.WithDrawCommand; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/out/CheckUserPort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/CheckUserPort.java similarity index 67% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/out/CheckUserPort.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/CheckUserPort.java index 9c95ac0c..444dabb7 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/out/CheckUserPort.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/CheckUserPort.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.application.port.out; +package com.plzgraduate.myongjigraduatebe.user.application.port; public interface CheckUserPort { boolean checkDuplicateAuthId(String authId); diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/out/DeleteUserPort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/DeleteUserPort.java similarity index 65% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/out/DeleteUserPort.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/DeleteUserPort.java index 9804faf1..3c1e56c9 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/out/DeleteUserPort.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/DeleteUserPort.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.application.port.out; +package com.plzgraduate.myongjigraduatebe.user.application.port; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/out/FindUserPort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/FindUserPort.java similarity index 80% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/out/FindUserPort.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/FindUserPort.java index 75521358..249d30d9 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/out/FindUserPort.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/FindUserPort.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.application.port.out; +package com.plzgraduate.myongjigraduatebe.user.application.port; import java.util.Optional; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/out/SaveUserPort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/SaveUserPort.java similarity index 64% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/out/SaveUserPort.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/SaveUserPort.java index 75c49ece..9aac0cf8 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/out/SaveUserPort.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/SaveUserPort.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.application.port.out; +package com.plzgraduate.myongjigraduatebe.user.application.port; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/out/UpdateUserPort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/UpdateUserPort.java similarity index 65% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/out/UpdateUserPort.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/UpdateUserPort.java index 90623dac..ce29763b 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/out/UpdateUserPort.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/UpdateUserPort.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.application.port.out; +package com.plzgraduate.myongjigraduatebe.user.application.port; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/check/CheckAuthIdDuplicationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/check/CheckAuthIdDuplicationUseCase.java deleted file mode 100644 index 80188a9a..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/check/CheckAuthIdDuplicationUseCase.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.user.application.port.in.check; - -public interface CheckAuthIdDuplicationUseCase { - - AuthIdDuplicationResponse checkAuthIdDuplication(String authId); -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/check/CheckStudentNumberDuplicationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/check/CheckStudentNumberDuplicationUseCase.java deleted file mode 100644 index 212d575f..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/check/CheckStudentNumberDuplicationUseCase.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.user.application.port.in.check; - -public interface CheckStudentNumberDuplicationUseCase { - - StudentNumberDuplicationResponse checkStudentNumberDuplication(String studentNumber); -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/find/FindUserAuthIdUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/find/FindUserAuthIdUseCase.java deleted file mode 100644 index d7f4cf7f..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/find/FindUserAuthIdUseCase.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.user.application.port.in.find; - -public interface FindUserAuthIdUseCase { - - UserAuthIdResponse findUserAuthId(String studentNumber); -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/find/FindUserInformationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/find/FindUserInformationUseCase.java deleted file mode 100644 index ed60d719..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/find/FindUserInformationUseCase.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.user.application.port.in.find; - -public interface FindUserInformationUseCase { - - UserInformationResponse findUserInformation(Long userId); -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/validate/ValidateUserUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/validate/ValidateUserUseCase.java deleted file mode 100644 index 8d776bda..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/validate/ValidateUserUseCase.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.user.application.port.in.validate; - -public interface ValidateUserUseCase { - - ValidateUserResponse validateUser(String studentNumber, String authId); -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/check/CheckAuthIdDuplicationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/check/CheckAuthIdDuplicationService.java index a80417e9..b2145274 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/check/CheckAuthIdDuplicationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/check/CheckAuthIdDuplicationService.java @@ -3,9 +3,9 @@ import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.check.AuthIdDuplicationResponse; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.check.CheckAuthIdDuplicationUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.out.CheckUserPort; +import com.plzgraduate.myongjigraduatebe.user.api.signup.dto.response.AuthIdDuplicationResponse; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.check.CheckAuthIdDuplicationUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.port.CheckUserPort; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/check/CheckStudentNumberDuplicationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/check/CheckStudentNumberDuplicationService.java index bd562c1f..aaf635eb 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/check/CheckStudentNumberDuplicationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/check/CheckStudentNumberDuplicationService.java @@ -3,9 +3,9 @@ import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.check.CheckStudentNumberDuplicationUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.check.StudentNumberDuplicationResponse; -import com.plzgraduate.myongjigraduatebe.user.application.port.out.CheckUserPort; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.check.CheckStudentNumberDuplicationUseCase; +import com.plzgraduate.myongjigraduatebe.user.api.signup.dto.response.StudentNumberDuplicationResponse; +import com.plzgraduate.myongjigraduatebe.user.application.port.CheckUserPort; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserAuthIdService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserAuthIdService.java index 19727039..bec5a254 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserAuthIdService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserAuthIdService.java @@ -3,9 +3,9 @@ import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserAuthIdUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.UserAuthIdResponse; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserAuthIdUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.api.findauthid.dto.response.UserAuthIdResponse; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserInformationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserInformationService.java index cac61abf..866f5c82 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserInformationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserInformationService.java @@ -3,9 +3,9 @@ import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserInformationUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.UserInformationResponse; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserInformationUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.api.finduserinformation.dto.response.UserInformationResponse; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserService.java index 1e46a34a..1fed0c55 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserService.java @@ -3,8 +3,8 @@ import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.out.FindUserPort; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.port.FindUserPort; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/resetpassword/ResetPasswordService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/resetpassword/ResetPasswordService.java index e36f7732..6526cac1 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/resetpassword/ResetPasswordService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/resetpassword/ResetPasswordService.java @@ -4,10 +4,10 @@ import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.resetpassword.ResetPasswordCommand; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.resetpassword.ResetPasswordUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.out.UpdateUserPort; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.resetpassword.ResetPasswordCommand; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.resetpassword.ResetPasswordUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.port.UpdateUserPort; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/signup/SignUpService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/signup/SignUpService.java index 8a534020..ee9b4427 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/signup/SignUpService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/signup/SignUpService.java @@ -4,10 +4,10 @@ import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.signup.SignUpUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.signup.SignUpCommand; -import com.plzgraduate.myongjigraduatebe.user.application.port.out.CheckUserPort; -import com.plzgraduate.myongjigraduatebe.user.application.port.out.SaveUserPort; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.signup.SignUpUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.signup.SignUpCommand; +import com.plzgraduate.myongjigraduatebe.user.application.port.CheckUserPort; +import com.plzgraduate.myongjigraduatebe.user.application.port.SaveUserPort; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; 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 bface4eb..ad3fa010 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 @@ -3,9 +3,9 @@ import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.update.UpdateStudentInformationUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.update.UpdateStudentInformationCommand; -import com.plzgraduate.myongjigraduatebe.user.application.port.out.UpdateUserPort; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.update.UpdateStudentInformationUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.update.UpdateStudentInformationCommand; +import com.plzgraduate.myongjigraduatebe.user.application.port.UpdateUserPort; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/validate/ValidateUserService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/validate/ValidateUserService.java index eb0f5227..fae31780 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/validate/ValidateUserService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/validate/ValidateUserService.java @@ -3,9 +3,9 @@ import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.validate.ValidateUserResponse; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.validate.ValidateUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.api.resetpassword.dto.response.ValidateUserResponse; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.validate.ValidateUserUseCase; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserService.java index 2e5dd608..448dbaca 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserService.java @@ -4,12 +4,12 @@ import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.parsing.application.port.out.DeleteParsingTextHistoryPort; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.delete.DeleteTakenLectureByUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.withdraw.WithDrawCommand; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.withdraw.WithDrawUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.out.DeleteUserPort; +import com.plzgraduate.myongjigraduatebe.parsing.application.port.DeleteParsingTextHistoryPort; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.delete.DeleteTakenLectureByUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.withdraw.WithDrawCommand; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.withdraw.WithDrawUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.port.DeleteUserPort; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/check/CheckAuthIdDuplicationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/check/CheckAuthIdDuplicationUseCase.java new file mode 100644 index 00000000..58f0dde3 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/check/CheckAuthIdDuplicationUseCase.java @@ -0,0 +1,8 @@ +package com.plzgraduate.myongjigraduatebe.user.application.usecase.check; + +import com.plzgraduate.myongjigraduatebe.user.api.signup.dto.response.AuthIdDuplicationResponse; + +public interface CheckAuthIdDuplicationUseCase { + + AuthIdDuplicationResponse checkAuthIdDuplication(String authId); +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/check/CheckStudentNumberDuplicationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/check/CheckStudentNumberDuplicationUseCase.java new file mode 100644 index 00000000..d84716cd --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/check/CheckStudentNumberDuplicationUseCase.java @@ -0,0 +1,8 @@ +package com.plzgraduate.myongjigraduatebe.user.application.usecase.check; + +import com.plzgraduate.myongjigraduatebe.user.api.signup.dto.response.StudentNumberDuplicationResponse; + +public interface CheckStudentNumberDuplicationUseCase { + + StudentNumberDuplicationResponse checkStudentNumberDuplication(String studentNumber); +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/find/FindUserAuthIdUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/find/FindUserAuthIdUseCase.java new file mode 100644 index 00000000..38b70381 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/find/FindUserAuthIdUseCase.java @@ -0,0 +1,8 @@ +package com.plzgraduate.myongjigraduatebe.user.application.usecase.find; + +import com.plzgraduate.myongjigraduatebe.user.api.findauthid.dto.response.UserAuthIdResponse; + +public interface FindUserAuthIdUseCase { + + UserAuthIdResponse findUserAuthId(String studentNumber); +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/find/FindUserInformationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/find/FindUserInformationUseCase.java new file mode 100644 index 00000000..f664aa4a --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/find/FindUserInformationUseCase.java @@ -0,0 +1,8 @@ +package com.plzgraduate.myongjigraduatebe.user.application.usecase.find; + +import com.plzgraduate.myongjigraduatebe.user.api.finduserinformation.dto.response.UserInformationResponse; + +public interface FindUserInformationUseCase { + + UserInformationResponse findUserInformation(Long userId); +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/find/FindUserUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/find/FindUserUseCase.java similarity index 75% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/find/FindUserUseCase.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/find/FindUserUseCase.java index 81f8e3c1..480bd97c 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/find/FindUserUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/find/FindUserUseCase.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.application.port.in.find; +package com.plzgraduate.myongjigraduatebe.user.application.usecase.find; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/resetpassword/ResetPasswordCommand.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/resetpassword/ResetPasswordCommand.java similarity index 84% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/resetpassword/ResetPasswordCommand.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/resetpassword/ResetPasswordCommand.java index 639de46b..2a2ae234 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/resetpassword/ResetPasswordCommand.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/resetpassword/ResetPasswordCommand.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.application.port.in.resetpassword; +package com.plzgraduate.myongjigraduatebe.user.application.usecase.resetpassword; import lombok.Builder; import lombok.Getter; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/resetpassword/ResetPasswordUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/resetpassword/ResetPasswordUseCase.java similarity index 56% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/resetpassword/ResetPasswordUseCase.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/resetpassword/ResetPasswordUseCase.java index 23faee77..c727b560 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/resetpassword/ResetPasswordUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/resetpassword/ResetPasswordUseCase.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.application.port.in.resetpassword; +package com.plzgraduate.myongjigraduatebe.user.application.usecase.resetpassword; public interface ResetPasswordUseCase { diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/signup/SignUpCommand.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/signup/SignUpCommand.java similarity index 88% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/signup/SignUpCommand.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/signup/SignUpCommand.java index 92e91d67..a37e3096 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/signup/SignUpCommand.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/signup/SignUpCommand.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.application.port.in.signup; +package com.plzgraduate.myongjigraduatebe.user.application.usecase.signup; import com.plzgraduate.myongjigraduatebe.user.domain.model.EnglishLevel; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/signup/SignUpUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/signup/SignUpUseCase.java similarity index 51% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/signup/SignUpUseCase.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/signup/SignUpUseCase.java index b6bc2e01..c846cbf3 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/signup/SignUpUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/signup/SignUpUseCase.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.application.port.in.signup; +package com.plzgraduate.myongjigraduatebe.user.application.usecase.signup; public interface SignUpUseCase { void signUp(SignUpCommand signUpCommand); diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/update/UpdateStudentInformationCommand.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/update/UpdateStudentInformationCommand.java similarity index 93% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/update/UpdateStudentInformationCommand.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/update/UpdateStudentInformationCommand.java index 4c0b65c3..394ab9cc 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/update/UpdateStudentInformationCommand.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/update/UpdateStudentInformationCommand.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.application.port.in.update; +package com.plzgraduate.myongjigraduatebe.user.application.usecase.update; import com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/update/UpdateStudentInformationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/update/UpdateStudentInformationUseCase.java similarity index 64% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/update/UpdateStudentInformationUseCase.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/update/UpdateStudentInformationUseCase.java index 42e96aff..3bb36a80 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/update/UpdateStudentInformationUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/update/UpdateStudentInformationUseCase.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.application.port.in.update; +package com.plzgraduate.myongjigraduatebe.user.application.usecase.update; public interface UpdateStudentInformationUseCase { void updateUser(UpdateStudentInformationCommand updateStudentInformationCommand); diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/validate/ValidateUserUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/validate/ValidateUserUseCase.java new file mode 100644 index 00000000..a919e53e --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/validate/ValidateUserUseCase.java @@ -0,0 +1,8 @@ +package com.plzgraduate.myongjigraduatebe.user.application.usecase.validate; + +import com.plzgraduate.myongjigraduatebe.user.api.resetpassword.dto.response.ValidateUserResponse; + +public interface ValidateUserUseCase { + + ValidateUserResponse validateUser(String studentNumber, String authId); +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/withdraw/WithDrawCommand.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/withdraw/WithDrawCommand.java similarity index 72% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/withdraw/WithDrawCommand.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/withdraw/WithDrawCommand.java index a41c34df..fd59e394 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/withdraw/WithDrawCommand.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/withdraw/WithDrawCommand.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.application.port.in.withdraw; +package com.plzgraduate.myongjigraduatebe.user.application.usecase.withdraw; import lombok.Builder; import lombok.Getter; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/withdraw/WithDrawUserUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/withdraw/WithDrawUserUseCase.java similarity index 57% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/withdraw/WithDrawUserUseCase.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/withdraw/WithDrawUserUseCase.java index 5ada1f8f..7be39fe9 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/port/in/withdraw/WithDrawUserUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/withdraw/WithDrawUserUseCase.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.application.port.in.withdraw; +package com.plzgraduate.myongjigraduatebe.user.application.usecase.withdraw; public interface WithDrawUserUseCase { diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/out/persistence/UserPersistenceAdaptor.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/UserPersistenceAdapter.java similarity index 65% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/out/persistence/UserPersistenceAdaptor.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/UserPersistenceAdapter.java index 2e69377e..83cc973d 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/out/persistence/UserPersistenceAdaptor.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/UserPersistenceAdapter.java @@ -1,14 +1,17 @@ -package com.plzgraduate.myongjigraduatebe.user.adaptor.out.persistence; +package com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence; import java.util.Optional; import com.plzgraduate.myongjigraduatebe.core.meta.PersistenceAdapter; -import com.plzgraduate.myongjigraduatebe.user.application.port.out.CheckUserPort; -import com.plzgraduate.myongjigraduatebe.user.application.port.out.DeleteUserPort; -import com.plzgraduate.myongjigraduatebe.user.application.port.out.FindUserPort; -import com.plzgraduate.myongjigraduatebe.user.application.port.out.SaveUserPort; -import com.plzgraduate.myongjigraduatebe.user.application.port.out.UpdateUserPort; +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.application.port.CheckUserPort; +import com.plzgraduate.myongjigraduatebe.user.application.port.DeleteUserPort; +import com.plzgraduate.myongjigraduatebe.user.application.port.FindUserPort; +import com.plzgraduate.myongjigraduatebe.user.application.port.SaveUserPort; +import com.plzgraduate.myongjigraduatebe.user.application.port.UpdateUserPort; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.mapper.UserMapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -16,7 +19,7 @@ @PersistenceAdapter @Slf4j @RequiredArgsConstructor -class UserPersistenceAdaptor implements FindUserPort, SaveUserPort, CheckUserPort, UpdateUserPort, DeleteUserPort { +public class UserPersistenceAdapter implements FindUserPort, SaveUserPort, CheckUserPort, UpdateUserPort, DeleteUserPort { private final UserMapper userMapper; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/out/persistence/UserJpaEntity.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/entity/UserJpaEntity.java similarity index 93% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/out/persistence/UserJpaEntity.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/entity/UserJpaEntity.java index 8e9e784d..f44337bb 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/out/persistence/UserJpaEntity.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/entity/UserJpaEntity.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.adaptor.out.persistence; +package com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity; import javax.persistence.Column; import javax.persistence.Entity; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/out/persistence/UserMapper.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/mapper/UserMapper.java similarity index 76% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/out/persistence/UserMapper.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/mapper/UserMapper.java index 91b49408..fa498ee0 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/out/persistence/UserMapper.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/mapper/UserMapper.java @@ -1,13 +1,14 @@ -package com.plzgraduate.myongjigraduatebe.user.adaptor.out.persistence; +package com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.mapper; import org.springframework.stereotype.Component; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @Component -class UserMapper { +public class UserMapper { - User mapToDomainEntity(UserJpaEntity user) { + public User mapToDomainEntity(UserJpaEntity user) { return User.builder() .id(user.getId()) @@ -25,7 +26,7 @@ User mapToDomainEntity(UserJpaEntity user) { .build(); } - UserJpaEntity mapToJpaEntity(User user) { + public UserJpaEntity mapToJpaEntity(User user) { return UserJpaEntity.builder() .id(user.getId()) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/out/persistence/UserRepository.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/repository/UserRepository.java similarity index 66% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/out/persistence/UserRepository.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/repository/UserRepository.java index fa268179..cebf64eb 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/adaptor/out/persistence/UserRepository.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/repository/UserRepository.java @@ -1,9 +1,11 @@ -package com.plzgraduate.myongjigraduatebe.user.adaptor.out.persistence; +package com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.repository; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; + public interface UserRepository extends JpaRepository { Optional findByAuthId(String authId); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/in/web/signin/SignInControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/SignInControllerTest.java similarity index 95% rename from src/test/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/in/web/signin/SignInControllerTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/SignInControllerTest.java index e87d0c28..cc7f8c24 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/in/web/signin/SignInControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/SignInControllerTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.auth.adaptor.in.web.signin; +package com.plzgraduate.myongjigraduatebe.auth.api.signin; import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; @@ -11,6 +11,7 @@ import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; +import com.plzgraduate.myongjigraduatebe.auth.api.signin.dto.request.SignInRequest; import com.plzgraduate.myongjigraduatebe.core.exception.UnAuthorizedException; import com.plzgraduate.myongjigraduatebe.support.WebAdaptorTestSupport; diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/in/web/token/TokenControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/auth/api/token/TokenControllerTest.java similarity index 90% rename from src/test/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/in/web/token/TokenControllerTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/auth/api/token/TokenControllerTest.java index f118747e..4b7262b0 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/in/web/token/TokenControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/auth/api/token/TokenControllerTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.auth.adaptor.in.web.token; +package com.plzgraduate.myongjigraduatebe.auth.api.token; import static org.mockito.BDDMockito.given; import static org.mockito.ArgumentMatchers.any; @@ -13,7 +13,8 @@ import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; -import com.plzgraduate.myongjigraduatebe.auth.application.port.in.AccessTokenResponse; +import com.plzgraduate.myongjigraduatebe.auth.api.token.dto.request.TokenRequest; +import com.plzgraduate.myongjigraduatebe.auth.api.token.dto.response.AccessTokenResponse; import com.plzgraduate.myongjigraduatebe.support.WebAdaptorTestSupport; class TokenControllerTest extends WebAdaptorTestSupport { diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/auth/application/service/signin/SignInServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/auth/application/service/signin/SignInServiceTest.java index a7fbcdd5..c5b5539e 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/auth/application/service/signin/SignInServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/auth/application/service/signin/SignInServiceTest.java @@ -15,9 +15,9 @@ import org.springframework.security.core.Authentication; import org.springframework.security.core.authority.SimpleGrantedAuthority; -import com.plzgraduate.myongjigraduatebe.auth.application.port.in.signin.SignInCommand; -import com.plzgraduate.myongjigraduatebe.auth.application.port.in.TokenResponse; -import com.plzgraduate.myongjigraduatebe.auth.application.port.out.SaveRefreshTokenPort; +import com.plzgraduate.myongjigraduatebe.auth.application.usecase.signin.SignInCommand; +import com.plzgraduate.myongjigraduatebe.auth.api.signin.dto.response.TokenResponse; +import com.plzgraduate.myongjigraduatebe.auth.application.port.SaveRefreshTokenPort; import com.plzgraduate.myongjigraduatebe.auth.security.JwtAuthenticationToken; import com.plzgraduate.myongjigraduatebe.auth.security.TokenProvider; diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/auth/application/service/token/TokenServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/auth/application/service/token/TokenServiceTest.java index f029c6b9..2040d83a 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/auth/application/service/token/TokenServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/auth/application/service/token/TokenServiceTest.java @@ -13,9 +13,9 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import com.plzgraduate.myongjigraduatebe.auth.application.port.in.AccessTokenResponse; -import com.plzgraduate.myongjigraduatebe.auth.application.port.in.token.TokenCommand; -import com.plzgraduate.myongjigraduatebe.auth.application.port.out.FindRefreshTokenPort; +import com.plzgraduate.myongjigraduatebe.auth.api.token.dto.response.AccessTokenResponse; +import com.plzgraduate.myongjigraduatebe.auth.application.usecase.token.TokenCommand; +import com.plzgraduate.myongjigraduatebe.auth.application.port.FindRefreshTokenPort; import com.plzgraduate.myongjigraduatebe.auth.security.TokenProvider; @ExtendWith(MockitoExtension.class) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/out/InMemoryTokenRepositoryTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/auth/infrastructure/adapter/repository/InMemoryTokenRepositoryTest.java similarity index 88% rename from src/test/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/out/InMemoryTokenRepositoryTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/auth/infrastructure/adapter/repository/InMemoryTokenRepositoryTest.java index 40de72b0..5f4a6e53 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/auth/adaptor/out/InMemoryTokenRepositoryTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/auth/infrastructure/adapter/repository/InMemoryTokenRepositoryTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.auth.adaptor.out; +package com.plzgraduate.myongjigraduatebe.auth.infrastructure.adapter.repository; import static org.assertj.core.api.Assertions.assertThat; @@ -10,6 +10,7 @@ import org.mockito.InjectMocks; import org.mockito.junit.jupiter.MockitoExtension; +import com.plzgraduate.myongjigraduatebe.auth.infrastructure.adapter.repository.InMemoryTokenRepository; @ExtendWith(MockitoExtension.class) class InMemoryTokenRepositoryTest { diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/in/web/CalculateGraduationControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateGraduationControllerTest.java similarity index 79% rename from src/test/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/in/web/CalculateGraduationControllerTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateGraduationControllerTest.java index 188b1168..15b28421 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/adpater/in/web/CalculateGraduationControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateGraduationControllerTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.graduation.adpater.in.web; +package com.plzgraduate.myongjigraduatebe.graduation.api; import static org.mockito.BDDMockito.given; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf; @@ -10,11 +10,11 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import com.plzgraduate.myongjigraduatebe.graduation.application.port.in.response.BasicInfoResponse; -import com.plzgraduate.myongjigraduatebe.graduation.application.port.in.response.ChapelResultResponse; -import com.plzgraduate.myongjigraduatebe.graduation.application.port.in.response.DetailGraduationResultResponse; -import com.plzgraduate.myongjigraduatebe.graduation.application.port.in.response.GraduationResponse; -import com.plzgraduate.myongjigraduatebe.graduation.application.port.in.response.RestResultResponse; +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; diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/in/web/SearchLectureControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureControllerTest.java similarity index 89% rename from src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/in/web/SearchLectureControllerTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureControllerTest.java index 7f53cad3..11b2a3ba 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/in/web/SearchLectureControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureControllerTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.in.web; +package com.plzgraduate.myongjigraduatebe.lecture.api; import static org.hamcrest.Matchers.hasSize; import static org.mockito.ArgumentMatchers.any; @@ -15,8 +15,8 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.in.search.LectureResponse; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.in.search.SearchLectureResponse; +import com.plzgraduate.myongjigraduatebe.lecture.api.dto.response.LectureResponse; +import com.plzgraduate.myongjigraduatebe.lecture.api.dto.response.SearchLectureResponse; import com.plzgraduate.myongjigraduatebe.support.WebAdaptorTestSupport; import com.plzgraduate.myongjigraduatebe.support.WithMockAuthenticationUser; diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/find/FindLecturesByIdServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/find/FindLecturesByIdServiceTest.java index 930c5826..6de35553 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/find/FindLecturesByIdServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/find/FindLecturesByIdServiceTest.java @@ -12,7 +12,8 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.out.FindLecturePort; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindLecturePort; +import com.plzgraduate.myongjigraduatebe.lecture.application.service.FindLecturesByIdService; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; @ExtendWith(MockitoExtension.class) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/find/FindLecturesByLectureCodeServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/find/FindLecturesByLectureCodeServiceTest.java index cc753ae0..0542af69 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/find/FindLecturesByLectureCodeServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/find/FindLecturesByLectureCodeServiceTest.java @@ -12,7 +12,8 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.out.FindLecturePort; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindLecturePort; +import com.plzgraduate.myongjigraduatebe.lecture.application.service.FindLecturesByLectureCodeService; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; @ExtendWith(MockitoExtension.class) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/search/SearchLectureServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/search/SearchLectureServiceTest.java index d3480101..fc9c9dfe 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/search/SearchLectureServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/search/SearchLectureServiceTest.java @@ -12,9 +12,10 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.in.search.SearchLectureCommand; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.in.search.SearchLectureResponse; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.out.SearchLecturePort; +import com.plzgraduate.myongjigraduatebe.lecture.application.service.SearchLectureService; +import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.SearchLectureCommand; +import com.plzgraduate.myongjigraduatebe.lecture.api.dto.response.SearchLectureResponse; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.SearchLecturePort; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; @ExtendWith(MockitoExtension.class) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindBasicAcademicalCulturePersistenceAdapterTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindBasicAcademicalCulturePersistenceAdapterTest.java similarity index 77% rename from src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindBasicAcademicalCulturePersistenceAdapterTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindBasicAcademicalCulturePersistenceAdapterTest.java index a69a4cdb..d2563c97 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindBasicAcademicalCulturePersistenceAdapterTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindBasicAcademicalCulturePersistenceAdapterTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence; import static com.plzgraduate.myongjigraduatebe.user.domain.model.College.BUSINESS; import static com.plzgraduate.myongjigraduatebe.user.domain.model.College.ICT; @@ -12,10 +12,11 @@ import org.springframework.beans.factory.annotation.Autowired; import com.plzgraduate.myongjigraduatebe.fixture.UserFixture; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.BasicAcademicalCultureLectureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.LectureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository.BasicAcademicalCultureRepository; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository.LectureRepository; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.FindBasicAcademicalCulturePersistenceAdapter; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.BasicAcademicalCultureLectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.LectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.BasicAcademicalCultureRepository; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.LectureRepository; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindCommonCulturePersistenceAdapterTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindCommonCulturePersistenceAdapterTest.java similarity index 83% rename from src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindCommonCulturePersistenceAdapterTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindCommonCulturePersistenceAdapterTest.java index 15579980..f6e8e48f 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindCommonCulturePersistenceAdapterTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindCommonCulturePersistenceAdapterTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence; import static com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCultureCategory.ENGLISH; import static org.assertj.core.api.Assertions.assertThat; @@ -11,10 +11,11 @@ import org.springframework.beans.factory.annotation.Autowired; import com.plzgraduate.myongjigraduatebe.fixture.UserFixture; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.CommonCultureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.LectureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository.CommonCultureRepository; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository.LectureRepository; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.FindCommonCulturePersistenceAdapter; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.CommonCultureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.LectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.CommonCultureRepository; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.LectureRepository; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCulture; import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindCoreCulturePersistenceAdapterTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindCoreCulturePersistenceAdapterTest.java similarity index 77% rename from src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindCoreCulturePersistenceAdapterTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindCoreCulturePersistenceAdapterTest.java index 92c5cd09..24b58aa2 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindCoreCulturePersistenceAdapterTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindCoreCulturePersistenceAdapterTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence; import static com.plzgraduate.myongjigraduatebe.lecture.domain.model.CoreCultureCategory.CULTURE_ART; import static com.plzgraduate.myongjigraduatebe.lecture.domain.model.CoreCultureCategory.SOCIETY_COMMUNITY; @@ -12,10 +12,11 @@ import org.springframework.beans.factory.annotation.Autowired; import com.plzgraduate.myongjigraduatebe.fixture.UserFixture; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.CoreCultureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.LectureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository.CoreCultureRepository; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository.LectureRepository; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.FindCoreCulturePersistenceAdapter; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.CoreCultureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.LectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.CoreCultureRepository; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.LectureRepository; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CoreCulture; import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindMajorPersistenceAdapterTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindMajorPersistenceAdapterTest.java similarity index 74% rename from src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindMajorPersistenceAdapterTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindMajorPersistenceAdapterTest.java index 79878ed2..c9a2ac44 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/FindMajorPersistenceAdapterTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindMajorPersistenceAdapterTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence; import static org.assertj.core.api.Assertions.assertThat; @@ -10,10 +10,11 @@ import org.springframework.beans.factory.annotation.Autowired; import com.plzgraduate.myongjigraduatebe.fixture.UserFixture; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.LectureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.MajorLectureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository.LectureRepository; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository.MajorLectureRepository; +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; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.MajorLectureRepository; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/LecturePersistenceAdaptorTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/LecturePersistenceAdapterTest.java similarity index 78% rename from src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/LecturePersistenceAdaptorTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/LecturePersistenceAdapterTest.java index 5adcf946..1861c4fd 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/LecturePersistenceAdaptorTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/LecturePersistenceAdapterTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.tuple; @@ -11,13 +11,14 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.LectureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository.LectureQueryRepository; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository.LectureRepository; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.LecturePersistenceAdapter; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.LectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.LectureQueryRepository; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.LectureRepository; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; -class LecturePersistenceAdaptorTest extends PersistenceTestSupport { +class LecturePersistenceAdapterTest extends PersistenceTestSupport { @Autowired private LectureRepository lectureRepository; @@ -26,7 +27,7 @@ class LecturePersistenceAdaptorTest extends PersistenceTestSupport { private LectureQueryRepository lectureQueryRepository; @Autowired - private LecturePersistenceAdaptor lecturePersistenceAdaptor; + private LecturePersistenceAdapter lecturePersistenceAdapter; @AfterEach void afterEach() { @@ -49,7 +50,7 @@ void findLecturesByLectureCodes() { )); //when - List lectures = lecturePersistenceAdaptor.findLecturesByLectureCodes(lectureCodes); + List lectures = lecturePersistenceAdapter.findLecturesByLectureCodes(lectureCodes); //then assertThat(lectures) @@ -75,7 +76,7 @@ void findLecturesByIds() { )); //when - List lectures = lecturePersistenceAdaptor.findLecturesByIds(lectureIds); + List lectures = lecturePersistenceAdapter.findLecturesByIds(lectureIds); //then assertThat(lectures) @@ -97,7 +98,7 @@ void searchLectureByNameOrCode() { )); //when - List lectures = lecturePersistenceAdaptor.searchLectureByNameOrCode("name", "name"); + List lectures = lecturePersistenceAdapter.searchLectureByNameOrCode("name", "name"); //then assertThat(lectures) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/LectureMapperTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/mapper/LectureMapperTest.java similarity index 79% rename from src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/LectureMapperTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/mapper/LectureMapperTest.java index 0af44fec..2efb0da8 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/LectureMapperTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/mapper/LectureMapperTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.mapper; import static com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCultureCategory.CAREER; import static com.plzgraduate.myongjigraduatebe.lecture.domain.model.CoreCultureCategory.CULTURE_ART; @@ -8,11 +8,12 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.BasicAcademicalCultureLectureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.CommonCultureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.CoreCultureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.LectureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.MajorLectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.mapper.LectureMapper; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.BasicAcademicalCultureLectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.CommonCultureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.CoreCultureJpaEntity; +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.domain.model.BasicAcademicalCultureLecture; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCulture; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CoreCulture; diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/LectureQueryRepositoryTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/query/LectureQueryRepositoryTest.java similarity index 84% rename from src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/LectureQueryRepositoryTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/query/LectureQueryRepositoryTest.java index 156ec3c2..44d140c4 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/LectureQueryRepositoryTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/query/LectureQueryRepositoryTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.query; import static org.assertj.core.api.Assertions.assertThat; @@ -8,9 +8,9 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.LectureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository.LectureQueryRepository; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository.LectureRepository; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.LectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.LectureQueryRepository; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.LectureRepository; import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; class LectureQueryRepositoryTest extends PersistenceTestSupport { diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/TestQuerydslConfig.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/query/TestQuerydslConfig.java similarity index 73% rename from src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/TestQuerydslConfig.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/query/TestQuerydslConfig.java index 9337c5dd..f83a90bd 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/TestQuerydslConfig.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/query/TestQuerydslConfig.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.query; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; @@ -6,7 +6,7 @@ import org.springframework.boot.test.context.TestConfiguration; import org.springframework.context.annotation.Bean; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository.LectureQueryRepository; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.LectureQueryRepository; import com.querydsl.jpa.impl.JPAQueryFactory; @TestConfiguration diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/BasicAcademicalCultureLectureRepositoryTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/BasicAcademicalCultureLectureRepositoryTest.java similarity index 81% rename from src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/BasicAcademicalCultureLectureRepositoryTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/BasicAcademicalCultureLectureRepositoryTest.java index 1db75b19..8b0d001b 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/BasicAcademicalCultureLectureRepositoryTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/BasicAcademicalCultureLectureRepositoryTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository; import static org.assertj.core.api.Assertions.*; @@ -9,10 +9,10 @@ import org.junit.jupiter.params.provider.ValueSource; import org.springframework.beans.factory.annotation.Autowired; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.BasicAcademicalCultureLectureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.LectureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository.BasicAcademicalCultureRepository; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository.LectureRepository; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.BasicAcademicalCultureLectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.LectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.BasicAcademicalCultureRepository; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.LectureRepository; import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; class BasicAcademicalCultureLectureRepositoryTest extends PersistenceTestSupport { diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/CommonCultureRepositoryTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/CommonCultureRepositoryTest.java similarity index 91% rename from src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/CommonCultureRepositoryTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/CommonCultureRepositoryTest.java index 35ef47b5..342f0fee 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/CommonCultureRepositoryTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/CommonCultureRepositoryTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository; import static org.assertj.core.api.Assertions.*; @@ -10,10 +10,10 @@ import org.junit.jupiter.params.provider.ValueSource; import org.springframework.beans.factory.annotation.Autowired; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.CommonCultureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.LectureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository.CommonCultureRepository; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository.LectureRepository; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.CommonCultureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.LectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.CommonCultureRepository; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.LectureRepository; import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; class CommonCultureRepositoryTest extends PersistenceTestSupport { diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/CoreCultureRepositoryTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/CoreCultureRepositoryTest.java similarity index 74% rename from src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/CoreCultureRepositoryTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/CoreCultureRepositoryTest.java index 9f3ca91f..13e3951a 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/CoreCultureRepositoryTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/CoreCultureRepositoryTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository; import static org.assertj.core.api.Assertions.assertThat; @@ -9,10 +9,10 @@ import org.junit.jupiter.params.provider.ValueSource; import org.springframework.beans.factory.annotation.Autowired; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.CoreCultureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.LectureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository.CoreCultureRepository; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository.LectureRepository; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.CoreCultureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.LectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.CoreCultureRepository; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.LectureRepository; import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; class CoreCultureRepositoryTest extends PersistenceTestSupport { diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/MajorLectureRepositoryTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/MajorLectureRepositoryTest.java similarity index 72% rename from src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/MajorLectureRepositoryTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/MajorLectureRepositoryTest.java index 52da8e03..593b0e3e 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/adapter/out/persistence/MajorLectureRepositoryTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/MajorLectureRepositoryTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence; +package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository; import static org.assertj.core.api.Assertions.assertThat; @@ -8,10 +8,10 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.LectureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.MajorLectureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository.LectureRepository; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository.MajorLectureRepository; +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; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.MajorLectureRepository; import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; class MajorLectureRepositoryTest extends PersistenceTestSupport { diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/in/web/ParsingTextControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/api/ParsingTextControllerTest.java similarity index 92% rename from src/test/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/in/web/ParsingTextControllerTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/parsing/api/ParsingTextControllerTest.java index efac676f..12c7830f 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/in/web/ParsingTextControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/api/ParsingTextControllerTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.parsing.adaptor.in.web; +package com.plzgraduate.myongjigraduatebe.parsing.api; import static org.mockito.BDDMockito.any; import static org.mockito.BDDMockito.doThrow; @@ -15,7 +15,8 @@ import org.springframework.test.web.servlet.ResultActions; import com.plzgraduate.myongjigraduatebe.core.exception.InvalidPdfException; -import com.plzgraduate.myongjigraduatebe.parsing.application.port.in.ParsingTextCommand; +import com.plzgraduate.myongjigraduatebe.parsing.api.dto.request.ParsingTextRequest; +import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.ParsingTextCommand; import com.plzgraduate.myongjigraduatebe.support.WebAdaptorTestSupport; import com.plzgraduate.myongjigraduatebe.support.WithMockAuthenticationUser; 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 dc765ebe..e0b80f67 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 @@ -1,6 +1,5 @@ package com.plzgraduate.myongjigraduatebe.parsing.application.service; -import static org.junit.jupiter.api.Assertions.*; import static org.assertj.core.api.Assertions.*; import static org.mockito.BDDMockito.*; @@ -12,10 +11,10 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import com.plzgraduate.myongjigraduatebe.parsing.application.port.in.ParsingTextCommand; -import com.plzgraduate.myongjigraduatebe.parsing.application.port.out.SaveParsingTextHistoryPort; +import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.ParsingTextCommand; +import com.plzgraduate.myongjigraduatebe.parsing.application.port.SaveParsingTextHistoryPort; import com.plzgraduate.myongjigraduatebe.parsing.domain.ParsingTextHistory; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; import com.plzgraduate.myongjigraduatebe.user.domain.model.EnglishLevel; import com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; 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 052e3883..e5155f79 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 @@ -12,13 +12,13 @@ import com.plzgraduate.myongjigraduatebe.core.exception.InvalidPdfException; import com.plzgraduate.myongjigraduatebe.core.exception.PdfParsingException; -import com.plzgraduate.myongjigraduatebe.parsing.application.port.in.ParsingTextCommand; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.delete.DeleteTakenLectureByUserUseCase; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.save.SaveTakenLectureCommand; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.save.SaveTakenLectureFromParsingTextUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.update.UpdateStudentInformationCommand; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.update.UpdateStudentInformationUseCase; +import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.ParsingTextCommand; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.delete.DeleteTakenLectureByUserUseCase; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.save.SaveTakenLectureCommand; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.save.SaveTakenLectureFromParsingTextUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.update.UpdateStudentInformationCommand; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.update.UpdateStudentInformationUseCase; import com.plzgraduate.myongjigraduatebe.user.domain.model.EnglishLevel; import com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/out/persistence/ParsingTextHistoryAdaptorTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/ParsingTextHistoryAdapterTest.java similarity index 69% rename from src/test/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/out/persistence/ParsingTextHistoryAdaptorTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/ParsingTextHistoryAdapterTest.java index 511ec0c0..cb447e33 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/out/persistence/ParsingTextHistoryAdaptorTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/ParsingTextHistoryAdapterTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.parsing.adaptor.out.persistence; +package com.plzgraduate.myongjigraduatebe.parsing.infrastructure.adapter.persistence; import static org.assertj.core.api.Assertions.assertThat; @@ -8,23 +8,24 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.transaction.annotation.Transactional; -import com.plzgraduate.myongjigraduatebe.fixture.UserFixture; +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; import com.plzgraduate.myongjigraduatebe.parsing.domain.ParsingTextHistory; import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; -import com.plzgraduate.myongjigraduatebe.user.adaptor.out.persistence.UserJpaEntity; -import com.plzgraduate.myongjigraduatebe.user.adaptor.out.persistence.UserRepository; +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 ParsingTextHistoryAdaptorTest extends PersistenceTestSupport { +class ParsingTextHistoryAdapterTest extends PersistenceTestSupport { @Autowired private ParsingTextRepository parsingTextRepository; @Autowired - private ParsingTextHistoryAdaptor parsingTextHistoryAdaptor; + private ParsingTextHistoryAdapter parsingTextHistoryAdapter; @Autowired private UserRepository userRepository; @@ -58,7 +59,7 @@ void saveParsingTextHistory() { .build()); //when - parsingTextHistoryAdaptor.saveParsingTextHistory(parsingTextHistory); + parsingTextHistoryAdapter.saveParsingTextHistory(parsingTextHistory); //then Optional byId = @@ -90,10 +91,10 @@ void deleteUserParsingTextHistory() { .authId("test") .password("test") .build()); - parsingTextHistoryAdaptor.saveParsingTextHistory(parsingTextHistory); + parsingTextHistoryAdapter.saveParsingTextHistory(parsingTextHistory); //when - parsingTextHistoryAdaptor.deleteUserParsingTextHistory(user); + parsingTextHistoryAdapter.deleteUserParsingTextHistory(user); //then assertThat(parsingTextRepository.findAll()).isEmpty(); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/out/persistence/ParsingTextHistoryMapperTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/mapper/ParsingTextHistoryMapperTest.java similarity index 79% rename from src/test/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/out/persistence/ParsingTextHistoryMapperTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/mapper/ParsingTextHistoryMapperTest.java index e47f6b41..180cbc4d 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/adaptor/out/persistence/ParsingTextHistoryMapperTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/infrastructure/adapter/persistence/mapper/ParsingTextHistoryMapperTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.parsing.adaptor.out.persistence; +package com.plzgraduate.myongjigraduatebe.parsing.infrastructure.adapter.persistence.mapper; import static org.assertj.core.api.Assertions.assertThat; @@ -7,8 +7,10 @@ import org.springframework.beans.factory.annotation.Autowired; import com.plzgraduate.myongjigraduatebe.fixture.UserFixture; +import com.plzgraduate.myongjigraduatebe.parsing.infrastructure.adapter.persistence.entity.ParsingTextHistoryJpaEntity; import com.plzgraduate.myongjigraduatebe.parsing.domain.ParsingResult; import com.plzgraduate.myongjigraduatebe.parsing.domain.ParsingTextHistory; +import com.plzgraduate.myongjigraduatebe.parsing.infrastructure.adapter.persistence.mapper.ParsingTextHistoryMapper; import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java b/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java index c853b796..9d4207db 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java @@ -13,39 +13,39 @@ 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.adaptor.in.web.signin.SignInController; -import com.plzgraduate.myongjigraduatebe.auth.adaptor.in.web.token.TokenController; -import com.plzgraduate.myongjigraduatebe.auth.application.port.in.signin.SignInUseCase; -import com.plzgraduate.myongjigraduatebe.auth.application.port.in.token.TokenUseCase; +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.core.config.JpaAuditingConfig; import com.plzgraduate.myongjigraduatebe.core.config.QuerydslConfig; import com.plzgraduate.myongjigraduatebe.core.config.SecurityConfig; -import com.plzgraduate.myongjigraduatebe.graduation.adpater.in.web.CalculateGraduationController; -import com.plzgraduate.myongjigraduatebe.graduation.application.port.in.CalculateGraduationUseCase; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.in.web.SearchLectureController; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.in.search.SearchLectureUseCase; -import com.plzgraduate.myongjigraduatebe.parsing.adaptor.in.web.ParsingTextController; -import com.plzgraduate.myongjigraduatebe.parsing.application.port.in.ParsingTextHistoryUseCase; -import com.plzgraduate.myongjigraduatebe.parsing.application.port.in.ParsingTextUseCase; -import com.plzgraduate.myongjigraduatebe.takenlecture.adaptor.in.web.find.FindTakenLectureController; -import com.plzgraduate.myongjigraduatebe.takenlecture.adaptor.in.web.update.UpdateTakenLectureController; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.find.FindTakenLectureUseCase; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.update.UpdateTakenLectureUseCase; -import com.plzgraduate.myongjigraduatebe.user.adaptor.in.web.findauthid.FindAuthIdController; -import com.plzgraduate.myongjigraduatebe.user.adaptor.in.web.finduserinformation.FindUserInformationController; -import com.plzgraduate.myongjigraduatebe.user.adaptor.in.web.resetpassword.ResetPasswordController; -import com.plzgraduate.myongjigraduatebe.user.adaptor.in.web.signup.SignUpController; -import com.plzgraduate.myongjigraduatebe.user.adaptor.in.web.withdraw.WithDrawController; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.check.CheckAuthIdDuplicationUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.check.CheckStudentNumberDuplicationUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserAuthIdUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserInformationUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.resetpassword.ResetPasswordUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.signup.SignUpUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.validate.ValidateUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.withdraw.WithDrawUserUseCase; +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; +import com.plzgraduate.myongjigraduatebe.parsing.api.ParsingTextController; +import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.ParsingTextHistoryUseCase; +import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.ParsingTextUseCase; +import com.plzgraduate.myongjigraduatebe.takenlecture.api.FindTakenLectureController; +import com.plzgraduate.myongjigraduatebe.takenlecture.api.UpdateTakenLectureController; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureUseCase; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.update.UpdateTakenLectureUseCase; +import com.plzgraduate.myongjigraduatebe.user.api.findauthid.FindAuthIdController; +import com.plzgraduate.myongjigraduatebe.user.api.finduserinformation.FindUserInformationController; +import com.plzgraduate.myongjigraduatebe.user.api.resetpassword.ResetPasswordController; +import com.plzgraduate.myongjigraduatebe.user.api.signup.SignUpController; +import com.plzgraduate.myongjigraduatebe.user.api.withdraw.WithDrawController; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.check.CheckAuthIdDuplicationUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.check.CheckStudentNumberDuplicationUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserAuthIdUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserInformationUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.resetpassword.ResetPasswordUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.signup.SignUpUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.validate.ValidateUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.withdraw.WithDrawUserUseCase; @ActiveProfiles("test") @ComponentScan( diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/in/web/find/FindTakenLectureControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/find/FindTakenLectureControllerTest.java similarity index 91% rename from src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/in/web/find/FindTakenLectureControllerTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/find/FindTakenLectureControllerTest.java index 31680f2e..e8deecd2 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/in/web/find/FindTakenLectureControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/find/FindTakenLectureControllerTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.adaptor.in.web.find; +package com.plzgraduate.myongjigraduatebe.takenlecture.api.find; import static org.mockito.BDDMockito.anyLong; import static org.mockito.BDDMockito.given; @@ -15,8 +15,8 @@ import com.plzgraduate.myongjigraduatebe.support.WebAdaptorTestSupport; import com.plzgraduate.myongjigraduatebe.support.WithMockAuthenticationUser; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.find.FindTakenLectureResponse; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.find.TakenLectureResponse; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureResponse; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.TakenLectureResponse; class FindTakenLectureControllerTest extends WebAdaptorTestSupport { diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/in/web/update/UpdateTakenLectureControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/update/UpdateTakenLectureControllerTest.java similarity index 88% rename from src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/in/web/update/UpdateTakenLectureControllerTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/update/UpdateTakenLectureControllerTest.java index c8bdb40d..886bc96b 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/in/web/update/UpdateTakenLectureControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/update/UpdateTakenLectureControllerTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.adaptor.in.web.update; +package com.plzgraduate.myongjigraduatebe.takenlecture.api.update; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; @@ -13,6 +13,7 @@ import com.plzgraduate.myongjigraduatebe.support.WebAdaptorTestSupport; import com.plzgraduate.myongjigraduatebe.support.WithMockAuthenticationUser; +import com.plzgraduate.myongjigraduatebe.takenlecture.api.dto.request.UpdateTakenLectureRequest; class UpdateTakenLectureControllerTest extends WebAdaptorTestSupport { diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/delete/DeleteTakenLectureByUserServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/delete/DeleteTakenLectureByUserServiceTest.java index d663263c..329560cd 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/delete/DeleteTakenLectureByUserServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/delete/DeleteTakenLectureByUserServiceTest.java @@ -1,6 +1,5 @@ package com.plzgraduate.myongjigraduatebe.takenlecture.application.service.delete; -import static org.junit.jupiter.api.Assertions.*; import static org.mockito.BDDMockito.*; import org.junit.jupiter.api.DisplayName; @@ -10,7 +9,7 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.out.DeleteTakenLecturePort; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.DeleteTakenLecturePort; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @ExtendWith(MockitoExtension.class) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/find/FindTakenLectureServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/find/FindTakenLectureServiceTest.java index f6927715..742de4cd 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/find/FindTakenLectureServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/find/FindTakenLectureServiceTest.java @@ -1,6 +1,5 @@ package com.plzgraduate.myongjigraduatebe.takenlecture.application.service.find; -import static org.junit.jupiter.api.Assertions.*; import static org.assertj.core.api.Assertions.*; import static org.mockito.BDDMockito.*; @@ -16,12 +15,11 @@ import org.mockito.junit.jupiter.MockitoExtension; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.find.FindTakenLectureResponse; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.find.TakenLectureResponse; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.out.FindTakenLecturePort; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureResponse; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.FindTakenLecturePort; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.Semester; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @ExtendWith(MockitoExtension.class) 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 5bc9d0e1..7cfcfa0c 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 @@ -14,10 +14,10 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.in.find.FindLecturesByLectureCodeUseCase; +import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.FindLecturesByLectureCodeUseCase; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.save.SaveTakenLectureCommand; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.out.SaveTakenLecturePort; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.save.SaveTakenLectureCommand; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.SaveTakenLecturePort; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.Semester; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/update/UpdateTakenLectureServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/update/UpdateTakenLectureServiceTest.java index 7bfa84c5..09a27805 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/update/UpdateTakenLectureServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/update/UpdateTakenLectureServiceTest.java @@ -14,13 +14,13 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.in.find.FindLecturesByIdUseCase; +import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.FindLecturesByIdUseCase; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.update.UpdateTakenLectureCommand; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.out.DeleteTakenLecturePort; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.out.SaveTakenLecturePort; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.update.UpdateTakenLectureCommand; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.DeleteTakenLecturePort; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.SaveTakenLecturePort; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @ExtendWith(MockitoExtension.class) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/out/persistence/TakenLectureMapperTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/mapper/TakenLectureMapperTest.java similarity index 90% rename from src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/out/persistence/TakenLectureMapperTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/mapper/TakenLectureMapperTest.java index be6ef0a7..6d4ea28c 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/out/persistence/TakenLectureMapperTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/mapper/TakenLectureMapperTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.adaptor.out.persistence; +package com.plzgraduate.myongjigraduatebe.takenlecture.infrastructure.adapter.persistence.mapper; import static org.assertj.core.api.Assertions.assertThat; @@ -6,12 +6,14 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.LectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.LectureJpaEntity; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; +import com.plzgraduate.myongjigraduatebe.takenlecture.infrastructure.adapter.persistence.entity.TakenLectureJpaEntity; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.Semester; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; -import com.plzgraduate.myongjigraduatebe.user.adaptor.out.persistence.UserJpaEntity; +import com.plzgraduate.myongjigraduatebe.takenlecture.infrastructure.adapter.persistence.mapper.TakenLectureMapper; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; import com.plzgraduate.myongjigraduatebe.user.domain.model.EnglishLevel; import com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/out/persistence/TakenLectureRepositoryTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/respository/TakenLectureRepositoryTest.java similarity index 65% rename from src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/out/persistence/TakenLectureRepositoryTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/respository/TakenLectureRepositoryTest.java index f122d9f8..9090d92a 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/adaptor/out/persistence/TakenLectureRepositoryTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/respository/TakenLectureRepositoryTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.adaptor.out.persistence; +package com.plzgraduate.myongjigraduatebe.takenlecture.infrastructure.adapter.persistence.respository; import static org.assertj.core.api.Assertions.assertThat; @@ -8,11 +8,13 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.entity.LectureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.adapter.out.persistence.repository.LectureRepository; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.LectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.LectureRepository; import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; -import com.plzgraduate.myongjigraduatebe.user.adaptor.out.persistence.UserJpaEntity; -import com.plzgraduate.myongjigraduatebe.user.adaptor.out.persistence.UserRepository; +import com.plzgraduate.myongjigraduatebe.takenlecture.infrastructure.adapter.persistence.entity.TakenLectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.takenlecture.infrastructure.adapter.persistence.TakenLectureRepository; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.repository.UserRepository; class TakenLectureRepositoryTest extends PersistenceTestSupport { diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/findauthid/FindAuthIdControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdControllerTest.java similarity index 92% rename from src/test/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/findauthid/FindAuthIdControllerTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdControllerTest.java index 98548f33..711cdf7b 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/findauthid/FindAuthIdControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdControllerTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.adaptor.in.web.findauthid; +package com.plzgraduate.myongjigraduatebe.user.api.findauthid; import static org.hamcrest.Matchers.is; import static org.mockito.ArgumentMatchers.any; @@ -12,7 +12,7 @@ import org.junit.jupiter.api.Test; import com.plzgraduate.myongjigraduatebe.support.WebAdaptorTestSupport; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.UserAuthIdResponse; +import com.plzgraduate.myongjigraduatebe.user.api.findauthid.dto.response.UserAuthIdResponse; class FindAuthIdControllerTest extends WebAdaptorTestSupport { diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/finduserinformation/FindUserInformationControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/finduserinformation/FindUserInformationControllerTest.java similarity index 89% rename from src/test/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/finduserinformation/FindUserInformationControllerTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/user/api/finduserinformation/FindUserInformationControllerTest.java index 27ec159b..9083506a 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/finduserinformation/FindUserInformationControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/finduserinformation/FindUserInformationControllerTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.adaptor.in.web.finduserinformation; +package com.plzgraduate.myongjigraduatebe.user.api.finduserinformation; import static org.mockito.BDDMockito.given; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; @@ -11,7 +11,7 @@ import com.plzgraduate.myongjigraduatebe.support.WebAdaptorTestSupport; import com.plzgraduate.myongjigraduatebe.support.WithMockAuthenticationUser; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.UserInformationResponse; +import com.plzgraduate.myongjigraduatebe.user.api.finduserinformation.dto.response.UserInformationResponse; class FindUserInformationControllerTest extends WebAdaptorTestSupport { diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/resetpassword/ResetPasswordControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordControllerTest.java similarity index 94% rename from src/test/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/resetpassword/ResetPasswordControllerTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordControllerTest.java index 14274398..126f0915 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/resetpassword/ResetPasswordControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordControllerTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.adaptor.in.web.resetpassword; +package com.plzgraduate.myongjigraduatebe.user.api.resetpassword; import static org.hamcrest.Matchers.is; import static org.mockito.BDDMockito.given; @@ -15,7 +15,8 @@ import org.springframework.test.web.servlet.ResultActions; import com.plzgraduate.myongjigraduatebe.support.WebAdaptorTestSupport; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.validate.ValidateUserResponse; +import com.plzgraduate.myongjigraduatebe.user.api.resetpassword.ResetPasswordRequest; +import com.plzgraduate.myongjigraduatebe.user.api.resetpassword.dto.response.ValidateUserResponse; class ResetPasswordControllerTest extends WebAdaptorTestSupport { diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/signup/SignUpControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpControllerTest.java similarity index 94% rename from src/test/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/signup/SignUpControllerTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpControllerTest.java index 8561fc09..026768d6 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/signup/SignUpControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpControllerTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.adaptor.in.web.signup; +package com.plzgraduate.myongjigraduatebe.user.api.signup; import static org.mockito.BDDMockito.given; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf; @@ -14,8 +14,9 @@ import org.springframework.test.web.servlet.ResultActions; import com.plzgraduate.myongjigraduatebe.support.WebAdaptorTestSupport; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.check.AuthIdDuplicationResponse; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.check.StudentNumberDuplicationResponse; +import com.plzgraduate.myongjigraduatebe.user.api.signup.SignUpRequest; +import com.plzgraduate.myongjigraduatebe.user.api.signup.dto.response.AuthIdDuplicationResponse; +import com.plzgraduate.myongjigraduatebe.user.api.signup.dto.response.StudentNumberDuplicationResponse; class SignUpControllerTest extends WebAdaptorTestSupport { diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/withdraw/WithDrawControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/WithDrawControllerTest.java similarity index 85% rename from src/test/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/withdraw/WithDrawControllerTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/WithDrawControllerTest.java index 68ec2757..59932d41 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/adaptor/in/web/withdraw/WithDrawControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/WithDrawControllerTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.adaptor.in.web.withdraw; +package com.plzgraduate.myongjigraduatebe.user.api.withdraw; import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.then; @@ -13,7 +13,8 @@ import com.plzgraduate.myongjigraduatebe.support.WebAdaptorTestSupport; import com.plzgraduate.myongjigraduatebe.support.WithMockAuthenticationUser; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.withdraw.WithDrawCommand; +import com.plzgraduate.myongjigraduatebe.user.api.withdraw.WithDrawRequest; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.withdraw.WithDrawCommand; class WithDrawControllerTest extends WebAdaptorTestSupport { diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/check/CheckAuthIdDuplicationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/check/CheckAuthIdDuplicationServiceTest.java index 08948473..d7105761 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/check/CheckAuthIdDuplicationServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/check/CheckAuthIdDuplicationServiceTest.java @@ -10,8 +10,8 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.check.AuthIdDuplicationResponse; -import com.plzgraduate.myongjigraduatebe.user.application.port.out.CheckUserPort; +import com.plzgraduate.myongjigraduatebe.user.api.signup.dto.response.AuthIdDuplicationResponse; +import com.plzgraduate.myongjigraduatebe.user.application.port.CheckUserPort; @ExtendWith(MockitoExtension.class) class CheckAuthIdDuplicationServiceTest { diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/check/CheckStudentNumberDuplicationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/check/CheckStudentNumberDuplicationServiceTest.java index 1523df57..930f93ba 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/check/CheckStudentNumberDuplicationServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/check/CheckStudentNumberDuplicationServiceTest.java @@ -10,8 +10,8 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.check.StudentNumberDuplicationResponse; -import com.plzgraduate.myongjigraduatebe.user.application.port.out.CheckUserPort; +import com.plzgraduate.myongjigraduatebe.user.api.signup.dto.response.StudentNumberDuplicationResponse; +import com.plzgraduate.myongjigraduatebe.user.application.port.CheckUserPort; @ExtendWith(MockitoExtension.class) class CheckStudentNumberDuplicationServiceTest { diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserAuthIdServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserAuthIdServiceTest.java index 958da596..7230f978 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserAuthIdServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserAuthIdServiceTest.java @@ -12,8 +12,8 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.UserAuthIdResponse; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.api.findauthid.dto.response.UserAuthIdResponse; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @ExtendWith(MockitoExtension.class) 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 7f53aed4..7a388fc5 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 @@ -10,8 +10,8 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.UserInformationResponse; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.api.finduserinformation.dto.response.UserInformationResponse; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @ExtendWith(MockitoExtension.class) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserServiceTest.java index d9ef2505..c760bb82 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserServiceTest.java @@ -13,7 +13,7 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import com.plzgraduate.myongjigraduatebe.user.application.port.out.FindUserPort; +import com.plzgraduate.myongjigraduatebe.user.application.port.FindUserPort; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @ExtendWith(MockitoExtension.class) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/resetpassword/ResetPasswordServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/resetpassword/ResetPasswordServiceTest.java index de5c6f97..fa9d2fe5 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/resetpassword/ResetPasswordServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/resetpassword/ResetPasswordServiceTest.java @@ -12,9 +12,9 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.security.crypto.password.PasswordEncoder; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.resetpassword.ResetPasswordCommand; -import com.plzgraduate.myongjigraduatebe.user.application.port.out.UpdateUserPort; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.resetpassword.ResetPasswordCommand; +import com.plzgraduate.myongjigraduatebe.user.application.port.UpdateUserPort; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @ExtendWith(MockitoExtension.class) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/signup/SignUpServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/signup/SignUpServiceTest.java index c89c9150..d4baa620 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/signup/SignUpServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/signup/SignUpServiceTest.java @@ -11,9 +11,9 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.security.crypto.password.PasswordEncoder; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.signup.SignUpCommand; -import com.plzgraduate.myongjigraduatebe.user.application.port.out.CheckUserPort; -import com.plzgraduate.myongjigraduatebe.user.application.port.out.SaveUserPort; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.signup.SignUpCommand; +import com.plzgraduate.myongjigraduatebe.user.application.port.CheckUserPort; +import com.plzgraduate.myongjigraduatebe.user.application.port.SaveUserPort; import com.plzgraduate.myongjigraduatebe.user.domain.model.EnglishLevel; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; 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 daad60bf..275e247b 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 @@ -1,6 +1,5 @@ package com.plzgraduate.myongjigraduatebe.user.application.service.update; -import static org.junit.jupiter.api.Assertions.*; import static org.mockito.BDDMockito.*; import org.junit.jupiter.api.DisplayName; @@ -10,8 +9,8 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.update.UpdateStudentInformationCommand; -import com.plzgraduate.myongjigraduatebe.user.application.port.out.UpdateUserPort; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.update.UpdateStudentInformationCommand; +import com.plzgraduate.myongjigraduatebe.user.application.port.UpdateUserPort; import com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/validate/ValidateUserServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/validate/ValidateUserServiceTest.java index 831809b5..a295a679 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/validate/ValidateUserServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/validate/ValidateUserServiceTest.java @@ -10,8 +10,8 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.validate.ValidateUserResponse; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.api.resetpassword.dto.response.ValidateUserResponse; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @ExtendWith(MockitoExtension.class) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserServiceTest.java index e015da51..52dbda8b 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserServiceTest.java @@ -14,11 +14,11 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; -import com.plzgraduate.myongjigraduatebe.parsing.application.port.out.DeleteParsingTextHistoryPort; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.in.delete.DeleteTakenLectureByUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.find.FindUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.in.withdraw.WithDrawCommand; -import com.plzgraduate.myongjigraduatebe.user.application.port.out.DeleteUserPort; +import com.plzgraduate.myongjigraduatebe.parsing.application.port.DeleteParsingTextHistoryPort; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.delete.DeleteTakenLectureByUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.withdraw.WithDrawCommand; +import com.plzgraduate.myongjigraduatebe.user.application.port.DeleteUserPort; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @ExtendWith(MockitoExtension.class) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/adaptor/out/persistence/UserPersistenceAdaptorTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/UserPersistenceAdapterTest.java similarity index 76% rename from src/test/java/com/plzgraduate/myongjigraduatebe/user/adaptor/out/persistence/UserPersistenceAdaptorTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/UserPersistenceAdapterTest.java index 3ccaabd8..eba95a81 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/adaptor/out/persistence/UserPersistenceAdaptorTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/UserPersistenceAdapterTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.adaptor.out.persistence; +package com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence; import static org.assertj.core.api.Assertions.assertThat; @@ -9,12 +9,15 @@ import org.springframework.beans.factory.annotation.Autowired; import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.UserPersistenceAdapter; +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 UserPersistenceAdaptorTest extends PersistenceTestSupport { +class UserPersistenceAdapterTest extends PersistenceTestSupport { @Autowired - private UserPersistenceAdaptor userPersistenceAdaptor; + private UserPersistenceAdapter userPersistenceAdapter; @Autowired private UserRepository userRepository; @@ -24,7 +27,7 @@ class UserPersistenceAdaptorTest extends PersistenceTestSupport { //given User user = createUser("mju1001", "1q2w3e4r!", "60181666"); //when - userPersistenceAdaptor.saveUser(user); + userPersistenceAdapter.saveUser(user); //then assertThat(userRepository.findByAuthId("mju1001")).isPresent(); } @@ -37,7 +40,7 @@ class UserPersistenceAdaptorTest extends PersistenceTestSupport { UserJpaEntity userEntity = createUserEntity(authId, "1q2w3e4r!", "60181666"); userRepository.save(userEntity); //when - Optional user = userPersistenceAdaptor.findUserByAuthId(authId); + Optional user = userPersistenceAdapter.findUserByAuthId(authId); //then assertThat(user).isPresent(); @@ -53,7 +56,7 @@ void findUserByStudentNumber() { userRepository.save(userJpaEntity); //when - Optional user = userPersistenceAdaptor.findUserByStudentNumber(studentNumber); + Optional user = userPersistenceAdapter.findUserByStudentNumber(studentNumber); //then assertThat(user).isPresent(); @@ -68,7 +71,7 @@ void findUserByStudentNumber() { UserJpaEntity user = createUserEntity(authId, "1q2w3e4r!", "60181666"); userRepository.save(user); //when - boolean check= userPersistenceAdaptor.checkDuplicateAuthId(authId); + boolean check= userPersistenceAdapter.checkDuplicateAuthId(authId); //then assertThat(check).isTrue(); @@ -82,7 +85,7 @@ void findUserByStudentNumber() { UserJpaEntity user = createUserEntity("mju1001", "1q2w3e4r!", studentNumber); userRepository.save(user); //when - boolean check= userPersistenceAdaptor.checkDuplicateStudentNumber(studentNumber); + boolean check= userPersistenceAdapter.checkDuplicateStudentNumber(studentNumber); //then assertThat(check).isTrue(); @@ -99,10 +102,10 @@ void deleteUser() { .id(savedUserJpaEntity.getId()).build(); //when - userPersistenceAdaptor.deleteUser(user); + userPersistenceAdapter.deleteUser(user); //then - Optional foundUser = userPersistenceAdaptor.findUserByAuthId(authId); + Optional foundUser = userPersistenceAdapter.findUserByAuthId(authId); assertThat(foundUser.isPresent()).isFalse(); } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/adaptor/out/persistence/UserMapperTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/mapper/UserMapperTest.java similarity index 90% rename from src/test/java/com/plzgraduate/myongjigraduatebe/user/adaptor/out/persistence/UserMapperTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/mapper/UserMapperTest.java index bfd51bff..26f0e6ce 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/adaptor/out/persistence/UserMapperTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/mapper/UserMapperTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.adaptor.out.persistence; +package com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.mapper; import static org.assertj.core.api.Assertions.assertThat; @@ -7,9 +7,11 @@ import org.springframework.beans.factory.annotation.Autowired; import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; 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 com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.mapper.UserMapper; class UserMapperTest extends PersistenceTestSupport { diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/adaptor/out/persistence/UserRepositoryTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/repository/UserRepositoryTest.java similarity index 88% rename from src/test/java/com/plzgraduate/myongjigraduatebe/user/adaptor/out/persistence/UserRepositoryTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/repository/UserRepositoryTest.java index 9da5a8b5..782c7f87 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/adaptor/out/persistence/UserRepositoryTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/repository/UserRepositoryTest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.adaptor.out.persistence; +package com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.repository; import static org.assertj.core.api.Assertions.*; @@ -10,6 +10,8 @@ import org.springframework.beans.factory.annotation.Autowired; 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 UserRepositoryTest extends PersistenceTestSupport { From 4d92c2caa8892d7efbd02d6924bc63897c85cadd Mon Sep 17 00:00:00 2001 From: 5uhwann <106325839+5uhwann@users.noreply.github.com> Date: Tue, 19 Mar 2024 13:38:25 +0900 Subject: [PATCH 08/27] [DEV-8] Apply Conventions (#245) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: 코드 컨벤션 적용 - 메서드 네이밍 수정 * refactor: 코드 컨벤션 적용 request dto 형식 * refactor: 코드 컨벤션 적용 response dto 형식 * test: 테스트 오류 수정 * refactor: 불필요 주석 삭제 --- .../auth/api/signin/SignInController.java | 2 +- .../api/signin/dto/request/SignInRequest.java | 9 --- .../auth/api/token/TokenApiPresentation.java | 2 +- .../auth/api/token/TokenController.java | 4 +- .../api/token/dto/request/TokenRequest.java | 7 -- .../service/signin/SignInService.java | 11 ++- .../service/token/TokenService.java | 7 +- .../usecase/signin/SignInCommand.java | 20 ------ .../usecase/signin/SignInUseCase.java | 2 +- .../usecase/token/TokenCommand.java | 16 ----- .../usecase/token/TokenUseCase.java | 2 +- .../lecture/api/SearchLectureController.java | 3 +- .../dto/response/SearchLectureResponse.java | 7 +- .../service/FindLecturesByIdService.java | 24 ------- ...eService.java => FindLecturesService.java} | 9 ++- .../service/SearchLectureService.java | 13 ++-- .../usecase/FindLecturesByIdUseCase.java | 9 --- ...eUseCase.java => FindLecturesUseCase.java} | 4 +- .../usecase/SearchLectureCommand.java | 24 ------- .../usecase/SearchLectureUseCase.java | 6 +- .../parsing/api/ParsingTextController.java | 8 +-- .../api/dto/request/ParsingTextRequest.java | 8 --- .../service/ParsingTextHistoryService.java | 13 ++-- .../service/ParsingTextService.java | 27 ++++--- .../usecase/ParsingTextCommand.java | 19 ----- .../usecase/ParsingTextHistoryUseCase.java | 4 +- .../usecase/ParsingTextUseCase.java | 2 +- .../api/FindTakenLectureApiPresentation.java | 2 +- .../api/FindTakenLectureController.java | 6 +- .../api/UpdateTakenLectureController.java | 6 +- .../request/UpdateTakenLectureRequest.java | 9 --- .../response/FindTakenLectureResponse.java | 41 +++++++++++ .../dto/response}/TakenLectureResponse.java | 2 +- .../service/find/FindTakenLectureService.java | 44 ++---------- ...aveTakenLectureFromParsingTextService.java | 30 ++++---- .../update/UpdateTakenLectureService.java | 22 ++---- .../find/FindTakenLectureResponse.java | 30 -------- .../usecase/find/FindTakenLectureUseCase.java | 4 +- .../usecase/save/SaveTakenLectureCommand.java | 50 ------------- ...aveTakenLectureFromParsingTextUseCase.java | 7 +- .../update/UpdateTakenLectureCommand.java | 22 ------ .../update/UpdateTakenLectureUseCase.java | 6 +- .../domain/model/TakenLectureInformation.java | 27 +++++++ .../domain/model/TakenLectureInventory.java | 27 +++++-- .../api/findauthid/FindAuthIdController.java | 3 +- .../FindUserInformationController.java | 4 +- .../dto/response/UserInformationResponse.java | 9 +++ .../ResetPasswordApiPresentation.java | 1 + .../ResetPasswordController.java | 7 +- .../request}/ResetPasswordRequest.java | 10 +-- .../api/signup/SignUpApiPresentation.java | 1 + .../user/api/signup/SignUpController.java | 1 + .../{ => dto/request}/SignUpRequest.java | 2 +- .../api/withdraw/WithDrawApiPresentation.java | 1 + .../user/api/withdraw/WithDrawController.java | 3 +- .../{ => dto/request}/WithDrawRequest.java | 7 +- .../service/find/FindUserAuthIdService.java | 5 +- .../find/FindUserInformationService.java | 9 +-- .../resetpassword/ResetPasswordService.java | 15 ++-- .../service/validate/ValidateUserService.java | 7 +- .../service/withdraw/WithDrawUserService.java | 7 +- .../usecase/find/FindUserAuthIdUseCase.java | 4 +- .../find/FindUserInformationUseCase.java | 4 +- .../resetpassword/ResetPasswordCommand.java | 23 ------ .../resetpassword/ResetPasswordUseCase.java | 2 +- .../usecase/validate/ValidateUserUseCase.java | 4 +- .../usecase/withdraw/WithDrawCommand.java | 15 ---- .../usecase/withdraw/WithDrawUserUseCase.java | 2 +- .../auth/api/signin/SignInControllerTest.java | 2 +- .../auth/api/token/TokenControllerTest.java | 4 +- .../service/signin/SignInServiceTest.java | 9 +-- .../service/token/TokenServiceTest.java | 21 +++--- .../api/SearchLectureControllerTest.java | 12 ++-- .../find/FindLecturesByIdServiceTest.java | 4 +- .../FindLecturesByLectureCodeServiceTest.java | 10 +-- .../search/SearchLectureServiceTest.java | 22 +++--- .../api/ParsingTextControllerTest.java | 9 ++- .../ParsingTextHistoryServiceTest.java | 26 +++---- .../service/ParsingTextServiceTest.java | 49 ++++--------- .../find/FindTakenLectureControllerTest.java | 38 +++++++--- .../find/FindTakenLectureServiceTest.java | 71 ++++++++++--------- ...akenLectureFromParsingTextServiceTest.java | 52 ++++++-------- .../update/UpdateTakenLectureServiceTest.java | 22 +++--- .../model/TakenLectureInventoryTest.java | 16 +++++ .../findauthid/FindAuthIdControllerTest.java | 6 +- .../FindUserInformationControllerTest.java | 10 +-- .../ResetPasswordControllerTest.java | 7 +- .../user/api/signup/SignUpControllerTest.java | 2 +- .../api/withdraw/WithDrawControllerTest.java | 5 +- .../find/FindUserAuthIdServiceTest.java | 10 ++- .../find/FindUserInformationServiceTest.java | 12 ++-- .../ResetPasswordServiceTest.java | 43 ++++++----- .../validate/ValidateUserServiceTest.java | 11 ++- .../withdraw/WithDrawUserServiceTest.java | 15 ++-- 94 files changed, 478 insertions(+), 753 deletions(-) delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/signin/SignInCommand.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/token/TokenCommand.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/FindLecturesByIdService.java rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/{FindLecturesByLectureCodeService.java => FindLecturesService.java} (76%) delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/FindLecturesByIdUseCase.java rename src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/{FindLecturesByLectureCodeUseCase.java => FindLecturesUseCase.java} (71%) delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/SearchLectureCommand.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/usecase/ParsingTextCommand.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/dto/response/FindTakenLectureResponse.java rename src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/{application/usecase/find => api/dto/response}/TakenLectureResponse.java (94%) delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/find/FindTakenLectureResponse.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/save/SaveTakenLectureCommand.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/update/UpdateTakenLectureCommand.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/domain/model/TakenLectureInformation.java rename src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/{ => dto/request}/ResetPasswordRequest.java (82%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/{ => dto/request}/SignUpRequest.java (96%) rename src/main/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/{ => dto/request}/WithDrawRequest.java (63%) delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/resetpassword/ResetPasswordCommand.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/withdraw/WithDrawCommand.java diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/SignInController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/SignInController.java index 811b9c46..191e97ce 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/SignInController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/SignInController.java @@ -24,7 +24,7 @@ public class SignInController implements SignInApiPresentation { @PostMapping("/sign-in") public TokenResponse signIn(@Valid @RequestBody SignInRequest signInRequest) { - return signInUseCase.signIn(signInRequest.toCommand()); + return signInUseCase.signIn(signInRequest.getAuthId(), signInRequest.getPassword()); } @GetMapping("/check-login") diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/dto/request/SignInRequest.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/dto/request/SignInRequest.java index ec85c1ae..5f597428 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/dto/request/SignInRequest.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/dto/request/SignInRequest.java @@ -2,8 +2,6 @@ import javax.validation.constraints.NotBlank; -import com.plzgraduate.myongjigraduatebe.auth.application.usecase.signin.SignInCommand; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; import lombok.Getter; @@ -27,11 +25,4 @@ private SignInRequest(String authId, String password) { this.password = password; } - public SignInCommand toCommand() { - return SignInCommand - .builder() - .authId(authId) - .password(password) - .build(); - } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/token/TokenApiPresentation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/token/TokenApiPresentation.java index 5e36c94a..186dff52 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/token/TokenApiPresentation.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/token/TokenApiPresentation.java @@ -12,5 +12,5 @@ @Tag(name = "Token", description = "토큰 발급 API") public interface TokenApiPresentation { - AccessTokenResponse newToken(@Valid @RequestBody TokenRequest tokenRequest); + AccessTokenResponse createNewToken(@Valid @RequestBody TokenRequest tokenRequest); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/token/TokenController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/token/TokenController.java index de62094b..04ad4a27 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/token/TokenController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/token/TokenController.java @@ -21,7 +21,7 @@ public class TokenController implements TokenApiPresentation { private final TokenUseCase tokenUseCase; @PostMapping("/token") - public AccessTokenResponse newToken(@Valid @RequestBody TokenRequest tokenRequest) { - return tokenUseCase.createNewToken(TokenRequest.toCommand(tokenRequest.getRefreshToken())); + public AccessTokenResponse createNewToken(@Valid @RequestBody TokenRequest tokenRequest) { + return tokenUseCase.generateNewToken(tokenRequest.getRefreshToken()); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/token/dto/request/TokenRequest.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/token/dto/request/TokenRequest.java index ddb0a7b7..746a087b 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/token/dto/request/TokenRequest.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/token/dto/request/TokenRequest.java @@ -2,8 +2,6 @@ import javax.validation.constraints.NotBlank; -import com.plzgraduate.myongjigraduatebe.auth.application.usecase.token.TokenCommand; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; import lombok.Getter; @@ -22,9 +20,4 @@ private TokenRequest(String refreshToken) { this.refreshToken = refreshToken; } - public static TokenCommand toCommand(String refreshToken) { - return TokenCommand.builder() - .refreshToken(refreshToken) - .build(); - } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/service/signin/SignInService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/service/signin/SignInService.java index a45ee6e4..05c77410 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/service/signin/SignInService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/service/signin/SignInService.java @@ -5,10 +5,9 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.transaction.annotation.Transactional; -import com.plzgraduate.myongjigraduatebe.auth.application.usecase.signin.SignInUseCase; -import com.plzgraduate.myongjigraduatebe.auth.application.usecase.signin.SignInCommand; import com.plzgraduate.myongjigraduatebe.auth.api.signin.dto.response.TokenResponse; import com.plzgraduate.myongjigraduatebe.auth.application.port.SaveRefreshTokenPort; +import com.plzgraduate.myongjigraduatebe.auth.application.usecase.signin.SignInUseCase; import com.plzgraduate.myongjigraduatebe.auth.security.JwtAuthenticationToken; import com.plzgraduate.myongjigraduatebe.auth.security.TokenProvider; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; @@ -25,8 +24,8 @@ class SignInService implements SignInUseCase { private final SaveRefreshTokenPort saveRefreshTokenPort; @Override - public TokenResponse signIn(SignInCommand signInCommand) { - Authentication authentication = authenticateCommand(signInCommand); + public TokenResponse signIn(String authId, String password) { + Authentication authentication = authenticateCommand(authId, password); Long userId = (Long) authentication.getPrincipal(); String accessToken = tokenProvider.generateToken(userId); String refreshToken = tokenProvider.generateRefreshToken(); @@ -34,9 +33,9 @@ public TokenResponse signIn(SignInCommand signInCommand) { return TokenResponse.from(accessToken, refreshToken); } - private Authentication authenticateCommand(SignInCommand signInCommand) { + private Authentication authenticateCommand(String authId, String password) { JwtAuthenticationToken authenticationToken = - new JwtAuthenticationToken(signInCommand.getAuthId(), signInCommand.getPassword()); + new JwtAuthenticationToken(authId, password); Authentication authentication = authenticationManager.authenticate(authenticationToken); SecurityContextHolder.getContext().setAuthentication(authentication); return authentication; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/service/token/TokenService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/service/token/TokenService.java index 77ca2f16..fb17e6d0 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/service/token/TokenService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/service/token/TokenService.java @@ -1,9 +1,8 @@ package com.plzgraduate.myongjigraduatebe.auth.application.service.token; import com.plzgraduate.myongjigraduatebe.auth.api.token.dto.response.AccessTokenResponse; -import com.plzgraduate.myongjigraduatebe.auth.application.usecase.token.TokenCommand; -import com.plzgraduate.myongjigraduatebe.auth.application.usecase.token.TokenUseCase; import com.plzgraduate.myongjigraduatebe.auth.application.port.FindRefreshTokenPort; +import com.plzgraduate.myongjigraduatebe.auth.application.usecase.token.TokenUseCase; import com.plzgraduate.myongjigraduatebe.auth.security.TokenProvider; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; @@ -17,8 +16,8 @@ public class TokenService implements TokenUseCase { private final FindRefreshTokenPort findRefreshTokenPort; @Override - public AccessTokenResponse createNewToken(TokenCommand tokenCommand) { - Long userId = findByRefreshToken(tokenCommand.getRefreshToken()); + public AccessTokenResponse generateNewToken(String refreshToken) { + Long userId = findByRefreshToken(refreshToken); String accessToken = tokenProvider.generateToken(userId); return AccessTokenResponse.from(accessToken); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/signin/SignInCommand.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/signin/SignInCommand.java deleted file mode 100644 index 82bb5888..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/signin/SignInCommand.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.auth.application.usecase.signin; - -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@NoArgsConstructor -public class SignInCommand { - private String authId; - - private String password; - - @Builder - private SignInCommand(String authId, String password) { - this.authId = authId; - this.password = password; - } - -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/signin/SignInUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/signin/SignInUseCase.java index ddc54c08..7050eedc 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/signin/SignInUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/signin/SignInUseCase.java @@ -3,5 +3,5 @@ import com.plzgraduate.myongjigraduatebe.auth.api.signin.dto.response.TokenResponse; public interface SignInUseCase { - TokenResponse signIn(SignInCommand signInCommand); + TokenResponse signIn(String authId, String password); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/token/TokenCommand.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/token/TokenCommand.java deleted file mode 100644 index 7f76ae59..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/token/TokenCommand.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.auth.application.usecase.token; - -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -public class TokenCommand { - private final String refreshToken; - - @Builder - private TokenCommand(String refreshToken) { - this.refreshToken = refreshToken; - } - -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/token/TokenUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/token/TokenUseCase.java index 706b20e8..547d5576 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/token/TokenUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/application/usecase/token/TokenUseCase.java @@ -3,5 +3,5 @@ import com.plzgraduate.myongjigraduatebe.auth.api.token.dto.response.AccessTokenResponse; public interface TokenUseCase { - AccessTokenResponse createNewToken(TokenCommand tokenCommand); + AccessTokenResponse generateNewToken(String refreshToken); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureController.java index 49784bcf..706f006c 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureController.java @@ -8,7 +8,6 @@ import org.springframework.web.bind.annotation.RequestParam; import com.plzgraduate.myongjigraduatebe.core.meta.WebAdapter; -import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.SearchLectureCommand; import com.plzgraduate.myongjigraduatebe.lecture.api.dto.response.SearchLectureResponse; import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.SearchLectureUseCase; @@ -27,6 +26,6 @@ public SearchLectureResponse searchLecture( @RequestParam(defaultValue = "name") String type, @RequestParam @Size(min = 2, message = "검색어를 2자리 이상 입력해주세요.") String keyword ) { - return searchLectureUseCase.searchLectures(SearchLectureCommand.toCommand(type, keyword)); + return SearchLectureResponse.from(searchLectureUseCase.searchLectures(type, keyword)); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/dto/response/SearchLectureResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/dto/response/SearchLectureResponse.java index 48323fb0..bebebabc 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/dto/response/SearchLectureResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/dto/response/SearchLectureResponse.java @@ -1,6 +1,9 @@ package com.plzgraduate.myongjigraduatebe.lecture.api.dto.response; import java.util.List; +import java.util.stream.Collectors; + +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import lombok.Builder; import lombok.Getter; @@ -17,9 +20,9 @@ private SearchLectureResponse(List lectures) { this.lectures = lectures; } - public static SearchLectureResponse from(List lectures) { + public static SearchLectureResponse from(List lectures) { return SearchLectureResponse.builder() - .lectures(lectures) + .lectures(lectures.stream().map(LectureResponse::of).collect(Collectors.toList())) .build(); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/FindLecturesByIdService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/FindLecturesByIdService.java deleted file mode 100644 index 7be10690..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/FindLecturesByIdService.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.lecture.application.service; - -import java.util.List; - -import org.springframework.transaction.annotation.Transactional; - -import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.FindLecturesByIdUseCase; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindLecturePort; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; - -import lombok.RequiredArgsConstructor; - -@UseCase -@Transactional(readOnly = true) -@RequiredArgsConstructor -public class FindLecturesByIdService implements FindLecturesByIdUseCase { - - private final FindLecturePort findLecturePort; - @Override - public List findLecturesByIds(List lectureIds) { - return findLecturePort.findLecturesByIds(lectureIds); - } -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/FindLecturesByLectureCodeService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/FindLecturesService.java similarity index 76% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/FindLecturesByLectureCodeService.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/FindLecturesService.java index 07e164e5..d23db504 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/FindLecturesByLectureCodeService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/FindLecturesService.java @@ -5,7 +5,7 @@ import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.FindLecturesByLectureCodeUseCase; +import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.FindLecturesUseCase; import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindLecturePort; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; @@ -14,9 +14,14 @@ @UseCase @Transactional(readOnly = true) @RequiredArgsConstructor -public class FindLecturesByLectureCodeService implements FindLecturesByLectureCodeUseCase { +public class FindLecturesService implements FindLecturesUseCase { private final FindLecturePort findLecturePort; + @Override + public List findLecturesByIds(List lectureIds) { + return findLecturePort.findLecturesByIds(lectureIds); + } + @Override public List findLecturesByLectureCodes(List lectureCodes) { return findLecturePort.findLecturesByLectureCodes(lectureCodes); diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/SearchLectureService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/SearchLectureService.java index 2e9d014a..a5704c53 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/SearchLectureService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/SearchLectureService.java @@ -1,14 +1,10 @@ package com.plzgraduate.myongjigraduatebe.lecture.application.service; import java.util.List; -import java.util.stream.Collectors; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.SearchLectureCommand; -import com.plzgraduate.myongjigraduatebe.lecture.api.dto.response.LectureResponse; -import com.plzgraduate.myongjigraduatebe.lecture.api.dto.response.SearchLectureResponse; -import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.SearchLectureUseCase; import com.plzgraduate.myongjigraduatebe.lecture.application.port.SearchLecturePort; +import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.SearchLectureUseCase; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import lombok.RequiredArgsConstructor; @@ -18,10 +14,9 @@ public class SearchLectureService implements SearchLectureUseCase { private final SearchLecturePort searchLecturePort; + @Override - public SearchLectureResponse searchLectures(SearchLectureCommand searchLectureCommand) { - List lectures = searchLecturePort.searchLectureByNameOrCode( - searchLectureCommand.getType(), searchLectureCommand.getKeyword()); - return SearchLectureResponse.from(lectures.stream().map(LectureResponse::of).collect(Collectors.toList())); + public List searchLectures(String type, String keyword) { + return searchLecturePort.searchLectureByNameOrCode(type, keyword); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/FindLecturesByIdUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/FindLecturesByIdUseCase.java deleted file mode 100644 index de163b99..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/FindLecturesByIdUseCase.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.lecture.application.usecase; - -import java.util.List; - -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; - -public interface FindLecturesByIdUseCase { - List findLecturesByIds(List lectureIds); -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/FindLecturesByLectureCodeUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/FindLecturesUseCase.java similarity index 71% rename from src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/FindLecturesByLectureCodeUseCase.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/FindLecturesUseCase.java index 4390da98..390dba1a 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/FindLecturesByLectureCodeUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/FindLecturesUseCase.java @@ -4,6 +4,8 @@ import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; -public interface FindLecturesByLectureCodeUseCase { +public interface FindLecturesUseCase { + List findLecturesByIds(List lectureIds); + List findLecturesByLectureCodes(List lectureCodes); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/SearchLectureCommand.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/SearchLectureCommand.java deleted file mode 100644 index 72930fa9..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/SearchLectureCommand.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.lecture.application.usecase; - -import lombok.Builder; -import lombok.Getter; - -@Getter -public class SearchLectureCommand { - private final String type; - private final String keyword; - - @Builder - private SearchLectureCommand(String type, String keyword) { - this.type = type; - this.keyword = keyword; - } - - public static SearchLectureCommand toCommand(String type, String keyword) { - return SearchLectureCommand.builder() - .type(type) - .keyword(keyword) - .build(); - } - -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/SearchLectureUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/SearchLectureUseCase.java index 7f763d03..28746cfc 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/SearchLectureUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/SearchLectureUseCase.java @@ -1,7 +1,9 @@ package com.plzgraduate.myongjigraduatebe.lecture.application.usecase; -import com.plzgraduate.myongjigraduatebe.lecture.api.dto.response.SearchLectureResponse; +import java.util.List; + +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; public interface SearchLectureUseCase { - SearchLectureResponse searchLectures(SearchLectureCommand searchLectureCommand); + List searchLectures(String type, String keyword); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/api/ParsingTextController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/api/ParsingTextController.java index c150dc8e..2af6d648 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/api/ParsingTextController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/api/ParsingTextController.java @@ -9,7 +9,6 @@ import com.plzgraduate.myongjigraduatebe.core.meta.LoginUser; import com.plzgraduate.myongjigraduatebe.core.meta.WebAdapter; import com.plzgraduate.myongjigraduatebe.parsing.api.dto.request.ParsingTextRequest; -import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.ParsingTextCommand; import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.ParsingTextHistoryUseCase; import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.ParsingTextUseCase; @@ -25,12 +24,11 @@ public class ParsingTextController implements ParsingTextApiPresentation{ @PostMapping public void enrollParsingText(@LoginUser Long userId, @Valid @RequestBody ParsingTextRequest parsingTextRequest) { - ParsingTextCommand command = parsingTextRequest.toCommand(userId); try { - parsingTextUseCase.enrollParsingText(command); - parsingTextHistoryUseCase.saveParsingTextHistoryIfSuccess(command); + parsingTextUseCase.enrollParsingText(userId, parsingTextRequest.getParsingText()); + parsingTextHistoryUseCase.generateSucceedParsingTextHistory(userId, parsingTextRequest.getParsingText()); } catch (Exception e) { - parsingTextHistoryUseCase.saveParsingTextHistoryIfFail(command); + parsingTextHistoryUseCase.generateFailedParsingTextHistory(userId, parsingTextRequest.getParsingText()); throw e; } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/api/dto/request/ParsingTextRequest.java b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/api/dto/request/ParsingTextRequest.java index 19a6f844..1f0ccbbe 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/api/dto/request/ParsingTextRequest.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/api/dto/request/ParsingTextRequest.java @@ -2,8 +2,6 @@ import javax.validation.constraints.NotNull; -import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.ParsingTextCommand; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; import lombok.Getter; @@ -22,10 +20,4 @@ private ParsingTextRequest(String parsingText) { this.parsingText = parsingText; } - public ParsingTextCommand toCommand(Long userId) { - return ParsingTextCommand.builder() - .userId(userId) - .parsingText(parsingText) - .build(); - } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextHistoryService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextHistoryService.java index c29c8695..75f69cde 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextHistoryService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextHistoryService.java @@ -3,9 +3,8 @@ import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.ParsingTextHistoryUseCase; -import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.ParsingTextCommand; import com.plzgraduate.myongjigraduatebe.parsing.application.port.SaveParsingTextHistoryPort; +import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.ParsingTextHistoryUseCase; import com.plzgraduate.myongjigraduatebe.parsing.domain.ParsingTextHistory; import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @@ -23,16 +22,14 @@ class ParsingTextHistoryService implements ParsingTextHistoryUseCase { private final FindUserUseCase findUserUseCase; @Override - public void saveParsingTextHistoryIfSuccess(ParsingTextCommand parsingTextCommand) { - String parsingText = parsingTextCommand.getParsingText(); - User user = findUserUseCase.findUserById(parsingTextCommand.getUserId()); + public void generateSucceedParsingTextHistory(Long userId, String parsingText) { + User user = findUserUseCase.findUserById(userId); saveParsingTextHistoryPort.saveParsingTextHistory(ParsingTextHistory.success(user, parsingText)); } @Override - public void saveParsingTextHistoryIfFail(ParsingTextCommand parsingTextCommand) { - String parsingText = parsingTextCommand.getParsingText(); - User user = findUserUseCase.findUserById(parsingTextCommand.getUserId()); + public void generateFailedParsingTextHistory(Long userId, String parsingText) { + User user = findUserUseCase.findUserById(userId); saveParsingTextHistoryPort.saveParsingTextHistory(ParsingTextHistory.fail(user, parsingText)); } } 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 edad5088..025ac025 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,6 +1,8 @@ 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.CHANGE_MAJOR; +import static com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory.NORMAL; +import static com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory.SUB_MAJOR; import java.util.List; import java.util.stream.Collectors; @@ -11,15 +13,14 @@ import com.plzgraduate.myongjigraduatebe.core.exception.PdfParsingException; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.ParsingTextUseCase; -import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.ParsingTextCommand; import com.plzgraduate.myongjigraduatebe.parsing.domain.ParsingInformation; import com.plzgraduate.myongjigraduatebe.parsing.domain.ParsingTakenLectureDto; import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.delete.DeleteTakenLectureByUserUseCase; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.save.SaveTakenLectureCommand; import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.save.SaveTakenLectureFromParsingTextUseCase; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInformation; import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.usecase.update.UpdateStudentInformationUseCase; import com.plzgraduate.myongjigraduatebe.user.application.usecase.update.UpdateStudentInformationCommand; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.update.UpdateStudentInformationUseCase; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; @@ -37,9 +38,8 @@ class ParsingTextService implements ParsingTextUseCase { private final DeleteTakenLectureByUserUseCase deleteTakenLectureByUserUseCase; @Override - public void enrollParsingText(ParsingTextCommand parsingTextCommand) { - String parsingText = parsingTextCommand.getParsingText(); - User user = findUserUseCase.findUserById(parsingTextCommand.getUserId()); + public void enrollParsingText(Long userId, String parsingText) { + User user = findUserUseCase.findUserById(userId); try { validateParsingText(parsingText); ParsingInformation parsingInformation = ParsingInformation.parsing(parsingText); @@ -61,9 +61,9 @@ private void deleteTakenLecturesIfAlreadyEnrolled(User user) { private void saveTakenLectures(User user, ParsingInformation parsingInformation) { List parsingTakenLectureDtoList = parsingInformation.getTakenLectureInformation(); - SaveTakenLectureCommand saveTakenLectureCommand = getSaveTakenLectureCommand( - user, parsingTakenLectureDtoList); - saveTakenLectureFromParsingTextUseCase.saveTakenLectures(saveTakenLectureCommand); + List saveTakenLectureCommand = getSaveTakenLectureCommand(user, + parsingTakenLectureDtoList); + saveTakenLectureFromParsingTextUseCase.saveTakenLectures(user, saveTakenLectureCommand); } private void updateUser(User user, ParsingInformation parsingInformation) { @@ -86,17 +86,16 @@ private void validateStudentNumber(User user, ParsingInformation parsingInformat } } - private SaveTakenLectureCommand getSaveTakenLectureCommand(User user, + private List getSaveTakenLectureCommand(User user, List parsingTakenLectureDtoList) { - List takenLectureInformationList = parsingTakenLectureDtoList.stream() + return parsingTakenLectureDtoList.stream() .map(parsingTakenLectureDto -> - SaveTakenLectureCommand.createTakenLectureInformation( + TakenLectureInformation.createTakenLectureInformation( parsingTakenLectureDto.getLectureCode(), parsingTakenLectureDto.getYear(), parsingTakenLectureDto.getSemester()) ) .collect(Collectors.toList()); - return SaveTakenLectureCommand.of(user, takenLectureInformationList); } private void checkIfNormal(ParsingInformation parsingInformation) { diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/usecase/ParsingTextCommand.java b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/usecase/ParsingTextCommand.java deleted file mode 100644 index 0d1a1d65..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/usecase/ParsingTextCommand.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.parsing.application.usecase; - -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@NoArgsConstructor -public class ParsingTextCommand { - private Long userId; - - private String parsingText; - - @Builder - private ParsingTextCommand(Long userId, String parsingText) { - this.userId = userId; - this.parsingText = parsingText; - } -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/usecase/ParsingTextHistoryUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/usecase/ParsingTextHistoryUseCase.java index 5c3f472b..d7c3b6d2 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/usecase/ParsingTextHistoryUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/usecase/ParsingTextHistoryUseCase.java @@ -1,7 +1,7 @@ package com.plzgraduate.myongjigraduatebe.parsing.application.usecase; public interface ParsingTextHistoryUseCase { - void saveParsingTextHistoryIfSuccess(ParsingTextCommand parsingTextCommand); + void generateSucceedParsingTextHistory(Long userId, String parsingText); - void saveParsingTextHistoryIfFail(ParsingTextCommand parsingTextCommand); + void generateFailedParsingTextHistory(Long userId, String parsingText); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/usecase/ParsingTextUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/usecase/ParsingTextUseCase.java index ace543ae..08eda245 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/usecase/ParsingTextUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/usecase/ParsingTextUseCase.java @@ -2,5 +2,5 @@ public interface ParsingTextUseCase { - void enrollParsingText(ParsingTextCommand parsingTextCommand); + void enrollParsingText(Long userId, String parsingText); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/FindTakenLectureApiPresentation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/FindTakenLectureApiPresentation.java index 211fc285..a14e7cc6 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/FindTakenLectureApiPresentation.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/FindTakenLectureApiPresentation.java @@ -1,7 +1,7 @@ package com.plzgraduate.myongjigraduatebe.takenlecture.api; import com.plzgraduate.myongjigraduatebe.core.meta.LoginUser; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureResponse; +import com.plzgraduate.myongjigraduatebe.takenlecture.api.dto.response.FindTakenLectureResponse; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/FindTakenLectureController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/FindTakenLectureController.java index e4d38f54..8b06749e 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/FindTakenLectureController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/FindTakenLectureController.java @@ -5,8 +5,9 @@ import com.plzgraduate.myongjigraduatebe.core.meta.LoginUser; import com.plzgraduate.myongjigraduatebe.core.meta.WebAdapter; +import com.plzgraduate.myongjigraduatebe.takenlecture.api.dto.response.FindTakenLectureResponse; import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureUseCase; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureResponse; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; import lombok.RequiredArgsConstructor; @@ -19,6 +20,7 @@ public class FindTakenLectureController implements FindTakenLectureApiPresentati @GetMapping public FindTakenLectureResponse getTakenLectures(@LoginUser Long userId) { - return findTakenLectureUseCase.getTakenLectures(userId); + TakenLectureInventory takenLectures = findTakenLectureUseCase.findTakenLectures(userId); + return FindTakenLectureResponse.from(takenLectures); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/UpdateTakenLectureController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/UpdateTakenLectureController.java index a803ae75..9c78b296 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/UpdateTakenLectureController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/UpdateTakenLectureController.java @@ -20,8 +20,10 @@ public class UpdateTakenLectureController implements UpdateTakenLectureApiPresen private final UpdateTakenLectureUseCase updateTakenLectureUseCase; @PostMapping("/update") - public void updateTakenLectures(@LoginUser Long userId, @Valid @RequestBody UpdateTakenLectureRequest updateTakenLectureRequest) { - updateTakenLectureUseCase.updateTakenLecture(updateTakenLectureRequest.toCommand(userId)); + public void updateTakenLectures(@LoginUser Long userId, + @Valid @RequestBody UpdateTakenLectureRequest updateTakenLectureRequest) { + updateTakenLectureUseCase.modifyTakenLecture(userId, updateTakenLectureRequest.getDeletedTakenLectures(), + updateTakenLectureRequest.getAddedTakenLectures()); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/dto/request/UpdateTakenLectureRequest.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/dto/request/UpdateTakenLectureRequest.java index aeac016d..0836bf63 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/dto/request/UpdateTakenLectureRequest.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/dto/request/UpdateTakenLectureRequest.java @@ -2,8 +2,6 @@ import java.util.List; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.update.UpdateTakenLectureCommand; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; import lombok.Getter; @@ -25,11 +23,4 @@ private UpdateTakenLectureRequest(List deletedTakenLectures, List ad this.addedTakenLectures = addedTakenLectures; } - public UpdateTakenLectureCommand toCommand(Long userId) { - return UpdateTakenLectureCommand.builder() - .userId(userId) - .deletedTakenLectures(deletedTakenLectures) - .addedTakenLectures(addedTakenLectures) - .build(); - } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/dto/response/FindTakenLectureResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/dto/response/FindTakenLectureResponse.java new file mode 100644 index 00000000..ebe76940 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/dto/response/FindTakenLectureResponse.java @@ -0,0 +1,41 @@ +package com.plzgraduate.myongjigraduatebe.takenlecture.api.dto.response; + +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; + +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +public class FindTakenLectureResponse { + + @Schema(name = "totalCredit", example = "115") + private int totalCredit; + private List takenLectures; + + @Builder + private FindTakenLectureResponse(int totalCredit, List takenLectures) { + this.totalCredit = totalCredit; + this.takenLectures = takenLectures; + } + + public static FindTakenLectureResponse from(TakenLectureInventory takenLectureInventory) { + return FindTakenLectureResponse.builder() + .totalCredit(takenLectureInventory.calculateTotalCredit()) + .takenLectures(takenLectureInventory.getTakenLectures().stream() + .sorted(Comparator.comparing(TakenLecture::getYear, Collections.reverseOrder()) + .thenComparing(TakenLecture::getSemester, Comparator.nullsFirst(Comparator.reverseOrder())) + .thenComparing(TakenLecture::getCreatedAt, Comparator.reverseOrder())) + .map(TakenLectureResponse::from) + .collect(Collectors.toList())) + .build(); + } +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/find/TakenLectureResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/dto/response/TakenLectureResponse.java similarity index 94% rename from src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/find/TakenLectureResponse.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/dto/response/TakenLectureResponse.java index bdc28d17..3413bf26 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/find/TakenLectureResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/dto/response/TakenLectureResponse.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find; +package com.plzgraduate.myongjigraduatebe.takenlecture.api.dto.response; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/find/FindTakenLectureService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/find/FindTakenLectureService.java index 97346844..4644d888 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/find/FindTakenLectureService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/find/FindTakenLectureService.java @@ -1,18 +1,15 @@ package com.plzgraduate.myongjigraduatebe.takenlecture.application.service.find; -import java.util.Collections; -import java.util.Comparator; +import java.util.HashSet; import java.util.List; -import java.util.stream.Collectors; import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureUseCase; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureResponse; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.TakenLectureResponse; import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.FindTakenLecturePort; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureUseCase; 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.User; @@ -28,40 +25,9 @@ class FindTakenLectureService implements FindTakenLectureUseCase { private final FindTakenLecturePort findTakenLecturePort; @Override - public FindTakenLectureResponse getTakenLectures(Long userId) { + public TakenLectureInventory findTakenLectures(Long userId) { User user = findUserUseCase.findUserById(userId); List takenLectures = findTakenLecturePort.findTakenLecturesByUser(user); - sortTakenLectures(takenLectures); - return FindTakenLectureResponse.of( - calculateTotalCredit(takenLectures), - takenLectures.stream() - .map(TakenLectureResponse::from) - .collect(Collectors.toList()) - ); - } - - private void sortTakenLectures(List takenLectures) { - takenLectures.sort(Comparator.comparing(TakenLecture::getYear, Collections.reverseOrder()) - .thenComparing(TakenLecture::getSemester, Comparator.nullsFirst(Comparator.reverseOrder())) - .thenComparing(TakenLecture::getCreatedAt, Comparator.reverseOrder())); - } - - private int calculateTotalCredit(List takenLectures) { - int totalCredit = takenLectures - .stream() - .mapToInt(takenLecture -> takenLecture.getLecture().getCredit()) - .sum(); - if(checkChapelCountIsFour(takenLectures)) { - totalCredit += 2; - } - return totalCredit; - } - - private boolean checkChapelCountIsFour(List takenLectures) { - long chapelCount = takenLectures - .stream() - .filter(takenLecture -> takenLecture.getLecture().getLectureCode().equals("KMA02101")) - .count(); - return chapelCount >= 4; + return TakenLectureInventory.from(new HashSet<>(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 3b979aab..6ac719aa 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 @@ -9,12 +9,12 @@ import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.FindLecturesByLectureCodeUseCase; +import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.FindLecturesUseCase; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.save.SaveTakenLectureCommand; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.save.SaveTakenLectureFromParsingTextUseCase; import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.SaveTakenLecturePort; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.save.SaveTakenLectureFromParsingTextUseCase; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInformation; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; @@ -25,39 +25,39 @@ class SaveTakenLectureFromParsingTextService implements SaveTakenLectureFromParsingTextUseCase { private final SaveTakenLecturePort saveTakenLecturePort; - private final FindLecturesByLectureCodeUseCase findLecturesByLectureCodeUseCase; + private final FindLecturesUseCase findLecturesUseCase; @Override - public void saveTakenLectures(SaveTakenLectureCommand saveTakenLectureCommand){ - User user = saveTakenLectureCommand.getUser(); - List takenLectureInformationList = saveTakenLectureCommand.getTakenLectureInformationList(); + public void saveTakenLectures(User user, List takenLectureInformationList) { Map lectureMap = makeLectureMapByLectureCodes(takenLectureInformationList); List takenLectures = makeTakenLectures(user, takenLectureInformationList, lectureMap); saveTakenLecturePort.saveTakenLectures(takenLectures); } - private List makeTakenLectures(User user, - List takenLectureInformationList, + private List makeTakenLectures(User user, List takenLectureInformationList, Map lectureMap) { return takenLectureInformationList.stream().map( takenLectureInformation -> { Lecture lecture = getLectureFromLectureMap(lectureMap, takenLectureInformation); - return TakenLecture.of(user, lecture, takenLectureInformation.getYear(), takenLectureInformation.getSemester()); + return TakenLecture.of(user, lecture, takenLectureInformation.getYear(), + takenLectureInformation.getSemester()); } ).collect(Collectors.toList()); } private Lecture getLectureFromLectureMap(Map lectureMap, - SaveTakenLectureCommand.TakenLectureInformation takenLectureInformation) { + TakenLectureInformation takenLectureInformation) { return Optional.ofNullable(lectureMap.get(takenLectureInformation.getLectureCode())) - .orElseThrow(() -> new IllegalArgumentException(takenLectureInformation.getLectureCode() + "이 데이터베이스에 존재하지 않습니다.")); + .orElseThrow( + () -> new IllegalArgumentException(takenLectureInformation.getLectureCode() + "이 데이터베이스에 존재하지 않습니다.")); } - private Map makeLectureMapByLectureCodes(List takenLectureInformationList) { + private Map makeLectureMapByLectureCodes( + List takenLectureInformationList) { List lectureCodes = takenLectureInformationList.stream() - .map(SaveTakenLectureCommand.TakenLectureInformation::getLectureCode) + .map(TakenLectureInformation::getLectureCode) .collect(Collectors.toList()); - List lectures = findLecturesByLectureCodeUseCase.findLecturesByLectureCodes(lectureCodes); + List lectures = findLecturesUseCase.findLecturesByLectureCodes(lectureCodes); return lectures.stream() .collect(Collectors.toMap(Lecture::getLectureCode, Function.identity())); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/update/UpdateTakenLectureService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/update/UpdateTakenLectureService.java index b67cd397..3f2ccea9 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/update/UpdateTakenLectureService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/update/UpdateTakenLectureService.java @@ -6,9 +6,8 @@ import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.FindLecturesByIdUseCase; +import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.FindLecturesUseCase; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.update.UpdateTakenLectureCommand; import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.update.UpdateTakenLectureUseCase; import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.DeleteTakenLecturePort; import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.SaveTakenLecturePort; @@ -24,16 +23,15 @@ class UpdateTakenLectureService implements UpdateTakenLectureUseCase { private final FindUserUseCase findUserUseCase; - private final FindLecturesByIdUseCase findLecturesByIdUseCase; + private final FindLecturesUseCase findLecturesUseCase; private final DeleteTakenLecturePort deleteTakenLecturePort; private final SaveTakenLecturePort saveTakenLecturePort; @Override - public void updateTakenLecture(UpdateTakenLectureCommand updateTakenLectureCommand) { - Long userId = updateTakenLectureCommand.getUserId(); + public void modifyTakenLecture(Long userId, List deletedTakenLectureIds, List addedTakenLectureIds) { User user = findUserUseCase.findUserById(userId); - deleteTakenLectures(updateTakenLectureCommand); - List addedLectures = findAddedLecturesByIds(updateTakenLectureCommand); + deleteTakenLecturePort.deleteTakenLecturesByIds(deletedTakenLectureIds); + List addedLectures = findLecturesUseCase.findLecturesByIds(addedTakenLectureIds); addCustomTakenLectures(user, addedLectures); } @@ -43,14 +41,4 @@ private void addCustomTakenLectures(User user, List addedLectures) { .collect(Collectors.toList()); saveTakenLecturePort.saveTakenLectures(addedTakenLectures); } - - private List findAddedLecturesByIds(UpdateTakenLectureCommand updateTakenLectureCommand) { - List addedLectureIds = updateTakenLectureCommand.getAddedTakenLectures(); - return findLecturesByIdUseCase.findLecturesByIds(addedLectureIds); - } - - private void deleteTakenLectures(UpdateTakenLectureCommand updateTakenLectureCommand) { - List deletedTakenLectureIds = updateTakenLectureCommand.getDeletedTakenLectures(); - deleteTakenLecturePort.deleteTakenLecturesByIds(deletedTakenLectureIds); - } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/find/FindTakenLectureResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/find/FindTakenLectureResponse.java deleted file mode 100644 index ee6fea4d..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/find/FindTakenLectureResponse.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find; - -import java.util.List; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@NoArgsConstructor -public class FindTakenLectureResponse { - - @Schema(name = "totalCredit", example = "115") - private int totalCredit; - private List takenLectures; - - @Builder - private FindTakenLectureResponse(int totalCredit, List takenLectures) { - this.totalCredit = totalCredit; - this.takenLectures = takenLectures; - } - - public static FindTakenLectureResponse of(int totalCredit, List takenLectures) { - return FindTakenLectureResponse.builder() - .totalCredit(totalCredit) - .takenLectures(takenLectures) - .build(); - } -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/find/FindTakenLectureUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/find/FindTakenLectureUseCase.java index c161479b..0d3912c5 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/find/FindTakenLectureUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/find/FindTakenLectureUseCase.java @@ -1,5 +1,7 @@ package com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; + public interface FindTakenLectureUseCase { - FindTakenLectureResponse getTakenLectures(Long userId); + TakenLectureInventory findTakenLectures(Long userId); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/save/SaveTakenLectureCommand.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/save/SaveTakenLectureCommand.java deleted file mode 100644 index 4c88b9ae..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/save/SaveTakenLectureCommand.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.save; - -import java.util.List; - -import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.Semester; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; - -import lombok.Builder; -import lombok.Getter; - -@Getter -public class SaveTakenLectureCommand { - private final User user; - private final List takenLectureInformationList; - - @Builder - private SaveTakenLectureCommand(User user, List takenLectureInformationList) { - this.user = user; - this.takenLectureInformationList = takenLectureInformationList; - } - - public static SaveTakenLectureCommand of(User user, List takenLectureInformationList) { - return SaveTakenLectureCommand.builder() - .user(user) - .takenLectureInformationList(takenLectureInformationList) - .build(); - } - - public static TakenLectureInformation createTakenLectureInformation(String lectureCode, int year, Semester semester) { - return TakenLectureInformation.builder() - .lectureCode(lectureCode) - .year(year) - .semester(semester) - .build(); - } - - @Getter - public static class TakenLectureInformation { - private final String lectureCode; - private final int year; - private final Semester semester; - - @Builder - private TakenLectureInformation(String lectureCode, int year, Semester semester) { - this.lectureCode = lectureCode; - this.year = year; - this.semester = semester; - } - } -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/save/SaveTakenLectureFromParsingTextUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/save/SaveTakenLectureFromParsingTextUseCase.java index 625584a9..cac9442a 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/save/SaveTakenLectureFromParsingTextUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/save/SaveTakenLectureFromParsingTextUseCase.java @@ -1,6 +1,11 @@ package com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.save; +import java.util.List; + +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInformation; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + public interface SaveTakenLectureFromParsingTextUseCase { - void saveTakenLectures(SaveTakenLectureCommand saveTakenLectureCommand); + void saveTakenLectures(User user, List takenLectureInformationList); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/update/UpdateTakenLectureCommand.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/update/UpdateTakenLectureCommand.java deleted file mode 100644 index 99bf4b26..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/update/UpdateTakenLectureCommand.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.update; - -import java.util.List; - -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@NoArgsConstructor -public class UpdateTakenLectureCommand { - private Long userId; - private List deletedTakenLectures; - private List addedTakenLectures; - - @Builder - private UpdateTakenLectureCommand(Long userId, List deletedTakenLectures, List addedTakenLectures) { - this.userId = userId; - this.deletedTakenLectures = deletedTakenLectures; - this.addedTakenLectures = addedTakenLectures; - } -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/update/UpdateTakenLectureUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/update/UpdateTakenLectureUseCase.java index f8168c7c..5a193906 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/update/UpdateTakenLectureUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/update/UpdateTakenLectureUseCase.java @@ -1,6 +1,10 @@ package com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.update; +import java.util.List; + +import lombok.extern.java.Log; + public interface UpdateTakenLectureUseCase { - void updateTakenLecture(UpdateTakenLectureCommand updateTakenLectureCommand); + void modifyTakenLecture(Long userId, List deletedTakenLectureIds, List addedTakenLectureIds); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/domain/model/TakenLectureInformation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/domain/model/TakenLectureInformation.java new file mode 100644 index 00000000..d45a0546 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/domain/model/TakenLectureInformation.java @@ -0,0 +1,27 @@ +package com.plzgraduate.myongjigraduatebe.takenlecture.domain.model; + +import lombok.Builder; +import lombok.Getter; + +@Getter +public class TakenLectureInformation { + + private final String lectureCode; + private final int year; + private final Semester semester; + + @Builder + private TakenLectureInformation(String lectureCode, int year, Semester semester) { + this.lectureCode = lectureCode; + this.year = year; + this.semester = semester; + } + + public static TakenLectureInformation createTakenLectureInformation(String lectureCode, int year, Semester semester) { + return TakenLectureInformation.builder() + .lectureCode(lectureCode) + .year(year) + .semester(semester) + .build(); + } +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/domain/model/TakenLectureInventory.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/domain/model/TakenLectureInventory.java index 56e8bd91..9158e7d5 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/domain/model/TakenLectureInventory.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/domain/model/TakenLectureInventory.java @@ -25,13 +25,32 @@ public Set getCultureLectures() { .collect(Collectors.toSet()); } - public void handleFinishedTakenLectures(Set finishedTakenLecture) { - takenLecture.removeAll(finishedTakenLecture); - } - public static TakenLectureInventory from(Set takenLectures) { return TakenLectureInventory.builder() .takenLecture(takenLectures) .build(); } + + public void handleFinishedTakenLectures(Set finishedTakenLecture) { + takenLecture.removeAll(finishedTakenLecture); + } + + public int calculateTotalCredit() { + int totalCredit = this.takenLecture + .stream() + .mapToInt(takenLecture -> takenLecture.getLecture().getCredit()) + .sum(); + if(checkChapelCountIsFour(this.takenLecture)) { + totalCredit += 2; + } + return totalCredit; + } + + private boolean checkChapelCountIsFour(Set takenLectures) { + long chapelCount = takenLectures + .stream() + .filter(takenLecture -> takenLecture.getLecture().getLectureCode().equals("KMA02101")) + .count(); + return chapelCount >= 4; + } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdController.java index 5ab85958..31154e3a 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdController.java @@ -19,6 +19,7 @@ public class FindAuthIdController implements FindAuthIdApiPresentation { @GetMapping("/{student-number}/auth-id") public UserAuthIdResponse findUserAuthId(@PathVariable("student-number") String studentNumber) { - return findUserAuthIdUseCase.findUserAuthId(studentNumber); + String foundUserAuthId = findUserAuthIdUseCase.findUserAuthId(studentNumber); + return UserAuthIdResponse.of(foundUserAuthId, studentNumber); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/finduserinformation/FindUserInformationController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/finduserinformation/FindUserInformationController.java index 72a4edd3..9a04f5da 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/finduserinformation/FindUserInformationController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/finduserinformation/FindUserInformationController.java @@ -7,6 +7,7 @@ import com.plzgraduate.myongjigraduatebe.core.meta.WebAdapter; import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserInformationUseCase; import com.plzgraduate.myongjigraduatebe.user.api.finduserinformation.dto.response.UserInformationResponse; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; @@ -19,6 +20,7 @@ public class FindUserInformationController implements FindUserInformationApiPres @GetMapping public UserInformationResponse getUserInformation(@LoginUser Long userId) { - return findUserInformationUseCase.findUserInformation(userId); + User user = findUserInformationUseCase.findUserInformation(userId); + return UserInformationResponse.from(user); } } 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 abed479c..38e5717c 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 @@ -1,5 +1,7 @@ package com.plzgraduate.myongjigraduatebe.user.api.finduserinformation.dto.response; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; import lombok.Getter; @@ -20,4 +22,11 @@ private UserInformationResponse(String studentNumber, String studentName, String this.studentName = studentName; this.major = major; } + + public static UserInformationResponse from(User user) { + return UserInformationResponse.builder() + .studentNumber(user.getStudentNumber()) + .studentName(user.getName()) + .major(user.getMajor()).build(); + } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordApiPresentation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordApiPresentation.java index 9e44f12b..507f7913 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordApiPresentation.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordApiPresentation.java @@ -7,6 +7,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; +import com.plzgraduate.myongjigraduatebe.user.api.resetpassword.dto.request.ResetPasswordRequest; import com.plzgraduate.myongjigraduatebe.user.api.resetpassword.dto.response.ValidateUserResponse; import io.swagger.v3.oas.annotations.Operation; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordController.java index c2d8f909..0ef71b1d 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordController.java @@ -10,6 +10,7 @@ import org.springframework.web.bind.annotation.RequestParam; import com.plzgraduate.myongjigraduatebe.core.meta.WebAdapter; +import com.plzgraduate.myongjigraduatebe.user.api.resetpassword.dto.request.ResetPasswordRequest; import com.plzgraduate.myongjigraduatebe.user.application.usecase.resetpassword.ResetPasswordUseCase; import com.plzgraduate.myongjigraduatebe.user.api.resetpassword.dto.response.ValidateUserResponse; import com.plzgraduate.myongjigraduatebe.user.application.usecase.validate.ValidateUserUseCase; @@ -28,11 +29,13 @@ public class ResetPasswordController implements ResetPasswordApiPresentation { public ValidateUserResponse validateUser( @PathVariable("student-number") String studentNumber, @RequestParam("auth-id") String authId) { - return validateUserUseCase.validateUser(studentNumber, authId); + boolean validated = validateUserUseCase.validateUser(studentNumber, authId); + return ValidateUserResponse.builder().passedUserValidation(validated).build(); } @PatchMapping("/password") public void resetPassword(@Valid @RequestBody ResetPasswordRequest resetPasswordRequest) { - resetPasswordUseCase.resetPassword(resetPasswordRequest.toCommand()); + resetPasswordUseCase.resetPassword(resetPasswordRequest.getAuthId(), resetPasswordRequest.getNewPassword(), + resetPasswordRequest.getPasswordCheck()); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordRequest.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/dto/request/ResetPasswordRequest.java similarity index 82% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordRequest.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/dto/request/ResetPasswordRequest.java index 6aaa1d2f..957eafb9 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordRequest.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/dto/request/ResetPasswordRequest.java @@ -1,10 +1,8 @@ -package com.plzgraduate.myongjigraduatebe.user.api.resetpassword; +package com.plzgraduate.myongjigraduatebe.user.api.resetpassword.dto.request; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Pattern; -import com.plzgraduate.myongjigraduatebe.user.application.usecase.resetpassword.ResetPasswordCommand; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; import lombok.Getter; @@ -35,10 +33,4 @@ private ResetPasswordRequest(String authId, String newPassword, String passwordC this.passwordCheck = passwordCheck; } - public ResetPasswordCommand toCommand() { - return ResetPasswordCommand.builder() - .authId(authId) - .newPassword(newPassword) - .passwordCheck(passwordCheck).build(); - } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpApiPresentation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpApiPresentation.java index 49825dbe..ede116ee 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpApiPresentation.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpApiPresentation.java @@ -5,6 +5,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; +import com.plzgraduate.myongjigraduatebe.user.api.signup.dto.request.SignUpRequest; import com.plzgraduate.myongjigraduatebe.user.api.signup.dto.response.AuthIdDuplicationResponse; import com.plzgraduate.myongjigraduatebe.user.api.signup.dto.response.StudentNumberDuplicationResponse; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpController.java index e8f2fc18..66c2b8cf 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpController.java @@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.RequestParam; import com.plzgraduate.myongjigraduatebe.core.meta.WebAdapter; +import com.plzgraduate.myongjigraduatebe.user.api.signup.dto.request.SignUpRequest; import com.plzgraduate.myongjigraduatebe.user.api.signup.dto.response.AuthIdDuplicationResponse; import com.plzgraduate.myongjigraduatebe.user.application.usecase.check.CheckAuthIdDuplicationUseCase; import com.plzgraduate.myongjigraduatebe.user.application.usecase.check.CheckStudentNumberDuplicationUseCase; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpRequest.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/dto/request/SignUpRequest.java similarity index 96% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpRequest.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/dto/request/SignUpRequest.java index 8d992623..e7943142 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpRequest.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/dto/request/SignUpRequest.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.user.api.signup; +package com.plzgraduate.myongjigraduatebe.user.api.signup.dto.request; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Pattern; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/WithDrawApiPresentation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/WithDrawApiPresentation.java index ca84d557..ef62b832 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/WithDrawApiPresentation.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/WithDrawApiPresentation.java @@ -3,6 +3,7 @@ import org.springframework.web.bind.annotation.RequestBody; import com.plzgraduate.myongjigraduatebe.core.meta.LoginUser; +import com.plzgraduate.myongjigraduatebe.user.api.withdraw.dto.request.WithDrawRequest; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/WithDrawController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/WithDrawController.java index 3b09918b..a7f3fc1c 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/WithDrawController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/WithDrawController.java @@ -6,6 +6,7 @@ import com.plzgraduate.myongjigraduatebe.core.meta.LoginUser; import com.plzgraduate.myongjigraduatebe.core.meta.WebAdapter; +import com.plzgraduate.myongjigraduatebe.user.api.withdraw.dto.request.WithDrawRequest; import com.plzgraduate.myongjigraduatebe.user.application.usecase.withdraw.WithDrawUserUseCase; import lombok.RequiredArgsConstructor; @@ -19,6 +20,6 @@ public class WithDrawController implements WithDrawApiPresentation { @DeleteMapping() public void withDraw(@LoginUser Long userId, @RequestBody WithDrawRequest withDrawRequest) { - withDrawUserUseCase.withDraw(userId, withDrawRequest.toCommand()); + withDrawUserUseCase.withDraw(userId, withDrawRequest.getPassword()); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/WithDrawRequest.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/dto/request/WithDrawRequest.java similarity index 63% rename from src/main/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/WithDrawRequest.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/dto/request/WithDrawRequest.java index 52d07b32..637fb121 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/WithDrawRequest.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/dto/request/WithDrawRequest.java @@ -1,8 +1,7 @@ -package com.plzgraduate.myongjigraduatebe.user.api.withdraw; +package com.plzgraduate.myongjigraduatebe.user.api.withdraw.dto.request; import javax.validation.constraints.NotBlank; -import com.plzgraduate.myongjigraduatebe.user.application.usecase.withdraw.WithDrawCommand; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; @@ -22,8 +21,4 @@ private WithDrawRequest(String password) { this.password = password; } - public WithDrawCommand toCommand() { - return WithDrawCommand.builder() - .password(this.password).build(); - } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserAuthIdService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserAuthIdService.java index bec5a254..2856c9a1 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserAuthIdService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserAuthIdService.java @@ -5,7 +5,6 @@ import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserAuthIdUseCase; import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.api.findauthid.dto.response.UserAuthIdResponse; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; @@ -18,8 +17,8 @@ class FindUserAuthIdService implements FindUserAuthIdUseCase { private final FindUserUseCase findUserUseCase; @Override - public UserAuthIdResponse findUserAuthId(String studentNumber) { + public String findUserAuthId(String studentNumber) { User user = findUserUseCase.findUserByStudentNumber(studentNumber); - return UserAuthIdResponse.of(user.getEncryptedAuthId(), studentNumber); + return user.getEncryptedAuthId(); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserInformationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserInformationService.java index 866f5c82..7fe06069 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserInformationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserInformationService.java @@ -5,7 +5,6 @@ import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserInformationUseCase; import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.api.finduserinformation.dto.response.UserInformationResponse; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; @@ -17,11 +16,7 @@ class FindUserInformationService implements FindUserInformationUseCase { private final FindUserUseCase findUserUseCase; @Override - public UserInformationResponse findUserInformation(Long userId) { - User user = findUserUseCase.findUserById(userId); - return UserInformationResponse.builder() - .studentName(user.getName()) - .studentNumber(user.getStudentNumber()) - .major(user.getMajor()).build(); + public User findUserInformation(Long userId) { + return findUserUseCase.findUserById(userId); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/resetpassword/ResetPasswordService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/resetpassword/ResetPasswordService.java index 6526cac1..4c305487 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/resetpassword/ResetPasswordService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/resetpassword/ResetPasswordService.java @@ -4,10 +4,9 @@ import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; +import com.plzgraduate.myongjigraduatebe.user.application.port.UpdateUserPort; import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.usecase.resetpassword.ResetPasswordCommand; import com.plzgraduate.myongjigraduatebe.user.application.usecase.resetpassword.ResetPasswordUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.UpdateUserPort; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; @@ -22,15 +21,15 @@ class ResetPasswordService implements ResetPasswordUseCase { private final PasswordEncoder passwordEncoder; @Override - public void resetPassword(ResetPasswordCommand resetPasswordCommand) { - checkMatchPassword(resetPasswordCommand); - User user = findUserUseCase.findUserByAuthId(resetPasswordCommand.getAuthId()); - user.resetPassword(passwordEncoder.encode(resetPasswordCommand.getNewPassword())); + public void resetPassword(String authId, String newPassword, String passwordCheck) { + checkMatchPassword(newPassword, passwordCheck); + User user = findUserUseCase.findUserByAuthId(authId); + user.resetPassword(passwordEncoder.encode(newPassword)); updateUserPort.updateUser(user); } - private static void checkMatchPassword(ResetPasswordCommand resetPasswordCommand) { - if (!resetPasswordCommand.getNewPassword().equals(resetPasswordCommand.getPasswordCheck())) { + private void checkMatchPassword(String newPassword,String passwordCheck) { + if (!newPassword.equals(passwordCheck)) { throw new IllegalArgumentException("비밀번호와 비밀번호 확인이 일치하지 않습니다."); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/validate/ValidateUserService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/validate/ValidateUserService.java index fae31780..bf642923 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/validate/ValidateUserService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/validate/ValidateUserService.java @@ -4,7 +4,6 @@ import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.api.resetpassword.dto.response.ValidateUserResponse; import com.plzgraduate.myongjigraduatebe.user.application.usecase.validate.ValidateUserUseCase; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @@ -17,10 +16,8 @@ class ValidateUserService implements ValidateUserUseCase { private final FindUserUseCase findUserUseCase; @Override - public ValidateUserResponse validateUser(String studentNumber, String authId) { + public boolean validateUser(String studentNumber, String authId) { User user = findUserUseCase.findUserByStudentNumber(studentNumber); - boolean validateAuthIdResult = user.isMyAuthId(authId); - return ValidateUserResponse.builder() - .passedUserValidation(validateAuthIdResult).build(); + return user.isMyAuthId(authId); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserService.java index 448dbaca..88097858 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserService.java @@ -6,10 +6,9 @@ import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; import com.plzgraduate.myongjigraduatebe.parsing.application.port.DeleteParsingTextHistoryPort; import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.delete.DeleteTakenLectureByUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.application.port.DeleteUserPort; import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.usecase.withdraw.WithDrawCommand; import com.plzgraduate.myongjigraduatebe.user.application.usecase.withdraw.WithDrawUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.port.DeleteUserPort; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; @@ -26,9 +25,9 @@ class WithDrawUserService implements WithDrawUserUseCase { private final PasswordEncoder passwordEncoder; @Override - public void withDraw(Long userId, WithDrawCommand withDrawCommand) { + public void withDraw(Long userId, String password) { User user = findUserUseCase.findUserById(userId); - user.matchPassword(passwordEncoder, withDrawCommand.getPassword()); + user.matchPassword(passwordEncoder, password); deleteTakenLectureByUserUseCase.deleteAllTakenLecturesByUser(user); deleteParsingTextHistoryPort.deleteUserParsingTextHistory(user); deleteUserPort.deleteUser(user); diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/find/FindUserAuthIdUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/find/FindUserAuthIdUseCase.java index 38b70381..b7ed0bba 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/find/FindUserAuthIdUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/find/FindUserAuthIdUseCase.java @@ -1,8 +1,6 @@ package com.plzgraduate.myongjigraduatebe.user.application.usecase.find; -import com.plzgraduate.myongjigraduatebe.user.api.findauthid.dto.response.UserAuthIdResponse; - public interface FindUserAuthIdUseCase { - UserAuthIdResponse findUserAuthId(String studentNumber); + String findUserAuthId(String studentNumber); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/find/FindUserInformationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/find/FindUserInformationUseCase.java index f664aa4a..82d9c6e4 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/find/FindUserInformationUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/find/FindUserInformationUseCase.java @@ -1,8 +1,8 @@ package com.plzgraduate.myongjigraduatebe.user.application.usecase.find; -import com.plzgraduate.myongjigraduatebe.user.api.finduserinformation.dto.response.UserInformationResponse; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; public interface FindUserInformationUseCase { - UserInformationResponse findUserInformation(Long userId); + User findUserInformation(Long userId); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/resetpassword/ResetPasswordCommand.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/resetpassword/ResetPasswordCommand.java deleted file mode 100644 index 2a2ae234..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/resetpassword/ResetPasswordCommand.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.user.application.usecase.resetpassword; - -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@NoArgsConstructor -public class ResetPasswordCommand { - - private String authId; - - private String newPassword; - - private String passwordCheck; - - @Builder - private ResetPasswordCommand(String authId, String newPassword, String passwordCheck) { - this.authId = authId; - this.newPassword = newPassword; - this.passwordCheck = passwordCheck; - } -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/resetpassword/ResetPasswordUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/resetpassword/ResetPasswordUseCase.java index c727b560..c3dcb412 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/resetpassword/ResetPasswordUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/resetpassword/ResetPasswordUseCase.java @@ -2,5 +2,5 @@ public interface ResetPasswordUseCase { - void resetPassword(ResetPasswordCommand resetPasswordCommand); + void resetPassword(String authId, String newPassword, String passwordCheck); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/validate/ValidateUserUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/validate/ValidateUserUseCase.java index a919e53e..6b9c87a5 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/validate/ValidateUserUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/validate/ValidateUserUseCase.java @@ -1,8 +1,6 @@ package com.plzgraduate.myongjigraduatebe.user.application.usecase.validate; -import com.plzgraduate.myongjigraduatebe.user.api.resetpassword.dto.response.ValidateUserResponse; - public interface ValidateUserUseCase { - ValidateUserResponse validateUser(String studentNumber, String authId); + boolean validateUser(String studentNumber, String authId); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/withdraw/WithDrawCommand.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/withdraw/WithDrawCommand.java deleted file mode 100644 index fd59e394..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/withdraw/WithDrawCommand.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.user.application.usecase.withdraw; - -import lombok.Builder; -import lombok.Getter; - -@Getter -public class WithDrawCommand { - - private final String password; - - @Builder - private WithDrawCommand(String password) { - this.password = password; - } -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/withdraw/WithDrawUserUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/withdraw/WithDrawUserUseCase.java index 7be39fe9..66e71716 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/withdraw/WithDrawUserUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/withdraw/WithDrawUserUseCase.java @@ -2,5 +2,5 @@ public interface WithDrawUserUseCase { - void withDraw(Long userId, WithDrawCommand withDrawCommand); + void withDraw(Long userId, String password); } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/SignInControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/SignInControllerTest.java index cc7f8c24..a9a9e086 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/SignInControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/SignInControllerTest.java @@ -82,7 +82,7 @@ void invalidUser() throws Exception { .authId("mju-graduate") .password("1q2w3e4r") .build(); - given(signInUseCase.signIn(any())).willThrow(new UnAuthorizedException("아이디 혹은 비밀번호가 일치하지 않습니다.")); + given(signInUseCase.signIn(any(), any())).willThrow(new UnAuthorizedException("아이디 혹은 비밀번호가 일치하지 않습니다.")); //when //then mockMvc.perform( post("/api/v1/auth/sign-in") diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/auth/api/token/TokenControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/auth/api/token/TokenControllerTest.java index 4b7262b0..4ca57e14 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/auth/api/token/TokenControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/auth/api/token/TokenControllerTest.java @@ -32,7 +32,7 @@ void newToken() throws Exception { AccessTokenResponse response = AccessTokenResponse.builder() .accessToken(accessToken) .build(); - given(tokenUseCase.createNewToken(any())).willReturn(response); + given(tokenUseCase.generateNewToken(any())).willReturn(response); //when //then mockMvc.perform( post("/api/v1/auth/token") @@ -53,7 +53,7 @@ void invalidRefreshToken() throws Exception { TokenRequest request = TokenRequest.builder() .refreshToken(refreshToken) .build(); - given(tokenUseCase.createNewToken(any())).willThrow( + given(tokenUseCase.generateNewToken(any())).willThrow( new IllegalArgumentException("유효하지 않은 토큰입니다.")); //when //then diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/auth/application/service/signin/SignInServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/auth/application/service/signin/SignInServiceTest.java index c5b5539e..a87657c5 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/auth/application/service/signin/SignInServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/auth/application/service/signin/SignInServiceTest.java @@ -15,7 +15,6 @@ import org.springframework.security.core.Authentication; import org.springframework.security.core.authority.SimpleGrantedAuthority; -import com.plzgraduate.myongjigraduatebe.auth.application.usecase.signin.SignInCommand; import com.plzgraduate.myongjigraduatebe.auth.api.signin.dto.response.TokenResponse; import com.plzgraduate.myongjigraduatebe.auth.application.port.SaveRefreshTokenPort; import com.plzgraduate.myongjigraduatebe.auth.security.JwtAuthenticationToken; @@ -39,10 +38,8 @@ class SignInServiceTest { @Test void singIn() { //given - SignInCommand command = SignInCommand.builder() - .authId("mju-graduate") - .password("1q2w3e4r!") - .build(); + String authId = "mju-graduate"; + String password = "1q2w3e4r!"; Long userId = 1L; String accessToken = "accessToken"; String refreshToken = "refreshToken"; @@ -56,7 +53,7 @@ void singIn() { given(tokenProvider.generateRefreshToken()).willReturn(refreshToken); //when - TokenResponse tokenResponse = signInService.signIn(command); + TokenResponse tokenResponse = signInService.signIn(authId, password); //then then(saveRefreshTokenPort).should(times(1)).saveRefreshToken(refreshToken, userId); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/auth/application/service/token/TokenServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/auth/application/service/token/TokenServiceTest.java index 2040d83a..cbfc7fcc 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/auth/application/service/token/TokenServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/auth/application/service/token/TokenServiceTest.java @@ -1,8 +1,12 @@ package com.plzgraduate.myongjigraduatebe.auth.application.service.token; -import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.mockito.BDDMockito.*; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.BDDMockito.anyLong; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.never; +import static org.mockito.BDDMockito.then; +import static org.mockito.BDDMockito.times; import java.util.Optional; @@ -14,7 +18,6 @@ import org.mockito.junit.jupiter.MockitoExtension; import com.plzgraduate.myongjigraduatebe.auth.api.token.dto.response.AccessTokenResponse; -import com.plzgraduate.myongjigraduatebe.auth.application.usecase.token.TokenCommand; import com.plzgraduate.myongjigraduatebe.auth.application.port.FindRefreshTokenPort; import com.plzgraduate.myongjigraduatebe.auth.security.TokenProvider; @@ -32,19 +35,16 @@ class TokenServiceTest { @DisplayName("accessToken을 생성한다.") @Test - void createNewToken() { + void generateNewToken() { //given Long userId = 1L; String refreshToken = "refreshToken"; String accessToken = "accessToken"; - TokenCommand command = TokenCommand.builder() - .refreshToken(refreshToken) - .build(); given(findRefreshTokenPort.findByRefreshToken(refreshToken)).willReturn(Optional.of(userId)); given(tokenProvider.generateToken(userId)).willReturn(accessToken); //when - AccessTokenResponse accessTokenResponse = tokenService.createNewToken(command); + AccessTokenResponse accessTokenResponse = tokenService.generateNewToken(refreshToken); //then assertThat(accessTokenResponse.getAccessToken()).isEqualTo(accessToken); @@ -55,13 +55,10 @@ void createNewToken() { void illegalArgumentExceptionIfInvalidToken() { //given String refreshToken = "refreshToken"; - TokenCommand command = TokenCommand.builder() - .refreshToken(refreshToken) - .build(); given(findRefreshTokenPort.findByRefreshToken(refreshToken)).willReturn(Optional.empty()); //when - assertThatThrownBy(() -> tokenService.createNewToken(command)) + assertThatThrownBy(() -> tokenService.generateNewToken(refreshToken)) .isInstanceOf(IllegalArgumentException.class) .hasMessage("유효하지 않은 토큰입니다."); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureControllerTest.java index 11b2a3ba..53cb1462 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureControllerTest.java @@ -15,8 +15,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import com.plzgraduate.myongjigraduatebe.lecture.api.dto.response.LectureResponse; -import com.plzgraduate.myongjigraduatebe.lecture.api.dto.response.SearchLectureResponse; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.support.WebAdaptorTestSupport; import com.plzgraduate.myongjigraduatebe.support.WithMockAuthenticationUser; @@ -27,11 +26,10 @@ class SearchLectureControllerTest extends WebAdaptorTestSupport { @Test void searchLecture() throws Exception { //given - List searchLectures = List.of( - LectureResponse.builder().id(1L).build() + List searchedLectures = List.of( + Lecture.builder().id(1L).build() ); - SearchLectureResponse searchLectureResponse = SearchLectureResponse.builder().lectures(searchLectures).build(); - given(searchLectureUseCase.searchLectures(any())).willReturn(searchLectureResponse); + given(searchLectureUseCase.searchLectures(any(), any())).willReturn(searchedLectures); //when //then mockMvc.perform(get("/api/v1/lectures") @@ -41,7 +39,7 @@ void searchLecture() throws Exception { .andExpect(status().isOk()) .andExpect(jsonPath("$.lectures", hasSize(1))); - then(searchLectureUseCase).should(times(1)).searchLectures(any()); + then(searchLectureUseCase).should(times(1)).searchLectures(any(), any()); } @WithMockAuthenticationUser diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/find/FindLecturesByIdServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/find/FindLecturesByIdServiceTest.java index 6de35553..6b2dc3d9 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/find/FindLecturesByIdServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/find/FindLecturesByIdServiceTest.java @@ -13,7 +13,7 @@ import org.mockito.junit.jupiter.MockitoExtension; import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindLecturePort; -import com.plzgraduate.myongjigraduatebe.lecture.application.service.FindLecturesByIdService; +import com.plzgraduate.myongjigraduatebe.lecture.application.service.FindLecturesService; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; @ExtendWith(MockitoExtension.class) @@ -23,7 +23,7 @@ class FindLecturesByIdServiceTest { private FindLecturePort findLecturePort; @InjectMocks - private FindLecturesByIdService findLecturesByIdService; + private FindLecturesService findLecturesByIdService; @DisplayName("과목 아이디 리스트에 포함되는 과목들을 반환한다.") @Test diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/find/FindLecturesByLectureCodeServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/find/FindLecturesByLectureCodeServiceTest.java index 0542af69..d0ecc875 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/find/FindLecturesByLectureCodeServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/find/FindLecturesByLectureCodeServiceTest.java @@ -1,7 +1,7 @@ package com.plzgraduate.myongjigraduatebe.lecture.application.service.find; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.BDDMockito.*; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; import java.util.List; @@ -13,7 +13,7 @@ import org.mockito.junit.jupiter.MockitoExtension; import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindLecturePort; -import com.plzgraduate.myongjigraduatebe.lecture.application.service.FindLecturesByLectureCodeService; +import com.plzgraduate.myongjigraduatebe.lecture.application.service.FindLecturesService; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; @ExtendWith(MockitoExtension.class) @@ -23,7 +23,7 @@ class FindLecturesByLectureCodeServiceTest { private FindLecturePort findLecturePort; @InjectMocks - private FindLecturesByLectureCodeService findLecturesByLectureCodeService; + private FindLecturesService findLecturesService; @DisplayName("과목 코드 리스트에 포함되는 과목들을 반환한다.") @Test @@ -38,7 +38,7 @@ void findLecturesByLectureCodes() { given(findLecturePort.findLecturesByLectureCodes(lectureCodes)).willReturn(lectures); //when - List result = findLecturesByLectureCodeService.findLecturesByLectureCodes(lectureCodes); + List result = findLecturesService.findLecturesByLectureCodes(lectureCodes); //then assertThat(result).isEqualTo(lectures); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/search/SearchLectureServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/search/SearchLectureServiceTest.java index fc9c9dfe..ae4f914c 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/search/SearchLectureServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/search/SearchLectureServiceTest.java @@ -1,6 +1,7 @@ package com.plzgraduate.myongjigraduatebe.lecture.application.service.search; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.tuple; import static org.mockito.BDDMockito.given; import java.util.List; @@ -12,10 +13,8 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import com.plzgraduate.myongjigraduatebe.lecture.application.service.SearchLectureService; -import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.SearchLectureCommand; -import com.plzgraduate.myongjigraduatebe.lecture.api.dto.response.SearchLectureResponse; import com.plzgraduate.myongjigraduatebe.lecture.application.port.SearchLecturePort; +import com.plzgraduate.myongjigraduatebe.lecture.application.service.SearchLectureService; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; @ExtendWith(MockitoExtension.class) @@ -28,11 +27,8 @@ class SearchLectureServiceTest { @DisplayName("과목을 검색한다.") @Test void searchLectures() { - - SearchLectureCommand command = SearchLectureCommand.builder() - .type("name") - .keyword("기초") - .build(); + String type = "name"; + String keyword = "기초"; List lectures = List.of( createLecture(1L, "code1", "기초웹프로그래밍", 3, 0), createLecture(2L, "code2", "앱과웹기초", 2, 1) @@ -41,15 +37,15 @@ void searchLectures() { .willReturn(lectures); //when - SearchLectureResponse searchLectures = searchLectureService.searchLectures(command); + List searchedLectures = searchLectureService.searchLectures(type, keyword); //then - assertThat(searchLectures.getLectures()) + assertThat(searchedLectures) .hasSize(2) .extracting("id", "lectureCode", "name", "credit", "isRevoked") .containsExactlyInAnyOrder( - tuple(1L, "code1", "기초웹프로그래밍", 3, false), - tuple(2L, "code2", "앱과웹기초", 2, true) + tuple(1L, "code1", "기초웹프로그래밍", 3, 0), + tuple(2L, "code2", "앱과웹기초", 2, 1) ); } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/api/ParsingTextControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/api/ParsingTextControllerTest.java index 12c7830f..285fd0f6 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/api/ParsingTextControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/api/ParsingTextControllerTest.java @@ -16,7 +16,6 @@ import com.plzgraduate.myongjigraduatebe.core.exception.InvalidPdfException; import com.plzgraduate.myongjigraduatebe.parsing.api.dto.request.ParsingTextRequest; -import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.ParsingTextCommand; import com.plzgraduate.myongjigraduatebe.support.WebAdaptorTestSupport; import com.plzgraduate.myongjigraduatebe.support.WithMockAuthenticationUser; @@ -45,8 +44,8 @@ void enrollParsingText() throws Exception { .andDo(print()) .andExpect(status().isOk()); - then(parsingTextUseCase).should().enrollParsingText(any(ParsingTextCommand.class)); - then(parsingTextHistoryUseCase).should().saveParsingTextHistoryIfSuccess(any(ParsingTextCommand.class)); + then(parsingTextUseCase).should().enrollParsingText(any(Long.class), any(String.class)); + then(parsingTextHistoryUseCase).should().generateSucceedParsingTextHistory(any(Long.class), any(String.class)); } @@ -60,7 +59,7 @@ void failToEnrollParsingText() throws Exception { .parsingText(parsingText) .build(); - doThrow(new InvalidPdfException("")).when(parsingTextUseCase).enrollParsingText(any(ParsingTextCommand.class)); + doThrow(new InvalidPdfException("")).when(parsingTextUseCase).enrollParsingText(any(Long.class), any(String.class)); //when ResultActions actions = mockMvc.perform( @@ -77,7 +76,7 @@ void failToEnrollParsingText() throws Exception { .andExpect(jsonPath("$.status").value(400)) .andExpect(jsonPath("$.message").value("")); - then(parsingTextHistoryUseCase).should().saveParsingTextHistoryIfFail(any(ParsingTextCommand.class)); + then(parsingTextHistoryUseCase).should().generateFailedParsingTextHistory(any(Long.class), any(String.class)); } } 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 e0b80f67..6e50b594 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 @@ -1,7 +1,8 @@ package com.plzgraduate.myongjigraduatebe.parsing.application.service; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.BDDMockito.*; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.then; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -11,7 +12,6 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.ParsingTextCommand; import com.plzgraduate.myongjigraduatebe.parsing.application.port.SaveParsingTextHistoryPort; import com.plzgraduate.myongjigraduatebe.parsing.domain.ParsingTextHistory; import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; @@ -28,22 +28,18 @@ class ParsingTextHistoryServiceTest { @InjectMocks private ParsingTextHistoryService parsingTextHistoryService; - @DisplayName("saveParsingTextHistoryIfSuccess 메서드 테스트") + @DisplayName("generateSucceedParsingTextHistory 메서드 테스트") @Test - void saveParsingTextHistoryIfSuccess() { + void generateSucceedParsingTextHistory() { //given Long userId = 1L; User user = createUser(userId, "mju1001!", "1q2w3e4r!", EnglishLevel.ENG12, "정지환", "60181666", 18, "융합소프트웨어학부", null, StudentCategory.NORMAL); String parsingText = "parsingText"; - ParsingTextCommand command = ParsingTextCommand.builder() - .userId(userId) - .parsingText(parsingText) - .build(); given(findUserUseCase.findUserById(userId)).willReturn(user); ArgumentCaptor captor = ArgumentCaptor.forClass(ParsingTextHistory.class); //when - parsingTextHistoryService.saveParsingTextHistoryIfSuccess(command); + parsingTextHistoryService.generateSucceedParsingTextHistory(userId, parsingText); //then then(saveParsingTextHistoryPort).should().saveParsingTextHistory(captor.capture()); @@ -52,22 +48,18 @@ void saveParsingTextHistoryIfSuccess() { assertThat(captureArgument.getParsingText()).isEqualTo(parsingText); } - @DisplayName("saveParsingTextHistoryIfFail 메서드 테스트") + @DisplayName("generateFailedParsingTextHistory 메서드 테스트") @Test - void saveParsingTextHistoryIfFail() { + void generateFailedParsingTextHistory() { //given Long userId = 1L; User user = createUser(userId, "mju1001!", "1q2w3e4r!", EnglishLevel.ENG12, "정지환", "60181666", 18, "융합소프트웨어학부", null, StudentCategory.NORMAL); String parsingText = "parsingText"; - ParsingTextCommand command = ParsingTextCommand.builder() - .userId(userId) - .parsingText(parsingText) - .build(); given(findUserUseCase.findUserById(userId)).willReturn(user); ArgumentCaptor captor = ArgumentCaptor.forClass(ParsingTextHistory.class); //when - parsingTextHistoryService.saveParsingTextHistoryIfFail(command); + parsingTextHistoryService.generateFailedParsingTextHistory(userId, parsingText); //then then(saveParsingTextHistoryPort).should().saveParsingTextHistory(captor.capture()); 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 e5155f79..d51083a6 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 @@ -1,7 +1,11 @@ package com.plzgraduate.myongjigraduatebe.parsing.application.service; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.mockito.BDDMockito.*; +import static org.mockito.BDDMockito.any; +import static org.mockito.BDDMockito.anyLong; +import static org.mockito.BDDMockito.doThrow; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.then; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -12,9 +16,7 @@ import com.plzgraduate.myongjigraduatebe.core.exception.InvalidPdfException; import com.plzgraduate.myongjigraduatebe.core.exception.PdfParsingException; -import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.ParsingTextCommand; import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.delete.DeleteTakenLectureByUserUseCase; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.save.SaveTakenLectureCommand; import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.save.SaveTakenLectureFromParsingTextUseCase; import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; import com.plzgraduate.myongjigraduatebe.user.application.usecase.update.UpdateStudentInformationCommand; @@ -51,19 +53,14 @@ class ParsingTextServiceTest{ + "|총 취득학점 - 118, 총점 - 436, 평균평점 - 3.82" + "|이수구분|수강년도/학기|한글코드|과목코드|과목명|학점|등급|중복|공통교양|2019년 2학기|교필137|KMA02137|4차산업혁명시대의진로선택|2|P|공통교양|2022년 동계계절|교필104|KMA02104|글쓰기|3|C0|공통교양|2020년 1학기|교필122|KMA02122|기독교와문화|2|B0|공통교양|2019년 2학기|교필127|KMA00101|성서와인간이해|2|B+|공통교양|2019년 하계계절|교필106|KMA02106|영어1|2|B+|2|공통교양|2019년 2학기|교필107|KMA02107|영어2|2|B+|공통교양|2022년 동계계절|교필108|KMA02108|영어회화1|1|B+|3|공통교양|2023년 1학기|교필109|KMA02109|영어회화2|1|A0|공통교양|2020년 1학기|교필101|KMA02101|채플|0.5|P|공통교양|2020년 2학기|교필101|KMA02101|채플|0.5|P|공통교양|2022년 2학기|교필101|KMA02101|채플|0.5|P|공통교양|2023년 1학기|교필101|KMA02101|채플|0.5|P|핵심교양|2022년 2학기|교선130|KMA02130|고전으로읽는인문학|3|A0|핵심교양|2019년 2학기|교선113|KMA02113|세계화와사회변화|3|B+|핵심교양|2018년 1학기|교선135|KMA02135|우주,생명,마음|3|C+|핵심교양|2020년 2학기|교선111|KMA02111|한국근현대사의이해|3|A+|학문기초교양|2019년 1학기|기사133|KMD02133|ICT비즈니스와경영|3|B+|학문기초교양|2022년 2학기|기사123|KMD02123|경제학원론|3|A+|학문기초교양|2022년 2학기|기사103|KMD02103|대중문화와매스컴|3|A0|학문기초교양|2019년 1학기|기자107|KME02107|선형대수학개론|3|B0|6|학문기초교양|2019년 하계계절|기인107|KMB02107|인간심리의이해|3|B+|5|학문기초교양|2020년 2학기|기자106|KME02106|통계학개론|3|A+|일반교양|2022년 2학기|균여111|KMO02111|교양볼링|2|B+|일반교양|2020년 1학기|기컴118|KMI02118|엑셀기초및실무활용|3|B+|4|전공1단계|2019년 1학기|데테202|HED01202|R통계분석|3|A0|전공1단계|2022년 2학기|데테314|HED01314|게임프로그래밍|3|A+|전공1단계|2020년 1학기|데테316|HED01316|고급웹프로그래밍|3|A0|전공1단계|2019년 2학기|데테206|HED01206|기초웹프로그래밍|3|B+|전공1단계|2019년 1학기|융소102|HEB01102|기초프로그래밍|3|B+|1|전공1단계|2019년 2학기|융소105|HEB01105|기초프로그래밍2|3|C+|전공1단계|2019년 2학기|데테318|HED01203|데이터베이스|3|A0|전공1단계|2023년 1학기|데테317|HED01317|데이터베이스프로젝트|3|A+|전공1단계|2023년 1학기|데테407|HED01407|딥러닝|3|B+|전공1단계|2023년 1학기|데테319|HED01318|모바일컴퓨팅|3|A+|전공1단계|2020년 2학기|데테403|HED01403|블록체인기초|3|A+|전공1단계|2023년 1학기|데테404|HED01404|빅데이터기술특론1|3|B0|전공1단계|2022년 2학기|데테306|HED01306|빅데이터프로그래밍|3|A0|전공1단계|2020년 1학기|데테301|HED01301|소프트웨어공학|3|A+|전공1단계|2020년 2학기|데테209|HED01307|알고리즘|3|A+|전공1단계|2020년 2학기|데테303|HED01303|운영체제|3|A+|전공1단계|2020년 1학기|데테315|HED01315|인공지능|3|B+|전공1단계|2019년 1학기|데테201|HED01201|자료구조|3|A0|전공1단계|2023년 1학기|데테413|HED01413|캡스톤디자인|3|A+|전공1단계|2020년 1학기|데테309|HED01309|컴퓨터아키텍쳐|3|A0|전공1단계|2020년 2학기|데테313|HED01313|컴퓨터통신|3|A+|자유선택|2023년 1학기|교선136|KMA02136|SW프로그래밍입문|3|A+|공통교양|2019년 2학기|교필101|KMA02101|채플|0.5|N|공통교양|2018년 1학기|교필106|KMA02106|영어1|0|R|2|공통교양|2018년 1학기|교필108|KMA02108|영어회화1|0|R|3|공통교양|2020년 1학기|교필108|KMA02108|영어회화1|0|R|3|학문기초교양|2018년 1학기|기자107|KME02107|선형대수학개론|0|R|6|학문기초교양|2018년 1학기|기인107|KMB02107|인간심리의이해|0|R|5|일반교양|2018년 1학기|기컴118|KMI02118|엑셀기초및실무활용|0|R|4|전공1단계|2018년 1학기|융소102|HEB01102|기초프로그래밍|0|R|1|"; - ParsingTextCommand command = ParsingTextCommand.builder() - .userId(1L) - .parsingText(parsingText) - .build(); - given(findUserUseCase.findUserById(anyLong())).willReturn(user); //when - parsingTextService.enrollParsingText(command); + parsingTextService.enrollParsingText(1L, parsingText); //then then(updateStudentInformationUseCase).should().updateUser(any(UpdateStudentInformationCommand.class)); then(deleteTakenLectureByUserUseCase).should().deleteAllTakenLecturesByUser(any(User.class)); - then(saveTakenLectureFromParsingTextUseCase).should().saveTakenLectures(any(SaveTakenLectureCommand.class)); + then(saveTakenLectureFromParsingTextUseCase).should().saveTakenLectures(any(User.class), any()); } @DisplayName("PDF 파싱 텍스트가 빈 문자열로 오면 InvalidPdfException을 반환한다.") @@ -71,13 +68,9 @@ class ParsingTextServiceTest{ void 파싱_텍스트_빈문자열() { //given String emptyParsingText = " "; - ParsingTextCommand command = ParsingTextCommand.builder() - .userId(1L) - .parsingText(emptyParsingText) - .build(); //when //then - assertThatThrownBy(() -> parsingTextService.enrollParsingText(command)) + assertThatThrownBy(() -> parsingTextService.enrollParsingText(1L, emptyParsingText)) .isInstanceOf(InvalidPdfException.class) .hasMessage("PDF를 인식하지 못했습니다. 채널톡으로 문의 바랍니다."); } @@ -98,16 +91,11 @@ class ParsingTextServiceTest{ User user = createUser( "60181665"); - ParsingTextCommand command = ParsingTextCommand.builder() - .userId(1L) - .parsingText(parsingText) - .build(); - given(findUserUseCase.findUserById(anyLong())).willReturn(user); //when //then - assertThatThrownBy(() -> parsingTextService.enrollParsingText(command)) + assertThatThrownBy(() -> parsingTextService.enrollParsingText(1L, parsingText)) .isInstanceOf(InvalidPdfException.class) .hasMessage("본인의 학번과 PDF 학번이 일치하지 않습니다."); } @@ -129,17 +117,12 @@ class ParsingTextServiceTest{ "60181666"); //when - ParsingTextCommand command = ParsingTextCommand.builder() - .userId(1L) - .parsingText(parsingText) - .build(); - given(findUserUseCase.findUserById(anyLong())).willReturn(user); doThrow(NullPointerException.class).when(saveTakenLectureFromParsingTextUseCase) - .saveTakenLectures(any(SaveTakenLectureCommand.class)); + .saveTakenLectures(any(User.class), any()); //then - assertThatThrownBy(() -> parsingTextService.enrollParsingText(command)) + assertThatThrownBy(() -> parsingTextService.enrollParsingText(1L, parsingText)) .isInstanceOf(PdfParsingException.class) .hasMessage("PDF에서 정보를 읽어오는데 실패했습니다. 채널톡으로 문의 바랍니다."); } @@ -159,19 +142,15 @@ class ParsingTextServiceTest{ + "|총 취득학점 - 118, 총점 - 436, 평균평점 - 3.82" + "|이수구분|수강년도/학기|한글코드|과목코드|과목명|학점|등급|중복|공통교양|2019년 2학기|교필137|KMA02137|4차산업혁명시대의진로선택|2|P|공통교양|2022년 동계계절|교필104|KMA02104|글쓰기|3|C0|공통교양|2020년 1학기|교필122|KMA02122|기독교와문화|2|B0|공통교양|2019년 2학기|교필127|KMA00101|성서와인간이해|2|B+|공통교양|2019년 하계계절|교필106|KMA02106|영어1|2|B+|2|공통교양|2019년 2학기|교필107|KMA02107|영어2|2|B+|공통교양|2022년 동계계절|교필108|KMA02108|영어회화1|1|B+|3|공통교양|2023년 1학기|교필109|KMA02109|영어회화2|1|A0|공통교양|2020년 1학기|교필101|KMA02101|채플|0.5|P|공통교양|2020년 2학기|교필101|KMA02101|채플|0.5|P|공통교양|2022년 2학기|교필101|KMA02101|채플|0.5|P|공통교양|2023년 1학기|교필101|KMA02101|채플|0.5|P|핵심교양|2022년 2학기|교선130|KMA02130|고전으로읽는인문학|3|A0|핵심교양|2019년 2학기|교선113|KMA02113|세계화와사회변화|3|B+|핵심교양|2018년 1학기|교선135|KMA02135|우주,생명,마음|3|C+|핵심교양|2020년 2학기|교선111|KMA02111|한국근현대사의이해|3|A+|학문기초교양|2019년 1학기|기사133|KMD02133|ICT비즈니스와경영|3|B+|학문기초교양|2022년 2학기|기사123|KMD02123|경제학원론|3|A+|학문기초교양|2022년 2학기|기사103|KMD02103|대중문화와매스컴|3|A0|학문기초교양|2019년 1학기|기자107|KME02107|선형대수학개론|3|B0|6|학문기초교양|2019년 하계계절|기인107|KMB02107|인간심리의이해|3|B+|5|학문기초교양|2020년 2학기|기자106|KME02106|통계학개론|3|A+|일반교양|2022년 2학기|균여111|KMO02111|교양볼링|2|B+|일반교양|2020년 1학기|기컴118|KMI02118|엑셀기초및실무활용|3|B+|4|전공1단계|2019년 1학기|데테202|HED01202|R통계분석|3|A0|전공1단계|2022년 2학기|데테314|HED01314|게임프로그래밍|3|A+|전공1단계|2020년 1학기|데테316|HED01316|고급웹프로그래밍|3|A0|전공1단계|2019년 2학기|데테206|HED01206|기초웹프로그래밍|3|B+|전공1단계|2019년 1학기|융소102|HEB01102|기초프로그래밍|3|B+|1|전공1단계|2019년 2학기|융소105|HEB01105|기초프로그래밍2|3|C+|전공1단계|2019년 2학기|데테318|HED01203|데이터베이스|3|A0|전공1단계|2023년 1학기|데테317|HED01317|데이터베이스프로젝트|3|A+|전공1단계|2023년 1학기|데테407|HED01407|딥러닝|3|B+|전공1단계|2023년 1학기|데테319|HED01318|모바일컴퓨팅|3|A+|전공1단계|2020년 2학기|데테403|HED01403|블록체인기초|3|A+|전공1단계|2023년 1학기|데테404|HED01404|빅데이터기술특론1|3|B0|전공1단계|2022년 2학기|데테306|HED01306|빅데이터프로그래밍|3|A0|전공1단계|2020년 1학기|데테301|HED01301|소프트웨어공학|3|A+|전공1단계|2020년 2학기|데테209|HED01307|알고리즘|3|A+|전공1단계|2020년 2학기|데테303|HED01303|운영체제|3|A+|전공1단계|2020년 1학기|데테315|HED01315|인공지능|3|B+|전공1단계|2019년 1학기|데테201|HED01201|자료구조|3|A0|전공1단계|2023년 1학기|데테413|HED01413|캡스톤디자인|3|A+|전공1단계|2020년 1학기|데테309|HED01309|컴퓨터아키텍쳐|3|A0|전공1단계|2020년 2학기|데테313|HED01313|컴퓨터통신|3|A+|자유선택|2023년 1학기|교선136|KMA02136|SW프로그래밍입문|3|A+|공통교양|2019년 2학기|교필101|KMA02101|채플|0.5|N|공통교양|2018년 1학기|교필106|KMA02106|영어1|0|R|2|공통교양|2018년 1학기|교필108|KMA02108|영어회화1|0|R|3|공통교양|2020년 1학기|교필108|KMA02108|영어회화1|0|R|3|학문기초교양|2018년 1학기|기자107|KME02107|선형대수학개론|0|R|6|학문기초교양|2018년 1학기|기인107|KMB02107|인간심리의이해|0|R|5|일반교양|2018년 1학기|기컴118|KMI02118|엑셀기초및실무활용|0|R|4|전공1단계|2018년 1학기|융소102|HEB01102|기초프로그래밍|0|R|1|"; - ParsingTextCommand command = ParsingTextCommand.builder() - .userId(1L) - .parsingText(parsingText) - .build(); - given(findUserUseCase.findUserById(anyLong())).willReturn(user); + //when - parsingTextService.enrollParsingText(command); + parsingTextService.enrollParsingText(1L, parsingText); //then then(updateStudentInformationUseCase).should().updateUser(any(UpdateStudentInformationCommand.class)); then(deleteTakenLectureByUserUseCase).should().deleteAllTakenLecturesByUser(any(User.class)); - then(saveTakenLectureFromParsingTextUseCase).should().saveTakenLectures(any(SaveTakenLectureCommand.class)); + then(saveTakenLectureFromParsingTextUseCase).should().saveTakenLectures(any(User.class), any()); } private User createUser(String studentNumber) { diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/find/FindTakenLectureControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/find/FindTakenLectureControllerTest.java index e8deecd2..56dbe7cd 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/find/FindTakenLectureControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/find/FindTakenLectureControllerTest.java @@ -7,16 +7,18 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -import java.util.ArrayList; -import java.util.List; +import java.util.HashSet; +import java.util.Set; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.support.WebAdaptorTestSupport; import com.plzgraduate.myongjigraduatebe.support.WithMockAuthenticationUser; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureResponse; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.TakenLectureResponse; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.Semester; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; class FindTakenLectureControllerTest extends WebAdaptorTestSupport { @@ -25,12 +27,28 @@ class FindTakenLectureControllerTest extends WebAdaptorTestSupport { @Test void getTakenLectures() throws Exception { //given - List takenLectures = new ArrayList<>(); - FindTakenLectureResponse response = FindTakenLectureResponse.builder() - .totalCredit(10) - .takenLectures(takenLectures) - .build(); - given(findTakenLectureUseCase.getTakenLectures(anyLong())).willReturn(response); + HashSet takenLectures = new HashSet<>(Set.of( + TakenLecture.builder() + .lecture(Lecture.builder() + .lectureCode("KMA") + .credit(4).build()) + .year(2020) + .semester(Semester.FIRST).build(), + TakenLecture.builder() + .lecture(Lecture.builder() + .lectureCode("KMB") + .credit(3).build()) + .year(2020) + .semester(Semester.SECOND).build(), + TakenLecture.builder() + .lecture(Lecture.builder() + .lectureCode("KMC") + .credit(3).build()) + .year(2021) + .semester(Semester.FIRST).build() + )); + TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); + given(findTakenLectureUseCase.findTakenLectures(anyLong())).willReturn(takenLectureInventory); //when //when mockMvc.perform( diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/find/FindTakenLectureServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/find/FindTakenLectureServiceTest.java index 742de4cd..1578f4ae 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/find/FindTakenLectureServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/find/FindTakenLectureServiceTest.java @@ -1,7 +1,10 @@ package com.plzgraduate.myongjigraduatebe.takenlecture.application.service.find; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.BDDMockito.*; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.tuple; +import static org.mockito.BDDMockito.any; +import static org.mockito.BDDMockito.anyLong; +import static org.mockito.BDDMockito.given; import java.time.Instant; import java.util.ArrayList; @@ -15,10 +18,10 @@ import org.mockito.junit.jupiter.MockitoExtension; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureResponse; import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.FindTakenLecturePort; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.Semester; 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.User; @@ -32,27 +35,27 @@ class FindTakenLectureServiceTest { @InjectMocks private FindTakenLectureService findTakenLectureService; - @DisplayName("해당 학생의 수강정보를 조회하고 정렬한다.") + @DisplayName("해당 학생의 수강정보를 조회한다.") @Test - void getTakenLectures() { + void findTakenLectures() { //given User user = User.builder().id(1L).build(); Lecture 채플 = createLecture(1L, "KMA02101", "채플", 0); - Lecture 영어1 = createLecture(2L, "KMA02106", "영어1",2); - Lecture 영어2 = createLecture(3L, "KMA02107", "영어2",2); - Lecture 글쓰기 = createLecture(4L, "KMA02104", "글쓰기",3); - Lecture 세계화와사회변화 = createLecture(5L, "KMA02113", "세계화와사회변화",3); + Lecture 영어1 = createLecture(2L, "KMA02106", "영어1", 2); + Lecture 영어2 = createLecture(3L, "KMA02107", "영어2", 2); + Lecture 글쓰기 = createLecture(4L, "KMA02104", "글쓰기", 3); + Lecture 세계화와사회변화 = createLecture(5L, "KMA02113", "세계화와사회변화", 3); Lecture 고전으로읽는인문학 = createLecture(6L, "KMA02130", "고전으로읽는인문학", 3); Lecture 사차산업혁명과미래사회진로선택 = createLecture(7L, "KMA02141", "4차산업혁명과미래사회진로선택", 2); - Instant basicTime = Instant.parse("2022-02-15T00:00:00.00Z"); - Instant customTime1 = Instant.parse("2022-12-15T00:00:00.00Z"); + Instant basicTime = Instant.parse("2022-02-15T00:00:00.00Z"); Instant customTime2 = Instant.parse("2022-12-15T00:10:00.00Z"); + Instant customTime1 = Instant.parse("2022-12-15T00:00:00.00Z"); List takenLectures = new ArrayList<>(List.of( createTakenLecture(1L, user, 채플, 2020, Semester.FIRST, basicTime), createTakenLecture(2L, user, 채플, 2021, Semester.FIRST, basicTime), + createTakenLecture(4L, user, 글쓰기, 2020, Semester.WINTER, basicTime), createTakenLecture(3L, user, 고전으로읽는인문학, 2020, Semester.SECOND, basicTime), - createTakenLecture(4L, user, 글쓰기,2020, Semester.WINTER, basicTime), createTakenLecture(5L, user, 영어1, 2020, Semester.SUMMER, basicTime), createTakenLecture(6L, user, 세계화와사회변화, 2021, Semester.SECOND, basicTime), createTakenLecture(7L, user, 영어2, 2099, null, customTime1), @@ -63,22 +66,22 @@ void getTakenLectures() { given(findTakenLecturePort.findTakenLecturesByUser(any(User.class))).willReturn(takenLectures); //when - FindTakenLectureResponse response = findTakenLectureService.getTakenLectures(1L); + TakenLectureInventory foundTakenLectures = findTakenLectureService.findTakenLectures(1L); //then - assertThat(response.getTotalCredit()).isEqualTo(15); - assertThat(response.getTakenLectures()) + assertThat(foundTakenLectures.calculateTotalCredit()).isEqualTo(15); + assertThat(foundTakenLectures.getTakenLectures()) .hasSize(8) - .extracting("id", "year", "semester", "lectureCode", "lectureName", "credit") - .containsExactly( - tuple(8L, "CUSTOM", "CUSTOM", "KMA02141", "4차산업혁명과미래사회진로선택", 2), - tuple(7L, "CUSTOM", "CUSTOM", "KMA02107", "영어2", 2), - tuple(6L, "2021", "2학기", "KMA02113", "세계화와사회변화", 3), - tuple(2L, "2021", "1학기", "KMA02101", "채플", 0), - tuple(4L, "2020", "동계계절", "KMA02104", "글쓰기", 3), - tuple(3L, "2020", "2학기", "KMA02130", "고전으로읽는인문학", 3), - tuple(5L, "2020", "하계계절", "KMA02106", "영어1", 2), - tuple(1L, "2020", "1학기", "KMA02101", "채플", 0) + .extracting("id", "lecture") + .contains( + tuple(8L, 사차산업혁명과미래사회진로선택), + tuple(7L, 영어2), + tuple(6L, 세계화와사회변화), + tuple(2L, 채플), + tuple(4L, 글쓰기), + tuple(3L, 고전으로읽는인문학), + tuple(5L, 영어1), + tuple(1L, 채플) ); } @@ -88,21 +91,21 @@ void addTwoPointIfChapelCountIsOver4() { //given User user = User.builder().id(1L).build(); Lecture 채플 = createLecture(1L, "KMA02101", "채플", 0); - Lecture 영어1 = createLecture(2L, "KMA02106", "영어1",2); - Lecture 영어2 = createLecture(3L, "KMA02107", "영어2",2); - Lecture 글쓰기 = createLecture(4L, "KMA02104", "글쓰기",3); - Lecture 세계화와사회변화 = createLecture(5L, "KMA02113", "세계화와사회변화",3); + Lecture 영어1 = createLecture(2L, "KMA02106", "영어1", 2); + Lecture 영어2 = createLecture(3L, "KMA02107", "영어2", 2); + Lecture 글쓰기 = createLecture(4L, "KMA02104", "글쓰기", 3); + Lecture 세계화와사회변화 = createLecture(5L, "KMA02113", "세계화와사회변화", 3); Lecture 고전으로읽는인문학 = createLecture(6L, "KMA02130", "고전으로읽는인문학", 3); Lecture 사차산업혁명과미래사회진로선택 = createLecture(7L, "KMA02141", "4차산업혁명과미래사회진로선택", 2); - Instant basicTime = Instant.parse("2022-02-15T00:00:00.00Z"); + Instant basicTime = Instant.parse("2022-02-15T00:00:00.00Z"); Instant customTime1 = Instant.parse("2022-12-15T00:00:00.00Z"); Instant customTime2 = Instant.parse("2022-12-15T00:10:00.00Z"); List takenLectures = new ArrayList<>(List.of( createTakenLecture(1L, user, 채플, 2020, Semester.FIRST, basicTime), createTakenLecture(2L, user, 채플, 2021, Semester.FIRST, basicTime), createTakenLecture(3L, user, 고전으로읽는인문학, 2020, Semester.SECOND, basicTime), - createTakenLecture(4L, user, 글쓰기,2020, Semester.WINTER, basicTime), + createTakenLecture(4L, user, 글쓰기, 2020, Semester.WINTER, basicTime), createTakenLecture(5L, user, 영어1, 2020, Semester.SUMMER, basicTime), createTakenLecture(6L, user, 세계화와사회변화, 2021, Semester.SECOND, basicTime), createTakenLecture(7L, user, 영어2, 2099, null, customTime1), @@ -115,11 +118,11 @@ void addTwoPointIfChapelCountIsOver4() { given(findTakenLecturePort.findTakenLecturesByUser(any(User.class))).willReturn(takenLectures); //when - FindTakenLectureResponse response = findTakenLectureService.getTakenLectures(1L); + TakenLectureInventory foundTakenLectures = findTakenLectureService.findTakenLectures(1L); //then - assertThat(response.getTotalCredit()).isEqualTo(17); - assertThat(response.getTakenLectures()).hasSize(10); + assertThat(foundTakenLectures.calculateTotalCredit()).isEqualTo(17); + assertThat(foundTakenLectures.getTakenLectures()).hasSize(10); } private TakenLecture createTakenLecture(Long id, User user, Lecture lecture, Integer year, 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 7cfcfa0c..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 @@ -1,7 +1,10 @@ package com.plzgraduate.myongjigraduatebe.takenlecture.application.service.save; -import static org.mockito.BDDMockito.*; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.assertj.core.api.Assertions.tuple; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.then; import java.util.ArrayList; import java.util.List; @@ -14,12 +17,12 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.FindLecturesByLectureCodeUseCase; +import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.FindLecturesUseCase; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.save.SaveTakenLectureCommand; import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.SaveTakenLecturePort; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.Semester; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInformation; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @ExtendWith(MockitoExtension.class) @@ -28,7 +31,7 @@ class SaveTakenLectureFromParsingTextServiceTest { @Mock private SaveTakenLecturePort saveTakenLecturePort; @Mock - private FindLecturesByLectureCodeUseCase findLecturesByLectureCodeUseCase; + private FindLecturesUseCase findLecturesUseCase; @InjectMocks private SaveTakenLectureFromParsingTextService saveTakenLectureFromParsingTextService; @@ -37,22 +40,18 @@ class SaveTakenLectureFromParsingTextServiceTest { void saveTakenLectures() { //given User user = User.builder().id(1L).build(); - List takenLectureInformationList = new ArrayList<>(List.of( - createTakenLectureInformation("KMA02122", 2022, Semester.FIRST), - createTakenLectureInformation("KMA02135", 2023, Semester.FIRST) + List takenLectureInformationList = new ArrayList<>(List.of( + createTakenLectureInformation("KMA02122", 2022), + createTakenLectureInformation("KMA02135", 2023) )); - SaveTakenLectureCommand command = SaveTakenLectureCommand.builder() - .user(user) - .takenLectureInformationList(takenLectureInformationList) - .build(); Lecture lecture1 = createLecture("KMA02122"); Lecture lecture2 = createLecture("KMA02135"); - given(findLecturesByLectureCodeUseCase.findLecturesByLectureCodes(List.of("KMA02122", "KMA02135"))) + given(findLecturesUseCase.findLecturesByLectureCodes(List.of("KMA02122", "KMA02135"))) .willReturn(List.of(lecture1, lecture2)); ArgumentCaptor> takenLectureListCaptor = ArgumentCaptor.forClass(List.class); //when - saveTakenLectureFromParsingTextService.saveTakenLectures(command); + saveTakenLectureFromParsingTextService.saveTakenLectures(user, takenLectureInformationList); //then then(saveTakenLecturePort).should().saveTakenLectures(takenLectureListCaptor.capture()); @@ -71,32 +70,27 @@ void saveTakenLectures() { void lectureDoesNotExist() { //given User user = User.builder().id(1L).build(); - List takenLectureInformationList = new ArrayList<>(List.of( - createTakenLectureInformation("KMA02122", 2022, Semester.FIRST), - createTakenLectureInformation("KMA02135", 2023, Semester.FIRST) + List takenLectureInformationList = new ArrayList<>(List.of( + createTakenLectureInformation("KMA02122", 2022), + createTakenLectureInformation("KMA02135", 2023) )); - SaveTakenLectureCommand command = SaveTakenLectureCommand.builder() - .user(user) - .takenLectureInformationList(takenLectureInformationList) - .build(); Lecture lecture1 = createLecture("KMA02122"); - given(findLecturesByLectureCodeUseCase.findLecturesByLectureCodes(List.of("KMA02122", "KMA02135"))) + given(findLecturesUseCase.findLecturesByLectureCodes(List.of("KMA02122", "KMA02135"))) .willReturn(List.of(lecture1)); //when //then - assertThatThrownBy(() -> saveTakenLectureFromParsingTextService.saveTakenLectures(command)) + assertThatThrownBy( + () -> saveTakenLectureFromParsingTextService.saveTakenLectures(user, takenLectureInformationList)) .isInstanceOf(IllegalArgumentException.class) - .hasMessage("KMA02135이 데이터베이스에 존재하지 않습니다."); + .hasMessage("KMA02135이 데이터베이스에 존재하지 않습니다."); } - private SaveTakenLectureCommand.TakenLectureInformation createTakenLectureInformation( - String lectureCode, int year, Semester semester - ) { - return SaveTakenLectureCommand.TakenLectureInformation.builder() + private TakenLectureInformation createTakenLectureInformation(String lectureCode, int year) { + return TakenLectureInformation.builder() .lectureCode(lectureCode) .year(year) - .semester(semester) + .semester(Semester.FIRST) .build(); } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/update/UpdateTakenLectureServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/update/UpdateTakenLectureServiceTest.java index 09a27805..28d35f77 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/update/UpdateTakenLectureServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/update/UpdateTakenLectureServiceTest.java @@ -1,7 +1,9 @@ package com.plzgraduate.myongjigraduatebe.takenlecture.application.service.update; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.BDDMockito.*; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.tuple; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.then; import java.util.ArrayList; import java.util.List; @@ -14,9 +16,8 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.FindLecturesByIdUseCase; +import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.FindLecturesUseCase; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.update.UpdateTakenLectureCommand; import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.DeleteTakenLecturePort; import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.SaveTakenLecturePort; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; @@ -28,7 +29,7 @@ class UpdateTakenLectureServiceTest { @Mock private FindUserUseCase findUserUseCase; @Mock - private FindLecturesByIdUseCase findLecturesByIdUseCase; + private FindLecturesUseCase findLecturesUseCase; @Mock private DeleteTakenLecturePort deleteTakenLecturePort; @Mock @@ -38,22 +39,17 @@ class UpdateTakenLectureServiceTest { @DisplayName("수강과목을 삭제하고 새로운 수강정보를 추가한다.") @Test - void updateTakenLecture() { + void modifyTakenLecture() { //given - UpdateTakenLectureCommand command = UpdateTakenLectureCommand.builder() - .userId(1L) - .addedTakenLectures(List.of(1L, 2L)) - .deletedTakenLectures(List.of(21L, 22L)) - .build(); User user = User.builder().id(1L).build(); Lecture lecture1 = createLecture(1L); Lecture lecture2 = createLecture(2L); - given(findLecturesByIdUseCase.findLecturesByIds(List.of(1L, 2L))) + given(findLecturesUseCase.findLecturesByIds(List.of(1L, 2L))) .willReturn(new ArrayList<>(List.of(lecture1, lecture2))); ArgumentCaptor> takenLectureListCaptor = ArgumentCaptor.forClass(List.class); //when - updateTakenLectureService.updateTakenLecture(command); + updateTakenLectureService.modifyTakenLecture(user.getId(), List.of(21L, 22L), List.of(1L, 2L)); //then then(deleteTakenLecturePort).should().deleteTakenLecturesByIds(List.of(21L, 22L)); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/domain/model/TakenLectureInventoryTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/domain/model/TakenLectureInventoryTest.java index 7fce3f2d..56ac0923 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/domain/model/TakenLectureInventoryTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/domain/model/TakenLectureInventoryTest.java @@ -68,4 +68,20 @@ void handleFinishedTakenLectures() { .hasSize(beforeHandleSize - finishedTakenLecture.size()); } + @DisplayName("총 수강학점을 계산한다.") + @Test + void calculateTotalCredit() { + //given + Set takenLectures = new HashSet<>(Set.of( + TakenLecture.of(user, mockLectureMap.get("KMA00101"), 2019, Semester.FIRST), // credit 2 + TakenLecture.of(user, mockLectureMap.get("KMA02102"), 2019, Semester.FIRST) // credit 2 + )); + TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); + + //when + int calculatedCredit = takenLectureInventory.calculateTotalCredit(); + + //then + assertThat(calculatedCredit).isEqualTo(4); + } } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdControllerTest.java index 711cdf7b..0b9dfd74 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdControllerTest.java @@ -12,7 +12,6 @@ import org.junit.jupiter.api.Test; import com.plzgraduate.myongjigraduatebe.support.WebAdaptorTestSupport; -import com.plzgraduate.myongjigraduatebe.user.api.findauthid.dto.response.UserAuthIdResponse; class FindAuthIdControllerTest extends WebAdaptorTestSupport { @@ -22,10 +21,7 @@ void findUserAuthId() throws Exception { //given String studentNumber = "60191111"; String encryptedAuthId = "test***"; - UserAuthIdResponse userAuthIdResponse = UserAuthIdResponse.builder() - .authId(encryptedAuthId) - .studentNumber(studentNumber).build(); - given(findUserAuthIdUseCase.findUserAuthId(studentNumber)).willReturn(userAuthIdResponse); + given(findUserAuthIdUseCase.findUserAuthId(studentNumber)).willReturn(encryptedAuthId); //when //then mockMvc.perform(get("/api/v1/users/{student-number}/auth-id", studentNumber)) 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 9083506a..bf76b2d9 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 @@ -11,7 +11,7 @@ import com.plzgraduate.myongjigraduatebe.support.WebAdaptorTestSupport; import com.plzgraduate.myongjigraduatebe.support.WithMockAuthenticationUser; -import com.plzgraduate.myongjigraduatebe.user.api.finduserinformation.dto.response.UserInformationResponse; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; class FindUserInformationControllerTest extends WebAdaptorTestSupport { @@ -24,12 +24,14 @@ void getUserInformation() throws Exception { String studentNumber = "111111111"; String studentName = "testUser"; String major = "testMajor"; - UserInformationResponse response = UserInformationResponse.builder() + + User user = User.builder() + .id(userId) .studentNumber(studentNumber) - .studentName(studentName) + .name(studentName) .major(major).build(); - given(findUserInformationUseCase.findUserInformation(userId)).willReturn(response); + given(findUserInformationUseCase.findUserInformation(userId)).willReturn(user); //when //then mockMvc.perform(get("/api/v1/users/me")) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordControllerTest.java index 126f0915..981e6554 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordControllerTest.java @@ -15,8 +15,7 @@ import org.springframework.test.web.servlet.ResultActions; import com.plzgraduate.myongjigraduatebe.support.WebAdaptorTestSupport; -import com.plzgraduate.myongjigraduatebe.user.api.resetpassword.ResetPasswordRequest; -import com.plzgraduate.myongjigraduatebe.user.api.resetpassword.dto.response.ValidateUserResponse; +import com.plzgraduate.myongjigraduatebe.user.api.resetpassword.dto.request.ResetPasswordRequest; class ResetPasswordControllerTest extends WebAdaptorTestSupport { @@ -26,9 +25,7 @@ void validateUser() throws Exception { //given String studentNumber = "60191656"; String authId = "testAuthId"; - ValidateUserResponse response = ValidateUserResponse.builder() - .passedUserValidation(true).build(); - given(validateUserUseCase.validateUser(studentNumber, authId)).willReturn(response); + given(validateUserUseCase.validateUser(studentNumber, authId)).willReturn(true); //when //then mockMvc.perform(get("/api/v1/users/{student-number}/validate", studentNumber) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpControllerTest.java index 026768d6..631d5712 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpControllerTest.java @@ -14,7 +14,7 @@ import org.springframework.test.web.servlet.ResultActions; import com.plzgraduate.myongjigraduatebe.support.WebAdaptorTestSupport; -import com.plzgraduate.myongjigraduatebe.user.api.signup.SignUpRequest; +import com.plzgraduate.myongjigraduatebe.user.api.signup.dto.request.SignUpRequest; import com.plzgraduate.myongjigraduatebe.user.api.signup.dto.response.AuthIdDuplicationResponse; import com.plzgraduate.myongjigraduatebe.user.api.signup.dto.response.StudentNumberDuplicationResponse; diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/WithDrawControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/WithDrawControllerTest.java index 59932d41..61f897ca 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/WithDrawControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/withdraw/WithDrawControllerTest.java @@ -13,8 +13,7 @@ import com.plzgraduate.myongjigraduatebe.support.WebAdaptorTestSupport; import com.plzgraduate.myongjigraduatebe.support.WithMockAuthenticationUser; -import com.plzgraduate.myongjigraduatebe.user.api.withdraw.WithDrawRequest; -import com.plzgraduate.myongjigraduatebe.user.application.usecase.withdraw.WithDrawCommand; +import com.plzgraduate.myongjigraduatebe.user.api.withdraw.dto.request.WithDrawRequest; class WithDrawControllerTest extends WebAdaptorTestSupport { @@ -33,7 +32,7 @@ void withDraw() throws Exception { .contentType(MediaType.APPLICATION_JSON)); //then - then(withDrawUserUseCase).should().withDraw(any(), any(WithDrawCommand.class)); + then(withDrawUserUseCase).should().withDraw(any(), any(String.class)); actions. andDo(print()) .andExpect(status().isOk()); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserAuthIdServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserAuthIdServiceTest.java index 7230f978..7ec4d1cb 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserAuthIdServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserAuthIdServiceTest.java @@ -1,10 +1,10 @@ package com.plzgraduate.myongjigraduatebe.user.application.service.find; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.BDDMockito.given; - import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -13,7 +13,6 @@ import org.mockito.junit.jupiter.MockitoExtension; import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.api.findauthid.dto.response.UserAuthIdResponse; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @ExtendWith(MockitoExtension.class) @@ -38,11 +37,10 @@ void findUserAuthId() { given(findUserUseCase.findUserByStudentNumber(anyString())).willReturn(user); //when - UserAuthIdResponse userAuthIdResponse = findUserAuthIdService.findUserAuthId(studentNumber); + String userAuthId = findUserAuthIdService.findUserAuthId(studentNumber); //then - assertThat(userAuthIdResponse).extracting("authId", "studentNumber") - .contains("teste***", studentNumber); + assertThat(userAuthId).isEqualTo("teste***"); } @DisplayName("학번에 해당하는 유저가 존재하지 않을 경우 예외가 발생한다.") 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 7a388fc5..09549ebb 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 @@ -1,6 +1,6 @@ package com.plzgraduate.myongjigraduatebe.user.application.service.find; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.BDDMockito.given; import org.junit.jupiter.api.DisplayName; @@ -11,7 +11,6 @@ import org.mockito.junit.jupiter.MockitoExtension; import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.api.finduserinformation.dto.response.UserInformationResponse; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @ExtendWith(MockitoExtension.class) @@ -32,20 +31,19 @@ void findUserInformation() { String studentNumber = "11111111"; String major = "testMajor"; - User user = User.builder() + User foundUser = User.builder() .id(userId) .name(studentName) .studentNumber(studentNumber) .major(major).build(); - given(findUserUseCase.findUserById(userId)).willReturn(user); + given(findUserUseCase.findUserById(userId)).willReturn(foundUser); //when - UserInformationResponse userInformationResponse = findUserInformationService.findUserInformation(userId); + User user = findUserInformationService.findUserInformation(userId); //then - assertThat(userInformationResponse).extracting("studentNumber", "studentName", "major") - .contains(studentNumber, studentName, major); + assertThat(user).isEqualTo(foundUser); } } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/resetpassword/ResetPasswordServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/resetpassword/ResetPasswordServiceTest.java index fa9d2fe5..40875d2a 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/resetpassword/ResetPasswordServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/resetpassword/ResetPasswordServiceTest.java @@ -1,6 +1,6 @@ package com.plzgraduate.myongjigraduatebe.user.application.service.resetpassword; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.then; @@ -12,9 +12,8 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.security.crypto.password.PasswordEncoder; -import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.usecase.resetpassword.ResetPasswordCommand; import com.plzgraduate.myongjigraduatebe.user.application.port.UpdateUserPort; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @ExtendWith(MockitoExtension.class) @@ -34,18 +33,17 @@ class ResetPasswordServiceTest { @Test void resetPassword() { //given - ResetPasswordCommand resetPasswordCommand = ResetPasswordCommand.builder() - .authId("test") - .newPassword("testPassword") - .passwordCheck("testPassword").build(); + String authId = "test"; + String newPassword = "testPassword"; + String passwordCheck = "testPassword"; User user = User.builder().build(); - given(findUserUseCase.findUserByAuthId(resetPasswordCommand.getAuthId())).willReturn(user); + given(findUserUseCase.findUserByAuthId(authId)).willReturn(user); //when - resetPasswordService.resetPassword(resetPasswordCommand); + resetPasswordService.resetPassword(authId, newPassword, passwordCheck); //then - then(passwordEncoder).should().encode(resetPasswordCommand.getNewPassword()); + then(passwordEncoder).should().encode(newPassword); then(updateUserPort).should().updateUser(user); } @@ -53,30 +51,29 @@ void resetPassword() { @Test void resetPasswordWithDifferentPasswordCheck() { //given - ResetPasswordCommand resetPasswordCommand = ResetPasswordCommand.builder() - .authId("test") - .newPassword("testPassword") - .passwordCheck("differentPassword").build(); + String authId = "test"; + String newPassword = "testPassword"; + String passwordCheck = "differentPassword"; //when //then - assertThatThrownBy(() -> resetPasswordService.resetPassword(resetPasswordCommand)).isInstanceOf( - IllegalArgumentException.class) + assertThatThrownBy(() -> resetPasswordService.resetPassword(authId, newPassword, passwordCheck)) + .isInstanceOf(IllegalArgumentException.class) .hasMessage("비밀번호와 비밀번호 확인이 일치하지 않습니다."); } @DisplayName("해당 유저 아이디가 존재하지 않을 경우 예외가 발생한다.") @Test void resetPasswordNonUser() { - ResetPasswordCommand resetPasswordCommand = ResetPasswordCommand.builder() - .authId("test") - .newPassword("testPassword") - .passwordCheck("testPassword").build(); - given(findUserUseCase.findUserByAuthId(resetPasswordCommand.getAuthId())).willThrow( + String authId = "test"; + String newPassword = "testPassword"; + String passwordCheck = "testPassword"; + + given(findUserUseCase.findUserByAuthId(authId)).willThrow( new IllegalArgumentException("존재하지 않는 아이디입니다.")); //when //then - assertThatThrownBy(() -> resetPasswordService.resetPassword(resetPasswordCommand)).isInstanceOf( - IllegalArgumentException.class) + assertThatThrownBy(() -> resetPasswordService.resetPassword(authId, newPassword, passwordCheck)) + .isInstanceOf(IllegalArgumentException.class) .hasMessage("존재하지 않는 아이디입니다."); } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/validate/ValidateUserServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/validate/ValidateUserServiceTest.java index a295a679..7f419af2 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/validate/ValidateUserServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/validate/ValidateUserServiceTest.java @@ -1,6 +1,6 @@ package com.plzgraduate.myongjigraduatebe.user.application.service.validate; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.BDDMockito.given; import org.junit.jupiter.api.DisplayName; @@ -11,7 +11,6 @@ import org.mockito.junit.jupiter.MockitoExtension; import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.api.resetpassword.dto.response.ValidateUserResponse; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @ExtendWith(MockitoExtension.class) @@ -34,10 +33,10 @@ void validatePassedUser() { given(findUserUseCase.findUserByStudentNumber(studentNumber)).willReturn(user); //when - ValidateUserResponse validateUserResponse = validateUserService.validateUser(studentNumber, authId); + boolean validated = validateUserService.validateUser(studentNumber, authId); //then - assertThat(validateUserResponse.isPassedUserValidation()).isTrue(); + assertThat(validated).isTrue(); } @DisplayName("실패: 학번으로 유저를 조회 후 로그인 아이디가 맞는지 검증한다.") @@ -51,10 +50,10 @@ void validateNonPassedUser() { given(findUserUseCase.findUserByStudentNumber(studentNumber)).willReturn(user); //when - ValidateUserResponse validateUserResponse = validateUserService.validateUser(studentNumber, authId); + boolean validated = validateUserService.validateUser(studentNumber, authId); //then - assertThat(validateUserResponse.isPassedUserValidation()).isFalse(); + assertThat(validated).isFalse(); } } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserServiceTest.java index 52dbda8b..fc5d0816 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserServiceTest.java @@ -1,6 +1,6 @@ package com.plzgraduate.myongjigraduatebe.user.application.service.withdraw; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.then; @@ -16,9 +16,8 @@ import com.plzgraduate.myongjigraduatebe.parsing.application.port.DeleteParsingTextHistoryPort; import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.delete.DeleteTakenLectureByUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.application.usecase.withdraw.WithDrawCommand; import com.plzgraduate.myongjigraduatebe.user.application.port.DeleteUserPort; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @ExtendWith(MockitoExtension.class) @@ -50,11 +49,8 @@ void withDraw() { given(findUserUseCase.findUserById(user.getId())).willReturn(user); given(passwordEncoder.matches(anyString(), anyString())).willReturn(true); - WithDrawCommand withDrawCommand = WithDrawCommand.builder() - .password(password).build(); - //when //then - withDrawUserService.withDraw(user.getId(), withDrawCommand); + withDrawUserService.withDraw(user.getId(), password); then(deleteTakenLectureByUserUseCase).should().deleteAllTakenLecturesByUser(user); then(deleteParsingTextHistoryPort).should().deleteUserParsingTextHistory(user); then(deleteUserPort).should().deleteUser(user); @@ -72,11 +68,8 @@ void withDrawWithUnValidationPassword() { given(findUserUseCase.findUserById(user.getId())).willReturn(user); given(passwordEncoder.matches(anyString(), anyString())).willReturn(false); - WithDrawCommand withDrawCommand = WithDrawCommand.builder() - .password(password).build(); - //when //then - assertThatThrownBy(() -> withDrawUserService.withDraw(user.getId(), withDrawCommand)) + assertThatThrownBy(() -> withDrawUserService.withDraw(user.getId(), password)) .isInstanceOf(IllegalArgumentException.class) .hasMessage("비밀번호가 일치하지 않습니다."); From 1ebe900bc7cc71b08e77bff18cecf326a072ad8e Mon Sep 17 00:00:00 2001 From: 5uhwann <106325839+5uhwann@users.noreply.github.com> Date: Tue, 9 Apr 2024 17:18:03 +0900 Subject: [PATCH 09/27] [DEV-18] Completed Credit (#247) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: 전공 필드명 변경에 따른 코드 수정 major -> primaryMajor * feat: 복수전공에 따른 전공이수 학점 Type * refactor: 복수전공 로직 추가에 따른 매개변수 변경 * refactor: 복수전공에 따른 졸업 요건 학점수 변경 * refactor: 복수전공에 따른 parsing 로직 수정 * refactor: 부전공 졸업 학점 변경 로직 시점 변경 졸업요건 계산 시점에서 생성 시점으로 변경 * refactor: 유저 정보 수정시 복수전공 수정 추가 * refactor: user domain에 복수전공 필드 추 및 주전공 변수명 변경 * test: 부전공 졸업학점 조정 test로 수정 * test: 복수전공 parsing test * refactor: 졸업요건 계산 로직에 복수전공 추가 * refactor: 필요없는 import 제거 * refactor: GraduationCategory 타입 추가 및 수정 * feat: CompletedCredit 도메인 모델 작성 * feat: CompletedCredit jpa entity 작성 * feat: CompletedCredit jpa entity 작성 * feat: CompletedCreditPersistenceMapper 구현 * feat: CompletedCreditRepository - 이수 학점 조회 구현 * feat: FindCompletedCreditPort 구현 * feat: FindCompletedCreditUseCase 구현 * refactor: 불필요 컨트롤러 삭제 * refactor: CalculateGraduationUseCase 리턴 타입 변경 * feat: GenerateOrModifyCompletedCreditPort 구현 * feat: GenerateOrModifyCompletedCreditUseCase 구현 * refactor: 성적표 업로드로 인한 이수 학점 업데이트 구현 * feat: CompletedCreditController 구현 * test: 테스트 오류 수정 * build: 테스트 코드 롬복 의존성 추가 * refactor: 불필요 의존성 제거 * refactor: 부정확 로직 제거 * refactor: swagger 코드 추가 * refactor: endpoint 수정 * refactor: 불필요 코드 삭제 * refactor: 채플 이수 학점 오류 수정 * refactor: GenerateOrModifyCompletedCreditUseCase 사용 위치 수정 * refactor: 채플 기이수 학점 산정 방식 수정 * refactor: GenerateOrModifyCompletedCredit 모델 생성 위치 수정 --------- Co-authored-by: 나경호 --- build.gradle | 4 +- .../FindCompletedCreditApiPresentation.java | 18 +++ .../api/FindCompletedCreditsController.java | 29 ++++ .../api/dto/CompletedCreditResponse.java | 34 +++++ .../port/FindCompletedCreditPort.java | 11 ++ .../GenerateOrModifyCompletedCreditPort.java | 11 ++ .../service/FindCompletedCreditService.java | 29 ++++ ...enerateOrModifyCompletedCreditService.java | 130 ++++++++++++++++++ .../usecase/FindCompletedCreditUseCase.java | 11 ++ ...enerateOrModifyCompletedCreditUseCase.java | 8 ++ .../domain/model/CompletedCredit.java | 65 +++++++++ .../FindCompletedCreditAdapter.java | 30 ++++ ...nerateOrModifyCompletedCreditsAdapter.java | 31 +++++ .../entity/CompletedCreditJpaEntity.java | 52 +++++++ .../CompletedCreditPersistenceMapper.java | 31 +++++ .../repository/CompletedCreditRepository.java | 14 ++ .../CalculateGraduationApiPresentation.java | 14 -- .../api/CalculateGraduationController.java | 24 ---- .../api/dto/response/GraduationResponse.java | 73 ---------- .../api/dto/response/MajorInfoResponse.java | 4 +- .../service/CalculateGraduationService.java | 40 +++--- .../usecase/CalculateGraduationUseCase.java | 5 +- .../graduation/domain/model/ChapelResult.java | 2 +- .../DefaultGraduationRequirementType.java} | 35 +++-- .../domain/model/DetailCategoryResult.java | 2 +- .../domain/model/DetailGraduationResult.java | 8 +- .../DualMajorGraduationRequirementType.java | 28 ++++ .../domain/model/GraduationCategory.java | 9 +- .../domain/model/GraduationRequirement.java | 17 ++- .../domain/model/GraduationResult.java | 2 +- .../BusinessBasicAcademicalManager.java | 6 +- .../DefaultBasicAcademicalManager.java | 6 +- .../SocialScienceBasicAcademicManager.java | 6 +- .../CoreCultureDetailCategoryManager.java | 2 +- .../domain/service/major/MajorManager.java | 4 +- .../major/exception/OptionalMandatory.java | 2 +- .../exception/OptionalMandatoryHandler.java | 6 +- .../ReplaceMandatoryMajorHandler.java | 2 +- ...icAcademicalCulturePersistenceAdapter.java | 2 +- .../service/ParsingTextService.java | 30 ++-- .../parsing/domain/ParsingInformation.java | 10 +- .../domain/ParsingStudentCategoryDto.java | 9 +- .../mapper/ParsingTextHistoryMapper.java | 2 +- ...aveTakenLectureFromParsingTextService.java | 4 +- .../mapper/TakenLectureMapper.java | 4 +- .../dto/response/UserInformationResponse.java | 2 +- .../UpdateStudentInformationService.java | 2 + .../UpdateStudentInformationCommand.java | 10 +- .../user/domain/model/College.java | 4 +- .../user/domain/model/StudentCategory.java | 2 +- .../user/domain/model/User.java | 15 +- .../persistence/mapper/UserMapper.java | 4 +- .../FindCompletedCreditsControllerTest.java | 54 ++++++++ .../FindCompletedCreditServiceTest.java | 53 +++++++ ...ateOrModifyCompletedCreditServiceTest.java | 124 +++++++++++++++++ ...teOrModifyCompletedCreditsAdapterTest.java | 62 +++++++++ .../CompletedCreditPersistenceMapperTest.java | 65 +++++++++ .../CompletedCreditRepositoryTest.java | 58 ++++++++ .../fixture/UserFixture.java | 2 +- .../CalculateGraduationControllerTest.java | 57 -------- .../FreeElectiveGraduationResultTest.java | 2 +- .../model/GraduationRequirementTest.java | 5 +- .../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 +- .../FindMajorPersistenceAdapterTest.java | 7 +- .../ParsingTextHistoryServiceTest.java | 2 +- .../service/ParsingTextServiceTest.java | 6 +- .../domain/ParsingInformationTest.java | 9 +- .../ParsingTextHistoryAdapterTest.java | 43 ++---- .../support/WebAdaptorTestSupport.java | 11 +- .../mapper/TakenLectureMapperTest.java | 2 +- .../FindUserInformationControllerTest.java | 2 +- .../find/FindUserInformationServiceTest.java | 2 +- .../UpdateStudentInformationServiceTest.java | 4 +- ...DefaultGraduationRequirementTypeTest.java} | 19 +-- .../user/domain/model/UserTest.java | 8 +- .../persistence/mapper/UserMapperTest.java | 4 +- 83 files changed, 1200 insertions(+), 382 deletions(-) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditApiPresentation.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditsController.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/dto/CompletedCreditResponse.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/port/FindCompletedCreditPort.java 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/FindCompletedCreditService.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/FindCompletedCreditUseCase.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/domain/model/CompletedCredit.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/FindCompletedCreditAdapter.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/GenerateOrModifyCompletedCreditsAdapter.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/entity/CompletedCreditJpaEntity.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/mapper/CompletedCreditPersistenceMapper.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/repository/CompletedCreditRepository.java 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 rename src/main/java/com/plzgraduate/myongjigraduatebe/{user/domain/model/GraduationRequirementType.java => graduation/domain/model/DefaultGraduationRequirementType.java} (59%) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DualMajorGraduationRequirementType.java create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditsControllerTest.java create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/FindCompletedCreditServiceTest.java create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditServiceTest.java create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/GenerateOrModifyCompletedCreditsAdapterTest.java create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/mapper/CompletedCreditPersistenceMapperTest.java create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/repository/CompletedCreditRepositoryTest.java delete mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateGraduationControllerTest.java rename src/test/java/com/plzgraduate/myongjigraduatebe/user/domain/model/{GraduationRequirementTypeTest.java => DefaultGraduationRequirementTypeTest.java} (70%) 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' } 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/FindCompletedCreditsController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditsController.java new file mode 100644 index 00000000..7531d17f --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditsController.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 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; + +@WebAdapter +@RequestMapping(value = "/api/v1/graduations/credits") +@RequiredArgsConstructor +public class FindCompletedCreditsController implements FindCompletedCreditApiPresentation{ + + 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/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/application/port/GenerateOrModifyCompletedCreditPort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/port/GenerateOrModifyCompletedCreditPort.java new file mode 100644 index 00000000..f06c785b --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/port/GenerateOrModifyCompletedCreditPort.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 GenerateOrModifyCompletedCreditPort { + + void generateOrModifyCompletedCredits(User user, List completedCredits); +} 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..5ab64627 --- /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) +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/service/GenerateOrModifyCompletedCreditService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java new file mode 100644 index 00000000..bbd7e619 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java @@ -0,0 +1,130 @@ +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; + +import java.util.ArrayList; +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.application.usecase.CalculateGraduationUseCase; +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; + +import lombok.RequiredArgsConstructor; + +@UseCase +@Transactional +@RequiredArgsConstructor +class GenerateOrModifyCompletedCreditService implements GenerateOrModifyCompletedCreditUseCase { + + private final FindCompletedCreditPort findCompletedCreditPort; + private final GenerateOrModifyCompletedCreditPort generateOrModifyCompletedCreditPort; + + private final CalculateGraduationUseCase calculateGraduationUseCase; + + @Override + public void generateOrModifyCompletedCredit(User user) { + List completedCredits = findCompletedCreditPort.findCompletedCredit(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())) + .findFirst() + )); + return resultMap.keySet().stream() + .map(detailGraduationResult -> createCompletedCreditModel(detailGraduationResult, + resultMap.get(detailGraduationResult))) + .collect(Collectors.toList()); + } + + 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 createOrUpdateChapelCompletedCreditModel(List completedCredits, + GraduationResult graduationResult) { + Optional chapelCompletedCredit = findCompletedCreditByCategory(completedCredits, CHAPEL); + return chapelCompletedCredit.map( + completedCredit -> updateCompletedCredit(completedCredit, GRADUATION_COUNT / 2, + graduationResult.getChapelResult().getTakenChapelCredit())) + .orElseGet(() -> CompletedCredit.createChapelCompletedCreditModel(graduationResult.getChapelResult())); + } + + private CompletedCredit createOrUpdateNormalCultureCompletedCreditModel(List completedCredits, + GraduationResult graduationResult) { + 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 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() == 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/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/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..7fa6905a --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/usecase/GenerateOrModifyCompletedCreditUseCase.java @@ -0,0 +1,8 @@ +package com.plzgraduate.myongjigraduatebe.completedcredit.application.usecase; + +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +public interface GenerateOrModifyCompletedCreditUseCase { + + void generateOrModifyCompletedCredit(User user); +} 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..60ccb25a --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/domain/model/CompletedCredit.java @@ -0,0 +1,65 @@ +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; + +@Getter +public class CompletedCredit { + + private final Long id; + private final GraduationCategory graduationCategory; + private int totalCredit; + private double takenCredit; + + @Builder + 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 new file mode 100644 index 00000000..8e09162f --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/FindCompletedCreditAdapter.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.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/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..5f15d0da --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/GenerateOrModifyCompletedCreditsAdapter.java @@ -0,0 +1,31 @@ +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 com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +import lombok.RequiredArgsConstructor; + +@PersistenceAdapter +@RequiredArgsConstructor +public class GenerateOrModifyCompletedCreditsAdapter implements GenerateOrModifyCompletedCreditPort { + + private final CompletedCreditPersistenceMapper completedCreditPersistenceMapper; + private final CompletedCreditRepository completedCreditRepository; + + @Override + public void generateOrModifyCompletedCredits(User user, List completedCredits) { + List completedCreditJpaEntities = completedCredits.stream() + .map(completedCredit -> completedCreditPersistenceMapper.mapToJpaEntity(user, completedCredit)) + .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 new file mode 100644 index 00000000..e7661ba7 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/entity/CompletedCreditJpaEntity.java @@ -0,0 +1,52 @@ +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") + private UserJpaEntity userJpaEntity; + + @Enumerated(value = EnumType.STRING) + private GraduationCategory graduationCategory; + + private int totalCredit; + + private double takenCredit; + + @Builder + private CompletedCreditJpaEntity(Long id, UserJpaEntity userJpaEntity, GraduationCategory graduationCategory, + int totalCredit, double takenCredit) { + this.id = id; + this.userJpaEntity = userJpaEntity; + 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 new file mode 100644 index 00000000..97e801d3 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/mapper/CompletedCreditPersistenceMapper.java @@ -0,0 +1,31 @@ +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; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; + +@Component +public class CompletedCreditPersistenceMapper { + + public CompletedCredit mapToDomainModel(CompletedCreditJpaEntity completedCreditJpaEntity) { + return CompletedCredit.builder() + .id(completedCreditJpaEntity.getId()) + .graduationCategory(completedCreditJpaEntity.getGraduationCategory()) + .totalCredit(completedCreditJpaEntity.getTotalCredit()) + .takenCredit(completedCreditJpaEntity.getTakenCredit()).build(); + } + + public CompletedCreditJpaEntity mapToJpaEntity(User user, CompletedCredit completedCredit) { + return CompletedCreditJpaEntity.builder() + .id(completedCredit.getId()) + .graduationCategory(completedCredit.getGraduationCategory()) + .userJpaEntity(UserJpaEntity.builder() + .id(user.getId()) + .build()) + .totalCredit(completedCredit.getTotalCredit()) + .takenCredit(completedCredit.getTakenCredit()).build(); + } +} 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/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 24d0c2ba..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/GraduationResponse.java +++ /dev/null @@ -1,73 +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, BASIC_ACADEMICAL_CULTURE)) - .major(findDetailGraduationResultResponse(graduationResult, 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/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..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 @@ -27,9 +27,9 @@ private MajorInfoResponse(String primaryMajor, String doubleMajor, String subMaj public static MajorInfoResponse from(User user) { return MajorInfoResponse.builder() - .primaryMajor(user.getMajor()) - .subMajor(user.getSubMajor()) + .primaryMajor(user.getPrimaryMajor()) .doubleMajor(null) //TODO: 복수전공 추가 + .subMajor(user.getSubMajor()) .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..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 @@ -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; @@ -29,11 +29,9 @@ 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.application.usecase.find.FindTakenLectureUseCase; 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.user.domain.model.StudentCategory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @@ -42,36 +40,31 @@ @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; + private final FindTakenLectureUseCase findTakenLectureUseCase; @Override - public GraduationResponse calculateGraduation(Long userId) { - User user = findUserUseCase.findUserById(userId); + public GraduationResult calculateGraduation(User user) { GraduationRequirement graduationRequirement = determineGraduationRequirement(user); - TakenLectureInventory takenLectureInventory = TakenLectureInventory.from( - findTakenLecturePort.findTakenLectureSetByUser(user)); + TakenLectureInventory takenLectureInventory = findTakenLectureUseCase.findTakenLectures(user.getId()); ChapelResult chapelResult = generateChapelResult(takenLectureInventory); 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) { - 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 +88,9 @@ 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 +126,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; @@ -149,19 +142,18 @@ 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, - 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, - requireSubMajorCredit); + graduationRequirement.getSubMajorCredit()); } private GraduationResult generateGraduationResult(ChapelResult chapelResult, 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..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,8 +1,9 @@ package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; -import com.plzgraduate.myongjigraduatebe.graduation.api.dto.response.GraduationResponse; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationResult; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; public interface CalculateGraduationUseCase { - GraduationResponse calculateGraduation(Long userId); + GraduationResult calculateGraduation(User user); } 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/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/GraduationRequirementType.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DefaultGraduationRequirementType.java similarity index 59% 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..bab6fc03 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) @@ -53,8 +58,7 @@ public GraduationRequirement convertToProfitGraduationRequirement(User user) { .freeElectiveCredit(this.freeElectiveLectureCredit).build(); checkIsEnglishFreeUserAndTransferCredit(user, graduationRequirement); - //TODO: Additional Major에 따른 졸업요건 변화 체크 후 졸업 요건 학점 변화 적용 - checkIsSubMajorUserAndTransferCredit(user, graduationRequirement); + checkIsMultiMajorUserAndTransferCredit(user, graduationRequirement); return graduationRequirement; } @@ -64,9 +68,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/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/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/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("소속 단과대가 존재하지 않습니다.")); + } +} 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/model/GraduationRequirement.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationRequirement.java index ac248d29..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 @@ -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; @@ -35,7 +37,12 @@ public void transferEnglishCreditCommonToNormal() { normalCultureCredit += ENGLISH.getTotalCredit(); } - public void deleteFreeElectiveCredit() { + public void modifyCreditForSubMajor() { + subMajorCredit = 21; freeElectiveCredit = 0; } + + public void modifyCreditForDualMajor(int primaryMajorCredit, int dualMajorCredit) { + //TODO: 복수 전공의 정확한 졸업요건 체크 후 로직 작성 + } } 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/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/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/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)); } 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/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/parsing/application/service/ParsingTextService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingTextService.java index 025ac025..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,14 +1,14 @@ 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.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; @@ -37,17 +37,20 @@ 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); try { validateParsingText(parsingText); ParsingInformation parsingInformation = ParsingInformation.parsing(parsingText); - checkIfNormal(parsingInformation); + checkUnSupportedUser(parsingInformation); validateStudentNumber(user, parsingInformation); updateUser(user, parsingInformation); deleteTakenLecturesIfAlreadyEnrolled(user); saveTakenLectures(user, parsingInformation); + generateOrModifyCompletedCreditUseCase.generateOrModifyCompletedCredit(user); } catch (InvalidPdfException | IllegalArgumentException e) { throw e; } catch (Exception e) { @@ -61,16 +64,15 @@ 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); } 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); } @@ -86,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 -> @@ -98,12 +100,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) 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/application/service/save/SaveTakenLectureFromParsingTextService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/save/SaveTakenLectureFromParsingTextService.java index 6ac719aa..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 @@ -36,8 +36,8 @@ public void saveTakenLectures(User user, List takenLect 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/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/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/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("소속 단과대가 존재하지 않습니다.")); } 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..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 @@ -18,16 +18,17 @@ 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 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) { 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/completedcredit/api/FindCompletedCreditsControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditsControllerTest.java new file mode 100644 index 00000000..987f3d9d --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditsControllerTest.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 FindCompletedCreditsControllerTest 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/credits")) + .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/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); + } + +} 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..87d5f1dc --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditServiceTest.java @@ -0,0 +1,124 @@ +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.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; +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; + @Mock + private CalculateGraduationUseCase calculateGraduationUseCase; + @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(); + given(calculateGraduationUseCase.calculateGraduation(user)).willReturn(graduationResult); + ArgumentCaptor> completedCreditArgumentCaptor = ArgumentCaptor.forClass(List.class); + ArgumentCaptor userArgumentCaptor = ArgumentCaptor.forClass(User.class); + + //when + generateOrModifyCompletedCreditService.generateOrModifyCompletedCredit(user); + + //then + then(generateOrModifyCompletedCreditPort).should() + .generateOrModifyCompletedCredits(userArgumentCaptor.capture(), completedCreditArgumentCaptor.capture()); + List savedCompletedCredits = completedCreditArgumentCaptor.getValue(); + Assertions.assertThat(savedCompletedCredits).hasSize(detailGraduationResults.size() + 3) + .extracting("graduationCategory", "totalCredit", "takenCredit") + .containsOnly( + tuple(GraduationCategory.COMMON_CULTURE, eachDetailGraduationResultTotalCredit, + (double)eachDetailGraduationResultTakenCredit), + tuple(GraduationCategory.CORE_CULTURE, eachDetailGraduationResultTotalCredit, + (double)eachDetailGraduationResultTakenCredit), + tuple(GraduationCategory.PRIMARY_MAJOR, eachDetailGraduationResultTotalCredit, + (double)eachDetailGraduationResultTakenCredit), + tuple(GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE, eachDetailGraduationResultTotalCredit, + (double)eachDetailGraduationResultTakenCredit), + tuple(GraduationCategory.CHAPEL, 2, 1.5), + tuple(GraduationCategory.NORMAL_CULTURE, eachDetailGraduationResultTotalCredit, + (double)eachDetailGraduationResultTakenCredit), + tuple(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()); + } +} 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..df52a445 --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/GenerateOrModifyCompletedCreditsAdapterTest.java @@ -0,0 +1,62 @@ +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.domain.model.User; +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 = userRepository.save( UserJpaEntity.builder() + .authId("test") + .password("test") + .studentNumber("60191111").build()); + User user = User.builder() + .id(userJpaEntity.getId()) + .build(); + + List completedCredits = List.of(CompletedCredit.builder() + .id(1L) + .graduationCategory(GraduationCategory.COMMON_CULTURE) + .totalCredit(10) + .takenCredit(5).build(), + CompletedCredit.builder() + .graduationCategory(GraduationCategory.COMMON_CULTURE) + .totalCredit(10) + .takenCredit(5).build()); + + //when + generateOrModifyCompletedCreditsAdapter.generateOrModifyCompletedCredits(user, completedCredits); + + //then + List foundCompletedCredits = completedCreditRepository.findAllByUserJpaEntity( + userJpaEntity); + assertThat(foundCompletedCredits).hasSize(completedCredits.size()) + .extracting("userJpaEntity.id") + .contains(user.getId()); + } + +} 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..1b47daee --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/mapper/CompletedCreditPersistenceMapperTest.java @@ -0,0 +1,65 @@ +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; +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.user.domain.model.User; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; + +class CompletedCreditPersistenceMapperTest { + + private final CompletedCreditPersistenceMapper completedCreditPersistenceMapper = new CompletedCreditPersistenceMapper(); + + @DisplayName("CompletedCredit jpa entity를 domain model로 매핑한다.") + @Test + void mapToDomainModel() { + //given + CompletedCreditJpaEntity completedCreditJpaEntity = CompletedCreditJpaEntity.builder() + .id(1L) + .userJpaEntity(UserJpaEntity.builder() + .id(1L) + .build()) + .graduationCategory(COMMON_CULTURE) + .totalCredit(10) + .takenCredit(5).build(); + + //when + CompletedCredit completedCredit = completedCreditPersistenceMapper.mapToDomainModel(completedCreditJpaEntity); + + //then + 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 + User user = User.builder() + .id(1L) + .build(); + CompletedCredit completedCredit = CompletedCredit.builder() + .id(1L) + .graduationCategory(COMMON_CULTURE) + .totalCredit(10) + .takenCredit(5).build(); + + //when + CompletedCreditJpaEntity completedCreditJpaEntity = completedCreditPersistenceMapper.mapToJpaEntity(user, + completedCredit); + + //then + assertThat(completedCreditJpaEntity.getId()).isEqualTo(completedCredit.getId()); + 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 new file mode 100644 index 00000000..1f301ca9 --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/repository/CompletedCreditRepositoryTest.java @@ -0,0 +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() + .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/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/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/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/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); } } 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); } 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..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; @@ -43,7 +42,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 +50,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..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을 반환한다.") @@ -162,7 +166,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/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이다.") 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..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,20 +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.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; 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 { @@ -30,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); @@ -74,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") @@ -85,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 diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java b/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java index 9d4207db..66ba82b3 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java @@ -12,16 +12,18 @@ 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.FindCompletedCreditsController; +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; -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 +58,6 @@ @WebMvcTest(controllers = { SignInController.class, TokenController.class, - CalculateGraduationController.class, SearchLectureController.class, FindUserInformationController.class, UpdateTakenLectureController.class, @@ -65,7 +66,8 @@ FindTakenLectureController.class, ResetPasswordController.class, SignUpController.class, - FindAuthIdController.class + FindAuthIdController.class, + FindCompletedCreditsController.class }) public abstract class WebAdaptorTestSupport { @@ -129,6 +131,9 @@ public abstract class WebAdaptorTestSupport { @MockBean protected CheckStudentNumberDuplicationUseCase checkStudentNumberDuplicationUseCase; + @MockBean + protected FindCompletedCreditUseCase findCompletedCreditUseCase; + @BeforeEach void setUp() { mockMvc = MockMvcBuilders.webAppContextSetup(context) 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/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 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 834c517ba0a8afff695dd89c325a7b0aec085a5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EA=B2=BD=ED=98=B8?= Date: Fri, 12 Apr 2024 21:44:12 +0900 Subject: [PATCH 10/27] =?UTF-8?q?[DEV-28]=20=EC=BB=A4=EC=8A=A4=ED=85=80=20?= =?UTF-8?q?=EC=88=98=EA=B0=95=EA=B3=BC=EB=AA=A9=20=EC=88=98=EC=A0=95=20api?= =?UTF-8?q?=20=EB=B6=84=EB=A6=AC=20=EC=83=9D=EC=84=B1=20=EC=82=AD=EC=A0=9C?= =?UTF-8?q?=20(#249)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: UpdateTakenLectureController update -> generate, delete로 분리 * feat: 수강과목 삭제 UseCase * feat: 수강과목 삭제 Service * refactor: 수강과목 삭제 Port id 단건 삭제로 변경 * refactor: 수강과목 삭제 Adapter id 단건 삭제로 변경 * feat: application 레벨 수강 과목 생성 로직 추가 * feat: 수강과목 저장 로직 추가 * feat: 과목 id에 의한 과목 단건 조회 * refactor: UpdateTakenLectureController update -> generate, delete로 분리 * refactor: UpdateTakenLectureController update -> generate, delete로 분리로 인한 파일 삭제 * feat: 수강과목 삭제 로직 추가 * test: spring test container 통합을 위한 test 설정 * test: UpdateTakenLectureController update -> generate, delete로 분리로 test * refactor: Semester 타입 String으로 설정 * refactor: Controller 메서드명 변경 * refactor: Controller 메서드명 변경 * refactor: path variable 변수명 camel case로 변경 * refactor: parsing으로 인한 수강과목 생성과 구분되도록 customize 명시 * refactor: DeleteTakenLecture UseCase Service 통합 --- .../application/port/FindLecturePort.java | 2 + .../LecturePersistenceAdapter.java | 14 +++- .../service/ParsingTextService.java | 4 +- .../UpdateTakenLectureApiPresentation.java | 11 ++- .../api/UpdateTakenLectureController.java | 26 +++++-- ...GenerateCustomizedTakenLectureRequest.java | 19 +++++ .../request/UpdateTakenLectureRequest.java | 26 ------- .../port/DeleteTakenLecturePort.java | 2 +- .../port/SaveTakenLecturePort.java | 2 + .../DeleteTakenLectureByUserService.java | 22 ------ .../delete/DeleteTakenLectureService.java | 34 +++++++++ ...GenerateCustomizedTakenLectureService.java | 39 ++++++++++ .../update/UpdateTakenLectureService.java | 44 ----------- ...se.java => DeleteTakenLectureUseCase.java} | 5 +- ...GenerateCustomizedTakenLectureUseCase.java | 6 ++ .../update/UpdateTakenLectureUseCase.java | 10 --- .../TakenLecturePersistenceAdapter.java | 16 ++-- .../entity/TakenLectureJpaEntity.java | 3 + .../findauthid/FindAuthIdApiPresentation.java | 2 +- .../api/findauthid/FindAuthIdController.java | 4 +- .../ResetPasswordApiPresentation.java | 2 +- .../ResetPasswordController.java | 4 +- .../service/withdraw/WithDrawUserService.java | 4 +- .../LecturePersistenceAdapterTest.java | 26 ++++++- .../service/ParsingTextServiceTest.java | 4 +- .../support/WebAdaptorTestSupport.java | 10 ++- .../UpdateTakenLectureControllerTest.java | 44 ++++++----- ...ava => DeleteTakenLectureServiceTest.java} | 31 +++++++- .../save/GenerateTakenLectureServiceTest.java | 58 +++++++++++++++ .../update/UpdateTakenLectureServiceTest.java | 73 ------------------- .../TakenLecturePersistenceAdapterTest.java | 53 ++++++++++++++ .../withdraw/WithDrawUserServiceTest.java | 4 +- 32 files changed, 367 insertions(+), 237 deletions(-) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/dto/request/GenerateCustomizedTakenLectureRequest.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/dto/request/UpdateTakenLectureRequest.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/delete/DeleteTakenLectureByUserService.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/delete/DeleteTakenLectureService.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/save/GenerateCustomizedTakenLectureService.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/update/UpdateTakenLectureService.java rename src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/delete/{DeleteTakenLectureByUserUseCase.java => DeleteTakenLectureUseCase.java} (63%) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/save/GenerateCustomizedTakenLectureUseCase.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/update/UpdateTakenLectureUseCase.java rename src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/delete/{DeleteTakenLectureByUserServiceTest.java => DeleteTakenLectureServiceTest.java} (51%) create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/save/GenerateTakenLectureServiceTest.java delete mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/update/UpdateTakenLectureServiceTest.java create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/TakenLecturePersistenceAdapterTest.java diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/FindLecturePort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/FindLecturePort.java index 2d1f97a4..f65700b8 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/FindLecturePort.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/FindLecturePort.java @@ -9,4 +9,6 @@ public interface FindLecturePort { List findLecturesByLectureCodes(List lectureCodes); List findLecturesByIds(List lectureIds); + + Lecture findLectureById(Long lectureId); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/LecturePersistenceAdapter.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/LecturePersistenceAdapter.java index 7cce0595..334f7652 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/LecturePersistenceAdapter.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/LecturePersistenceAdapter.java @@ -4,13 +4,13 @@ import java.util.stream.Collectors; import com.plzgraduate.myongjigraduatebe.core.meta.PersistenceAdapter; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindLecturePort; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.SearchLecturePort; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.LectureJpaEntity; import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.mapper.LectureMapper; import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.LectureQueryRepository; import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.LectureRepository; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindLecturePort; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.SearchLecturePort; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import lombok.RequiredArgsConstructor; @@ -18,6 +18,7 @@ @RequiredArgsConstructor public class LecturePersistenceAdapter implements FindLecturePort, SearchLecturePort { + private final static String NOT_FOUND_LECTURE_ERROR_MESSAGE = "해당 과목을 찾을 수 없습니다."; private final LectureQueryRepository lectureQueryRepository; private final LectureRepository lectureRepository; private final LectureMapper lectureMapper; @@ -38,6 +39,13 @@ public List findLecturesByIds(List lectureIds) { .collect(Collectors.toList()); } + @Override + public Lecture findLectureById(final Long lectureId) { + LectureJpaEntity lectureJpaEntity = lectureRepository.findById(lectureId) + .orElseThrow(() -> new IllegalArgumentException(NOT_FOUND_LECTURE_ERROR_MESSAGE)); + return lectureMapper.mapToLectureModel(lectureJpaEntity); + } + @Override public List searchLectureByNameOrCode(String type, String keyword) { List lectureJpaEntities = lectureQueryRepository.searchByNameOrCode(type, keyword); 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 10c83fac..f9bd5867 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 @@ -15,7 +15,7 @@ import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.ParsingTextUseCase; import com.plzgraduate.myongjigraduatebe.parsing.domain.ParsingInformation; import com.plzgraduate.myongjigraduatebe.parsing.domain.ParsingTakenLectureDto; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.delete.DeleteTakenLectureByUserUseCase; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.delete.DeleteTakenLectureUseCase; import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.save.SaveTakenLectureFromParsingTextUseCase; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInformation; import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; @@ -35,7 +35,7 @@ class ParsingTextService implements ParsingTextUseCase { private final FindUserUseCase findUserUseCase; private final UpdateStudentInformationUseCase updateStudentInformationUseCase; private final SaveTakenLectureFromParsingTextUseCase saveTakenLectureFromParsingTextUseCase; - private final DeleteTakenLectureByUserUseCase deleteTakenLectureByUserUseCase; + private final DeleteTakenLectureUseCase deleteTakenLectureByUserUseCase; private final GenerateOrModifyCompletedCreditUseCase generateOrModifyCompletedCreditUseCase; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/UpdateTakenLectureApiPresentation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/UpdateTakenLectureApiPresentation.java index 55d4fc8c..ce892149 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/UpdateTakenLectureApiPresentation.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/UpdateTakenLectureApiPresentation.java @@ -2,10 +2,11 @@ import javax.validation.Valid; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import com.plzgraduate.myongjigraduatebe.core.meta.LoginUser; -import com.plzgraduate.myongjigraduatebe.takenlecture.api.dto.request.UpdateTakenLectureRequest; +import com.plzgraduate.myongjigraduatebe.takenlecture.api.dto.request.GenerateCustomizedTakenLectureRequest; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -14,5 +15,11 @@ public interface UpdateTakenLectureApiPresentation { @Parameter(name = "userId", description = "로그인한 유저의 PK값") - void updateTakenLectures(@LoginUser Long userId, @Valid @RequestBody UpdateTakenLectureRequest updateTakenLectureRequest); + void generateCustomizedTakenLecture(@LoginUser Long userId, + @Valid @RequestBody GenerateCustomizedTakenLectureRequest generateCustomizedTakenLectureRequest); + + @Parameter(name = "userId", description = "로그인한 유저의 PK값") + @Parameter(name = "takenLectureId", description = "삭제할 수강 과목 ID") + void deleteCustomizedTakenLecture(@LoginUser Long userId, + @Valid @PathVariable Long takenLectureId); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/UpdateTakenLectureController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/UpdateTakenLectureController.java index 9c78b296..72cb17e3 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/UpdateTakenLectureController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/UpdateTakenLectureController.java @@ -2,14 +2,17 @@ import javax.validation.Valid; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; 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.takenlecture.api.dto.request.UpdateTakenLectureRequest; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.update.UpdateTakenLectureUseCase; +import com.plzgraduate.myongjigraduatebe.takenlecture.api.dto.request.GenerateCustomizedTakenLectureRequest; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.delete.DeleteTakenLectureUseCase; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.save.GenerateCustomizedTakenLectureUseCase; import lombok.RequiredArgsConstructor; @@ -17,13 +20,20 @@ @RequestMapping("/api/v1/taken-lectures") @RequiredArgsConstructor public class UpdateTakenLectureController implements UpdateTakenLectureApiPresentation { - private final UpdateTakenLectureUseCase updateTakenLectureUseCase; - @PostMapping("/update") - public void updateTakenLectures(@LoginUser Long userId, - @Valid @RequestBody UpdateTakenLectureRequest updateTakenLectureRequest) { - updateTakenLectureUseCase.modifyTakenLecture(userId, updateTakenLectureRequest.getDeletedTakenLectures(), - updateTakenLectureRequest.getAddedTakenLectures()); + private final GenerateCustomizedTakenLectureUseCase generateCustomizedTakenLectureUseCase; + private final DeleteTakenLectureUseCase deleteTakenLectureUseCase; + + @PostMapping() + public void generateCustomizedTakenLecture(@LoginUser Long userId, + @Valid @RequestBody GenerateCustomizedTakenLectureRequest generateCustomizedTakenLectureRequest) { + generateCustomizedTakenLectureUseCase.generateCustomizedTakenLecture(userId, + generateCustomizedTakenLectureRequest.getLectureId()); } + @DeleteMapping("{takenLectureId}") + public void deleteCustomizedTakenLecture(@LoginUser Long userId, + @Valid @PathVariable Long takenLectureId) { + deleteTakenLectureUseCase.deleteTakenLecture(userId, takenLectureId); + } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/dto/request/GenerateCustomizedTakenLectureRequest.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/dto/request/GenerateCustomizedTakenLectureRequest.java new file mode 100644 index 00000000..af1c74fd --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/dto/request/GenerateCustomizedTakenLectureRequest.java @@ -0,0 +1,19 @@ +package com.plzgraduate.myongjigraduatebe.takenlecture.api.dto.request; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +public class GenerateCustomizedTakenLectureRequest { + + @Schema(name = "lectureId", example = "103") + private Long lectureId; + + @Builder + private GenerateCustomizedTakenLectureRequest(Long lectureId) { + this.lectureId = lectureId; + } +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/dto/request/UpdateTakenLectureRequest.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/dto/request/UpdateTakenLectureRequest.java deleted file mode 100644 index 0836bf63..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/dto/request/UpdateTakenLectureRequest.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.api.dto.request; - -import java.util.List; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@NoArgsConstructor -public class UpdateTakenLectureRequest { - - @Schema(name = "deletedTakenLectures", example = "102, 2") - private List deletedTakenLectures; - - @Schema(name = "addedTakenLectures", example = "103, 104") - private List addedTakenLectures; - - @Builder - private UpdateTakenLectureRequest(List deletedTakenLectures, List addedTakenLectures) { - this.deletedTakenLectures = deletedTakenLectures; - this.addedTakenLectures = addedTakenLectures; - } - -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/DeleteTakenLecturePort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/DeleteTakenLecturePort.java index c6d8d796..a507487c 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/DeleteTakenLecturePort.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/DeleteTakenLecturePort.java @@ -7,5 +7,5 @@ public interface DeleteTakenLecturePort { void deleteAllTakenLecturesByUser(User user); - void deleteTakenLecturesByIds(List deleteIds); + void deleteTakenLectureById(Long deleteId); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/SaveTakenLecturePort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/SaveTakenLecturePort.java index 88006c26..8dc5e3d6 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/SaveTakenLecturePort.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/port/SaveTakenLecturePort.java @@ -7,4 +7,6 @@ public interface SaveTakenLecturePort { void saveTakenLectures(List takenLectures); + + void saveTakenLecture(TakenLecture takenLecture); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/delete/DeleteTakenLectureByUserService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/delete/DeleteTakenLectureByUserService.java deleted file mode 100644 index f1e5a943..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/delete/DeleteTakenLectureByUserService.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.application.service.delete; - -import org.springframework.transaction.annotation.Transactional; - -import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.delete.DeleteTakenLectureByUserUseCase; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.DeleteTakenLecturePort; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; - -import lombok.RequiredArgsConstructor; - -@UseCase -@Transactional -@RequiredArgsConstructor -class DeleteTakenLectureByUserService implements DeleteTakenLectureByUserUseCase { - - private final DeleteTakenLecturePort deleteTakenLecturePort; - @Override - public void deleteAllTakenLecturesByUser(User user) { - deleteTakenLecturePort.deleteAllTakenLecturesByUser(user); - } -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/delete/DeleteTakenLectureService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/delete/DeleteTakenLectureService.java new file mode 100644 index 00000000..5a7e0a13 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/delete/DeleteTakenLectureService.java @@ -0,0 +1,34 @@ +package com.plzgraduate.myongjigraduatebe.takenlecture.application.service.delete; + +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.takenlecture.application.usecase.delete.DeleteTakenLectureUseCase; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.DeleteTakenLecturePort; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +import lombok.RequiredArgsConstructor; + +@UseCase +@Transactional +@RequiredArgsConstructor +class DeleteTakenLectureService implements DeleteTakenLectureUseCase { + + private final FindUserUseCase findUserUseCase; + private final DeleteTakenLecturePort deleteTakenLecturePort; + private final GenerateOrModifyCompletedCreditUseCase generateOrModifyCompletedCreditUseCase; + + @Override + public void deleteAllTakenLecturesByUser(User user) { + deleteTakenLecturePort.deleteAllTakenLecturesByUser(user); + } + + @Override + public void deleteTakenLecture(Long userId, Long deletedTakenLectureId) { + User user = findUserUseCase.findUserById(userId); + deleteTakenLecturePort.deleteTakenLectureById(deletedTakenLectureId); + generateOrModifyCompletedCreditUseCase.generateOrModifyCompletedCredit(user); + } +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/save/GenerateCustomizedTakenLectureService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/save/GenerateCustomizedTakenLectureService.java new file mode 100644 index 00000000..64631adb --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/save/GenerateCustomizedTakenLectureService.java @@ -0,0 +1,39 @@ +package com.plzgraduate.myongjigraduatebe.takenlecture.application.service.save; + +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.lecture.application.port.FindLecturePort; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.SaveTakenLecturePort; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.save.GenerateCustomizedTakenLectureUseCase; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +import lombok.RequiredArgsConstructor; + +@UseCase +@Transactional +@RequiredArgsConstructor +public class GenerateCustomizedTakenLectureService implements GenerateCustomizedTakenLectureUseCase { + + private final FindUserUseCase findUserUseCase; + private final FindLecturePort findLecturePort; + private final SaveTakenLecturePort saveTakenLecturePort; + private final GenerateOrModifyCompletedCreditUseCase generateOrModifyCompletedCreditUseCase; + + @Override + public void generateCustomizedTakenLecture(final Long userId, final Long addedTakenLectureId) { + User user = findUserUseCase.findUserById(userId); + Lecture lecture = findLecturePort.findLectureById(addedTakenLectureId); + addCustomTakenLecture(user, lecture); + generateOrModifyCompletedCreditUseCase.generateOrModifyCompletedCredit(user); + } + + private void addCustomTakenLecture(User user, Lecture addedLecture) { + TakenLecture addedTakenLecture = TakenLecture.custom(user, addedLecture); + saveTakenLecturePort.saveTakenLecture(addedTakenLecture); + } +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/update/UpdateTakenLectureService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/update/UpdateTakenLectureService.java deleted file mode 100644 index 3f2ccea9..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/update/UpdateTakenLectureService.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.application.service.update; - -import java.util.List; -import java.util.stream.Collectors; - -import org.springframework.transaction.annotation.Transactional; - -import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.FindLecturesUseCase; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.update.UpdateTakenLectureUseCase; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.DeleteTakenLecturePort; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.SaveTakenLecturePort; -import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; -import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; - -import lombok.RequiredArgsConstructor; - -@UseCase -@Transactional -@RequiredArgsConstructor -class UpdateTakenLectureService implements UpdateTakenLectureUseCase { - - private final FindUserUseCase findUserUseCase; - private final FindLecturesUseCase findLecturesUseCase; - private final DeleteTakenLecturePort deleteTakenLecturePort; - private final SaveTakenLecturePort saveTakenLecturePort; - - @Override - public void modifyTakenLecture(Long userId, List deletedTakenLectureIds, List addedTakenLectureIds) { - User user = findUserUseCase.findUserById(userId); - deleteTakenLecturePort.deleteTakenLecturesByIds(deletedTakenLectureIds); - List addedLectures = findLecturesUseCase.findLecturesByIds(addedTakenLectureIds); - addCustomTakenLectures(user, addedLectures); - } - - private void addCustomTakenLectures(User user, List addedLectures) { - List addedTakenLectures = addedLectures.stream() - .map(addedLecture -> TakenLecture.custom(user, addedLecture)) - .collect(Collectors.toList()); - saveTakenLecturePort.saveTakenLectures(addedTakenLectures); - } -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/delete/DeleteTakenLectureByUserUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/delete/DeleteTakenLectureUseCase.java similarity index 63% rename from src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/delete/DeleteTakenLectureByUserUseCase.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/delete/DeleteTakenLectureUseCase.java index 1012f5a3..e6164c71 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/delete/DeleteTakenLectureByUserUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/delete/DeleteTakenLectureUseCase.java @@ -2,6 +2,9 @@ import com.plzgraduate.myongjigraduatebe.user.domain.model.User; -public interface DeleteTakenLectureByUserUseCase { +public interface DeleteTakenLectureUseCase { void deleteAllTakenLecturesByUser(User user); + + void deleteTakenLecture(Long userId, Long deletedTakenLectureId); + } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/save/GenerateCustomizedTakenLectureUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/save/GenerateCustomizedTakenLectureUseCase.java new file mode 100644 index 00000000..c2b2f78f --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/save/GenerateCustomizedTakenLectureUseCase.java @@ -0,0 +1,6 @@ +package com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.save; + + +public interface GenerateCustomizedTakenLectureUseCase { + void generateCustomizedTakenLecture(Long userId, Long addedTakenLectureId); +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/update/UpdateTakenLectureUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/update/UpdateTakenLectureUseCase.java deleted file mode 100644 index 5a193906..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/usecase/update/UpdateTakenLectureUseCase.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.update; - -import java.util.List; - -import lombok.extern.java.Log; - -public interface UpdateTakenLectureUseCase { - - void modifyTakenLecture(Long userId, List deletedTakenLectureIds, List addedTakenLectureIds); -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/TakenLecturePersistenceAdapter.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/TakenLecturePersistenceAdapter.java index 55751fa4..054d7035 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/TakenLecturePersistenceAdapter.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/TakenLecturePersistenceAdapter.java @@ -5,14 +5,14 @@ import java.util.stream.Collectors; import com.plzgraduate.myongjigraduatebe.core.meta.PersistenceAdapter; -import com.plzgraduate.myongjigraduatebe.takenlecture.infrastructure.adapter.persistence.entity.TakenLectureJpaEntity; -import com.plzgraduate.myongjigraduatebe.takenlecture.infrastructure.adapter.persistence.mapper.TakenLectureMapper; import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.DeleteTakenLecturePort; import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.FindTakenLecturePort; import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.SaveTakenLecturePort; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; -import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; +import com.plzgraduate.myongjigraduatebe.takenlecture.infrastructure.adapter.persistence.entity.TakenLectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.takenlecture.infrastructure.adapter.persistence.mapper.TakenLectureMapper; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; import lombok.RequiredArgsConstructor; @@ -52,13 +52,19 @@ public void saveTakenLectures(List takenLectures) { takenLectureRepository.saveAll(takenLecturesJpaEntities); } + @Override + public void saveTakenLecture(final TakenLecture takenLecture) { + TakenLectureJpaEntity takenLectureJpaEntity = takenLectureMapper.mapToJpaEntity(takenLecture); + takenLectureRepository.save(takenLectureJpaEntity); + } + @Override public void deleteAllTakenLecturesByUser(User user) { takenLectureRepository.deleteAllByUser(takenLectureMapper.mapToUserJpaEntity(user)); } @Override - public void deleteTakenLecturesByIds(List deleteIds) { - takenLectureRepository.deleteAllByIdInBatch(deleteIds); + public void deleteTakenLectureById(Long deleteId) { + takenLectureRepository.deleteById(deleteId); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/entity/TakenLectureJpaEntity.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/entity/TakenLectureJpaEntity.java index 521624b1..73dbd543 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/entity/TakenLectureJpaEntity.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/entity/TakenLectureJpaEntity.java @@ -1,6 +1,8 @@ package com.plzgraduate.myongjigraduatebe.takenlecture.infrastructure.adapter.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; @@ -37,6 +39,7 @@ public class TakenLectureJpaEntity extends TimeBaseEntity { private Integer year; + @Enumerated(EnumType.STRING) private Semester semester; } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdApiPresentation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdApiPresentation.java index aad23168..fd8e89a0 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdApiPresentation.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdApiPresentation.java @@ -12,5 +12,5 @@ public interface FindAuthIdApiPresentation { UserAuthIdResponse findUserAuthId( - @Parameter(name = "studentNumber", description = "학번", in = ParameterIn.PATH) @PathVariable("student-number") String studentNumber); + @Parameter(name = "studentNumber", description = "학번", in = ParameterIn.PATH) @PathVariable String studentNumber); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdController.java index 31154e3a..423d8253 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdController.java @@ -17,8 +17,8 @@ public class FindAuthIdController implements FindAuthIdApiPresentation { private final FindUserAuthIdUseCase findUserAuthIdUseCase; - @GetMapping("/{student-number}/auth-id") - public UserAuthIdResponse findUserAuthId(@PathVariable("student-number") String studentNumber) { + @GetMapping("/{studentNumber}/auth-id") + public UserAuthIdResponse findUserAuthId(@PathVariable String studentNumber) { String foundUserAuthId = findUserAuthIdUseCase.findUserAuthId(studentNumber); return UserAuthIdResponse.of(foundUserAuthId, studentNumber); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordApiPresentation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordApiPresentation.java index 507f7913..888a50bf 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordApiPresentation.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordApiPresentation.java @@ -22,7 +22,7 @@ public interface ResetPasswordApiPresentation { @Parameter(name = "auth-id", description = "아이디") ValidateUserResponse validateUser( @Parameter(name = "studentNumber", description = "학번", in = ParameterIn.PATH) - @PathVariable("student-number") String studentNumber, + @PathVariable String studentNumber, @RequestParam("auth-id") String authId); @PatchMapping("/password") diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordController.java index 0ef71b1d..83fd7f33 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordController.java @@ -25,9 +25,9 @@ public class ResetPasswordController implements ResetPasswordApiPresentation { private final ValidateUserUseCase validateUserUseCase; private final ResetPasswordUseCase resetPasswordUseCase; - @GetMapping("/{student-number}/validate") + @GetMapping("/{studentNumber}/validate") public ValidateUserResponse validateUser( - @PathVariable("student-number") String studentNumber, + @PathVariable String studentNumber, @RequestParam("auth-id") String authId) { boolean validated = validateUserUseCase.validateUser(studentNumber, authId); return ValidateUserResponse.builder().passedUserValidation(validated).build(); diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserService.java index 88097858..5a923142 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserService.java @@ -5,7 +5,7 @@ import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; import com.plzgraduate.myongjigraduatebe.parsing.application.port.DeleteParsingTextHistoryPort; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.delete.DeleteTakenLectureByUserUseCase; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.delete.DeleteTakenLectureUseCase; import com.plzgraduate.myongjigraduatebe.user.application.port.DeleteUserPort; import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; import com.plzgraduate.myongjigraduatebe.user.application.usecase.withdraw.WithDrawUserUseCase; @@ -19,7 +19,7 @@ class WithDrawUserService implements WithDrawUserUseCase { private final FindUserUseCase findUserUseCase; - private final DeleteTakenLectureByUserUseCase deleteTakenLectureByUserUseCase; + private final DeleteTakenLectureUseCase deleteTakenLectureByUserUseCase; private final DeleteParsingTextHistoryPort deleteParsingTextHistoryPort; private final DeleteUserPort deleteUserPort; private final PasswordEncoder passwordEncoder; diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/LecturePersistenceAdapterTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/LecturePersistenceAdapterTest.java index 1861c4fd..9f6be87d 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/LecturePersistenceAdapterTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/LecturePersistenceAdapterTest.java @@ -1,7 +1,6 @@ package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.tuple; +import static org.assertj.core.api.Assertions.*; import java.util.ArrayList; import java.util.List; @@ -11,11 +10,10 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.LecturePersistenceAdapter; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.LectureJpaEntity; import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.LectureQueryRepository; import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.LectureRepository; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; class LecturePersistenceAdapterTest extends PersistenceTestSupport { @@ -88,6 +86,26 @@ void findLecturesByIds() { ); } + @DisplayName("아이디로 과목을 찾는다.") + @Test + void findLectureById() { + //given + String lectureCode = "code"; + String lectureName = "name"; + LectureJpaEntity lectureJpaEntity = lectureRepository.save(createLectureJpaEntity(lectureCode, lectureName)); + + //when + Lecture lecture = lecturePersistenceAdapter.findLectureById(lectureJpaEntity.getId()); + + //then + Long expectedLectureId = lectureJpaEntity.getId(); + String expectedLectureCode = "code"; + String expectedLectureName = "name"; + assertThat(lecture.getId()).isEqualTo(expectedLectureId); + assertThat(lecture.getLectureCode()).isEqualTo(expectedLectureCode); + assertThat(lecture.getName()).isEqualTo(expectedLectureName); + } + @DisplayName("과목명이나 과목코드를 포함하는 과목들을 찾는다.") @Test void searchLectureByNameOrCode() { 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 293ca9bc..45652ccf 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 @@ -17,7 +17,7 @@ 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; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.delete.DeleteTakenLectureUseCase; import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.save.SaveTakenLectureFromParsingTextUseCase; import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; import com.plzgraduate.myongjigraduatebe.user.application.usecase.update.UpdateStudentInformationCommand; @@ -35,7 +35,7 @@ class ParsingTextServiceTest{ @Mock private SaveTakenLectureFromParsingTextUseCase saveTakenLectureFromParsingTextUseCase; @Mock - private DeleteTakenLectureByUserUseCase deleteTakenLectureByUserUseCase; + private DeleteTakenLectureUseCase deleteTakenLectureByUserUseCase; @Mock private GenerateOrModifyCompletedCreditUseCase generateOrModifyCompletedCreditUseCase; @InjectMocks diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java b/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java index 66ba82b3..78138a5b 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java @@ -1,6 +1,6 @@ package com.plzgraduate.myongjigraduatebe.support; -import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; +import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.*; import org.junit.jupiter.api.BeforeEach; import org.springframework.beans.factory.annotation.Autowired; @@ -32,8 +32,9 @@ import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.ParsingTextUseCase; import com.plzgraduate.myongjigraduatebe.takenlecture.api.FindTakenLectureController; import com.plzgraduate.myongjigraduatebe.takenlecture.api.UpdateTakenLectureController; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.delete.DeleteTakenLectureUseCase; import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureUseCase; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.update.UpdateTakenLectureUseCase; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.save.GenerateCustomizedTakenLectureUseCase; import com.plzgraduate.myongjigraduatebe.user.api.findauthid.FindAuthIdController; import com.plzgraduate.myongjigraduatebe.user.api.finduserinformation.FindUserInformationController; import com.plzgraduate.myongjigraduatebe.user.api.resetpassword.ResetPasswordController; @@ -96,7 +97,10 @@ public abstract class WebAdaptorTestSupport { protected SearchLectureUseCase searchLectureUseCase; @MockBean - protected UpdateTakenLectureUseCase updateTakenLectureUseCase; + protected DeleteTakenLectureUseCase deleteTakenLectureUseCase; + + @MockBean + protected GenerateCustomizedTakenLectureUseCase generateCustomizedTakenLectureUseCase; @MockBean protected FindTakenLectureUseCase findTakenLectureUseCase; diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/update/UpdateTakenLectureControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/update/UpdateTakenLectureControllerTest.java index 886bc96b..99245006 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/update/UpdateTakenLectureControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/api/update/UpdateTakenLectureControllerTest.java @@ -1,11 +1,9 @@ package com.plzgraduate.myongjigraduatebe.takenlecture.api.update; -import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -import java.util.List; +import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -13,29 +11,41 @@ import com.plzgraduate.myongjigraduatebe.support.WebAdaptorTestSupport; import com.plzgraduate.myongjigraduatebe.support.WithMockAuthenticationUser; -import com.plzgraduate.myongjigraduatebe.takenlecture.api.dto.request.UpdateTakenLectureRequest; +import com.plzgraduate.myongjigraduatebe.takenlecture.api.dto.request.GenerateCustomizedTakenLectureRequest; class UpdateTakenLectureControllerTest extends WebAdaptorTestSupport { @WithMockAuthenticationUser - @DisplayName("수강과목을 수정한다.") + @DisplayName("수강과목을 생성한다.") @Test - void updateTakenLectures() throws Exception{ + void generateTakenLecture() throws Exception { //given - UpdateTakenLectureRequest request = UpdateTakenLectureRequest.builder() - .addedTakenLectures(List.of(1L, 2L)) - .deletedTakenLectures(List.of(1L, 2L)) + GenerateCustomizedTakenLectureRequest request = GenerateCustomizedTakenLectureRequest.builder() + .lectureId(1L) .build(); //when //then mockMvc.perform( - post("/api/v1/taken-lectures/update") - .content(objectMapper.writeValueAsString(request)) - .contentType(MediaType.APPLICATION_JSON) - .with(csrf()) - ) + post("/api/v1/taken-lectures") + .content(objectMapper.writeValueAsString(request)) + .contentType(MediaType.APPLICATION_JSON) + .with(csrf()) + ) .andDo(print()) .andExpect(status().isOk()); } + @WithMockAuthenticationUser + @DisplayName("수강과목을 삭제한다.") + @Test + void deleteTakenLecture() throws Exception { + //given + Long takenLectureId = 1L; + + //when //then + mockMvc.perform( + delete("/api/v1/taken-lectures/{taken-lecture-id}", takenLectureId)) + .andDo(print()) + .andExpect(status().isOk()); + } } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/delete/DeleteTakenLectureByUserServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/delete/DeleteTakenLectureServiceTest.java similarity index 51% rename from src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/delete/DeleteTakenLectureByUserServiceTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/delete/DeleteTakenLectureServiceTest.java index 329560cd..978caf20 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/delete/DeleteTakenLectureByUserServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/delete/DeleteTakenLectureServiceTest.java @@ -9,16 +9,39 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import com.plzgraduate.myongjigraduatebe.completedcredit.application.usecase.GenerateOrModifyCompletedCreditUseCase; import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.DeleteTakenLecturePort; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @ExtendWith(MockitoExtension.class) -class DeleteTakenLectureByUserServiceTest { +class DeleteTakenLectureServiceTest { + + @Mock + private FindUserUseCase findUserUseCase; @Mock private DeleteTakenLecturePort deleteTakenLecturePort; + + @Mock + private GenerateOrModifyCompletedCreditUseCase generateOrModifyCompletedCreditUseCase; + @InjectMocks - private DeleteTakenLectureByUserService deleteTakenLectureByUserService; + private DeleteTakenLectureService deleteTakenLectureService; + + @DisplayName("수강과목을 삭제한다.") + @Test + void deleteTakenLecture() { + //given + Long userId = 1L; + Long deletedTakenLectureId = 102L; + + //when + deleteTakenLectureService.deleteTakenLecture(userId, deletedTakenLectureId); + + //then + then(deleteTakenLecturePort).should().deleteTakenLectureById(102L); + } @DisplayName("사용자의 모든 수강과목을 삭제한다.") @Test @@ -27,9 +50,9 @@ void deleteAllTakenLecturesByUser() { User user = User.builder().build(); //when - deleteTakenLectureByUserService.deleteAllTakenLecturesByUser(user); + deleteTakenLectureService.deleteAllTakenLecturesByUser(user); //then then(deleteTakenLecturePort).should().deleteAllTakenLecturesByUser(eq(user)); } -} +} \ No newline at end of file diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/save/GenerateTakenLectureServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/save/GenerateTakenLectureServiceTest.java new file mode 100644 index 00000000..a07ec064 --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/save/GenerateTakenLectureServiceTest.java @@ -0,0 +1,58 @@ +package com.plzgraduate.myongjigraduatebe.takenlecture.application.service.save; + +import static org.mockito.BDDMockito.*; + +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.usecase.GenerateOrModifyCompletedCreditUseCase; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindLecturePort; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.SaveTakenLecturePort; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +@ExtendWith(MockitoExtension.class) +class GenerateTakenLectureServiceTest { + @Mock + private FindUserUseCase findUserUseCase; + @Mock + private FindLecturePort findLecturePort; + @Mock + private SaveTakenLecturePort saveTakenLecturePort; + @Mock + private GenerateOrModifyCompletedCreditUseCase generateOrModifyCompletedCreditUseCase; + @InjectMocks + private GenerateCustomizedTakenLectureService generateTakenLectureService; + + @DisplayName("새로운 custom 과목을 추가한다.") + @Test + void saveTakenLecture() { + //given + User user = User.builder().id(1L).build(); + Lecture lecture = createLecture(1L); + given(findLecturePort.findLectureById(1L)) + .willReturn(lecture); + + ArgumentCaptor takenLectureCaptor = ArgumentCaptor.forClass(TakenLecture.class); + + //when + generateTakenLectureService.generateCustomizedTakenLecture(user.getId(), 1L); + generateOrModifyCompletedCreditUseCase.generateOrModifyCompletedCredit(user); + + //then + then(saveTakenLecturePort).should().saveTakenLecture(takenLectureCaptor.capture()); + } + + private Lecture createLecture(Long id) { + return Lecture.builder() + .id(id) + .build(); + } +} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/update/UpdateTakenLectureServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/update/UpdateTakenLectureServiceTest.java deleted file mode 100644 index 28d35f77..00000000 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/application/service/update/UpdateTakenLectureServiceTest.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.takenlecture.application.service.update; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.tuple; -import static org.mockito.BDDMockito.given; -import static org.mockito.BDDMockito.then; - -import java.util.ArrayList; -import java.util.List; - -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.lecture.application.usecase.FindLecturesUseCase; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.DeleteTakenLecturePort; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.port.SaveTakenLecturePort; -import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; -import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; - -@ExtendWith(MockitoExtension.class) -class UpdateTakenLectureServiceTest { - @Mock - private FindUserUseCase findUserUseCase; - @Mock - private FindLecturesUseCase findLecturesUseCase; - @Mock - private DeleteTakenLecturePort deleteTakenLecturePort; - @Mock - private SaveTakenLecturePort saveTakenLecturePort; - @InjectMocks - private UpdateTakenLectureService updateTakenLectureService; - - @DisplayName("수강과목을 삭제하고 새로운 수강정보를 추가한다.") - @Test - void modifyTakenLecture() { - //given - User user = User.builder().id(1L).build(); - Lecture lecture1 = createLecture(1L); - Lecture lecture2 = createLecture(2L); - given(findLecturesUseCase.findLecturesByIds(List.of(1L, 2L))) - .willReturn(new ArrayList<>(List.of(lecture1, lecture2))); - - ArgumentCaptor> takenLectureListCaptor = ArgumentCaptor.forClass(List.class); - //when - updateTakenLectureService.modifyTakenLecture(user.getId(), List.of(21L, 22L), List.of(1L, 2L)); - - //then - then(deleteTakenLecturePort).should().deleteTakenLecturesByIds(List.of(21L, 22L)); - then(saveTakenLecturePort).should().saveTakenLectures(takenLectureListCaptor.capture()); - - List captureLectures = takenLectureListCaptor.getValue(); - assertThat(captureLectures).hasSize(2) - .extracting("year", "semester") - .containsExactlyInAnyOrder( - tuple(2099, null), - tuple(2099, null) - ); - } - - - private Lecture createLecture(Long id) { - return Lecture.builder() - .id(id) - .build(); - } -} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/TakenLecturePersistenceAdapterTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/TakenLecturePersistenceAdapterTest.java new file mode 100644 index 00000000..87817d8c --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/infrastructure/adapter/persistence/TakenLecturePersistenceAdapterTest.java @@ -0,0 +1,53 @@ +package com.plzgraduate.myongjigraduatebe.takenlecture.infrastructure.adapter.persistence; + +import static org.assertj.core.api.Assertions.*; + +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.support.PersistenceTestSupport; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.Semester; +import com.plzgraduate.myongjigraduatebe.takenlecture.infrastructure.adapter.persistence.entity.TakenLectureJpaEntity; + +class TakenLecturePersistenceAdapterTest extends PersistenceTestSupport { + + @Autowired + private TakenLectureRepository takenLectureRepository; + + @Autowired + private TakenLecturePersistenceAdapter takenLecturePersistenceAdapter; + + @AfterEach + void afterEach() { + this.takenLectureRepository.deleteAllInBatch(); + this.entityManager + .createNativeQuery("ALTER TABLE lecture auto_increment 1") + .executeUpdate(); + } + + @DisplayName("수강과목을 삭제합니다.") + @Test + public void deleteTakenLectureById() throws Exception { + // given + TakenLectureJpaEntity takenLectureJpaEntity = createTakenLectureJpaEntity(2099, Semester.FIRST); + takenLectureRepository.save(takenLectureJpaEntity); + + // when + takenLecturePersistenceAdapter.deleteTakenLectureById(takenLectureJpaEntity.getId()); + + // then + Optional result = takenLectureRepository.findById(takenLectureJpaEntity.getId()); + assertThat(result.isPresent()).isFalse(); + } + + private TakenLectureJpaEntity createTakenLectureJpaEntity(Integer year, Semester semester) { + return TakenLectureJpaEntity.builder() + .year(year) + .semester(semester) + .build(); + } +} \ No newline at end of file diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserServiceTest.java index fc5d0816..c380a037 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserServiceTest.java @@ -15,7 +15,7 @@ import org.springframework.security.crypto.password.PasswordEncoder; import com.plzgraduate.myongjigraduatebe.parsing.application.port.DeleteParsingTextHistoryPort; -import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.delete.DeleteTakenLectureByUserUseCase; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.delete.DeleteTakenLectureUseCase; import com.plzgraduate.myongjigraduatebe.user.application.port.DeleteUserPort; import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @@ -26,7 +26,7 @@ class WithDrawUserServiceTest { @Mock private FindUserUseCase findUserUseCase; @Mock - private DeleteTakenLectureByUserUseCase deleteTakenLectureByUserUseCase; + private DeleteTakenLectureUseCase deleteTakenLectureByUserUseCase; @Mock private DeleteParsingTextHistoryPort deleteParsingTextHistoryPort; @Mock From e4959698542e6d3bdfdcb250a77b74ea213beb6d Mon Sep 17 00:00:00 2001 From: 5uhwann <106325839+5uhwann@users.noreply.github.com> Date: Wed, 24 Apr 2024 21:56:12 +0900 Subject: [PATCH 11/27] =?UTF-8?q?feat:=20[DEV-29]=20CalculateDetailGraduat?= =?UTF-8?q?ionUseCaseResolver=20=EA=B5=AC=ED=98=84=20(#252)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: CalculateDetailGraduationUseCases 구현 * feat: CalculateDetailGraduationUseCaseResolver 구현 * test: SingleCalculateDetailGraduationUseCaseResolverTest 테스트 오류 수정 * refactor: SingleCalculateDetailGraduationUseCaseResolver 의존성 주입 수정 --- ...culateDetailGraduationUseCaseResolver.java | 9 +++++ ...culateDetailGraduationUseCaseResolver.java | 27 +++++++++++++ ...lculateCommonCultureGraduationService.java | 28 +++++++++++++ ...CalculateCoreCultureGraduationService.java | 28 +++++++++++++ ...icalCultureDetailGraduationUseService.java | 27 +++++++++++++ ...ulateDualMajorDetailGraduationService.java | 26 +++++++++++++ ...demicalCultureDetailGraduationService.java | 27 +++++++++++++ ...tePrimaryMajorDetailGraduationService.java | 26 +++++++++++++ ...culateSubMajorDetailGraduationService.java | 26 +++++++++++++ ...lculateCommonCultureGraduationUseCase.java | 4 ++ ...CalculateCoreCultureGraduationUseCase.java | 5 +++ .../CalculateDetailGraduationUseCase.java | 15 +++++++ ...demicalCultureDetailGraduationUseCase.java | 4 ++ ...ulateDualMajorDetailGraduationUseCase.java | 4 ++ ...demicalCultureDetailGraduationUseCase.java | 5 +++ ...tePrimaryMajorDetailGraduationUseCase.java | 4 ++ ...culateSubMajorDetailGraduationUseCase.java | 4 ++ ...teDetailGraduationUseCaseResolverTest.java | 39 +++++++++++++++++++ 18 files changed, 308 insertions(+) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateDetailGraduationUseCaseResolver.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/SingleCalculateDetailGraduationUseCaseResolver.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCommonCultureGraduationService.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCoreCultureGraduationService.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualBasicAcademicalCultureDetailGraduationUseService.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualMajorDetailGraduationService.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationService.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMajorDetailGraduationService.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSubMajorDetailGraduationService.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateCommonCultureGraduationUseCase.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateCoreCultureGraduationUseCase.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDetailGraduationUseCase.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualBasicAcademicalCultureDetailGraduationUseCase.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualMajorDetailGraduationUseCase.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryBasicAcademicalCultureDetailGraduationUseCase.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryMajorDetailGraduationUseCase.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateSubMajorDetailGraduationUseCase.java create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/SingleCalculateDetailGraduationUseCaseResolverTest.java diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateDetailGraduationUseCaseResolver.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateDetailGraduationUseCaseResolver.java new file mode 100644 index 00000000..a12a6605 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateDetailGraduationUseCaseResolver.java @@ -0,0 +1,9 @@ +package com.plzgraduate.myongjigraduatebe.graduation.api; + +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDetailGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; + +public interface CalculateDetailGraduationUseCaseResolver { + + CalculateDetailGraduationUseCase resolveCalculateDetailGraduationUseCase(GraduationCategory graduationCategory); +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/SingleCalculateDetailGraduationUseCaseResolver.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/SingleCalculateDetailGraduationUseCaseResolver.java new file mode 100644 index 00000000..5f7a7199 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/SingleCalculateDetailGraduationUseCaseResolver.java @@ -0,0 +1,27 @@ +package com.plzgraduate.myongjigraduatebe.graduation.api; + +import java.util.List; + +import org.springframework.stereotype.Component; + +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDetailGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; + +import lombok.RequiredArgsConstructor; + +@Component() +@RequiredArgsConstructor +public class SingleCalculateDetailGraduationUseCaseResolver implements CalculateDetailGraduationUseCaseResolver { + + private final List calculateDetailGraduationUseCases; + + @Override + public CalculateDetailGraduationUseCase resolveCalculateDetailGraduationUseCase( + GraduationCategory graduationCategory) { + return calculateDetailGraduationUseCases.stream() + .filter(calculateDetailGraduationUseCase -> calculateDetailGraduationUseCase.supports(graduationCategory)) + .findFirst() + .orElseThrow(() -> new RuntimeException("No calculate detail graduation case found")); + } + +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCommonCultureGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCommonCultureGraduationService.java new file mode 100644 index 00000000..393d26c3 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCommonCultureGraduationService.java @@ -0,0 +1,28 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.service; + +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.COMMON_CULTURE; + +import org.springframework.stereotype.Service; + +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateCommonCultureGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +@Service +public class CalculateCommonCultureGraduationService implements CalculateCommonCultureGraduationUseCase { + + @Override + public boolean supports(GraduationCategory graduationCategory) { + return graduationCategory == COMMON_CULTURE; + } + + @Override + public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, + GraduationRequirement graduationRequirement) { + return null; + } + +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCoreCultureGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCoreCultureGraduationService.java new file mode 100644 index 00000000..362edb6c --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCoreCultureGraduationService.java @@ -0,0 +1,28 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.service; + +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.*; + +import org.springframework.stereotype.Service; + +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateCoreCultureGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +@Service +public class CalculateCoreCultureGraduationService + implements CalculateCoreCultureGraduationUseCase { + + @Override + public boolean supports(GraduationCategory graduationCategory) { + return graduationCategory == CORE_CULTURE; + } + + @Override + public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, + GraduationRequirement graduationRequirement) { + return null; + } +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualBasicAcademicalCultureDetailGraduationUseService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualBasicAcademicalCultureDetailGraduationUseService.java new file mode 100644 index 00000000..39589b79 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualBasicAcademicalCultureDetailGraduationUseService.java @@ -0,0 +1,27 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.service; + +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.DUAL_BASIC_ACADEMICAL_CULTURE; + +import org.springframework.stereotype.Service; + +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDualBasicAcademicalCultureDetailGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +@Service +public class CalculateDualBasicAcademicalCultureDetailGraduationUseService implements + CalculateDualBasicAcademicalCultureDetailGraduationUseCase { + @Override + public boolean supports(GraduationCategory graduationCategory) { + return graduationCategory == DUAL_BASIC_ACADEMICAL_CULTURE; + } + + @Override + public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, + GraduationRequirement graduationRequirement) { + return null; + } +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualMajorDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualMajorDetailGraduationService.java new file mode 100644 index 00000000..561494ff --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualMajorDetailGraduationService.java @@ -0,0 +1,26 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.service; + +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.DUAL_MAJOR; + +import org.springframework.stereotype.Service; + +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDualMajorDetailGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +@Service +public class CalculateDualMajorDetailGraduationService implements CalculateDualMajorDetailGraduationUseCase { + @Override + public boolean supports(GraduationCategory graduationCategory) { + return graduationCategory == DUAL_MAJOR; + } + + @Override + public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, + GraduationRequirement graduationRequirement) { + return null; + } +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationService.java new file mode 100644 index 00000000..97fbf886 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationService.java @@ -0,0 +1,27 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.service; + +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE; + +import org.springframework.stereotype.Service; + +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDetailGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +@Service +public class CalculatePrimaryBasicAcademicalCultureDetailGraduationService + implements CalculateDetailGraduationUseCase { + @Override + public boolean supports(GraduationCategory graduationCategory) { + return graduationCategory == PRIMARY_BASIC_ACADEMICAL_CULTURE; + } + + @Override + public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, + GraduationRequirement graduationRequirement) { + return null; + } +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMajorDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMajorDetailGraduationService.java new file mode 100644 index 00000000..7c2ccc65 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMajorDetailGraduationService.java @@ -0,0 +1,26 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.service; + +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_MAJOR; + +import org.springframework.stereotype.Service; + +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculatePrimaryMajorDetailGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +@Service +public class CalculatePrimaryMajorDetailGraduationService implements CalculatePrimaryMajorDetailGraduationUseCase { + @Override + public boolean supports(GraduationCategory graduationCategory) { + return graduationCategory == PRIMARY_MAJOR; + } + + @Override + public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, + GraduationRequirement graduationRequirement) { + return null; + } +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSubMajorDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSubMajorDetailGraduationService.java new file mode 100644 index 00000000..710b6723 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSubMajorDetailGraduationService.java @@ -0,0 +1,26 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.service; + +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.*; + +import org.springframework.stereotype.Service; + +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateSubMajorDetailGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +@Service +public class CalculateSubMajorDetailGraduationService implements CalculateSubMajorDetailGraduationUseCase { + @Override + public boolean supports(GraduationCategory graduationCategory) { + return graduationCategory == SUB_MAJOR; + } + + @Override + public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, + GraduationRequirement graduationRequirement) { + return null; + } +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateCommonCultureGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateCommonCultureGraduationUseCase.java new file mode 100644 index 00000000..e8b1ec08 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateCommonCultureGraduationUseCase.java @@ -0,0 +1,4 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; + +public interface CalculateCommonCultureGraduationUseCase extends CalculateDetailGraduationUseCase{ +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateCoreCultureGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateCoreCultureGraduationUseCase.java new file mode 100644 index 00000000..f94e99a5 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateCoreCultureGraduationUseCase.java @@ -0,0 +1,5 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; + +public interface CalculateCoreCultureGraduationUseCase extends CalculateDetailGraduationUseCase { + +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDetailGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDetailGraduationUseCase.java new file mode 100644 index 00000000..1e6e0cf1 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDetailGraduationUseCase.java @@ -0,0 +1,15 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; + +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +public interface CalculateDetailGraduationUseCase { + + boolean supports(GraduationCategory graduationCategory); + + DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, + GraduationRequirement graduationRequirement); +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualBasicAcademicalCultureDetailGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualBasicAcademicalCultureDetailGraduationUseCase.java new file mode 100644 index 00000000..89eb1937 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualBasicAcademicalCultureDetailGraduationUseCase.java @@ -0,0 +1,4 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; + +public interface CalculateDualBasicAcademicalCultureDetailGraduationUseCase extends CalculateDetailGraduationUseCase { +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualMajorDetailGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualMajorDetailGraduationUseCase.java new file mode 100644 index 00000000..8af57051 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualMajorDetailGraduationUseCase.java @@ -0,0 +1,4 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; + +public interface CalculateDualMajorDetailGraduationUseCase extends CalculateDetailGraduationUseCase { +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryBasicAcademicalCultureDetailGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryBasicAcademicalCultureDetailGraduationUseCase.java new file mode 100644 index 00000000..b1972c6f --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryBasicAcademicalCultureDetailGraduationUseCase.java @@ -0,0 +1,5 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; + +public interface CalculatePrimaryBasicAcademicalCultureDetailGraduationUseCase + extends CalculateDetailGraduationUseCase { +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryMajorDetailGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryMajorDetailGraduationUseCase.java new file mode 100644 index 00000000..88be063a --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryMajorDetailGraduationUseCase.java @@ -0,0 +1,4 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; + +public interface CalculatePrimaryMajorDetailGraduationUseCase extends CalculateDetailGraduationUseCase { +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateSubMajorDetailGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateSubMajorDetailGraduationUseCase.java new file mode 100644 index 00000000..f3e27dc0 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateSubMajorDetailGraduationUseCase.java @@ -0,0 +1,4 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; + +public interface CalculateSubMajorDetailGraduationUseCase extends CalculateDetailGraduationUseCase { +} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/SingleCalculateDetailGraduationUseCaseResolverTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/SingleCalculateDetailGraduationUseCaseResolverTest.java new file mode 100644 index 00000000..95d55d86 --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/SingleCalculateDetailGraduationUseCaseResolverTest.java @@ -0,0 +1,39 @@ +package com.plzgraduate.myongjigraduatebe.graduation.api; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; + +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDetailGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; + +@SpringBootTest +@ActiveProfiles("test") +class SingleCalculateDetailGraduationUseCaseResolverTest { + + @Autowired + private SingleCalculateDetailGraduationUseCaseResolver singleCalculateDetailGraduationUseCaseResolver; + + @DisplayName("졸업 카테고리를 계산할 수 있는 CalculateDetailGraduationUseCaseResolver 반환한다.") + @ValueSource(strings = + {"COMMON_CULTURE", "CORE_CULTURE", "PRIMARY_MAJOR", "DUAL_MAJOR", "SUB_MAJOR", + "PRIMARY_BASIC_ACADEMICAL_CULTURE", "DUAL_BASIC_ACADEMICAL_CULTURE" + }) + @ParameterizedTest + void resolveCalculateDetailGraduationUseCase(String graduationCategoryName) { + //given + GraduationCategory graduationCategory = GraduationCategory.valueOf(graduationCategoryName); + + // when + CalculateDetailGraduationUseCase calculateDetailGraduationUseCase = singleCalculateDetailGraduationUseCaseResolver.resolveCalculateDetailGraduationUseCase( + graduationCategory); + + //then + assertThat(calculateDetailGraduationUseCase.supports(graduationCategory)).isEqualTo(true); + } +} From ba9297f32cfb16b208adfef5270db5f01a5fae79 Mon Sep 17 00:00:00 2001 From: 5uhwann <106325839+5uhwann@users.noreply.github.com> Date: Mon, 6 May 2024 16:00:17 +0900 Subject: [PATCH 12/27] =?UTF-8?q?refactor:=20[DEV-19]=20=EA=B3=B5=ED=86=B5?= =?UTF-8?q?=EA=B5=90=EC=96=91=20=EC=83=81=EC=84=B8=20=EC=A1=B8=EC=97=85=20?= =?UTF-8?q?=EA=B2=B0=EA=B3=BC=20=EC=A1=B0=ED=9A=8C=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC=20=EB=B0=8F=20api=20=EA=B0=9C=EB=B0=9C=20(#2?= =?UTF-8?q?53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: CalculateSingleDetailGraduationUseCase 구현 * feat: CalculateCommonCultureGraduationUseCase 구현 * refactor: 공통교양 - 채플 수강 학점 로직 처리 위치 수정 * feat: FindDetailGraduationsController 구현 - 공통교양 * refactor: CalculateGraduationService - 공통교양 세부 졸업 결과 로직 분리 * refactor: swagger 명세 추가 * refactor: api endpoint 수정 및 클래스명 수정 * refactor: FindDetailGraduationController 메서드 명 수정 * refactor: 채플 수강 학점 상수 처리 * refactor: 어노테이션 수정 * refactor: 불필요 설정 제거 * refactor: CalculateDetailGraduationUseCaseResolver 패키지 위치 수정 * feat: MethodArgumentTypeMismatchException 핸들링 추가 * refactor: response spec 수정 --- .../exception/GlobalExceptionHandler.java | 26 +++++-- .../FindDetailGraduationApiPresentation.java | 20 +++++ .../api/FindDetailGraduationController.java | 30 ++++++++ ...etailGraduationCategoryResultResponse.java | 18 ++--- ...lculateCommonCultureGraduationService.java | 23 +++++- ...CalculateCoreCultureGraduationService.java | 3 +- ...icalCultureDetailGraduationUseService.java | 3 +- ...ulateDualMajorDetailGraduationService.java | 3 +- .../service/CalculateGraduationService.java | 15 ++-- ...demicalCultureDetailGraduationService.java | 3 +- ...tePrimaryMajorDetailGraduationService.java | 3 +- ...alculateSingleDetailGraduationService.java | 47 ++++++++++++ ...culateSubMajorDetailGraduationService.java | 3 +- ...alculateSingleDetailGraduationUseCase.java | 10 +++ .../graduation/domain/model/ChapelResult.java | 5 +- .../domain/model/GraduationResult.java | 7 -- .../CommonCultureGraduationManager.java | 15 +++- ...culateDetailGraduationUseCaseResolver.java | 2 +- ...culateDetailGraduationUseCaseResolver.java | 2 +- src/main/resources/application.yml | 3 - .../FindDetailGraduationsControllerTest.java | 72 ++++++++++++++++++ ...teDetailGraduationUseCaseResolverTest.java | 1 + ...ateCommonCultureGraduationServiceTest.java | 67 ++++++++++++++++ ...lateSingleDetailGraduationServiceTest.java | 76 +++++++++++++++++++ .../support/WebAdaptorTestSupport.java | 8 +- 25 files changed, 415 insertions(+), 50 deletions(-) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/FindDetailGraduationApiPresentation.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/FindDetailGraduationController.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationService.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateSingleDetailGraduationUseCase.java rename src/main/java/com/plzgraduate/myongjigraduatebe/graduation/{api => support/resolver}/CalculateDetailGraduationUseCaseResolver.java (83%) rename src/main/java/com/plzgraduate/myongjigraduatebe/graduation/{api => support/resolver}/SingleCalculateDetailGraduationUseCaseResolver.java (93%) create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/FindDetailGraduationsControllerTest.java create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCommonCultureGraduationServiceTest.java create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationServiceTest.java diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/core/exception/GlobalExceptionHandler.java b/src/main/java/com/plzgraduate/myongjigraduatebe/core/exception/GlobalExceptionHandler.java index 7ba18bdf..270a8eaf 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/core/exception/GlobalExceptionHandler.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/core/exception/GlobalExceptionHandler.java @@ -1,6 +1,11 @@ package com.plzgraduate.myongjigraduatebe.core.exception; -import lombok.extern.slf4j.Slf4j; +import java.util.NoSuchElementException; +import java.util.Objects; +import java.util.Optional; + +import javax.validation.ConstraintViolation; +import javax.validation.ConstraintViolationException; import org.springframework.context.support.DefaultMessageSourceResolvable; import org.springframework.http.HttpStatus; @@ -10,12 +15,9 @@ import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; -import java.util.NoSuchElementException; -import java.util.Optional; - -import javax.validation.ConstraintViolation; -import javax.validation.ConstraintViolationException; +import lombok.extern.slf4j.Slf4j; @Slf4j @RestControllerAdvice @@ -62,6 +64,13 @@ public ExceptionResponse handleMethodArgumentNotValidException(MethodArgumentNot return ExceptionResponse.of(HttpStatus.BAD_REQUEST, getBindingErrorMessage(e)); } + @ExceptionHandler(MethodArgumentTypeMismatchException.class) + @ResponseStatus(HttpStatus.BAD_REQUEST) + public ExceptionResponse handleMethodArgumentTypeMismatchException(MethodArgumentTypeMismatchException e) { + log.debug("graduation category mismatch exception occurred: {}", e.getMessage(), e); + return ExceptionResponse.of(HttpStatus.BAD_REQUEST, getMethodArgumentTypeMismatchErrorMessage(e)); + } + @ExceptionHandler({PdfParsingException.class, InvalidPdfException.class}) @ResponseStatus(HttpStatus.BAD_REQUEST) public ExceptionResponse handlePdfException(Exception e) { @@ -89,4 +98,9 @@ private String getBindingErrorMessage(MethodArgumentNotValidException e) { return objectError.map(DefaultMessageSourceResolvable::getDefaultMessage).orElse(null); } + private String getMethodArgumentTypeMismatchErrorMessage(MethodArgumentTypeMismatchException e) { + String errorMessage = Objects.requireNonNull(e.getMessage()).split("value '")[1].split("'")[0]; + return "Failed to convert value: " + errorMessage; + } + } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/FindDetailGraduationApiPresentation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/FindDetailGraduationApiPresentation.java new file mode 100644 index 00000000..21f42451 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/FindDetailGraduationApiPresentation.java @@ -0,0 +1,20 @@ +package com.plzgraduate.myongjigraduatebe.graduation.api; + +import org.springframework.web.bind.annotation.RequestParam; + +import com.plzgraduate.myongjigraduatebe.core.meta.LoginUser; +import com.plzgraduate.myongjigraduatebe.graduation.api.dto.response.DetailGraduationResultResponse; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; + +@Tag(name = "Graduations") +public interface FindDetailGraduationApiPresentation { + + @Operation(summary = "졸업 카테고리 상세 결과 조회", description = "유저의 각 졸업 카테고리 상세 결과를 조회한다.") + @Parameter(name = "graduationCategory", description = "상세 조회하고자 하는 졸업 카테고리") + DetailGraduationResultResponse getDetailGraduation(@LoginUser Long userId, + @RequestParam GraduationCategory graduationCategory); +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/FindDetailGraduationController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/FindDetailGraduationController.java new file mode 100644 index 00000000..94862047 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/FindDetailGraduationController.java @@ -0,0 +1,30 @@ +package com.plzgraduate.myongjigraduatebe.graduation.api; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import com.plzgraduate.myongjigraduatebe.core.meta.LoginUser; +import com.plzgraduate.myongjigraduatebe.core.meta.WebAdapter; +import com.plzgraduate.myongjigraduatebe.graduation.api.dto.response.DetailGraduationResultResponse; +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateSingleDetailGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; + +import lombok.RequiredArgsConstructor; + +@WebAdapter +@RequestMapping("/api/v1/graduations/detail") +@RequiredArgsConstructor +public class FindDetailGraduationController implements FindDetailGraduationApiPresentation { + + private final CalculateSingleDetailGraduationUseCase calculateSingleDetailGraduationUseCase; + + @GetMapping + public DetailGraduationResultResponse getDetailGraduation(@LoginUser Long userId, + @RequestParam GraduationCategory graduationCategory) { + DetailGraduationResult detailGraduationResult = calculateSingleDetailGraduationUseCase.calculateSingleDetailGraduation( + userId, graduationCategory); + return DetailGraduationResultResponse.from(detailGraduationResult); + } +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/DetailGraduationCategoryResultResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/DetailGraduationCategoryResultResponse.java index f04d8456..70ceea87 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/DetailGraduationCategoryResultResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/response/DetailGraduationCategoryResultResponse.java @@ -14,21 +14,21 @@ public class DetailGraduationCategoryResultResponse { @Schema(name = "categoryName", example = "공통교양(기독교)") private final String categoryName; - @Schema(name = "totalCredits", example = "4") - private final int totalCredits; - @Schema(name = "takenCredits", example = "4") - private final int takenCredits; + @Schema(name = "totalCredit", example = "4") + private final int totalCredit; + @Schema(name = "takenCredit", example = "4") + private final int takenCredit; private final List takenLectures; private final List haveToLectures; @Schema(name = "completed", example = "true") private final boolean completed; @Builder - private DetailGraduationCategoryResultResponse(String categoryName, int totalCredits, int takenCredits, + private DetailGraduationCategoryResultResponse(String categoryName, int totalCredit, int takenCredit, List takenLectures, List haveToLectures, boolean completed) { this.categoryName = categoryName; - this.totalCredits = totalCredits; - this.takenCredits = takenCredits; + this.totalCredit = totalCredit; + this.takenCredit = takenCredit; this.takenLectures = takenLectures; this.haveToLectures = haveToLectures; this.completed = completed; @@ -37,8 +37,8 @@ private DetailGraduationCategoryResultResponse(String categoryName, int totalCre public static DetailGraduationCategoryResultResponse from(DetailCategoryResult detailCategoryResult) { return DetailGraduationCategoryResultResponse.builder() .categoryName(detailCategoryResult.getDetailCategoryName()) - .totalCredits(detailCategoryResult.getTotalCredits()) - .takenCredits(detailCategoryResult.getTakenCredits()) + .totalCredit(detailCategoryResult.getTotalCredits()) + .takenCredit(detailCategoryResult.getTakenCredits()) .takenLectures(detailCategoryResult.getTakenLectures().stream() .map(LectureResponse::from) .collect(Collectors.toList())) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCommonCultureGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCommonCultureGraduationService.java index 393d26c3..977b7421 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCommonCultureGraduationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCommonCultureGraduationService.java @@ -1,19 +1,33 @@ package com.plzgraduate.myongjigraduatebe.graduation.application.service; -import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.COMMON_CULTURE; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.*; + +import java.util.Set; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateCommonCultureGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.GraduationManager; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.commonculture.CommonCultureGraduationManager; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindCommonCulturePort; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCulture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; -@Service +import lombok.RequiredArgsConstructor; + +@UseCase +@Transactional(readOnly = true) +@RequiredArgsConstructor public class CalculateCommonCultureGraduationService implements CalculateCommonCultureGraduationUseCase { + private final FindCommonCulturePort findCommonCulturePort; + @Override public boolean supports(GraduationCategory graduationCategory) { return graduationCategory == COMMON_CULTURE; @@ -22,7 +36,10 @@ public boolean supports(GraduationCategory graduationCategory) { @Override public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { - return null; + Set graduationCommonCultures = findCommonCulturePort.findCommonCulture(user); + GraduationManager commonCultureGraduationManager = new CommonCultureGraduationManager(); + return commonCultureGraduationManager.createDetailGraduationResult( + user, takenLectureInventory, graduationCommonCultures, graduationRequirement.getCommonCultureCredit()); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCoreCultureGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCoreCultureGraduationService.java index 362edb6c..e15da165 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCoreCultureGraduationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCoreCultureGraduationService.java @@ -4,6 +4,7 @@ import org.springframework.stereotype.Service; +import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateCoreCultureGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; @@ -11,7 +12,7 @@ import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; -@Service +@UseCase public class CalculateCoreCultureGraduationService implements CalculateCoreCultureGraduationUseCase { diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualBasicAcademicalCultureDetailGraduationUseService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualBasicAcademicalCultureDetailGraduationUseService.java index 39589b79..c0088575 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualBasicAcademicalCultureDetailGraduationUseService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualBasicAcademicalCultureDetailGraduationUseService.java @@ -4,6 +4,7 @@ import org.springframework.stereotype.Service; +import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDualBasicAcademicalCultureDetailGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; @@ -11,7 +12,7 @@ import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; -@Service +@UseCase public class CalculateDualBasicAcademicalCultureDetailGraduationUseService implements CalculateDualBasicAcademicalCultureDetailGraduationUseCase { @Override diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualMajorDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualMajorDetailGraduationService.java index 561494ff..a95a3c58 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualMajorDetailGraduationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualMajorDetailGraduationService.java @@ -4,6 +4,7 @@ import org.springframework.stereotype.Service; +import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDualMajorDetailGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; @@ -11,7 +12,7 @@ import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; -@Service +@UseCase public class CalculateDualMajorDetailGraduationService implements CalculateDualMajorDetailGraduationUseCase { @Override public boolean supports(GraduationCategory graduationCategory) { 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 545213d5..2c9ac07f 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,6 +7,7 @@ import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateCommonCultureGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.ChapelResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DefaultGraduationRequirementType; @@ -17,16 +18,13 @@ import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.BusinessBasicAcademicalManager; import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.DefaultBasicAcademicalManager; import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.SocialScienceBasicAcademicManager; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.commonculture.CommonCultureGraduationManager; import com.plzgraduate.myongjigraduatebe.graduation.domain.service.coreculture.CoreCultureGraduationManager; import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorManager; import com.plzgraduate.myongjigraduatebe.graduation.domain.service.submajor.SubMajorManager; import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindBasicAcademicalCulturePort; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindCommonCulturePort; import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindCoreCulturePort; import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindMajorPort; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; -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.usecase.find.FindTakenLectureUseCase; @@ -40,18 +38,19 @@ @UseCase @Transactional(readOnly = true) @RequiredArgsConstructor -//TODO: 로직 분리 후 테스트 코드 작성 class CalculateGraduationService implements CalculateGraduationUseCase { - private final FindCommonCulturePort findCommonCulturePort; private final FindCoreCulturePort findCoreCulturePort; private final FindBasicAcademicalCulturePort findBasicAcademicalCulturePort; private final FindMajorPort findMajorPort; private final FindTakenLectureUseCase findTakenLectureUseCase; + private final CalculateCommonCultureGraduationUseCase calculateCommonCultureGraduationUseCase; + @Override public GraduationResult calculateGraduation(User user) { GraduationRequirement graduationRequirement = determineGraduationRequirement(user); + // 모든 DetialCategory 분리 시 제거 TakenLectureInventory takenLectureInventory = findTakenLectureUseCase.findTakenLectures(user.getId()); ChapelResult chapelResult = generateChapelResult(takenLectureInventory); @@ -98,10 +97,8 @@ private List generateDetailGraduationResults(User user, private DetailGraduationResult generateCommonCultureDetailGraduationResult(User user, TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { - Set graduationCommonCultures = findCommonCulturePort.findCommonCulture(user); - GraduationManager commonCultureGraduationManager = new CommonCultureGraduationManager(); - return commonCultureGraduationManager.createDetailGraduationResult( - user, takenLectureInventory, graduationCommonCultures, graduationRequirement.getCommonCultureCredit()); + return calculateCommonCultureGraduationUseCase.calculateDetailGraduation(user, takenLectureInventory, + graduationRequirement); } private DetailGraduationResult generateCoreCultureDetailGraduationResult(User user, diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationService.java index 97fbf886..5e4199af 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationService.java @@ -4,6 +4,7 @@ import org.springframework.stereotype.Service; +import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDetailGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; @@ -11,7 +12,7 @@ import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; -@Service +@UseCase public class CalculatePrimaryBasicAcademicalCultureDetailGraduationService implements CalculateDetailGraduationUseCase { @Override diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMajorDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMajorDetailGraduationService.java index 7c2ccc65..dbf75d42 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMajorDetailGraduationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMajorDetailGraduationService.java @@ -4,6 +4,7 @@ import org.springframework.stereotype.Service; +import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculatePrimaryMajorDetailGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; @@ -11,7 +12,7 @@ import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; -@Service +@UseCase public class CalculatePrimaryMajorDetailGraduationService implements CalculatePrimaryMajorDetailGraduationUseCase { @Override public boolean supports(GraduationCategory graduationCategory) { diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationService.java new file mode 100644 index 00000000..943cf77a --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationService.java @@ -0,0 +1,47 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.service; + +import org.springframework.transaction.annotation.Transactional; + +import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; +import com.plzgraduate.myongjigraduatebe.graduation.support.resolver.CalculateDetailGraduationUseCaseResolver; +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDetailGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateSingleDetailGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DefaultGraduationRequirementType; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureUseCase; +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.User; + +import lombok.RequiredArgsConstructor; + +@UseCase +@Transactional(readOnly = true) +@RequiredArgsConstructor +public class CalculateSingleDetailGraduationService implements CalculateSingleDetailGraduationUseCase { + + private final FindUserUseCase findUserUseCase; + private final FindTakenLectureUseCase findTakenLectureUseCase; + private final CalculateDetailGraduationUseCaseResolver calculateDetailGraduationUseCaseResolver; + + @Override + public DetailGraduationResult calculateSingleDetailGraduation(Long userId, GraduationCategory graduationCategory) { + User user = findUserUseCase.findUserById(userId); + TakenLectureInventory takenLectures = findTakenLectureUseCase.findTakenLectures(userId); + CalculateDetailGraduationUseCase calculateDetailGraduationUseCase = calculateDetailGraduationUseCaseResolver.resolveCalculateDetailGraduationUseCase( + graduationCategory); + GraduationRequirement graduationRequirement = determineGraduationRequirement(user); + + return calculateDetailGraduationUseCase.calculateDetailGraduation(user, takenLectures, graduationRequirement); + } + + private GraduationRequirement determineGraduationRequirement(User user) { + College userCollage = College.findBelongingCollege(user.getPrimaryMajor()); + DefaultGraduationRequirementType defaultGraduationRequirement = DefaultGraduationRequirementType.determineGraduationRequirement( + userCollage, user); + return defaultGraduationRequirement.convertToProfitGraduationRequirement(user); + } +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSubMajorDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSubMajorDetailGraduationService.java index 710b6723..8689a183 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSubMajorDetailGraduationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSubMajorDetailGraduationService.java @@ -4,6 +4,7 @@ import org.springframework.stereotype.Service; +import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateSubMajorDetailGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; @@ -11,7 +12,7 @@ import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; -@Service +@UseCase public class CalculateSubMajorDetailGraduationService implements CalculateSubMajorDetailGraduationUseCase { @Override public boolean supports(GraduationCategory graduationCategory) { diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateSingleDetailGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateSingleDetailGraduationUseCase.java new file mode 100644 index 00000000..997823e0 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateSingleDetailGraduationUseCase.java @@ -0,0 +1,10 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; + +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; + +public interface CalculateSingleDetailGraduationUseCase { + + DetailGraduationResult calculateSingleDetailGraduation(Long userId, GraduationCategory graduationCategory); + +} 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 cc9d9b6d..290c467f 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 @@ -8,8 +8,9 @@ @Getter public class ChapelResult { - private static final String CHAPEL_LECTURE_CODE = "KMA02101"; + public static final String CHAPEL_LECTURE_CODE = "KMA02101"; public static final int GRADUATION_COUNT = 4; + public static final double CHAPEL_CREDIT = 0.5; private final int takenCount; private boolean isCompleted; @@ -31,7 +32,7 @@ public void checkCompleted() { } public double getTakenChapelCredit() { - return takenCount * 0.5; + return takenCount * CHAPEL_CREDIT; } private static int countTakenChapel(TakenLectureInventory takenLectureInventory) { 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 bdf67c56..28909058 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 @@ -54,7 +54,6 @@ public void handleLeftTakenLectures(TakenLectureInventory takenLectureInventory, public void checkGraduated() { addUpTotalCredit(); addUpTakenCredit(); - addUpChapelTakenCreditToCommonCulture(); boolean isAllDetailGraduationResultCompleted = detailGraduationResults.stream() .allMatch(DetailGraduationResult::isCompleted); @@ -79,12 +78,6 @@ private void addUpTakenCredit() { + chapelResult.getTakenChapelCredit(); } - private void addUpChapelTakenCreditToCommonCulture() { - this.detailGraduationResults.stream() - .filter(detailGraduationResult -> detailGraduationResult.getGraduationCategory() ==COMMON_CULTURE) - .forEach( - detailGraduationResult -> detailGraduationResult.addCredit(this.chapelResult.getTakenChapelCredit())); - } private void handleLeftTakenNormaCulture(TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureGraduationManager.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureGraduationManager.java index a810d60d..ea90105e 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureGraduationManager.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureGraduationManager.java @@ -1,5 +1,6 @@ package com.plzgraduate.myongjigraduatebe.graduation.domain.service.commonculture; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.ChapelResult.*; import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.*; import java.util.Arrays; @@ -7,6 +8,7 @@ import java.util.Set; import java.util.stream.Collectors; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.ChapelResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailCategoryResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.service.GraduationManager; @@ -29,8 +31,17 @@ public DetailGraduationResult createDetailGraduationResult(User user, graduationLectures, commonCultureCategory)) .collect(Collectors.toList()); - return DetailGraduationResult.create(COMMON_CULTURE, commonCultureGraduationTotalCredit, - commonCultureDetailCategoryResults); + DetailGraduationResult detailGraduationResult = DetailGraduationResult.create(COMMON_CULTURE, + commonCultureGraduationTotalCredit, commonCultureDetailCategoryResults); + detailGraduationResult.addCredit(getTakenChapelCredits(takenLectureInventory)); + return detailGraduationResult; } + private double getTakenChapelCredits(TakenLectureInventory takenLectureInventory) { + int chapelCount = (int)takenLectureInventory.getTakenLectures().stream() + .filter(takenLecture -> takenLecture.getLecture().getLectureCode().equals(CHAPEL_LECTURE_CODE)) + .count(); + return chapelCount * CHAPEL_CREDIT; + + } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateDetailGraduationUseCaseResolver.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/support/resolver/CalculateDetailGraduationUseCaseResolver.java similarity index 83% rename from src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateDetailGraduationUseCaseResolver.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/graduation/support/resolver/CalculateDetailGraduationUseCaseResolver.java index a12a6605..fa53f676 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/CalculateDetailGraduationUseCaseResolver.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/support/resolver/CalculateDetailGraduationUseCaseResolver.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.graduation.api; +package com.plzgraduate.myongjigraduatebe.graduation.support.resolver; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDetailGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/SingleCalculateDetailGraduationUseCaseResolver.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/support/resolver/SingleCalculateDetailGraduationUseCaseResolver.java similarity index 93% rename from src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/SingleCalculateDetailGraduationUseCaseResolver.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/graduation/support/resolver/SingleCalculateDetailGraduationUseCaseResolver.java index 5f7a7199..13795f4b 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/SingleCalculateDetailGraduationUseCaseResolver.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/support/resolver/SingleCalculateDetailGraduationUseCaseResolver.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.graduation.api; +package com.plzgraduate.myongjigraduatebe.graduation.support.resolver; import java.util.List; diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index b94aa2a4..7f27501e 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -17,9 +17,6 @@ spring: format_sql: true open-in-view: false - jackson: - default-property-inclusion: non_null - logging: level: p6spy: info diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/FindDetailGraduationsControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/FindDetailGraduationsControllerTest.java new file mode 100644 index 00000000..f3bf1463 --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/FindDetailGraduationsControllerTest.java @@ -0,0 +1,72 @@ +package com.plzgraduate.myongjigraduatebe.graduation.api; + +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.COMMON_CULTURE; +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 org.springframework.http.HttpStatus; + +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailCategoryResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.support.WebAdaptorTestSupport; +import com.plzgraduate.myongjigraduatebe.support.WithMockAuthenticationUser; + +class FindDetailGraduationsControllerTest extends WebAdaptorTestSupport { + + @WithMockAuthenticationUser + @DisplayName("공통교양 졸업 상세 결과를 조회한다.") + @Test + void getCommonDetailGraduations() throws Exception { + //given + List detailCategories = List.of( + DetailCategoryResult.builder().build(), + DetailCategoryResult.builder().build(), + DetailCategoryResult.builder().build(), + DetailCategoryResult.builder().build() + ); + DetailGraduationResult detailGraduationResult = DetailGraduationResult.builder() + .graduationCategory(COMMON_CULTURE) + .totalCredit(17) + .takenCredit(17) + .isCompleted(true) + .detailCategory(detailCategories) + .build(); + + given(calculateSingleDetailGraduationUseCase.calculateSingleDetailGraduation(1L, + COMMON_CULTURE)).willReturn(detailGraduationResult); + + //when //then + mockMvc.perform(get("/api/v1/graduations/detail") + .param("graduationCategory", "COMMON_CULTURE")) + .andDo(print()) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.totalCredit").value(17)) + .andExpect(jsonPath("$.takenCredit").value(17)) + .andExpect(jsonPath("$.completed").value(true)) + .andExpect(jsonPath("$.detailCategory.length()").value(detailCategories.size())); + } + + @WithMockAuthenticationUser + @DisplayName("GraduationCategory에 해당하지 않는 졸업 상세 조회 시 에러를 반환한다.") + @Test + void getDetailGraduationsWithInvalidGraduationCategory() throws Exception { + //given + String invalidGraduationCategoryName = "COMMON_CULTUR"; + + //when //then + mockMvc.perform(get("/api/v1/graduations/detail") + .param("graduationCategory", invalidGraduationCategoryName)) + .andDo(print()) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.status").value(HttpStatus.BAD_REQUEST.value())) + .andExpect(jsonPath("$.message").value("Failed to convert value: " + invalidGraduationCategoryName)); + } + +} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/SingleCalculateDetailGraduationUseCaseResolverTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/SingleCalculateDetailGraduationUseCaseResolverTest.java index 95d55d86..e385b852 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/SingleCalculateDetailGraduationUseCaseResolverTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/SingleCalculateDetailGraduationUseCaseResolverTest.java @@ -11,6 +11,7 @@ import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDetailGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; +import com.plzgraduate.myongjigraduatebe.graduation.support.resolver.SingleCalculateDetailGraduationUseCaseResolver; @SpringBootTest @ActiveProfiles("test") diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCommonCultureGraduationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCommonCultureGraduationServiceTest.java new file mode 100644 index 00000000..da158ebb --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCommonCultureGraduationServiceTest.java @@ -0,0 +1,67 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.service; + +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.COMMON_CULTURE; +import static com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCultureCategory.CHRISTIAN_A; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; + +import java.util.HashSet; +import java.util.Set; + +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.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindCommonCulturePort; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCulture; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +@ExtendWith(MockitoExtension.class) +class CalculateCommonCultureGraduationServiceTest { + + @Mock + private FindCommonCulturePort findCommonCulturePort; + @InjectMocks + private CalculateCommonCultureGraduationService calculateCommonCultureGraduationService; + + @DisplayName("유저의 공통교양 상세 졸업결과를 계산한다.") + @Test + void calculateCommonCulture() { + //given + User user = User.builder() + .id(1L) + .primaryMajor("응용소프트웨어전공") + .entryYear(19).build(); + HashSet graduationCommonCultures = new HashSet<>( + Set.of(CommonCulture.of(Lecture.from("KMA00101"), CHRISTIAN_A))); + given(findCommonCulturePort.findCommonCulture(user)).willReturn(graduationCommonCultures); + + HashSet takenLectures = new HashSet<>( + Set.of( + TakenLecture.builder().lecture(Lecture.builder() + .lectureCode("KMA00101") + .credit(2).build()).build())); + TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); + + GraduationRequirement graduationRequirement = GraduationRequirement.builder() + .commonCultureCredit(17).build(); + + //when + DetailGraduationResult detailCommonCultureGraduationResult = calculateCommonCultureGraduationService.calculateDetailGraduation( + user, takenLectureInventory, graduationRequirement); + + //then + assertThat(detailCommonCultureGraduationResult) + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(COMMON_CULTURE, false, 17, 2.0); + } + +} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationServiceTest.java new file mode 100644 index 00000000..faf3e29a --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationServiceTest.java @@ -0,0 +1,76 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.service; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.then; + +import java.util.HashSet; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import com.plzgraduate.myongjigraduatebe.graduation.support.resolver.CalculateDetailGraduationUseCaseResolver; +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDetailGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureUseCase; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +@ExtendWith(MockitoExtension.class) +class +CalculateSingleDetailGraduationServiceTest { + + @Mock + private FindUserUseCase findUserUseCase; + @Mock + private FindTakenLectureUseCase findTakenLectureUseCase; + @Mock + private CalculateDetailGraduationUseCaseResolver calculateDetailGraduationUseCaseResolver; + @Mock + private CalculateDetailGraduationUseCase calculateDetailGraduationUseCase; + + @InjectMocks + private CalculateSingleDetailGraduationService calculateSingleDetailGraduationService; + + @DisplayName("단일 카테고리 졸업상세결과를 조회한다.") + @ValueSource(strings = + {"COMMON_CULTURE", "CORE_CULTURE", "PRIMARY_MAJOR", "DUAL_MAJOR", "SUB_MAJOR", + "PRIMARY_BASIC_ACADEMICAL_CULTURE", + "DUAL_BASIC_ACADEMICAL_CULTURE" + }) + @ParameterizedTest + void calculateSingleDetailGraduation(String graduationCategoryName) { + // given + User user = User.builder() + .id(1L) + .entryYear(19) + .primaryMajor("응용소프트웨어전공").build(); + given(findUserUseCase.findUserById(user.getId())).willReturn(user); + + TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(new HashSet<>()); + given(findTakenLectureUseCase.findTakenLectures(user.getId())).willReturn( + takenLectureInventory); + + GraduationCategory graduationCategory = GraduationCategory.valueOf(graduationCategoryName); + given(calculateDetailGraduationUseCaseResolver.resolveCalculateDetailGraduationUseCase( + graduationCategory)).willReturn(calculateDetailGraduationUseCase); + + // when + calculateSingleDetailGraduationService.calculateSingleDetailGraduation( + user.getId(), graduationCategory); + + // then + then(calculateDetailGraduationUseCase).should() + .calculateDetailGraduation(any(User.class), any(TakenLectureInventory.class), + any(GraduationRequirement.class)); + + } + +} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java b/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java index 78138a5b..a1ed6a4d 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java @@ -24,7 +24,9 @@ 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.FindDetailGraduationController; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateSingleDetailGraduationUseCase; import com.plzgraduate.myongjigraduatebe.lecture.api.SearchLectureController; import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.SearchLectureUseCase; import com.plzgraduate.myongjigraduatebe.parsing.api.ParsingTextController; @@ -68,7 +70,8 @@ ResetPasswordController.class, SignUpController.class, FindAuthIdController.class, - FindCompletedCreditsController.class + FindCompletedCreditsController.class, + FindDetailGraduationController.class }) public abstract class WebAdaptorTestSupport { @@ -138,6 +141,9 @@ public abstract class WebAdaptorTestSupport { @MockBean protected FindCompletedCreditUseCase findCompletedCreditUseCase; + @MockBean + protected CalculateSingleDetailGraduationUseCase calculateSingleDetailGraduationUseCase; + @BeforeEach void setUp() { mockMvc = MockMvcBuilders.webAppContextSetup(context) From 106c623cbfc1459520e6f5a78e513a7c027ce0fc Mon Sep 17 00:00:00 2001 From: 5uhwann <106325839+5uhwann@users.noreply.github.com> Date: Sun, 12 May 2024 15:51:00 +0900 Subject: [PATCH 13/27] =?UTF-8?q?[DEV-20]=20=ED=95=B5=EC=8B=AC=EA=B5=90?= =?UTF-8?q?=EC=96=91=20=EC=83=81=EC=84=B8=20=EC=A1=B8=EC=97=85=20=EA=B2=B0?= =?UTF-8?q?=EA=B3=BC=20=EC=A1=B0=ED=9A=8C=20=EB=A1=9C=EC=A7=81=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC=20=EB=B0=8F=20api=20=EA=B0=9C=EB=B0=9C=20(#255)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: CalculateCoreCultureGraduationUseCase 구현 * test: FindDetailGraduationsControllerTest - 핵심교양 졸업 상세 결과 조회 테스트 작성 * refactor: CalculateGraduationService - generateCoreCultureDetailGraduationResult 메서드 calculateCoreCultureGraduationUseCase 활용 수정 --- ...CalculateCoreCultureGraduationService.java | 20 +++++- .../service/CalculateGraduationService.java | 13 ++-- .../FindDetailGraduationsControllerTest.java | 35 ++++++++++ ...ulateCoreCultureGraduationServiceTest.java | 67 +++++++++++++++++++ 4 files changed, 125 insertions(+), 10 deletions(-) create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCoreCultureGraduationServiceTest.java diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCoreCultureGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCoreCultureGraduationService.java index e15da165..fbe7c073 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCoreCultureGraduationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCoreCultureGraduationService.java @@ -2,20 +2,35 @@ import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.*; +import java.util.Set; + import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateCoreCultureGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.GraduationManager; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.commonculture.CommonCultureGraduationManager; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.coreculture.CoreCultureGraduationManager; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindCoreCulturePort; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCulture; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CoreCulture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; +import lombok.RequiredArgsConstructor; + @UseCase +@Transactional(readOnly = true) +@RequiredArgsConstructor public class CalculateCoreCultureGraduationService implements CalculateCoreCultureGraduationUseCase { + private final FindCoreCulturePort findCoreCulturePort; + @Override public boolean supports(GraduationCategory graduationCategory) { return graduationCategory == CORE_CULTURE; @@ -24,6 +39,9 @@ public boolean supports(GraduationCategory graduationCategory) { @Override public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { - return null; + Set graduationCoreCultures = findCoreCulturePort.findCoreCulture(user); + GraduationManager coreCultureGraduationManager = new CoreCultureGraduationManager(); + return coreCultureGraduationManager.createDetailGraduationResult( + user, takenLectureInventory, graduationCoreCultures, graduationRequirement.getCoreCultureCredit()); } } 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 2c9ac07f..bb7530e8 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 @@ -8,6 +8,7 @@ import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateCommonCultureGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateCoreCultureGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.ChapelResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DefaultGraduationRequirementType; @@ -18,14 +19,11 @@ import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.BusinessBasicAcademicalManager; import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.DefaultBasicAcademicalManager; import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.SocialScienceBasicAcademicManager; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.coreculture.CoreCultureGraduationManager; import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorManager; import com.plzgraduate.myongjigraduatebe.graduation.domain.service.submajor.SubMajorManager; import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindBasicAcademicalCulturePort; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindCoreCulturePort; import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindMajorPort; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CoreCulture; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureUseCase; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; @@ -40,17 +38,16 @@ @RequiredArgsConstructor class CalculateGraduationService implements CalculateGraduationUseCase { - private final FindCoreCulturePort findCoreCulturePort; private final FindBasicAcademicalCulturePort findBasicAcademicalCulturePort; private final FindMajorPort findMajorPort; private final FindTakenLectureUseCase findTakenLectureUseCase; private final CalculateCommonCultureGraduationUseCase calculateCommonCultureGraduationUseCase; + private final CalculateCoreCultureGraduationUseCase calculateCoreCultureGraduationUseCase; @Override public GraduationResult calculateGraduation(User user) { GraduationRequirement graduationRequirement = determineGraduationRequirement(user); - // 모든 DetialCategory 분리 시 제거 TakenLectureInventory takenLectureInventory = findTakenLectureUseCase.findTakenLectures(user.getId()); ChapelResult chapelResult = generateChapelResult(takenLectureInventory); @@ -103,10 +100,8 @@ private DetailGraduationResult generateCommonCultureDetailGraduationResult(User private DetailGraduationResult generateCoreCultureDetailGraduationResult(User user, TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { - Set graduationCoreCultures = findCoreCulturePort.findCoreCulture(user); - GraduationManager coreCultureGraduationManager = new CoreCultureGraduationManager(); - return coreCultureGraduationManager.createDetailGraduationResult( - user, takenLectureInventory, graduationCoreCultures, graduationRequirement.getCoreCultureCredit()); + return calculateCoreCultureGraduationUseCase.calculateDetailGraduation(user, takenLectureInventory, + graduationRequirement); } private DetailGraduationResult generteBasicAcademicalDetailGraduationResult(User user, diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/FindDetailGraduationsControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/FindDetailGraduationsControllerTest.java index f3bf1463..00c6f274 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/FindDetailGraduationsControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/FindDetailGraduationsControllerTest.java @@ -1,6 +1,7 @@ package com.plzgraduate.myongjigraduatebe.graduation.api; import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.COMMON_CULTURE; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.CORE_CULTURE; 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; @@ -15,6 +16,7 @@ import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailCategoryResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CoreCulture; import com.plzgraduate.myongjigraduatebe.support.WebAdaptorTestSupport; import com.plzgraduate.myongjigraduatebe.support.WithMockAuthenticationUser; @@ -53,6 +55,39 @@ void getCommonDetailGraduations() throws Exception { .andExpect(jsonPath("$.detailCategory.length()").value(detailCategories.size())); } + @WithMockAuthenticationUser + @DisplayName("핵심교양 졸업 상세 결과를 조회한다.") + @Test + void getCoreDetailGraduations() throws Exception { + //given + List detailCategories = List.of( + DetailCategoryResult.builder().build(), + DetailCategoryResult.builder().build(), + DetailCategoryResult.builder().build(), + DetailCategoryResult.builder().build() + ); + DetailGraduationResult detailGraduationResult = DetailGraduationResult.builder() + .graduationCategory(CORE_CULTURE) + .totalCredit(12) + .takenCredit(12) + .isCompleted(true) + .detailCategory(detailCategories) + .build(); + + given(calculateSingleDetailGraduationUseCase.calculateSingleDetailGraduation(1L, + CORE_CULTURE)).willReturn(detailGraduationResult); + + //when //then + mockMvc.perform(get("/api/v1/graduations/detail") + .param("graduationCategory", "CORE_CULTURE")) + .andDo(print()) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.totalCredit").value(12)) + .andExpect(jsonPath("$.takenCredit").value(12)) + .andExpect(jsonPath("$.completed").value(true)) + .andExpect(jsonPath("$.detailCategory.length()").value(detailCategories.size())); + } + @WithMockAuthenticationUser @DisplayName("GraduationCategory에 해당하지 않는 졸업 상세 조회 시 에러를 반환한다.") @Test diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCoreCultureGraduationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCoreCultureGraduationServiceTest.java new file mode 100644 index 00000000..41f77eca --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCoreCultureGraduationServiceTest.java @@ -0,0 +1,67 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.service; + +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.CORE_CULTURE; +import static com.plzgraduate.myongjigraduatebe.lecture.domain.model.CoreCultureCategory.CULTURE_ART; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; + +import java.util.HashSet; +import java.util.Set; + +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.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindCoreCulturePort; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CoreCulture; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +@ExtendWith(MockitoExtension.class) +class CalculateCoreCultureGraduationServiceTest { + + @Mock + private FindCoreCulturePort findCoreCulturePort; + @InjectMocks + private CalculateCoreCultureGraduationService calculateCoreCultureGraduationService; + + @DisplayName("유저의 핵심교양 상세 졸업결과를 계산한다.") + @Test + void calculateCoreCulture() { + //given + User user = User.builder() + .id(1L) + .primaryMajor("응용소프트웨어전공") + .entryYear(19).build(); + HashSet graduationCoreCultures = new HashSet<>( + Set.of(CoreCulture.of(Lecture.from("KMA02128"), CULTURE_ART))); + given(findCoreCulturePort.findCoreCulture(user)).willReturn(graduationCoreCultures); + + HashSet takenLectures = new HashSet<>( + Set.of( + TakenLecture.builder().lecture(Lecture.builder() + .lectureCode("KMA02128") + .credit(3).build()).build())); + TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); + + GraduationRequirement graduationRequirement = GraduationRequirement.builder() + .coreCultureCredit(12).build(); + + //when + DetailGraduationResult detailCoreCultureGraduationResult = calculateCoreCultureGraduationService.calculateDetailGraduation( + user, takenLectureInventory, graduationRequirement); + + //then + assertThat(detailCoreCultureGraduationResult) + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(CORE_CULTURE, false, 12, 3.0); + } + +} From da568bc4adc8d9c724216ed3376ea57d86f536d8 Mon Sep 17 00:00:00 2001 From: 5uhwann <106325839+5uhwann@users.noreply.github.com> Date: Sun, 12 May 2024 15:56:00 +0900 Subject: [PATCH 14/27] =?UTF-8?q?[DEV-30]=20dn-rule=20alert=20=EC=8A=A4?= =?UTF-8?q?=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EC=B6=94=EA=B0=80=20(#254)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/dn-rule.yml | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/.github/workflows/dn-rule.yml b/.github/workflows/dn-rule.yml index c9503b83..c82c5a6f 100644 --- a/.github/workflows/dn-rule.yml +++ b/.github/workflows/dn-rule.yml @@ -1,7 +1,7 @@ name: PR Label Automation on: schedule: - - cron: '0 0 * * *' # Executes daily at midnight + - cron: '0 0 10 * *' jobs: update-labels: @@ -20,6 +20,9 @@ jobs: state: 'open', }); + // Define the Discord webhook URL + const webhookUrl = 'https://discord.com/api/webhooks/1198592354127458326/mighz1RApMReApkYxMy0mJHI97du_nWnBRymuRLldMqgvRDNCme2RIW0fDtS3nEZAKip'; + for (const pr of prs.data) { const prNumber = pr.number; let labels = pr.labels.map(label => label.name); @@ -47,14 +50,30 @@ jobs: if (dLabel) { let day = parseInt(dLabel.split("-")[1]); if (day > 0) { - await updateLabel(dLabel, `D-${day - 1}`); - console.log(`Updated label from ${dLabel} to D-${day - 1} on PR #${prNumber}`); + const newDayLabel = `D-${day - 1}`; + await updateLabel(dLabel, newDayLabel); + console.log(`Updated label from ${dLabel} to ${newDayLabel} on PR #${prNumber}`); + await fetch(webhookUrl, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + content: `Attention! PR #${prNumber} has ${day - 1} day(s) left before the deadline.`, + }), + }); } else if (day === 0) { - // Handle 'D-0' logic here + await fetch(webhookUrl, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + content: `Urgent! PR #${prNumber} is due today!`, + }), + }); } } else { - // Add 'D-5' label if no 'D-' label is present await updateLabel(null, 'D-5'); - console.log(`Added D-5 label to PR #${prNumber}`); } } From be4eda08b998ebc3a37da77c17d77e9611193bb9 Mon Sep 17 00:00:00 2001 From: 5uhwann <106325839+5uhwann@users.noreply.github.com> Date: Mon, 20 May 2024 19:52:51 +0900 Subject: [PATCH 15/27] =?UTF-8?q?[DEV-22]=20=EC=A3=BC=EC=A0=84=EA=B3=B5=20?= =?UTF-8?q?=EC=83=81=EC=84=B8=20=EC=A1=B8=EC=97=85=20=EA=B2=B0=EA=B3=BC=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EB=A1=9C=EC=A7=81=20=EB=B6=84=EB=A6=AC=20?= =?UTF-8?q?=EB=B0=8F=20API=20=EA=B0=9C=EB=B0=9C=20(#257)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: GraduationCategory - 전공필수/선택 카테고리 분리 * feat: CalculatePrimaryMandatoryMajorDetailGraduationUseCase 구현 * refactor: 변수명 오타 및 테스트 이름 수정 * feat: CalculatePrimaryElectiveMajorDetailGraduationUseCase 구현 * feat: 주전공 필수/선택 분리 기능 구현 * refactor: CalculateGraduationService - 주 전공 상세 졸업 결과 로직 수정 * refactor: 불필요 임포트 제거 * chore: dn-rule 스크립트 cron job 시간 오류 수정 --- .github/workflows/dn-rule.yml | 2 +- .../service/CalculateGraduationService.java | 28 +++-- ...yElectiveMajorDetailGraduationService.java | 69 +++++++++++ ...tePrimaryMajorDetailGraduationService.java | 27 ----- ...MandatoryMajorDetailGraduationService.java | 67 +++++++++++ ...yElectiveMajorDetailGraduationUseCase.java | 9 ++ ...tePrimaryMajorDetailGraduationUseCase.java | 4 - ...MandatoryMajorDetailGraduationUseCase.java | 9 ++ .../domain/model/DetailCategoryResult.java | 5 +- .../domain/model/DetailGraduationResult.java | 13 ++- .../domain/model/GraduationCategory.java | 3 +- .../domain/service/major/MajorManager.java | 6 +- .../lecture/domain/model/MajorLecture.java | 10 +- ...ateOrModifyCompletedCreditServiceTest.java | 11 +- ...teDetailGraduationUseCaseResolverTest.java | 4 +- ...ctiveMajorDetailGraduationServiceTest.java | 107 ++++++++++++++++++ ...atoryMajorDetailGraduationServiceTest.java | 103 +++++++++++++++++ ...lateSingleDetailGraduationServiceTest.java | 5 +- 18 files changed, 423 insertions(+), 59 deletions(-) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryElectiveMajorDetailGraduationService.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMajorDetailGraduationService.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMandatoryMajorDetailGraduationService.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryElectiveMajorDetailGraduationUseCase.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryMajorDetailGraduationUseCase.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryMandatoryMajorDetailGraduationUseCase.java create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryElectiveMajorDetailGraduationServiceTest.java create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMandatoryMajorDetailGraduationServiceTest.java diff --git a/.github/workflows/dn-rule.yml b/.github/workflows/dn-rule.yml index c82c5a6f..0c16df04 100644 --- a/.github/workflows/dn-rule.yml +++ b/.github/workflows/dn-rule.yml @@ -1,7 +1,7 @@ name: PR Label Automation on: schedule: - - cron: '0 0 10 * *' + - cron: '0 10 * * *' jobs: update-labels: 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 bb7530e8..dc31e9a0 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 @@ -10,6 +10,8 @@ import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateCommonCultureGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateCoreCultureGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculatePrimaryElectiveMajorDetailGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculatePrimaryMandatoryMajorDetailGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.ChapelResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DefaultGraduationRequirementType; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; @@ -44,6 +46,8 @@ class CalculateGraduationService implements CalculateGraduationUseCase { private final CalculateCommonCultureGraduationUseCase calculateCommonCultureGraduationUseCase; private final CalculateCoreCultureGraduationUseCase calculateCoreCultureGraduationUseCase; + private final CalculatePrimaryMandatoryMajorDetailGraduationUseCase calculatePrimaryMandatoryMajorDetailGraduationUseCase; + private final CalculatePrimaryElectiveMajorDetailGraduationUseCase calculatePrimaryElectiveMajorDetailGraduationUseCase; @Override public GraduationResult calculateGraduation(User user) { @@ -79,11 +83,11 @@ private List generateDetailGraduationResults(User user, generateCoreCultureDetailGraduationResult( user, takenLectureInventory, graduationRequirement), generteBasicAcademicalDetailGraduationResult( - user, takenLectureInventory, graduationRequirement), - generateMajorDetailGraduationResult( user, takenLectureInventory, graduationRequirement) )); + addPrimaryMajorDetailGraduation(user, takenLectureInventory, graduationRequirement, detailGraduationResults); + if (user.getStudentCategory() == StudentCategory.SUB_MAJOR) { detailGraduationResults.add( generateSubMajorDetailGraduationResult(user, takenLectureInventory, graduationRequirement)); @@ -132,12 +136,20 @@ private GraduationManager determineBasicAcademica return basicAcademicalCultureGraduationManager; } - private DetailGraduationResult generateMajorDetailGraduationResult(User user, - TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { - Set graduationMajorLectures = findMajorPort.findMajor(user.getPrimaryMajor()); - GraduationManager majorGraduationManager = new MajorManager(); - return majorGraduationManager.createDetailGraduationResult(user, - takenLectureInventory, graduationMajorLectures, graduationRequirement.getPrimaryMajorCredit()); + private void addPrimaryMajorDetailGraduation(User user, TakenLectureInventory takenLectureInventory, + GraduationRequirement graduationRequirement, List detailGraduationResults) { + Set graduationPrimaryMajorLectures = findMajorPort.findMajor(user.getPrimaryMajor()); + MajorManager majorManager = new MajorManager(); + + DetailGraduationResult primaryMajorDetailGraduationResult = majorManager.createDetailGraduationResult(user, + takenLectureInventory, graduationPrimaryMajorLectures, graduationRequirement.getPrimaryMajorCredit()); + DetailGraduationResult primaryMandatoryMajorDetailGraduationResult = calculatePrimaryMandatoryMajorDetailGraduationUseCase.isolatePrimaryMandatoryMajorDetailGraduation( + primaryMajorDetailGraduationResult); + DetailGraduationResult primaryElectiveMajorDetailGraduationResult = calculatePrimaryElectiveMajorDetailGraduationUseCase.isolatePrimaryElectiveMajorDetailGraduation( + primaryMajorDetailGraduationResult); + + detailGraduationResults.addAll( + List.of(primaryMandatoryMajorDetailGraduationResult, primaryElectiveMajorDetailGraduationResult)); } private DetailGraduationResult generateSubMajorDetailGraduationResult(User user, diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryElectiveMajorDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryElectiveMajorDetailGraduationService.java new file mode 100644 index 00000000..30edb262 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryElectiveMajorDetailGraduationService.java @@ -0,0 +1,69 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.service; + +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_ELECTIVE_MAJOR; + +import java.util.List; +import java.util.Set; + +import org.springframework.transaction.annotation.Transactional; + +import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculatePrimaryElectiveMajorDetailGraduationUseCase; +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.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.GraduationManager; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorManager; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindMajorPort; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +import lombok.RequiredArgsConstructor; + +@UseCase +@Transactional(readOnly = true) +@RequiredArgsConstructor +public class CalculatePrimaryElectiveMajorDetailGraduationService + implements CalculatePrimaryElectiveMajorDetailGraduationUseCase { + + private final FindMajorPort findMajorPort; + + @Override + public boolean supports(GraduationCategory graduationCategory) { + return graduationCategory == PRIMARY_ELECTIVE_MAJOR; + } + + @Override + public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, + GraduationRequirement graduationRequirement) { + Set graduationMajorLectures = findMajorPort.findMajor(user.getPrimaryMajor()); + GraduationManager majorGraduationManager = new MajorManager(); + DetailGraduationResult majorDetailGraduationResult = majorGraduationManager.createDetailGraduationResult(user, + takenLectureInventory, graduationMajorLectures, graduationRequirement.getPrimaryMajorCredit()); + + DetailCategoryResult electiveMajorDetailCategoryResult = separateElectiveMajor(majorDetailGraduationResult); + + return DetailGraduationResult.create(PRIMARY_ELECTIVE_MAJOR, + electiveMajorDetailCategoryResult.getTotalCredits(), List.of(electiveMajorDetailCategoryResult)); + } + + @Override + public DetailGraduationResult isolatePrimaryElectiveMajorDetailGraduation( + DetailGraduationResult detailPrimaryMajorGraduationResult) { + DetailCategoryResult electiveMajorDetailCategoryResult = separateElectiveMajor( + detailPrimaryMajorGraduationResult); + return DetailGraduationResult.create(PRIMARY_ELECTIVE_MAJOR, + electiveMajorDetailCategoryResult.getTotalCredits(), List.of(electiveMajorDetailCategoryResult)); + } + + private DetailCategoryResult separateElectiveMajor( + DetailGraduationResult majorDetailGraduationResult) { + return majorDetailGraduationResult.getDetailCategory() + .stream() + .filter(detailCategoryResult -> detailCategoryResult.getDetailCategoryName().equals("전공선택")) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("Not Found DetailCategoryResult(전공 선택)")); + } +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMajorDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMajorDetailGraduationService.java deleted file mode 100644 index dbf75d42..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMajorDetailGraduationService.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.service; - -import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_MAJOR; - -import org.springframework.stereotype.Service; - -import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculatePrimaryMajorDetailGraduationUseCase; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; -import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; - -@UseCase -public class CalculatePrimaryMajorDetailGraduationService implements CalculatePrimaryMajorDetailGraduationUseCase { - @Override - public boolean supports(GraduationCategory graduationCategory) { - return graduationCategory == PRIMARY_MAJOR; - } - - @Override - public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, - GraduationRequirement graduationRequirement) { - return null; - } -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMandatoryMajorDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMandatoryMajorDetailGraduationService.java new file mode 100644 index 00000000..ff16a213 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMandatoryMajorDetailGraduationService.java @@ -0,0 +1,67 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.service; + +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_MANDATORY_MAJOR; + +import java.util.List; +import java.util.Set; + +import org.springframework.transaction.annotation.Transactional; + +import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculatePrimaryMandatoryMajorDetailGraduationUseCase; +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.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.GraduationManager; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorManager; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindMajorPort; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +import lombok.RequiredArgsConstructor; + +@UseCase +@Transactional(readOnly = true) +@RequiredArgsConstructor +public class CalculatePrimaryMandatoryMajorDetailGraduationService + implements CalculatePrimaryMandatoryMajorDetailGraduationUseCase { + + private final FindMajorPort findMajorPort; + + @Override + public boolean supports(GraduationCategory graduationCategory) { + return graduationCategory == PRIMARY_MANDATORY_MAJOR; + } + + @Override + public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, + GraduationRequirement graduationRequirement) { + Set graduationMajorLectures = findMajorPort.findMajor(user.getPrimaryMajor()); + GraduationManager majorGraduationManager = new MajorManager(); + DetailGraduationResult majorDetailGraduationResult = majorGraduationManager.createDetailGraduationResult(user, + takenLectureInventory, graduationMajorLectures, graduationRequirement.getPrimaryMajorCredit()); + + DetailCategoryResult mandatoryMajorDetailCategoryResult = separateMandatoryMajor(majorDetailGraduationResult); + return DetailGraduationResult.create(PRIMARY_MANDATORY_MAJOR, + mandatoryMajorDetailCategoryResult.getTotalCredits(), List.of(mandatoryMajorDetailCategoryResult)); + } + + @Override + public DetailGraduationResult isolatePrimaryMandatoryMajorDetailGraduation( + DetailGraduationResult primaryMajorDetailGraduationResult) { + DetailCategoryResult mandatoryMajorDetailCategoryResult = separateMandatoryMajor( + primaryMajorDetailGraduationResult); + return DetailGraduationResult.create(PRIMARY_MANDATORY_MAJOR, + mandatoryMajorDetailCategoryResult.getTotalCredits(), List.of(mandatoryMajorDetailCategoryResult)); + } + + private DetailCategoryResult separateMandatoryMajor( + DetailGraduationResult majorDetailGraduationResult) { + return majorDetailGraduationResult.getDetailCategory().stream() + .filter(detailCategoryResult -> detailCategoryResult.getDetailCategoryName().equals("전공필수")) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("Not Found DetailCategoryResult(전공 필수)")); + } +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryElectiveMajorDetailGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryElectiveMajorDetailGraduationUseCase.java new file mode 100644 index 00000000..f7e32598 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryElectiveMajorDetailGraduationUseCase.java @@ -0,0 +1,9 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; + +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; + +public interface CalculatePrimaryElectiveMajorDetailGraduationUseCase extends CalculateDetailGraduationUseCase { + + DetailGraduationResult isolatePrimaryElectiveMajorDetailGraduation( + DetailGraduationResult primaryMajorDetailGraduationResult); +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryMajorDetailGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryMajorDetailGraduationUseCase.java deleted file mode 100644 index 88be063a..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryMajorDetailGraduationUseCase.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; - -public interface CalculatePrimaryMajorDetailGraduationUseCase extends CalculateDetailGraduationUseCase { -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryMandatoryMajorDetailGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryMandatoryMajorDetailGraduationUseCase.java new file mode 100644 index 00000000..2b0d616b --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryMandatoryMajorDetailGraduationUseCase.java @@ -0,0 +1,9 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; + +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; + +public interface CalculatePrimaryMandatoryMajorDetailGraduationUseCase extends CalculateDetailGraduationUseCase { + + DetailGraduationResult isolatePrimaryMandatoryMajorDetailGraduation( + DetailGraduationResult primaryMajorDetailGraduationResult); +} 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 feb7c323..e322276c 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 @@ -52,7 +52,7 @@ public static DetailCategoryResult create(String detailCategoryName, boolean isS public void calculate(Set taken, Set graduationLectures) { addTakenLectures(taken); calculateLeftCredit(); - if(!checkCompleted()) { + if (!checkCompleted()) { addMandatoryLectures(taken, graduationLectures); } } @@ -75,7 +75,8 @@ private void addTakenLectures(Set taken) { private void calculateLeftCredit() { int leftCredit = takenCredits - totalCredits; if (leftCredit > 0) { - if (detailCategoryName.equals(PRIMARY_MAJOR.getName())) { + if (detailCategoryName.equals(PRIMARY_MANDATORY_MAJOR.getName()) || + detailCategoryName.equals(PRIMARY_ELECTIVE_MAJOR.getName())) { freeElectiveLeftCredit = leftCredit; takenCredits -= leftCredit; return; 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 d42c4bd0..de9f5160 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 @@ -15,7 +15,8 @@ public class DetailGraduationResult { private final List detailCategory; @Builder - private DetailGraduationResult(GraduationCategory graduationCategory, boolean isCompleted, int totalCredit, int takenCredit, + private DetailGraduationResult(GraduationCategory graduationCategory, boolean isCompleted, int totalCredit, + int takenCredit, List detailCategory) { this.graduationCategory = graduationCategory; this.isCompleted = isCompleted; @@ -35,6 +36,16 @@ public static DetailGraduationResult create(GraduationCategory graduationCategor .build(); } + public static DetailGraduationResult createMajorDetailGraduationResult(int totalCredit, + List detailCategoryResults) { + return DetailGraduationResult.builder() + .isCompleted(checkIsCompleted(detailCategoryResults)) + .totalCredit(totalCredit) + .takenCredit(calculateTakenCredit(detailCategoryResults)) + .detailCategory(detailCategoryResults) + .build(); + } + public void addCredit(double takenCredit) { this.takenCredit += takenCredit; } 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 f70f3150..f81aa671 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,7 +13,8 @@ public enum GraduationCategory { COMMON_CULTURE("공통교양"), CORE_CULTURE("핵심교양"), - PRIMARY_MAJOR("주전공"), + PRIMARY_MANDATORY_MAJOR("주전공필수"), + PRIMARY_ELECTIVE_MAJOR("주전공선택"), DUAL_MAJOR("복수전공"), SUB_MAJOR("부전공"), PRIMARY_BASIC_ACADEMICAL_CULTURE("주 학문기초교양"), 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 90060f7d..5058c5c1 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,7 +1,5 @@ package com.plzgraduate.myongjigraduatebe.graduation.domain.service.major; -import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_MAJOR; - import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -15,8 +13,8 @@ import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; public class MajorManager implements GraduationManager { @@ -50,7 +48,7 @@ public DetailGraduationResult createDetailGraduationResult(User user, DetailCategoryResult electiveDetailCategoryResult = electiveMajorManager.createDetailCategoryResult( takenLectureInventory, electiveLectures, electiveMajorTotalCredit); - return DetailGraduationResult.create(PRIMARY_MAJOR, graduationResultTotalCredit, + return DetailGraduationResult.createMajorDetailGraduationResult(graduationResultTotalCredit, List.of(mandantoryDetailCategoryResult, electiveDetailCategoryResult)); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/domain/model/MajorLecture.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/domain/model/MajorLecture.java index f7b269b5..4759f3f3 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/domain/model/MajorLecture.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/domain/model/MajorLecture.java @@ -13,7 +13,8 @@ public class MajorLecture { private final int appliedEndEntryYear; @Builder - private MajorLecture(Lecture lecture, String major, int isMandatory, int appliedStartEntryYear, int appliedEndEntryYear) { + private MajorLecture(Lecture lecture, String major, int isMandatory, int appliedStartEntryYear, + int appliedEndEntryYear) { this.lecture = lecture; this.major = major; this.isMandatory = isMandatory; @@ -21,7 +22,8 @@ private MajorLecture(Lecture lecture, String major, int isMandatory, int applied this.appliedEndEntryYear = appliedEndEntryYear; } - public static MajorLecture of(Lecture lecture, String major, int isMandatory, int appliedStartEntryYear, int appliedEndEntryYear) { + public static MajorLecture of(Lecture lecture, String major, int isMandatory, int appliedStartEntryYear, + int appliedEndEntryYear) { return MajorLecture.builder() .lecture(lecture) .major(major) @@ -32,13 +34,13 @@ public static MajorLecture of(Lecture lecture, String major, int isMandatory, in } public void changeMandatoryToElectiveByEntryYearRange(int entryYear) { - if(checkMandatoryByEntryYear(entryYear)) { + if (checkMandatoryByEntryYear(entryYear)) { isMandatory = 0; } } private boolean checkMandatoryByEntryYear(int entryYear) { - return isMandatory==1 && !(entryYear >= appliedStartEntryYear && entryYear <= appliedEndEntryYear); + return isMandatory == 1 && !(entryYear >= appliedStartEntryYear && entryYear <= appliedEndEntryYear); } } 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 87d5f1dc..9e1094ed 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 @@ -88,7 +88,9 @@ void generateOrModifyCompletedCreditPort() { (double)eachDetailGraduationResultTakenCredit), tuple(GraduationCategory.CORE_CULTURE, eachDetailGraduationResultTotalCredit, (double)eachDetailGraduationResultTakenCredit), - tuple(GraduationCategory.PRIMARY_MAJOR, eachDetailGraduationResultTotalCredit, + tuple(GraduationCategory.PRIMARY_MANDATORY_MAJOR, eachDetailGraduationResultTotalCredit, + (double)eachDetailGraduationResultTakenCredit), + tuple(GraduationCategory.PRIMARY_ELECTIVE_MAJOR, eachDetailGraduationResultTotalCredit, (double)eachDetailGraduationResultTakenCredit), tuple(GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE, eachDetailGraduationResultTotalCredit, (double)eachDetailGraduationResultTakenCredit), @@ -111,7 +113,12 @@ private List createDetailGraduationResults(int totalCred .takenCredit(takenCredit) .build(), DetailGraduationResult.builder() - .graduationCategory(GraduationCategory.PRIMARY_MAJOR) + .graduationCategory(GraduationCategory.PRIMARY_MANDATORY_MAJOR) + .totalCredit(totalCredit) + .takenCredit(takenCredit) + .build(), + DetailGraduationResult.builder() + .graduationCategory(GraduationCategory.PRIMARY_ELECTIVE_MAJOR) .totalCredit(totalCredit) .takenCredit(takenCredit) .build(), diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/SingleCalculateDetailGraduationUseCaseResolverTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/SingleCalculateDetailGraduationUseCaseResolverTest.java index e385b852..eb25140c 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/SingleCalculateDetailGraduationUseCaseResolverTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/SingleCalculateDetailGraduationUseCaseResolverTest.java @@ -22,8 +22,8 @@ class SingleCalculateDetailGraduationUseCaseResolverTest { @DisplayName("졸업 카테고리를 계산할 수 있는 CalculateDetailGraduationUseCaseResolver 반환한다.") @ValueSource(strings = - {"COMMON_CULTURE", "CORE_CULTURE", "PRIMARY_MAJOR", "DUAL_MAJOR", "SUB_MAJOR", - "PRIMARY_BASIC_ACADEMICAL_CULTURE", "DUAL_BASIC_ACADEMICAL_CULTURE" + {"COMMON_CULTURE", "CORE_CULTURE", "PRIMARY_MANDATORY_MAJOR", "PRIMARY_ELECTIVE_MAJOR", "DUAL_MAJOR", + "SUB_MAJOR", "PRIMARY_BASIC_ACADEMICAL_CULTURE", "DUAL_BASIC_ACADEMICAL_CULTURE" }) @ParameterizedTest void resolveCalculateDetailGraduationUseCase(String graduationCategoryName) { diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryElectiveMajorDetailGraduationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryElectiveMajorDetailGraduationServiceTest.java new file mode 100644 index 00000000..b3e8cf33 --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryElectiveMajorDetailGraduationServiceTest.java @@ -0,0 +1,107 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.service; + +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_ELECTIVE_MAJOR; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +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.graduation.domain.model.DetailCategoryResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindMajorPort; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +@ExtendWith(MockitoExtension.class) +class CalculatePrimaryElectiveMajorDetailGraduationServiceTest { + + @Mock + private FindMajorPort findMajorPort; + @InjectMocks + private CalculatePrimaryElectiveMajorDetailGraduationService calculatePrimaryElectiveMajorDetailGraduationService; + + @DisplayName("유저의 주전공선택 상세 졸업결과를 계산한다.") + @Test + void calculateCoreCulture() { + //given + User user = User.builder() + .id(1L) + .primaryMajor("응용소프트웨어전공") + .entryYear(19).build(); + HashSet graduationMajorLectures = new HashSet<>( + Set.of( + // 전공 필수 + MajorLecture.of(Lecture.builder().lectureCode("HEC01211").credit(3).build(), "응용소프트웨어전공", 1, 16, 23), + // 전공 선택 + MajorLecture.of(Lecture.builder().lectureCode("HEC01305").credit(3).build(), "응용소프트웨어전공", 0, 16, 23), + // 전공 선택 + MajorLecture.of(Lecture.builder().lectureCode("HEC01318").credit(3).build(), "응용소프트웨어전공", 0, 16, 23))); + given(findMajorPort.findMajor(user.getPrimaryMajor())).willReturn(graduationMajorLectures); + + HashSet takenLectures = new HashSet<>( + Set.of( + TakenLecture.builder().lecture(Lecture.builder() + .lectureCode("HEC01211") //전공 필수 + .credit(3).build()).build(), + TakenLecture.builder().lecture(Lecture.builder() + .lectureCode("HEC01305") //전공 선택 + .credit(3).build()).build())); + TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); + + GraduationRequirement graduationRequirement = GraduationRequirement.builder() + .primaryMajorCredit(70).build(); + + //when + DetailGraduationResult detailPrimaryElectiveMajorGraduationResult = calculatePrimaryElectiveMajorDetailGraduationService.calculateDetailGraduation( + user, takenLectureInventory, graduationRequirement); + + //then + assertThat(detailPrimaryElectiveMajorGraduationResult) + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(PRIMARY_ELECTIVE_MAJOR, false, 67, 3.0); + } + + @DisplayName("주전공 졸업결과에서 주전공선택 졸업결과를 분리한다.") + @Test + void isolatePrimaryElectiveMajorDetailGraduation() { + //given + DetailCategoryResult primaryMandatoryMajorDetailCategoryResult = DetailCategoryResult.builder() + .detailCategoryName("전공필수") + .totalCredits(18) + .takenCredits(18) + .build(); + DetailCategoryResult primaryElectiveMajorDetailCategoryResult = DetailCategoryResult.builder() + .detailCategoryName("전공선택") + .totalCredits(52) + .takenCredits(52) + .build(); + DetailGraduationResult primaryMajorDetailGraduationResult = DetailGraduationResult.createMajorDetailGraduationResult( + 70, List.of(primaryMandatoryMajorDetailCategoryResult, primaryElectiveMajorDetailCategoryResult)); + + //when + DetailGraduationResult primaryElectiveMajorDetailGraduationResult = calculatePrimaryElectiveMajorDetailGraduationService.isolatePrimaryElectiveMajorDetailGraduation( + primaryMajorDetailGraduationResult); + + //then + assertThat(primaryElectiveMajorDetailGraduationResult) + .extracting("graduationCategory", "totalCredit", "takenCredit") + .contains( + PRIMARY_ELECTIVE_MAJOR, + primaryElectiveMajorDetailCategoryResult.getTotalCredits(), + primaryElectiveMajorDetailCategoryResult.getTakenCredits()); + } + +} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMandatoryMajorDetailGraduationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMandatoryMajorDetailGraduationServiceTest.java new file mode 100644 index 00000000..86b7ee78 --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMandatoryMajorDetailGraduationServiceTest.java @@ -0,0 +1,103 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.service; + +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_MANDATORY_MAJOR; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +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.graduation.domain.model.DetailCategoryResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindMajorPort; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +@ExtendWith(MockitoExtension.class) +class CalculatePrimaryMandatoryMajorDetailGraduationServiceTest { + + @Mock + private FindMajorPort findMajorPort; + @InjectMocks + private CalculatePrimaryMandatoryMajorDetailGraduationService calculatePrimaryMandatoryMajorDetailGraduationService; + + @DisplayName("유저의 주전공필수 졸업결과를 계산한다.") + @Test + void calculateCoreCulture() { + //given + User user = User.builder() + .id(1L) + .primaryMajor("응용소프트웨어전공") + .entryYear(19).build(); + HashSet graduationMajorLectures = new HashSet<>( + Set.of( + MajorLecture.of(Lecture.builder().lectureCode("HEC01211").credit(3).build(), "응용소프트웨어전공", 1, 16, 23), + MajorLecture.of(Lecture.builder().lectureCode("HEC01204").credit(3).build(), "응용소프트웨어전공", 1, 16, 23))); + given(findMajorPort.findMajor(user.getPrimaryMajor())).willReturn(graduationMajorLectures); + + HashSet takenLectures = new HashSet<>( + Set.of( + TakenLecture.builder().lecture(Lecture.builder() + .lectureCode("HEC01211") //전공 필수 + .credit(3).build()).build(), + TakenLecture.builder().lecture(Lecture.builder() + .lectureCode("HEC01305") //전공 선택 + .credit(3).build()).build())); + TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); + + GraduationRequirement graduationRequirement = GraduationRequirement.builder() + .primaryMajorCredit(70).build(); + + //when + DetailGraduationResult detailPrimaryMandatoryMajorGraduationResult = calculatePrimaryMandatoryMajorDetailGraduationService.calculateDetailGraduation( + user, takenLectureInventory, graduationRequirement); + + //then + assertThat(detailPrimaryMandatoryMajorGraduationResult) + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(PRIMARY_MANDATORY_MAJOR, false, 6, 3.0); + } + + @DisplayName("주전공 졸업결과에서 주전공필수 졸업결과를 분리한다.") + @Test + void isolatePrimaryElectiveMajorDetailGraduation() { + //given + DetailCategoryResult primaryMandatoryMajorDetailCategoryResult = DetailCategoryResult.builder() + .detailCategoryName("전공필수") + .totalCredits(18) + .takenCredits(18) + .build(); + DetailCategoryResult primaryElectiveMajorDetailCategoryResult = DetailCategoryResult.builder() + .detailCategoryName("전공선택") + .totalCredits(52) + .takenCredits(52) + .build(); + DetailGraduationResult primaryMajorDetailGraduationResult = DetailGraduationResult.createMajorDetailGraduationResult( + 70, List.of(primaryMandatoryMajorDetailCategoryResult, primaryElectiveMajorDetailCategoryResult)); + + //when + DetailGraduationResult primaryMandatoryMajorDetailGraduationResult = calculatePrimaryMandatoryMajorDetailGraduationService.isolatePrimaryMandatoryMajorDetailGraduation( + primaryMajorDetailGraduationResult); + + //then + assertThat(primaryMandatoryMajorDetailGraduationResult) + .extracting("graduationCategory", "totalCredit", "takenCredit") + .contains( + PRIMARY_MANDATORY_MAJOR, + primaryMandatoryMajorDetailCategoryResult.getTotalCredits(), + primaryMandatoryMajorDetailCategoryResult.getTakenCredits()); + } + +} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationServiceTest.java index faf3e29a..6d642be2 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationServiceTest.java @@ -41,9 +41,8 @@ @DisplayName("단일 카테고리 졸업상세결과를 조회한다.") @ValueSource(strings = - {"COMMON_CULTURE", "CORE_CULTURE", "PRIMARY_MAJOR", "DUAL_MAJOR", "SUB_MAJOR", - "PRIMARY_BASIC_ACADEMICAL_CULTURE", - "DUAL_BASIC_ACADEMICAL_CULTURE" + {"COMMON_CULTURE", "CORE_CULTURE", "PRIMARY_MANDATORY_MAJOR", "PRIMARY_ELECTIVE_MAJOR", "DUAL_MAJOR", + "SUB_MAJOR", "PRIMARY_BASIC_ACADEMICAL_CULTURE", "DUAL_BASIC_ACADEMICAL_CULTURE" }) @ParameterizedTest void calculateSingleDetailGraduation(String graduationCategoryName) { From 3286a7c1166567cdbf2cbfeb33eaa8b5eaa1aede Mon Sep 17 00:00:00 2001 From: 5uhwann <106325839+5uhwann@users.noreply.github.com> Date: Sat, 25 May 2024 00:01:00 +0900 Subject: [PATCH 16/27] =?UTF-8?q?[DEV-24]=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=84=9C=EB=B2=84=20=EB=B0=B0=ED=8F=AC=20(#261)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: dev profile db 설정 추가 * chore: deploy(elasticbeanstalk) 설정 파일 작성 * chore: dev deploy 스크립트 작성 * chore: dev deploy 스크립트 수정 * chore: dev deploy 스크립트 누락 설정 추가 * refactor: 오타 수정 * chore: 배포 스크립트 수정 --- .ebextensions/00-makeFiles.config | 12 ++++++ .ebextensions/00-set-timezone.config | 3 ++ .github/workflows/dev-deploy.yml | 60 ++++++++++++++++++++++++++++ .platform/nginx/nginx.conf | 57 ++++++++++++++++++++++++++ Procfile | 1 + src/main/resources/application.yml | 8 ++++ 6 files changed, 141 insertions(+) create mode 100644 .ebextensions/00-makeFiles.config create mode 100644 .ebextensions/00-set-timezone.config create mode 100644 .github/workflows/dev-deploy.yml create mode 100644 .platform/nginx/nginx.conf create mode 100644 Procfile diff --git a/.ebextensions/00-makeFiles.config b/.ebextensions/00-makeFiles.config new file mode 100644 index 00000000..2fa85072 --- /dev/null +++ b/.ebextensions/00-makeFiles.config @@ -0,0 +1,12 @@ +files: + "/sbin/appstart" : + mode: "000755" + owner: webapp + group: webapp + content: | + #!/usr/bin/env bash + JAR_PATH=/var/app/current/application.jar + + # run app + killall java + java -Dfile.encoding=UTF-8 -Dspring.profiles.active=dev -jar $JAR_PATH diff --git a/.ebextensions/00-set-timezone.config b/.ebextensions/00-set-timezone.config new file mode 100644 index 00000000..86838d75 --- /dev/null +++ b/.ebextensions/00-set-timezone.config @@ -0,0 +1,3 @@ +commands: + set_time_zone: + command: ln -f -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime diff --git a/.github/workflows/dev-deploy.yml b/.github/workflows/dev-deploy.yml new file mode 100644 index 00000000..b73c3435 --- /dev/null +++ b/.github/workflows/dev-deploy.yml @@ -0,0 +1,60 @@ +name: dev-depoly + +on: + push: + branches: + - dev +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Set up JDK 11 + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '11' + + - name: Grant execute permission for gradlew + run: chmod +x ./gradlew + shell: bash + + - name: Build with Gradle + run: ./gradlew clean build + shell: bash + + - name: Get current time + uses: 1466587594/get-current-time@v2 + id: current-time + with: + format: YYYY-MM-DDTHH-mm-ss + utcOffset: "+09:00" # 한국 시간에 맞추기 위함 + + # grandle build를 통해 만들어진 jar를 beanstalk에 배포하기 위한 zip 파일로 만드는 것 + - name: Generate deployment package + run: | + mkdir -p deploy + cp build/libs/*.jar deploy/application.jar + cp Procfile deploy/Procfile + cp -r .ebextensions deploy/.ebextensions + cp -r .platform deploy/.platform + cd deploy && zip -r deploy.zip . + + # Beanstalk Deploy 플러그인 사용 + - name: Beanstalk Deploy + uses: einaregilsson/beanstalk-deploy@v21 + with: + aws_access_key: ${{ secrets.STAGING_AWS_ACCESS_KEY_ID }} # github secrets로 등록한 값 사용 + aws_secret_key: ${{ secrets.STAGING_AWS_SECRET_ACCESS_KEY }} # github secrets로 등록한 값 사용 + application_name: staging-plzgraduation # EB application 이름 + environment_name: staging-plzgraduation-env # EB environment 이름 + version_label: Github Action-${{steps.current-time.outputs.formattedTime}} # 배포 버전은 타임스탬프를 이용하여 구분 + region: ap-northeast-2 + deployment_package: deploy/deploy.zip + wait_for_environment_recovery: 180 + + - name: Test with Gradle + run: ./gradlew test --no-daemon diff --git a/.platform/nginx/nginx.conf b/.platform/nginx/nginx.conf new file mode 100644 index 00000000..ac67b7b1 --- /dev/null +++ b/.platform/nginx/nginx.conf @@ -0,0 +1,57 @@ +user nginx; +error_log /var/log/nginx/error.log warn; +pid /var/run/nginx.pid; +worker_processes auto; +worker_rlimit_nofile 33282; + +events { + use epoll; + worker_connections 1024; +} + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + include conf.d/*.conf; + + map $http_upgrade $connection_upgrade { + default "upgrade"; + } + + upstream springboot { + server 127.0.0.1:8080; + keepalive 1024; + } + + server { + listen 80 default_server; + + location / { + proxy_pass http://springboot; + proxy_http_version 1.1; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Upgrade $http_upgrade; + + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + + access_log /var/log/nginx/access.log main; + + client_header_timeout 60; + client_body_timeout 60; + client_max_body_size 10M; + keepalive_timeout 60; + gzip off; + gzip_comp_level 4; + + # Include the Elastic Beanstalk generated locations + include conf.d/elasticbeanstalk/healthd.conf; + } +} diff --git a/Procfile b/Procfile new file mode 100644 index 00000000..d7df372f --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +web: appstart diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 7f27501e..ba857d74 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -54,10 +54,18 @@ springdoc: default-consumes-media-type: application/json --- + spring: config: activate: on-profile: dev + + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: ${DATASOURCE_URL} + username: ${DATASOURCE_USERNAME} + password: ${DATASOURCE_PASSWORD} + jpa: hibernate: ddl-auto: none From b84c10b23411e085fd1436eec7edcdf70e5ed640 Mon Sep 17 00:00:00 2001 From: 5uhwann <106325839+5uhwann@users.noreply.github.com> Date: Sat, 25 May 2024 00:06:21 +0900 Subject: [PATCH 17/27] =?UTF-8?q?[DEV-26]=20=EC=A3=BC=ED=95=99=EB=AC=B8?= =?UTF-8?q?=EA=B8=B0=EC=B4=88=EA=B5=90=EC=96=91=20=EC=83=81=EC=84=B8?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EB=A1=9C=EC=A7=81=20=EB=B6=84=EB=A6=AC=20?= =?UTF-8?q?=EB=B0=8F=20API=20=EA=B0=9C=EB=B0=9C=20(#259)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: 메서드 명 수정 * refactor: DetailGraduationResult 반환 시 GraduationCategory 제거 * refactor: GraduationRequirement - 학문기초교양 주전공/복수전공 필드 분리 * feat: 주 학문기초교양 졸업계산 구현 * refactor: GraduationCategory - 주학문기초교양 계산 로직 분리 * chore: 배포 스크립트 수정 - trigger 브랜치명 수정 --- .github/workflows/dev-deploy.yml | 2 +- .../service/CalculateGraduationService.java | 35 +----- ...demicalCultureDetailGraduationService.java | 41 ++++++- .../DefaultGraduationRequirementType.java | 3 +- .../domain/model/DetailGraduationResult.java | 8 +- .../domain/model/GraduationRequirement.java | 11 +- .../BasicAcademicalManager.java | 2 +- .../BusinessBasicAcademicalManager.java | 10 +- .../DefaultBasicAcademicalManager.java | 6 +- .../SocialScienceBasicAcademicManager.java | 15 +-- .../domain/service/major/MajorManager.java | 2 +- .../FindDetailGraduationsControllerTest.java | 102 ++++++++++++++++++ ...calCultureDetailGraduationServiceTest.java | 67 ++++++++++++ ...ctiveMajorDetailGraduationServiceTest.java | 2 +- ...atoryMajorDetailGraduationServiceTest.java | 2 +- .../BusinessBasicAcademicalManagerTest.java | 12 +-- .../DefaultBasicAcademicalManagerTest.java | 12 +-- ...SocialScienceBasicAcademicManagerTest.java | 12 +-- 18 files changed, 267 insertions(+), 77 deletions(-) create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationServiceTest.java diff --git a/.github/workflows/dev-deploy.yml b/.github/workflows/dev-deploy.yml index b73c3435..09495358 100644 --- a/.github/workflows/dev-deploy.yml +++ b/.github/workflows/dev-deploy.yml @@ -3,7 +3,7 @@ name: dev-depoly on: push: branches: - - dev + - develop jobs: build: runs-on: ubuntu-latest 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 dc31e9a0..66aee666 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 @@ -18,14 +18,9 @@ import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.service.GraduationManager; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.BusinessBasicAcademicalManager; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.DefaultBasicAcademicalManager; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.SocialScienceBasicAcademicManager; import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorManager; import com.plzgraduate.myongjigraduatebe.graduation.domain.service.submajor.SubMajorManager; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindBasicAcademicalCulturePort; import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindMajorPort; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureUseCase; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; @@ -40,14 +35,14 @@ @RequiredArgsConstructor class CalculateGraduationService implements CalculateGraduationUseCase { - private final FindBasicAcademicalCulturePort findBasicAcademicalCulturePort; private final FindMajorPort findMajorPort; - private final FindTakenLectureUseCase findTakenLectureUseCase; + private final FindTakenLectureUseCase findTakenLectureUseCase; private final CalculateCommonCultureGraduationUseCase calculateCommonCultureGraduationUseCase; private final CalculateCoreCultureGraduationUseCase calculateCoreCultureGraduationUseCase; private final CalculatePrimaryMandatoryMajorDetailGraduationUseCase calculatePrimaryMandatoryMajorDetailGraduationUseCase; private final CalculatePrimaryElectiveMajorDetailGraduationUseCase calculatePrimaryElectiveMajorDetailGraduationUseCase; + private final CalculatePrimaryBasicAcademicalCultureDetailGraduationService calculatePrimaryBasicAcademicalCultureDetailGraduationService; @Override public GraduationResult calculateGraduation(User user) { @@ -110,30 +105,8 @@ private DetailGraduationResult generateCoreCultureDetailGraduationResult(User us private DetailGraduationResult generteBasicAcademicalDetailGraduationResult(User user, TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { - Set graduationBasicAcademicalCultureLectures = findBasicAcademicalCulturePort.findBasicAcademicalCulture( - user); - GraduationManager basicAcademicalCultureGraduationManager = determineBasicAcademicalCultureGraduationManager( - user); - return basicAcademicalCultureGraduationManager.createDetailGraduationResult( - user, takenLectureInventory, graduationBasicAcademicalCultureLectures, - graduationRequirement.getBasicAcademicalCredit()); - } - - private GraduationManager determineBasicAcademicalCultureGraduationManager( - User user) { - GraduationManager basicAcademicalCultureGraduationManager; - switch (College.findBelongingCollege(user.getPrimaryMajor())) { - case BUSINESS: - basicAcademicalCultureGraduationManager = new BusinessBasicAcademicalManager(); - break; - case SOCIAL_SCIENCE: - basicAcademicalCultureGraduationManager = new SocialScienceBasicAcademicManager(); - break; - default: - basicAcademicalCultureGraduationManager = new DefaultBasicAcademicalManager(); - break; - } - return basicAcademicalCultureGraduationManager; + return calculatePrimaryBasicAcademicalCultureDetailGraduationService.calculateDetailGraduation(user, + takenLectureInventory, graduationRequirement); } private void addPrimaryMajorDetailGraduation(User user, TakenLectureInventory takenLectureInventory, diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationService.java index 5e4199af..c899b2bb 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationService.java @@ -2,19 +2,36 @@ import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE; -import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Set; + +import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDetailGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.GraduationManager; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.BasicAcademicalManager; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.BusinessBasicAcademicalManager; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.DefaultBasicAcademicalManager; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.SocialScienceBasicAcademicManager; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindBasicAcademicalCulturePort; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; +import lombok.RequiredArgsConstructor; + @UseCase +@Transactional(readOnly = true) +@RequiredArgsConstructor public class CalculatePrimaryBasicAcademicalCultureDetailGraduationService implements CalculateDetailGraduationUseCase { + + private final FindBasicAcademicalCulturePort findBasicAcademicalCulturePort; + @Override public boolean supports(GraduationCategory graduationCategory) { return graduationCategory == PRIMARY_BASIC_ACADEMICAL_CULTURE; @@ -23,6 +40,26 @@ public boolean supports(GraduationCategory graduationCategory) { @Override public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { - return null; + Set graduationBasicAcademicalCultureLectures = findBasicAcademicalCulturePort.findBasicAcademicalCulture( + user); + GraduationManager basicAcademicalCultureGraduationManager = determineBasicAcademicalCultureGraduationManager( + user); + DetailGraduationResult detailGraduationResult = basicAcademicalCultureGraduationManager.createDetailGraduationResult( + user, takenLectureInventory, graduationBasicAcademicalCultureLectures, + graduationRequirement.getPrimaryBasicAcademicalCredit()); + detailGraduationResult.assignGraduationCategory(PRIMARY_BASIC_ACADEMICAL_CULTURE); + return detailGraduationResult; + } + + private GraduationManager determineBasicAcademicalCultureGraduationManager( + User user) { + List basicAcademicalManagers = List.of( + new BusinessBasicAcademicalManager(), + new SocialScienceBasicAcademicManager()); + + return basicAcademicalManagers.stream() + .filter(basicAcademicalManager -> basicAcademicalManager.isSatisfied(user.getPrimaryMajor())) + .findFirst() + .orElse(new DefaultBasicAcademicalManager()); } } 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 bab6fc03..d11cbfb6 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 @@ -51,7 +51,8 @@ public GraduationRequirement convertToProfitGraduationRequirement(User user) { .primaryMajorCredit(this.majorLectureCredit) .dualMajorCredit(0) .subMajorCredit(0) - .basicAcademicalCredit(this.basicAcademicalLectureCredit) + .primaryBasicAcademicalCredit(this.basicAcademicalLectureCredit) + .dualBasicAcademicalCredit(0) .commonCultureCredit(this.commonCultureCredit) .coreCultureCredit(this.coreCultureCredit) .normalCultureCredit(this.normalLectureCredit) 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 de9f5160..d3802c5f 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,7 +8,7 @@ @Getter public class DetailGraduationResult { - private final GraduationCategory graduationCategory; + private GraduationCategory graduationCategory; private final boolean isCompleted; private final int totalCredit; private double takenCredit; @@ -36,7 +36,7 @@ public static DetailGraduationResult create(GraduationCategory graduationCategor .build(); } - public static DetailGraduationResult createMajorDetailGraduationResult(int totalCredit, + public static DetailGraduationResult createNonCategorizedGraduationResult(int totalCredit, List detailCategoryResults) { return DetailGraduationResult.builder() .isCompleted(checkIsCompleted(detailCategoryResults)) @@ -46,6 +46,10 @@ public static DetailGraduationResult createMajorDetailGraduationResult(int total .build(); } + public void assignGraduationCategory(GraduationCategory graduationCategory) { + this.graduationCategory = graduationCategory; + } + public void addCredit(double takenCredit) { this.takenCredit += takenCredit; } 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 ad752d3f..cdf44c2c 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 @@ -12,20 +12,23 @@ public class GraduationRequirement { private int primaryMajorCredit; private int dualMajorCredit; private int subMajorCredit; - private final int basicAcademicalCredit; + private final int primaryBasicAcademicalCredit; + private final int dualBasicAcademicalCredit; private int commonCultureCredit; private final int coreCultureCredit; private int normalCultureCredit; private int freeElectiveCredit; @Builder - private GraduationRequirement(int totalCredit, int primaryMajorCredit, int dualMajorCredit, int subMajorCredit, int basicAcademicalCredit, - int commonCultureCredit, int coreCultureCredit, int normalCultureCredit, int freeElectiveCredit) { + private GraduationRequirement(int totalCredit, int primaryMajorCredit, int dualMajorCredit, int subMajorCredit, + int primaryBasicAcademicalCredit, int dualBasicAcademicalCredit, int commonCultureCredit, int coreCultureCredit, + int normalCultureCredit, int freeElectiveCredit) { this.totalCredit = totalCredit; this.primaryMajorCredit = primaryMajorCredit; this.dualMajorCredit = dualMajorCredit; this.subMajorCredit = subMajorCredit; - this.basicAcademicalCredit = basicAcademicalCredit; + this.primaryBasicAcademicalCredit = primaryBasicAcademicalCredit; + this.dualBasicAcademicalCredit = dualBasicAcademicalCredit; this.commonCultureCredit = commonCultureCredit; this.coreCultureCredit = coreCultureCredit; this.normalCultureCredit = normalCultureCredit; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/BasicAcademicalManager.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/BasicAcademicalManager.java index 98d9f475..0aeeb817 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/BasicAcademicalManager.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/BasicAcademicalManager.java @@ -9,7 +9,7 @@ import com.plzgraduate.myongjigraduatebe.user.domain.model.User; public interface BasicAcademicalManager extends GraduationManager { - boolean isSatisfied(User user); + boolean isSatisfied(String major); default Set convertToLectureSet(Set basicAcademicalCultureLectures) { return basicAcademicalCultureLectures.stream() 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 f5eaa56e..2006d2b6 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,7 @@ package com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture; import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE; +import static com.plzgraduate.myongjigraduatebe.user.domain.model.College.*; import java.util.HashSet; import java.util.List; @@ -11,6 +12,7 @@ import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; +import com.plzgraduate.myongjigraduatebe.user.domain.model.College; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; @@ -30,8 +32,8 @@ public class BusinessBasicAcademicalManager implements BasicAcademicalManager { ); @Override - public boolean isSatisfied(User user) { - return false; + public boolean isSatisfied(String major) { + return findBelongingCollege(major) == BUSINESS; } @Override @@ -54,10 +56,10 @@ public DetailGraduationResult createDetailGraduationResult(User user, takenLectureInventory.handleFinishedTakenLectures(removedTakenLecture); DetailCategoryResult detailCategoryResult = DetailCategoryResult.create( - PRIMARY_BASIC_ACADEMICAL_CULTURE.getName(), true, basicAcademicalCredit); + "학문기초교양", true, basicAcademicalCredit); detailCategoryResult.calculate(taken, basicAcademicalLectures); - return DetailGraduationResult.create(PRIMARY_BASIC_ACADEMICAL_CULTURE, basicAcademicalCredit, + return DetailGraduationResult.createNonCategorizedGraduationResult(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 1b0c050d..d945b1df 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 @@ -20,7 +20,7 @@ public class DefaultBasicAcademicalManager implements BasicAcademicalManager { @Override - public boolean isSatisfied(User user) { + public boolean isSatisfied(String major) { return false; } @@ -43,10 +43,10 @@ public DetailGraduationResult createDetailGraduationResult(User user, takenLectureInventory.handleFinishedTakenLectures(removedTakenLecture); DetailCategoryResult detailCategoryResult = DetailCategoryResult.create( - PRIMARY_BASIC_ACADEMICAL_CULTURE.getName(), true, basicAcademicalCredit); + "학문기초교양", true, basicAcademicalCredit); detailCategoryResult.calculate(taken, basicAcademicalLectures); - return DetailGraduationResult.create(PRIMARY_BASIC_ACADEMICAL_CULTURE, basicAcademicalCredit, + return DetailGraduationResult.createNonCategorizedGraduationResult(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 5b8c8f6e..7343cdde 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,7 @@ package com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture; -import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE; +import static com.plzgraduate.myongjigraduatebe.user.domain.model.College.SOCIAL_SCIENCE; +import static com.plzgraduate.myongjigraduatebe.user.domain.model.College.findBelongingCollege; import java.util.HashSet; import java.util.List; @@ -11,8 +12,8 @@ import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; public class SocialScienceBasicAcademicManager implements BasicAcademicalManager { @@ -30,15 +31,15 @@ public class SocialScienceBasicAcademicManager implements BasicAcademicalManager ); @Override - public boolean isSatisfied(User user) { - return false; + public boolean isSatisfied(String major) { + return findBelongingCollege(major) == SOCIAL_SCIENCE; } @Override public DetailGraduationResult createDetailGraduationResult(User user, TakenLectureInventory takenLectureInventory, Set graduationLectures, int basicAcademicalCredit) { - + Set basicAcademicalLectures = convertToLectureSet(graduationLectures); Set removedTakenLecture = new HashSet<>(); Set taken = new HashSet<>(); @@ -54,10 +55,10 @@ public DetailGraduationResult createDetailGraduationResult(User user, takenLectureInventory.handleFinishedTakenLectures(removedTakenLecture); DetailCategoryResult detailCategoryResult = DetailCategoryResult.create( - PRIMARY_BASIC_ACADEMICAL_CULTURE.getName(), true, basicAcademicalCredit); + "학문기초교양", true, basicAcademicalCredit); detailCategoryResult.calculate(taken, basicAcademicalLectures); - return DetailGraduationResult.create(PRIMARY_BASIC_ACADEMICAL_CULTURE, basicAcademicalCredit, + return DetailGraduationResult.createNonCategorizedGraduationResult(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 5058c5c1..6fdb9a47 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 @@ -48,7 +48,7 @@ public DetailGraduationResult createDetailGraduationResult(User user, DetailCategoryResult electiveDetailCategoryResult = electiveMajorManager.createDetailCategoryResult( takenLectureInventory, electiveLectures, electiveMajorTotalCredit); - return DetailGraduationResult.createMajorDetailGraduationResult(graduationResultTotalCredit, + return DetailGraduationResult.createNonCategorizedGraduationResult(graduationResultTotalCredit, List.of(mandantoryDetailCategoryResult, electiveDetailCategoryResult)); } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/FindDetailGraduationsControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/FindDetailGraduationsControllerTest.java index 00c6f274..48d59774 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/FindDetailGraduationsControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/FindDetailGraduationsControllerTest.java @@ -2,6 +2,9 @@ import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.COMMON_CULTURE; import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.CORE_CULTURE; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_ELECTIVE_MAJOR; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_MANDATORY_MAJOR; 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; @@ -88,6 +91,105 @@ void getCoreDetailGraduations() throws Exception { .andExpect(jsonPath("$.detailCategory.length()").value(detailCategories.size())); } + @WithMockAuthenticationUser + @DisplayName("주전공필수 졸업 상세 결과를 조회한다.") + @Test + void getPrimaryMandatoryMajorDetailGraduations() throws Exception { + //given + List detailCategories = List.of( + DetailCategoryResult.builder().build(), + DetailCategoryResult.builder().build(), + DetailCategoryResult.builder().build(), + DetailCategoryResult.builder().build() + ); + DetailGraduationResult detailGraduationResult = DetailGraduationResult.builder() + .graduationCategory(PRIMARY_MANDATORY_MAJOR) + .totalCredit(18) + .takenCredit(18) + .isCompleted(true) + .detailCategory(detailCategories) + .build(); + + given(calculateSingleDetailGraduationUseCase.calculateSingleDetailGraduation(1L, + PRIMARY_MANDATORY_MAJOR)).willReturn(detailGraduationResult); + + //when //then + mockMvc.perform(get("/api/v1/graduations/detail") + .param("graduationCategory", "PRIMARY_MANDATORY_MAJOR")) + .andDo(print()) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.totalCredit").value(18)) + .andExpect(jsonPath("$.takenCredit").value(18)) + .andExpect(jsonPath("$.completed").value(true)) + .andExpect(jsonPath("$.detailCategory.length()").value(detailCategories.size())); + } + + @WithMockAuthenticationUser + @DisplayName("주전공선택 졸업 상세 결과를 조회한다.") + @Test + void getPrimaryElectiveMajorDetailGraduations() throws Exception { + //given + List detailCategories = List.of( + DetailCategoryResult.builder().build(), + DetailCategoryResult.builder().build(), + DetailCategoryResult.builder().build(), + DetailCategoryResult.builder().build() + ); + DetailGraduationResult detailGraduationResult = DetailGraduationResult.builder() + .graduationCategory(PRIMARY_ELECTIVE_MAJOR) + .totalCredit(58) + .takenCredit(12) + .isCompleted(false) + .detailCategory(detailCategories) + .build(); + + given(calculateSingleDetailGraduationUseCase.calculateSingleDetailGraduation(1L, + PRIMARY_ELECTIVE_MAJOR)).willReturn(detailGraduationResult); + + //when //then + mockMvc.perform(get("/api/v1/graduations/detail") + .param("graduationCategory", "PRIMARY_ELECTIVE_MAJOR")) + .andDo(print()) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.totalCredit").value(58)) + .andExpect(jsonPath("$.takenCredit").value(12)) + .andExpect(jsonPath("$.completed").value(false)) + .andExpect(jsonPath("$.detailCategory.length()").value(detailCategories.size())); + } + + @WithMockAuthenticationUser + @DisplayName("주학문기초교양 졸업 상세 결과를 조회한다.") + @Test + void getPrimaryBasicAcademicalCultureMajorDetailGraduations() throws Exception { + //given + List detailCategories = List.of( + DetailCategoryResult.builder().build(), + DetailCategoryResult.builder().build(), + DetailCategoryResult.builder().build(), + DetailCategoryResult.builder().build() + ); + DetailGraduationResult detailGraduationResult = DetailGraduationResult.builder() + .graduationCategory(PRIMARY_BASIC_ACADEMICAL_CULTURE) + .totalCredit(18) + .takenCredit(18) + .isCompleted(true) + .detailCategory(detailCategories) + .build(); + + given(calculateSingleDetailGraduationUseCase.calculateSingleDetailGraduation(1L, + PRIMARY_BASIC_ACADEMICAL_CULTURE)).willReturn(detailGraduationResult); + + //when //then + mockMvc.perform(get("/api/v1/graduations/detail") + .param("graduationCategory", "PRIMARY_BASIC_ACADEMICAL_CULTURE")) + .andDo(print()) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.totalCredit").value(18)) + .andExpect(jsonPath("$.takenCredit").value(18)) + .andExpect(jsonPath("$.completed").value(true)) + .andExpect(jsonPath("$.detailCategory.length()").value(detailCategories.size())); + } + @WithMockAuthenticationUser @DisplayName("GraduationCategory에 해당하지 않는 졸업 상세 조회 시 에러를 반환한다.") @Test diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationServiceTest.java new file mode 100644 index 00000000..3259f6d6 --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationServiceTest.java @@ -0,0 +1,67 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.service; + +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE; +import static com.plzgraduate.myongjigraduatebe.user.domain.model.College.ICT; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; + +import java.util.HashSet; +import java.util.Set; + +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.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindBasicAcademicalCulturePort; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +@ExtendWith(MockitoExtension.class) +class CalculatePrimaryBasicAcademicalCultureDetailGraduationServiceTest { + + @Mock + private FindBasicAcademicalCulturePort findBasicAcademicalCulturePort; + @InjectMocks + private CalculatePrimaryBasicAcademicalCultureDetailGraduationService calculatePrimaryBasicAcademicalCultureDetailGraduationService; + + @DisplayName("유저의 핵심교양 상세 졸업결과를 계산한다.") + @Test + void calculateCoreCulture() { + //given + User user = User.builder() + .id(1L) + .primaryMajor("응용소프트웨어전공") + .entryYear(19).build(); + HashSet graduationCoreCultures = new HashSet<>( + Set.of(BasicAcademicalCultureLecture.of(Lecture.from("KMA02128"), ICT.getName()))); + given(findBasicAcademicalCulturePort.findBasicAcademicalCulture(user)).willReturn(graduationCoreCultures); + + HashSet takenLectures = new HashSet<>( + Set.of( + TakenLecture.builder().lecture(Lecture.builder() + .lectureCode("KMA02128") + .credit(3).build()).build())); + TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); + + GraduationRequirement graduationRequirement = GraduationRequirement.builder() + .primaryBasicAcademicalCredit(18).build(); + + //when + DetailGraduationResult detailCoreCultureGraduationResult = calculatePrimaryBasicAcademicalCultureDetailGraduationService.calculateDetailGraduation( + user, takenLectureInventory, graduationRequirement); + + //then + assertThat(detailCoreCultureGraduationResult) + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(PRIMARY_BASIC_ACADEMICAL_CULTURE, false, 18, 3.0); + } + +} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryElectiveMajorDetailGraduationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryElectiveMajorDetailGraduationServiceTest.java index b3e8cf33..7f950b90 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryElectiveMajorDetailGraduationServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryElectiveMajorDetailGraduationServiceTest.java @@ -88,7 +88,7 @@ void isolatePrimaryElectiveMajorDetailGraduation() { .totalCredits(52) .takenCredits(52) .build(); - DetailGraduationResult primaryMajorDetailGraduationResult = DetailGraduationResult.createMajorDetailGraduationResult( + DetailGraduationResult primaryMajorDetailGraduationResult = DetailGraduationResult.createNonCategorizedGraduationResult( 70, List.of(primaryMandatoryMajorDetailCategoryResult, primaryElectiveMajorDetailCategoryResult)); //when diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMandatoryMajorDetailGraduationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMandatoryMajorDetailGraduationServiceTest.java index 86b7ee78..b30454ef 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMandatoryMajorDetailGraduationServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMandatoryMajorDetailGraduationServiceTest.java @@ -84,7 +84,7 @@ void isolatePrimaryElectiveMajorDetailGraduation() { .totalCredits(52) .takenCredits(52) .build(); - DetailGraduationResult primaryMajorDetailGraduationResult = DetailGraduationResult.createMajorDetailGraduationResult( + DetailGraduationResult primaryMajorDetailGraduationResult = DetailGraduationResult.createNonCategorizedGraduationResult( 70, List.of(primaryMandatoryMajorDetailCategoryResult, primaryElectiveMajorDetailCategoryResult)); //when 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 150aa36e..82f0dbfd 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 @@ -55,12 +55,12 @@ class 경영학과_학문기초교양 { //then assertThat(detailGraduationResult) - .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") - .contains(PRIMARY_BASIC_ACADEMICAL_CULTURE, true, 6, 6); + .extracting("isCompleted", "totalCredit", "takenCredit") + .contains(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(); @@ -88,12 +88,12 @@ class 경영학과_학문기초교양 { //then assertThat(detailGraduationResult) - .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") - .contains(PRIMARY_BASIC_ACADEMICAL_CULTURE, false, 6, 3.0); + .extracting("isCompleted", "totalCredit", "takenCredit") + .contains(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 451d22de..9245a3ae 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 @@ -55,12 +55,12 @@ class 인문대_학문기초교양 { //then assertThat(detailGraduationResult) - .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") - .contains(GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE, true, 12, 12); + .extracting( "isCompleted", "totalCredit", "takenCredit") + .contains(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(); @@ -86,12 +86,12 @@ class 인문대_학문기초교양 { //then assertThat(detailGraduationResult) - .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") - .contains(GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE, false, 12, 9.0); + .extracting("isCompleted", "totalCredit", "takenCredit") + .contains(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 e2a69378..e80df1d5 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 @@ -54,12 +54,12 @@ class 이십삼년도_이후_교과목_포함 { //then assertThat(detailGraduationResult) - .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") - .contains(GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE, true, 12, 12); + .extracting("isCompleted", "totalCredit", "takenCredit") + .contains(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(); @@ -86,12 +86,12 @@ class 이십삼년도_이후_교과목_포함 { //then assertThat(detailGraduationResult) - .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") - .contains(GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE, 12, 6.0); + .extracting("isCompleted", "totalCredit", "takenCredit") + .contains(false, 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); From 204ca95d29679668ad7d2c838afc24fadda181a1 Mon Sep 17 00:00:00 2001 From: 5uhwann <106325839+5uhwann@users.noreply.github.com> Date: Sun, 26 May 2024 21:49:34 +0900 Subject: [PATCH 18/27] =?UTF-8?q?[DEV-21]=20=EC=9C=A0=EC=A0=80=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EC=A1=B0=ED=9A=8C=20API=20=EC=88=98=EC=A0=95=20(#2?= =?UTF-8?q?63)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: User 필드 추가 - 총학점, 수강학점, 졸엽 가능 여부 * refactor: user정보 수정 로직 변경 * refactor: 오타 수정 * refactor: 졸업 계산 시 유저 정보 수정 로직 추가 * refactor: 유저 정보 조회 response 수정 * build: 불필요 의존성 제거 * refactor: 성적표 파싱 로직 수정 --- build.gradle | 1 - .../service/CalculateGraduationService.java | 22 +++++- .../service/ParsingTextService.java | 17 ++--- .../response/CompleteDivisionResponse.java | 25 +++++++ .../dto/response/UserInformationResponse.java | 34 +++++++-- .../UpdateStudentInformationService.java | 9 ++- .../UpdateStudentInformationCommand.java | 31 ++++---- .../UpdateStudentInformationUseCase.java | 4 +- .../user/domain/model/User.java | 25 ++++--- .../persistence/entity/UserJpaEntity.java | 8 +++ .../persistence/mapper/UserMapper.java | 8 ++- .../service/ParsingTextServiceTest.java | 17 +++-- .../FindUserInformationControllerTest.java | 17 ++++- .../UpdateStudentInformationServiceTest.java | 1 - .../user/domain/model/UserTest.java | 14 ++-- .../persistence/mapper/UserMapperTest.java | 71 ++++++++++--------- 16 files changed, 208 insertions(+), 96 deletions(-) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/user/api/finduserinformation/dto/response/CompleteDivisionResponse.java diff --git a/build.gradle b/build.gradle index 5743937e..eea0573e 100644 --- a/build.gradle +++ b/build.gradle @@ -34,7 +34,6 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'com.auth0:java-jwt:4.2.1' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6' - implementation 'org.springframework.boot:spring-boot-starter-data-redis' implementation 'org.apache.commons:commons-lang3:3.12.0' implementation "com.google.guava:guava:32.1.3-jre" implementation "com.querydsl:querydsl-jpa:${queryDslVersion}" 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 66aee666..80bfc05a 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 @@ -24,6 +24,8 @@ import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureUseCase; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.update.UpdateStudentInformationCommand; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.update.UpdateStudentInformationUseCase; import com.plzgraduate.myongjigraduatebe.user.domain.model.College; import com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @@ -43,6 +45,7 @@ class CalculateGraduationService implements CalculateGraduationUseCase { private final CalculatePrimaryMandatoryMajorDetailGraduationUseCase calculatePrimaryMandatoryMajorDetailGraduationUseCase; private final CalculatePrimaryElectiveMajorDetailGraduationUseCase calculatePrimaryElectiveMajorDetailGraduationUseCase; private final CalculatePrimaryBasicAcademicalCultureDetailGraduationService calculatePrimaryBasicAcademicalCultureDetailGraduationService; + private final UpdateStudentInformationUseCase updateStudentInformationUseCase; @Override public GraduationResult calculateGraduation(User user) { @@ -53,8 +56,10 @@ public GraduationResult calculateGraduation(User user) { List detailGraduationResults = generateDetailGraduationResults(user, takenLectureInventory, graduationRequirement); - return generateGraduationResult(chapelResult, detailGraduationResults, + GraduationResult graduationResult = generateGraduationResult(chapelResult, detailGraduationResults, takenLectureInventory, graduationRequirement); + updateUserGraduationInformation(user, graduationResult); + return graduationResult; } private GraduationRequirement determineGraduationRequirement(User user) { @@ -141,4 +146,19 @@ private GraduationResult generateGraduationResult(ChapelResult chapelResult, graduationResult.checkGraduated(); return graduationResult; } + + private void updateUserGraduationInformation(User user, GraduationResult graduationResult) { + UpdateStudentInformationCommand updateStudentInformationCommand = UpdateStudentInformationCommand.builder() + .user(user) + .name(user.getName()) + .studentCategory(user.getStudentCategory()) + .major(user.getPrimaryMajor()) + .dualMajor(user.getDualMajor()) + .subMajor(user.getSubMajor()) + .totalCredit(graduationResult.getTotalCredit()) + .takenCredit(graduationResult.getTakenCredit()) + .graduate(graduationResult.isGraduated()) + .build(); + updateStudentInformationUseCase.updateUser(updateStudentInformationCommand); + } } 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 f9bd5867..0c5e26bc 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 @@ -47,10 +47,10 @@ public void enrollParsingText(Long userId, String parsingText) { ParsingInformation parsingInformation = ParsingInformation.parsing(parsingText); checkUnSupportedUser(parsingInformation); validateStudentNumber(user, parsingInformation); - updateUser(user, parsingInformation); - deleteTakenLecturesIfAlreadyEnrolled(user); - saveTakenLectures(user, parsingInformation); - generateOrModifyCompletedCreditUseCase.generateOrModifyCompletedCredit(user); + User updatedUser = updateUser(user, parsingInformation); + deleteTakenLecturesIfAlreadyEnrolled(updatedUser); + saveTakenLectures(updatedUser, parsingInformation); + generateOrModifyCompletedCreditUseCase.generateOrModifyCompletedCredit(updatedUser); } catch (InvalidPdfException | IllegalArgumentException e) { throw e; } catch (Exception e) { @@ -68,12 +68,9 @@ private void saveTakenLectures(User user, ParsingInformation parsingInformation) saveTakenLectureFromParsingTextUseCase.saveTakenLectures(user, saveTakenLectureCommand); } - private void updateUser(User user, ParsingInformation parsingInformation) { - UpdateStudentInformationCommand updateStudentInfoCommand = UpdateStudentInformationCommand.of(user, - parsingInformation.getStudentName(), parsingInformation.getMajor(), - parsingInformation.getChangeMajor(), parsingInformation.getDualMajor(), - parsingInformation.getSubMajor(), parsingInformation.getStudentCategory()); - updateStudentInformationUseCase.updateUser(updateStudentInfoCommand); + private User updateUser(User user, ParsingInformation parsingInformation) { + UpdateStudentInformationCommand updateStudentInfoCommand = UpdateStudentInformationCommand.of(user, parsingInformation); + return updateStudentInformationUseCase.updateUser(updateStudentInfoCommand); } private void validateParsingText(String parsingText) { diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/finduserinformation/dto/response/CompleteDivisionResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/finduserinformation/dto/response/CompleteDivisionResponse.java new file mode 100644 index 00000000..e25bc6c9 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/finduserinformation/dto/response/CompleteDivisionResponse.java @@ -0,0 +1,25 @@ +package com.plzgraduate.myongjigraduatebe.user.api.finduserinformation.dto.response; + +import lombok.Builder; +import lombok.Getter; + +@Getter +public class CompleteDivisionResponse { + + private final String majorType; + + private final String major; + + @Builder + private CompleteDivisionResponse(String majorType, String major) { + this.majorType = majorType; + this.major = major; + } + + public static CompleteDivisionResponse of(String majorType, String major) { + return CompleteDivisionResponse.builder() + .majorType(majorType) + .major(major) + .build(); + } +} 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 e9ad715b..c40c2f98 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 @@ -1,5 +1,8 @@ package com.plzgraduate.myongjigraduatebe.user.api.finduserinformation.dto.response; +import java.util.ArrayList; +import java.util.List; + import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import io.swagger.v3.oas.annotations.media.Schema; @@ -13,20 +16,39 @@ public class UserInformationResponse { private final String studentNumber; @Schema(name = "studentName", example = "홍길동") private final String studentName; - @Schema(name = "major", example = "디지털콘텐츠디자인학과") - private final String major; + @Schema(name = "completeDivision") + private final List completeDivision = new ArrayList<>(3); + private final int totalCredit; + private final double takenCredit; + private final boolean graduated; @Builder - private UserInformationResponse(String studentNumber, String studentName, String major) { + private UserInformationResponse(String studentNumber, String studentName, int totalCredit, double takenCredit, + boolean graduated) { this.studentNumber = studentNumber; this.studentName = studentName; - this.major = major; + this.totalCredit = totalCredit; + this.takenCredit = takenCredit; + this.graduated = graduated; } public static UserInformationResponse from(User user) { - return UserInformationResponse.builder() + UserInformationResponse userInformation = UserInformationResponse.builder() .studentNumber(user.getStudentNumber()) .studentName(user.getName()) - .major(user.getPrimaryMajor()).build(); + .totalCredit(user.getTotalCredit()) + .takenCredit(user.getTakenCredit()) + .graduated(user.isGraduated()) + .build(); + if (user.getPrimaryMajor() != null) { + userInformation.getCompleteDivision().add(CompleteDivisionResponse.of("PRIMARY", user.getPrimaryMajor())); + } + if (user.getDualMajor() != null) { + userInformation.getCompleteDivision().add(CompleteDivisionResponse.of("DUAL", user.getDualMajor())); + } + if (user.getSubMajor() != null) { + userInformation.getCompleteDivision().add(CompleteDivisionResponse.of("SUB", user.getSubMajor())); + } + return userInformation; } } 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 45027754..5a86e7af 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 @@ -17,15 +17,18 @@ class UpdateStudentInformationService implements UpdateStudentInformationUseCase private final UpdateUserPort updateUserPort; @Override - public void updateUser(UpdateStudentInformationCommand updateStudentInformationCommand) { + public User updateUser(UpdateStudentInformationCommand updateStudentInformationCommand) { User user = updateStudentInformationCommand.getUser(); user.updateStudentInformation(updateStudentInformationCommand.getName(), updateStudentInformationCommand.getMajor(), - updateStudentInformationCommand.getChangeMajor(), updateStudentInformationCommand.getDualMajor(), updateStudentInformationCommand.getSubMajor(), - updateStudentInformationCommand.getStudentCategory() + updateStudentInformationCommand.getStudentCategory(), + updateStudentInformationCommand.getTotalCredit(), + updateStudentInformationCommand.getTakenCredit(), + updateStudentInformationCommand.isGraduate() ); updateUserPort.updateUser(user); + return user; } } 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 15a7463f..31a3c684 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 @@ -1,5 +1,6 @@ package com.plzgraduate.myongjigraduatebe.user.application.usecase.update; +import com.plzgraduate.myongjigraduatebe.parsing.domain.ParsingInformation; import com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @@ -16,36 +17,40 @@ public class UpdateStudentInformationCommand { private String major; - private String changeMajor; - private String dualMajor; private String subMajor; private StudentCategory studentCategory; + private int totalCredit; + + private double takenCredit; + + private boolean graduate; + @Builder - private UpdateStudentInformationCommand(User user, String name, String major, String changeMajor, String dualMajor, - String subMajor, StudentCategory studentCategory) { + private UpdateStudentInformationCommand(User user, String name, String major, String dualMajor, + String subMajor, StudentCategory studentCategory, int totalCredit, double takenCredit, boolean graduate) { this.user = user; this.name = name; this.major = major; - this.changeMajor = changeMajor; this.dualMajor = dualMajor; this.subMajor = subMajor; this.studentCategory = studentCategory; + this.totalCredit = totalCredit; + this.takenCredit = takenCredit; + this.graduate = graduate; } - public static UpdateStudentInformationCommand of(User user, String name, String major, String changeMajor, - String dualMajor, String subMajor, StudentCategory studentCategory) { + public static UpdateStudentInformationCommand of(User user, ParsingInformation parsingInformation) { return UpdateStudentInformationCommand.builder() .user(user) - .name(name) - .major(major) - .changeMajor(changeMajor) - .dualMajor(dualMajor) - .subMajor(subMajor) - .studentCategory(studentCategory) + .name(parsingInformation.getStudentName()) + .major(parsingInformation.getMajor()) + .dualMajor(parsingInformation.getDualMajor()) + .subMajor(parsingInformation.getSubMajor()) + .studentCategory(parsingInformation.getStudentCategory()) .build(); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/update/UpdateStudentInformationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/update/UpdateStudentInformationUseCase.java index 3bb36a80..df6ab31e 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/update/UpdateStudentInformationUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/update/UpdateStudentInformationUseCase.java @@ -1,5 +1,7 @@ package com.plzgraduate.myongjigraduatebe.user.application.usecase.update; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + public interface UpdateStudentInformationUseCase { - void updateUser(UpdateStudentInformationCommand updateStudentInformationCommand); + User updateUser(UpdateStudentInformationCommand updateStudentInformationCommand); } 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 4249ea92..107461c3 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 @@ -19,17 +19,19 @@ public class User { private final String studentNumber; private final int entryYear; private String primaryMajor; - private String changeMajor; private String subMajor; private String dualMajor; private StudentCategory studentCategory; + private int totalCredit; + private double takenCredit; + private boolean graduated; 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 primaryMajor, String changeMajor, String subMajor, String dualMajor, StudentCategory studentCategory, - Instant createdAt, Instant updatedAt) { + int entryYear, String primaryMajor, String subMajor, String dualMajor, StudentCategory studentCategory, + int totalCredit, double takenCredit, boolean graduated, Instant createdAt, Instant updatedAt) { this.id = id; this.authId = authId; this.password = password; @@ -38,16 +40,16 @@ private User(Long id, String authId, String password, EnglishLevel englishLevel, this.studentNumber = studentNumber; this.entryYear = entryYear; this.primaryMajor = primaryMajor; - this.changeMajor = changeMajor; this.subMajor = subMajor; this.dualMajor = dualMajor; this.studentCategory = studentCategory; + this.totalCredit = totalCredit; + this.takenCredit = takenCredit; + this.graduated = graduated; this.createdAt = createdAt; this.updatedAt = updatedAt; - } - public static User create(String authId, String password, EnglishLevel englishLevel, String studentNumber) { return User.builder() .authId(authId) @@ -55,17 +57,22 @@ public static User create(String authId, String password, EnglishLevel englishLe .englishLevel(englishLevel) .studentNumber(studentNumber) .entryYear(parseEntryYearInStudentNumber(studentNumber)) + .totalCredit(0) + .takenCredit(0) + .graduated(false) .build(); } - public void updateStudentInformation(String name, String major, String changeMajor, String subMajor, String dualMajor, - StudentCategory studentCategory) { + public void updateStudentInformation(String name, String major, String subMajor, String dualMajor, + StudentCategory studentCategory, int totalCredit, double takenCredit, boolean graduate) { this.name = name; this.primaryMajor = major; - this.changeMajor = changeMajor; this.dualMajor = dualMajor; this.subMajor = subMajor; this.studentCategory = studentCategory; + this.totalCredit = totalCredit; + this.takenCredit = takenCredit; + this.graduated = graduate; } public boolean checkBeforeEntryYear(int entryYear) { diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/entity/UserJpaEntity.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/entity/UserJpaEntity.java index f44337bb..211a7746 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/entity/UserJpaEntity.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/infrastructure/adapter/persistence/entity/UserJpaEntity.java @@ -47,8 +47,16 @@ public class UserJpaEntity extends TimeBaseEntity { private String major; + private String dualMajor; + private String subMajor; + private int totalCredit; + + private double takenCredit; + + private boolean graduated; + @Enumerated(value = EnumType.STRING) 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 24f78d39..2d5a2789 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 @@ -9,7 +9,6 @@ public class UserMapper { public User mapToDomainEntity(UserJpaEntity user) { - return User.builder() .id(user.getId()) .authId(user.getAuthId()) @@ -19,8 +18,12 @@ public User mapToDomainEntity(UserJpaEntity user) { .entryYear(user.getEntryYear()) .englishLevel(user.getEnglishLevel()) .primaryMajor(user.getMajor()) + .dualMajor(user.getDualMajor()) .subMajor(user.getSubMajor()) .studentCategory(user.getStudentCategory()) + .totalCredit(user.getTotalCredit()) + .takenCredit(user.getTakenCredit()) + .graduated(user.isGraduated()) .createdAt(user.getCreatedAt()) .updatedAt(user.getUpdatedAt()) .build(); @@ -39,6 +42,9 @@ public UserJpaEntity mapToJpaEntity(User user) { .major(user.getPrimaryMajor()) .subMajor(user.getSubMajor()) .studentCategory(user.getStudentCategory()) + .totalCredit(user.getTotalCredit()) + .takenCredit(user.getTakenCredit()) + .graduated(user.isGraduated()) .createdAt(user.getCreatedAt()) .updatedAt(user.getUpdatedAt()) .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 45652ccf..176edc93 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 @@ -61,10 +61,11 @@ class ParsingTextServiceTest{ parsingTextService.enrollParsingText(1L, parsingText); //then - 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)); + User updatedUser = then(updateStudentInformationUseCase).should() + .updateUser(any(UpdateStudentInformationCommand.class)); + then(deleteTakenLectureByUserUseCase).should().deleteAllTakenLecturesByUser(updatedUser); + then(saveTakenLectureFromParsingTextUseCase).should().saveTakenLectures(any(), any()); + then(generateOrModifyCompletedCreditUseCase).should().generateOrModifyCompletedCredit(updatedUser); } @DisplayName("PDF 파싱 텍스트가 빈 문자열로 오면 InvalidPdfException을 반환한다.") @@ -152,9 +153,11 @@ class ParsingTextServiceTest{ parsingTextService.enrollParsingText(1L, parsingText); //then - then(updateStudentInformationUseCase).should().updateUser(any(UpdateStudentInformationCommand.class)); - then(deleteTakenLectureByUserUseCase).should().deleteAllTakenLecturesByUser(any(User.class)); - then(saveTakenLectureFromParsingTextUseCase).should().saveTakenLectures(any(User.class), any()); + User updatedUser = then(updateStudentInformationUseCase).should() + .updateUser(any(UpdateStudentInformationCommand.class)); + then(deleteTakenLectureByUserUseCase).should().deleteAllTakenLecturesByUser(updatedUser); + then(saveTakenLectureFromParsingTextUseCase).should().saveTakenLectures(any(), any()); + then(generateOrModifyCompletedCreditUseCase).should().generateOrModifyCompletedCredit(updatedUser); } private User createUser(String studentNumber) { 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 d17f8b24..579af681 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 @@ -11,6 +11,7 @@ import com.plzgraduate.myongjigraduatebe.support.WebAdaptorTestSupport; import com.plzgraduate.myongjigraduatebe.support.WithMockAuthenticationUser; +import com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; class FindUserInformationControllerTest extends WebAdaptorTestSupport { @@ -19,7 +20,7 @@ class FindUserInformationControllerTest extends WebAdaptorTestSupport { @DisplayName("로그인 한 회원 정보를 조회한다.") @Test void getUserInformation() throws Exception { - //given + //given Long userId = 1L; String studentNumber = "111111111"; String studentName = "testUser"; @@ -29,7 +30,11 @@ void getUserInformation() throws Exception { .id(userId) .studentNumber(studentNumber) .name(studentName) - .primaryMajor(major).build(); + .primaryMajor(major) + .studentCategory(StudentCategory.NORMAL) + .totalCredit(134) + .takenCredit(130.0) + .graduated(false).build(); given(findUserInformationUseCase.findUserInformation(userId)).willReturn(user); @@ -39,7 +44,13 @@ void getUserInformation() throws Exception { .andExpect(status().isOk()) .andExpect(jsonPath("$.studentNumber").value(studentNumber)) .andExpect(jsonPath("$.studentName").value(studentName)) - .andExpect(jsonPath("$.major").value(major)); + .andExpect(jsonPath("$.completeDivision").isArray()) + .andExpect(jsonPath("$.completeDivision[0].majorType").value("PRIMARY")) + .andExpect(jsonPath("$.completeDivision[0].major").value(user.getPrimaryMajor())) + .andExpect(jsonPath("$.totalCredit").value(134)) + .andExpect(jsonPath("$.takenCredit").value(130.0)) + .andExpect(jsonPath("$.graduated").value(false)) + ; } } 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 90f2dd7a..aca83573 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 @@ -32,7 +32,6 @@ void updateUser() { .user(user) .name("정지환") .major("응용소프트웨어학과") - .changeMajor(null) .subMajor("경영학과") .studentCategory(StudentCategory.DUAL_MAJOR) .build(); 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 fa9ba65f..e81262ba 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 @@ -48,11 +48,13 @@ void create() { @Test void updateStudentInformation() { //given //when - user.updateStudentInformation("테스터2", "경영학과", "데이터테크놀로지학과", null, null, StudentCategory.CHANGE_MAJOR); + user.updateStudentInformation("테스터2", "경영학과", null, null, StudentCategory.CHANGE_MAJOR, 134, + 120.5, true); //then assertThat(user) - .extracting("name", "primaryMajor", "changeMajor", "subMajor", "dualMajor","studentCategory") - .contains("테스터2", "경영학과", "데이터테크놀로지학과", null, null, StudentCategory.CHANGE_MAJOR); + .extracting("name", "primaryMajor", "subMajor", "dualMajor", "studentCategory", + "totalCredit", "takenCredit", "graduated") + .contains("테스터2", "경영학과", null, null, StudentCategory.CHANGE_MAJOR, 134, 120.5, true); } @DisplayName("checkBeforeEntryYear 메서드 테스트") @@ -117,7 +119,7 @@ void getEncryptedAuthId() { @DisplayName("유저의 패스워드를 초기화한다.") @Test void resetPassword() { - //given + //given String beforePassword = "before"; String afterPassword = "after"; User user = User.builder() @@ -126,14 +128,14 @@ void resetPassword() { //when user.resetPassword(afterPassword); - //then + //then assertThat(user.getPassword()).isEqualTo(afterPassword); } @DisplayName("유저의 로그인 아이디와 같을 경우 true를 반환한다.") @Test void isMyAuthId() { - //given + //given String authId = "testAuthId"; User user = User.builder() .authId(authId).build(); 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 48c4f9e1..261890a4 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 @@ -11,7 +11,6 @@ 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 com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.mapper.UserMapper; class UserMapperTest extends PersistenceTestSupport { @@ -22,67 +21,71 @@ class UserMapperTest extends PersistenceTestSupport { @Test void mapToDomainEntityTest() { //given - UserJpaEntity userJpaEntity = createUserJpaEntity(1L, "mju1000", "mju1000!", EnglishLevel.ENG12, "김명지", - "60211111", 21, "경영", null, StudentCategory.NORMAL); + UserJpaEntity userJpaEntity = createUserJpaEntity(); //when User user = userMapper.mapToDomainEntity(userJpaEntity); //then assertThat(user) - .extracting("id", "authId", "password", "englishLevel", "name", - "studentNumber", "entryYear", "primaryMajor", "subMajor", "studentCategory") + .extracting("id", "authId", "password", "englishLevel", "name", "studentNumber", "entryYear", + "primaryMajor", "subMajor", "studentCategory", "totalCredit", "takenCredit", "graduated") .contains(1L, "mju1000", "mju1000!", EnglishLevel.ENG12, "김명지", - "60211111", 21, "경영", null, StudentCategory.NORMAL); + "60211111", 21, "경영", null, StudentCategory.NORMAL, 100, 40.0, false); } @DisplayName("도메인 엔티티를 JPA 엔티티 변환한다.") @Test void mapToJpaEntityTest() { //given - User user = createUser("mju1000", "mju1000!", EnglishLevel.ENG12, "김명지", - "60211111", 21, "경영", null, StudentCategory.NORMAL); + User user = createUser(); //when UserJpaEntity userJpaEntity = userMapper.mapToJpaEntity(user); //then assertThat(userJpaEntity) - .extracting("id", "authId", "password", "englishLevel", "name", - "studentNumber", "entryYear", "major", "subMajor", "studentCategory") + .extracting("id", "authId", "password", "englishLevel", "name", "studentNumber", "entryYear", "major", + "subMajor", "studentCategory", "totalCredit", "takenCredit", "graduated") .contains(1L, "mju1000", "mju1000!", EnglishLevel.ENG12, "김명지", - "60211111", 21, "경영", null, StudentCategory.NORMAL); + "60211111", 21, "경영", null, StudentCategory.NORMAL, 100, 40.0, false); } - private User createUser(String authId, String password, EnglishLevel englishLevel, String name, - String studentNumber, int entryYear, String major, String subMajor, StudentCategory studentCategory) { + private User createUser() { return User.builder() .id(1L) - .authId(authId) - .password(password) - .name(name) - .studentNumber(studentNumber) - .entryYear(entryYear) - .englishLevel(englishLevel) - .primaryMajor(major) - .subMajor(subMajor) - .studentCategory(studentCategory) + .authId("mju1000") + .password("mju1000!") + .name("김명지") + .studentNumber("60211111") + .entryYear(21) + .englishLevel(EnglishLevel.ENG12) + .primaryMajor("경영") + .dualMajor(null) + .subMajor(null) + .totalCredit(100) + .takenCredit(40) + .graduated(false) + .studentCategory(StudentCategory.NORMAL) .build(); } - private UserJpaEntity createUserJpaEntity(Long id, String authId, String password, EnglishLevel englishLevel, String name, - String studentNumber, int entryYear, String major, String subMajor, StudentCategory studentCategory) { + private UserJpaEntity createUserJpaEntity() { return UserJpaEntity.builder() - .id(id) - .authId(authId) - .password(password) - .name(name) - .studentNumber(studentNumber) - .entryYear(entryYear) - .englishLevel(englishLevel) - .major(major) - .subMajor(subMajor) - .studentCategory(studentCategory) + .id(1L) + .authId("mju1000") + .password("mju1000!") + .name("김명지") + .studentNumber("60211111") + .entryYear(21) + .englishLevel(EnglishLevel.ENG12) + .major("경영") + .dualMajor("복수전공") + .totalCredit(100) + .takenCredit(40) + .graduated(false) + .subMajor(null) + .studentCategory(StudentCategory.NORMAL) .build(); } } From 7fcc177b594a015622eeab3b4bcd8bd12e0f9955 Mon Sep 17 00:00:00 2001 From: 5uhwann <106325839+5uhwann@users.noreply.github.com> Date: Thu, 30 May 2024 02:04:58 +0900 Subject: [PATCH 19/27] =?UTF-8?q?[DEV-31]=20=EA=B3=BC=EB=AA=A9=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=20API=20=EC=9D=91=EB=8B=B5=20=EC=88=98=EC=A0=95=20(#2?= =?UTF-8?q?65)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: SearchLectureUseCase - return 값 수정(추가 여부 필드를 포함한 Dto) * refactor: SearchLectureController - response spec 수정 * refactor: response 수정 --- .../api/SearchLectureApiPresentation.java | 6 ++- .../lecture/api/SearchLectureController.java | 12 +++++- .../dto/response/SearchLectureResponse.java | 40 ++++++++++++++----- .../service/SearchLectureService.java | 23 ++++++++++- .../usecase/SearchLectureUseCase.java | 4 +- .../usecase/dto/SearchedLectureDto.java | 25 ++++++++++++ .../api/SearchLectureControllerTest.java | 13 +++--- .../search/SearchLectureServiceTest.java | 30 ++++++++++---- 8 files changed, 121 insertions(+), 32 deletions(-) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/dto/SearchedLectureDto.java diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureApiPresentation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureApiPresentation.java index 9f4bd5bf..69fc27b8 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureApiPresentation.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureApiPresentation.java @@ -1,9 +1,12 @@ package com.plzgraduate.myongjigraduatebe.lecture.api; +import java.util.List; + import javax.validation.constraints.Size; import org.springframework.web.bind.annotation.RequestParam; +import com.plzgraduate.myongjigraduatebe.core.meta.LoginUser; import com.plzgraduate.myongjigraduatebe.lecture.api.dto.response.SearchLectureResponse; import io.swagger.v3.oas.annotations.Parameter; @@ -12,7 +15,8 @@ @Tag(name = "SearchLecture", description = "type과 keyword를 통해 과목정보를 검색하는 API") public interface SearchLectureApiPresentation { - SearchLectureResponse searchLecture( + List searchLecture( + @LoginUser Long userId, @Parameter(name = "type", description = "과목명 또는 과목코드") @RequestParam(defaultValue = "name") String type, @Parameter(name = "keyword", description = "검색어 2자리 이상") @RequestParam @Size(min = 2, message = "검색어를 2자리 이상 입력해주세요.") String keyword ); diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureController.java index 706f006c..ac8e31a6 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureController.java @@ -1,5 +1,8 @@ package com.plzgraduate.myongjigraduatebe.lecture.api; +import java.util.List; +import java.util.stream.Collectors; + import javax.validation.constraints.Size; import org.springframework.validation.annotation.Validated; @@ -7,9 +10,11 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; +import com.plzgraduate.myongjigraduatebe.core.meta.LoginUser; import com.plzgraduate.myongjigraduatebe.core.meta.WebAdapter; import com.plzgraduate.myongjigraduatebe.lecture.api.dto.response.SearchLectureResponse; import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.SearchLectureUseCase; +import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.dto.SearchedLectureDto; import lombok.RequiredArgsConstructor; @@ -22,10 +27,13 @@ public class SearchLectureController implements SearchLectureApiPresentation { private final SearchLectureUseCase searchLectureUseCase; @GetMapping - public SearchLectureResponse searchLecture( + public List searchLecture( + @LoginUser Long userId, @RequestParam(defaultValue = "name") String type, @RequestParam @Size(min = 2, message = "검색어를 2자리 이상 입력해주세요.") String keyword ) { - return SearchLectureResponse.from(searchLectureUseCase.searchLectures(type, keyword)); + return searchLectureUseCase.searchLectures(userId, type, keyword).stream() + .map(SearchLectureResponse::from) + .collect(Collectors.toList()); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/dto/response/SearchLectureResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/dto/response/SearchLectureResponse.java index bebebabc..628d71cc 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/dto/response/SearchLectureResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/api/dto/response/SearchLectureResponse.java @@ -1,28 +1,46 @@ package com.plzgraduate.myongjigraduatebe.lecture.api.dto.response; -import java.util.List; -import java.util.stream.Collectors; - -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; +import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.dto.SearchedLectureDto; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; import lombok.Getter; -import lombok.NoArgsConstructor; @Getter -@NoArgsConstructor public class SearchLectureResponse { - private List lectures; + @Schema(name = "id", example = "18") + private final Long id; + @Schema(name = "lectureCode", example = "KMA02137") + private final String lectureCode; + @Schema(name = "name", example = "4차산업혁명시대의진로선택") + private final String name; + @Schema(name = "credit", example = "2") + private final int credit; + @Schema(name = "isRevoked", example = "false") + private final boolean revoked; + @Schema(name = "isAddable", example = "true") + private final boolean taken; @Builder - private SearchLectureResponse(List lectures) { - this.lectures = lectures; + private SearchLectureResponse(Long id, String lectureCode, String name, int credit, boolean revoked, + boolean taken) { + this.id = id; + this.lectureCode = lectureCode; + this.name = name; + this.credit = credit; + this.revoked = revoked; + this.taken = taken; } - public static SearchLectureResponse from(List lectures) { + public static SearchLectureResponse from(SearchedLectureDto searchedLectureDto) { return SearchLectureResponse.builder() - .lectures(lectures.stream().map(LectureResponse::of).collect(Collectors.toList())) + .id(searchedLectureDto.getLecture().getId()) + .lectureCode(searchedLectureDto.getLecture().getLectureCode()) + .name(searchedLectureDto.getLecture().getName()) + .credit(searchedLectureDto.getLecture().getCredit()) + .revoked(searchedLectureDto.getLecture().getIsRevoked() != 0) + .taken(searchedLectureDto.isAddable()) .build(); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/SearchLectureService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/SearchLectureService.java index a5704c53..08f2b5e6 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/SearchLectureService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/SearchLectureService.java @@ -1,22 +1,41 @@ package com.plzgraduate.myongjigraduatebe.lecture.application.service; import java.util.List; +import java.util.stream.Collectors; + +import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; import com.plzgraduate.myongjigraduatebe.lecture.application.port.SearchLecturePort; import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.SearchLectureUseCase; +import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.dto.SearchedLectureDto; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureUseCase; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; import lombok.RequiredArgsConstructor; @UseCase +@Transactional(readOnly = true) @RequiredArgsConstructor public class SearchLectureService implements SearchLectureUseCase { private final SearchLecturePort searchLecturePort; + private final FindTakenLectureUseCase findTakenLectureUseCase; @Override - public List searchLectures(String type, String keyword) { - return searchLecturePort.searchLectureByNameOrCode(type, keyword); + public List searchLectures(Long userId, String type, String keyword) { + List searchedLectures = searchLecturePort.searchLectureByNameOrCode(type, keyword); + TakenLectureInventory takenLectureInventory = findTakenLectureUseCase.findTakenLectures(userId); + + List takenLectures = takenLectureInventory.getTakenLectures().stream() + .map(TakenLecture::getLecture) + .collect(Collectors.toList()); + + return searchedLectures.stream() + .map(searchedLecture -> SearchedLectureDto.of(takenLectures.contains(searchedLecture), + searchedLecture)) + .collect(Collectors.toList()); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/SearchLectureUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/SearchLectureUseCase.java index 28746cfc..6bb2a4bd 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/SearchLectureUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/SearchLectureUseCase.java @@ -2,8 +2,8 @@ import java.util.List; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; +import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.dto.SearchedLectureDto; public interface SearchLectureUseCase { - List searchLectures(String type, String keyword); + List searchLectures(Long userId, String type, String keyword); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/dto/SearchedLectureDto.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/dto/SearchedLectureDto.java new file mode 100644 index 00000000..c6d12033 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/usecase/dto/SearchedLectureDto.java @@ -0,0 +1,25 @@ +package com.plzgraduate.myongjigraduatebe.lecture.application.usecase.dto; + +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; + +import lombok.Builder; +import lombok.Getter; + +@Getter +public class SearchedLectureDto { + + private final boolean addable; + private final Lecture lecture; + + @Builder + private SearchedLectureDto(boolean addable, Lecture lecture) { + this.addable = addable; + this.lecture = lecture; + } + + public static SearchedLectureDto of(boolean addable, Lecture lecture) { + return SearchedLectureDto.builder() + .addable(addable) + .lecture(lecture).build(); + } +} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureControllerTest.java index 53cb1462..279bb55a 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureControllerTest.java @@ -2,6 +2,7 @@ import static org.hamcrest.Matchers.hasSize; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.then; import static org.mockito.Mockito.times; @@ -15,6 +16,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.dto.SearchedLectureDto; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.support.WebAdaptorTestSupport; import com.plzgraduate.myongjigraduatebe.support.WithMockAuthenticationUser; @@ -26,10 +28,8 @@ class SearchLectureControllerTest extends WebAdaptorTestSupport { @Test void searchLecture() throws Exception { //given - List searchedLectures = List.of( - Lecture.builder().id(1L).build() - ); - given(searchLectureUseCase.searchLectures(any(), any())).willReturn(searchedLectures); + List searchedLectures = List.of(SearchedLectureDto.of(true, Lecture.from("code"))); + given(searchLectureUseCase.searchLectures(anyLong(), any(), any())).willReturn(searchedLectures); //when //then mockMvc.perform(get("/api/v1/lectures") @@ -37,9 +37,10 @@ void searchLecture() throws Exception { .param("keyword", "기초")) .andDo(print()) .andExpect(status().isOk()) - .andExpect(jsonPath("$.lectures", hasSize(1))); + .andExpect(jsonPath("$", hasSize(searchedLectures.size()))) + .andExpect(jsonPath("$.[0].taken").value(true)); - then(searchLectureUseCase).should(times(1)).searchLectures(any(), any()); + then(searchLectureUseCase).should(times(1)).searchLectures(anyLong(), any(), any()); } @WithMockAuthenticationUser diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/search/SearchLectureServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/search/SearchLectureServiceTest.java index ae4f914c..390c3ee9 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/search/SearchLectureServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/application/service/search/SearchLectureServiceTest.java @@ -5,6 +5,7 @@ import static org.mockito.BDDMockito.given; import java.util.List; +import java.util.Set; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -15,37 +16,50 @@ import com.plzgraduate.myongjigraduatebe.lecture.application.port.SearchLecturePort; import com.plzgraduate.myongjigraduatebe.lecture.application.service.SearchLectureService; +import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.dto.SearchedLectureDto; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureUseCase; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; @ExtendWith(MockitoExtension.class) class SearchLectureServiceTest { @Mock private SearchLecturePort searchLecturePort; + @Mock + private FindTakenLectureUseCase findTakenLectureUseCase; @InjectMocks private SearchLectureService searchLectureService; @DisplayName("과목을 검색한다.") @Test void searchLectures() { + Long userId = 1L; String type = "name"; String keyword = "기초"; - List lectures = List.of( - createLecture(1L, "code1", "기초웹프로그래밍", 3, 0), - createLecture(2L, "code2", "앱과웹기초", 2, 1) + Lecture takenLecture = createLecture(1L, "code1", "기초웹프로그래밍", 3, 0); + Lecture nonTakenLecture = createLecture(2L, "code2", "앱과웹기초", 2, 1); + List lectures = List.of(takenLecture, nonTakenLecture); + TakenLectureInventory takenLectureInventory = TakenLectureInventory.from( + Set.of(TakenLecture.builder() + .lecture(Lecture.from("code1")) + .build()) ); given(searchLecturePort.searchLectureByNameOrCode("name", "기초")) .willReturn(lectures); + given(findTakenLectureUseCase.findTakenLectures(userId)).willReturn(takenLectureInventory); //when - List searchedLectures = searchLectureService.searchLectures(type, keyword); + List searchedLectureDtos = searchLectureService.searchLectures(userId, type, + keyword); //then - assertThat(searchedLectures) + assertThat(searchedLectureDtos) .hasSize(2) - .extracting("id", "lectureCode", "name", "credit", "isRevoked") + .extracting("addable", "lecture") .containsExactlyInAnyOrder( - tuple(1L, "code1", "기초웹프로그래밍", 3, 0), - tuple(2L, "code2", "앱과웹기초", 2, 1) + tuple(true, takenLecture), + tuple(false, nonTakenLecture) ); } From f74f71a8988c06d59050b9ab430bd73fc8d4b86c Mon Sep 17 00:00:00 2001 From: 5uhwann <106325839+5uhwann@users.noreply.github.com> Date: Sun, 2 Jun 2024 20:00:45 +0900 Subject: [PATCH 20/27] =?UTF-8?q?[DEV-9]=20=EB=B3=B5=EC=88=98=EC=A0=84?= =?UTF-8?q?=EA=B3=B5=20=EC=A1=B8=EC=97=85=20=EA=B3=84=EC=82=B0=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EB=B0=8F=20=EC=A1=B0=ED=9A=8C=20API=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1=20(#266)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: GraduationRequirement - 복수전공생 학점 조정 구현 * refactor: 오타 수정 * refactor: 복수전공 졸업 카테고리 분리 및 UseCase 분리 * refactor: MajorManager - 전공 구분 필드 및 지정 로직 추가 * feat: 복수전공필수 졸업계산 로직 구현 및 전체 졸업 계산 로직 시 복수전공 졸업 계산 로직 추가 * feat: 복수전공선택 졸업계산 로직 구현 * refactor: DetailCategoryResult - 상세 카테고리 명 지정 로직 추가 * feat: 복수학문기초교양 졸업 계산 로직 구현 * refactor: 파라미터 순서 오류 수정 * refactor: MajorExceptionHandler - 현재 계산중인 MajorGraduationCategory 지정 로직 추가 및 OptionalMandatory 생성 로직 수정 * refactor: UserMapper - 누락 필드 추가 * refactor: GraduationResult - totalCredit 총점 계산 로직 수정 * refactor: 경영학과 OptionalMandatory 수정(2024-1) * refactor: totalCredit - 채플 중복학점 누적 로직 제거 * refactor: CompletedCredit 응답 시 totalCredit이 0일 경우 응답X 로직 추가 * refactor:FindBasicAcademicalCulturePort - 복수전공 졸업과목 조회 메서드 파라미터 수정 --- .../api/FindCompletedCreditsController.java | 1 + ...demicalCultureDetailGraduationService.java | 65 +++++++++++ ...icalCultureDetailGraduationUseService.java | 28 ----- ...lElectiveMajorDetailGraduationService.java | 70 ++++++++++++ ...ulateDualMajorDetailGraduationService.java | 27 ----- ...MandatoryMajorDetailGraduationService.java | 70 ++++++++++++ .../service/CalculateGraduationService.java | 50 +++++++-- ...demicalCultureDetailGraduationService.java | 8 +- ...yElectiveMajorDetailGraduationService.java | 9 +- ...MandatoryMajorDetailGraduationService.java | 9 +- ...lElectiveMajorDetailGraduationUseCase.java | 9 ++ ...ulateDualMajorDetailGraduationUseCase.java | 4 - ...MandatoryMajorDetailGraduationUseCase.java | 9 ++ .../DefaultGraduationRequirementType.java | 12 +- .../domain/model/DetailCategoryResult.java | 6 +- .../DualMajorGraduationRequirementType.java | 22 ++-- .../domain/model/GraduationCategory.java | 7 +- .../domain/model/GraduationRequirement.java | 37 +++++-- .../domain/model/GraduationResult.java | 18 +-- .../major/MajorGraduationCategory.java | 10 ++ .../domain/service/major/MajorManager.java | 13 ++- .../service/major/MandatoryMajorManager.java | 11 +- .../exception/MajorExceptionHandler.java | 5 +- .../major/exception/OptionalMandatory.java | 28 +++-- .../exception/OptionalMandatoryHandler.java | 48 +++++--- .../ReplaceMandatoryMajorHandler.java | 19 +++- .../port/FindBasicAcademicalCulturePort.java | 3 +- ...icAcademicalCulturePersistenceAdapter.java | 9 +- .../user/domain/model/User.java | 2 +- .../persistence/mapper/UserMapper.java | 1 + .../FindCompletedCreditsControllerTest.java | 26 +++++ ...teDetailGraduationUseCaseResolverTest.java | 4 +- ...calCultureDetailGraduationServiceTest.java | 67 +++++++++++ ...ctiveMajorDetailGraduationServiceTest.java | 104 ++++++++++++++++++ ...atoryMajorDetailGraduationServiceTest.java | 103 +++++++++++++++++ ...calCultureDetailGraduationServiceTest.java | 4 +- ...lateSingleDetailGraduationServiceTest.java | 4 +- .../model/GraduationRequirementTest.java | 37 ++++++- .../domain/model/GraduationResultTest.java | 4 +- .../major/DataTechnologyMajorTest.java | 5 +- .../major/InternationTradeMajorTest.java | 13 ++- .../ReplaceMandatoryMajorHandlerTest.java | 26 ++--- ...ademicalCulturePersistenceAdapterTest.java | 7 +- 43 files changed, 813 insertions(+), 201 deletions(-) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualBasicAcademicalCultureDetailGraduationService.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualBasicAcademicalCultureDetailGraduationUseService.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualElectiveMajorDetailGraduationService.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualMajorDetailGraduationService.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualMandatoryMajorDetailGraduationService.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualElectiveMajorDetailGraduationUseCase.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualMajorDetailGraduationUseCase.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualMandatoryMajorDetailGraduationUseCase.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MajorGraduationCategory.java create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualBasicAcademicalCultureDetailGraduationServiceTest.java create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualElectiveMajorDetailGraduationServiceTest.java create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualMandatoryMajorDetailGraduationServiceTest.java diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditsController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditsController.java index 7531d17f..8795f337 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditsController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditsController.java @@ -23,6 +23,7 @@ public class FindCompletedCreditsController implements FindCompletedCreditApiPre @GetMapping() public List getCompletedCredits(@LoginUser Long userId) { return findCompletedCreditUseCase.findCompletedCredits(userId).stream() + .filter(completedCredit -> completedCredit.getTotalCredit() != 0) .map(CompletedCreditResponse::from) .collect(Collectors.toList()); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualBasicAcademicalCultureDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualBasicAcademicalCultureDetailGraduationService.java new file mode 100644 index 00000000..b2de4ffb --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualBasicAcademicalCultureDetailGraduationService.java @@ -0,0 +1,65 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.service; + +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.DUAL_BASIC_ACADEMICAL_CULTURE; + +import java.util.List; +import java.util.Set; + +import org.springframework.transaction.annotation.Transactional; + +import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDualBasicAcademicalCultureDetailGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.GraduationManager; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.BasicAcademicalManager; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.BusinessBasicAcademicalManager; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.DefaultBasicAcademicalManager; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.SocialScienceBasicAcademicManager; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindBasicAcademicalCulturePort; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +import lombok.RequiredArgsConstructor; + +@UseCase +@Transactional(readOnly = true) +@RequiredArgsConstructor +public class CalculateDualBasicAcademicalCultureDetailGraduationService implements + CalculateDualBasicAcademicalCultureDetailGraduationUseCase { + + private final FindBasicAcademicalCulturePort findBasicAcademicalCulturePort; + + @Override + public boolean supports(GraduationCategory graduationCategory) { + return graduationCategory == DUAL_BASIC_ACADEMICAL_CULTURE; + } + + @Override + public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, + GraduationRequirement graduationRequirement) { + Set graduationBasicAcademicalCultureLectures = findBasicAcademicalCulturePort.findBasicAcademicalCulture( + user.getDualMajor()); + GraduationManager basicAcademicalCultureGraduationManager = determineBasicAcademicalCultureGraduationManager( + user); + DetailGraduationResult detailGraduationResult = basicAcademicalCultureGraduationManager.createDetailGraduationResult( + user, takenLectureInventory, graduationBasicAcademicalCultureLectures, + graduationRequirement.getDualBasicAcademicalCultureCredit()); + detailGraduationResult.assignGraduationCategory(DUAL_BASIC_ACADEMICAL_CULTURE); + return detailGraduationResult; + } + + private GraduationManager determineBasicAcademicalCultureGraduationManager( + User user) { + List basicAcademicalManagers = List.of( + new BusinessBasicAcademicalManager(), + new SocialScienceBasicAcademicManager()); + + return basicAcademicalManagers.stream() + .filter(basicAcademicalManager -> basicAcademicalManager.isSatisfied(user.getDualMajor())) + .findFirst() + .orElse(new DefaultBasicAcademicalManager()); + } +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualBasicAcademicalCultureDetailGraduationUseService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualBasicAcademicalCultureDetailGraduationUseService.java deleted file mode 100644 index c0088575..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualBasicAcademicalCultureDetailGraduationUseService.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.service; - -import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.DUAL_BASIC_ACADEMICAL_CULTURE; - -import org.springframework.stereotype.Service; - -import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDualBasicAcademicalCultureDetailGraduationUseCase; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; -import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; - -@UseCase -public class CalculateDualBasicAcademicalCultureDetailGraduationUseService implements - CalculateDualBasicAcademicalCultureDetailGraduationUseCase { - @Override - public boolean supports(GraduationCategory graduationCategory) { - return graduationCategory == DUAL_BASIC_ACADEMICAL_CULTURE; - } - - @Override - public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, - GraduationRequirement graduationRequirement) { - return null; - } -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualElectiveMajorDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualElectiveMajorDetailGraduationService.java new file mode 100644 index 00000000..bf6879bf --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualElectiveMajorDetailGraduationService.java @@ -0,0 +1,70 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.service; + +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.DUAL_ELECTIVE_MAJOR; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory.DUAL; + +import java.util.List; +import java.util.Set; + +import org.springframework.transaction.annotation.Transactional; + +import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDualElectiveMajorDetailGraduationUseCase; +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.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.GraduationManager; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorManager; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindMajorPort; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +import lombok.RequiredArgsConstructor; + +@UseCase +@Transactional(readOnly = true) +@RequiredArgsConstructor +public class CalculateDualElectiveMajorDetailGraduationService + implements CalculateDualElectiveMajorDetailGraduationUseCase { + + private final FindMajorPort findMajorPort; + + @Override + public boolean supports(GraduationCategory graduationCategory) { + return graduationCategory == DUAL_ELECTIVE_MAJOR; + } + + @Override + public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, + GraduationRequirement graduationRequirement) { + Set graduationMajorLectures = findMajorPort.findMajor(user.getDualMajor()); + GraduationManager majorGraduationManager = new MajorManager(DUAL); + DetailGraduationResult majorDetailGraduationResult = majorGraduationManager.createDetailGraduationResult(user, + takenLectureInventory, graduationMajorLectures, graduationRequirement.getDualMajorCredit()); + + DetailCategoryResult electiveMajorDetailCategoryResult = separateElectiveMajor(majorDetailGraduationResult); + return DetailGraduationResult.create(DUAL_ELECTIVE_MAJOR, electiveMajorDetailCategoryResult.getTotalCredits(), + List.of(electiveMajorDetailCategoryResult)); + } + + @Override + public DetailGraduationResult isolateDualElectiveMajorDetailGraduation( + DetailGraduationResult dualMajorDetailGraduationResult) { + DetailCategoryResult electiveMajorDetailCategoryResult = separateElectiveMajor( + dualMajorDetailGraduationResult); + return DetailGraduationResult.create(DUAL_ELECTIVE_MAJOR, + electiveMajorDetailCategoryResult.getTotalCredits(), List.of(electiveMajorDetailCategoryResult)); + } + + private DetailCategoryResult separateElectiveMajor( + DetailGraduationResult majorDetailGraduationResult) { + DetailCategoryResult dualElectiveMajorDetailCategoryResult = majorDetailGraduationResult.getDetailCategory().stream() + .filter(detailCategoryResult -> detailCategoryResult.getDetailCategoryName().equals("전공선택")) + .findFirst() + .orElseThrow(() -> new RuntimeException("Not Found DetailCategoryResult(전공 선택)")); + dualElectiveMajorDetailCategoryResult.assignDetailCategoryName("복수전공선택"); + return dualElectiveMajorDetailCategoryResult; + } +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualMajorDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualMajorDetailGraduationService.java deleted file mode 100644 index a95a3c58..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualMajorDetailGraduationService.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.service; - -import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.DUAL_MAJOR; - -import org.springframework.stereotype.Service; - -import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDualMajorDetailGraduationUseCase; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; -import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; - -@UseCase -public class CalculateDualMajorDetailGraduationService implements CalculateDualMajorDetailGraduationUseCase { - @Override - public boolean supports(GraduationCategory graduationCategory) { - return graduationCategory == DUAL_MAJOR; - } - - @Override - public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, - GraduationRequirement graduationRequirement) { - return null; - } -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualMandatoryMajorDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualMandatoryMajorDetailGraduationService.java new file mode 100644 index 00000000..f358e3d1 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualMandatoryMajorDetailGraduationService.java @@ -0,0 +1,70 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.service; + +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.DUAL_MANDATORY_MAJOR; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory.DUAL; + +import java.util.List; +import java.util.Set; + +import org.springframework.transaction.annotation.Transactional; + +import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDualMandatoryMajorDetailGraduationUseCase; +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.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.GraduationManager; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorManager; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindMajorPort; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +import lombok.RequiredArgsConstructor; + +@UseCase +@Transactional(readOnly = true) +@RequiredArgsConstructor +public class CalculateDualMandatoryMajorDetailGraduationService + implements CalculateDualMandatoryMajorDetailGraduationUseCase { + + private final FindMajorPort findMajorPort; + + @Override + public boolean supports(GraduationCategory graduationCategory) { + return graduationCategory == DUAL_MANDATORY_MAJOR; + } + + @Override + public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, + GraduationRequirement graduationRequirement) { + Set graduationMajorLectures = findMajorPort.findMajor(user.getDualMajor()); + GraduationManager majorGraduationManager = new MajorManager(DUAL); + DetailGraduationResult majorDetailGraduationResult = majorGraduationManager.createDetailGraduationResult(user, + takenLectureInventory, graduationMajorLectures, graduationRequirement.getDualMajorCredit()); + + DetailCategoryResult mandatoryMajorDetailCategoryResult = separateMandatoryMajor(majorDetailGraduationResult); + return DetailGraduationResult.create(DUAL_MANDATORY_MAJOR, + mandatoryMajorDetailCategoryResult.getTotalCredits(), List.of(mandatoryMajorDetailCategoryResult)); + } + + @Override + public DetailGraduationResult isolateDualMandatoryMajorDetailGraduation( + DetailGraduationResult dualMajorDetailGraduationResult) { + DetailCategoryResult mandatoryMajorDetailCategoryResult = separateMandatoryMajor( + dualMajorDetailGraduationResult); + return DetailGraduationResult.create(DUAL_MANDATORY_MAJOR, + mandatoryMajorDetailCategoryResult.getTotalCredits(), List.of(mandatoryMajorDetailCategoryResult)); + } + + private DetailCategoryResult separateMandatoryMajor( + DetailGraduationResult majorDetailGraduationResult) { + DetailCategoryResult dualMandatoryMajorDetailCategoryResult = majorDetailGraduationResult.getDetailCategory().stream() + .filter(detailCategoryResult -> detailCategoryResult.getDetailCategoryName().equals("전공필수")) + .findFirst() + .orElseThrow(() -> new RuntimeException("Not Found DetailCategoryResult(전공 필수)")); + dualMandatoryMajorDetailCategoryResult.assignDetailCategoryName("복수전공필수"); + return dualMandatoryMajorDetailCategoryResult; + } +} 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 80bfc05a..1a6466b3 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 @@ -1,5 +1,8 @@ package com.plzgraduate.myongjigraduatebe.graduation.application.service; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory.DUAL; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory.PRIMARY; + import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -9,7 +12,11 @@ import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateCommonCultureGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateCoreCultureGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDualBasicAcademicalCultureDetailGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDualElectiveMajorDetailGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDualMandatoryMajorDetailGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculatePrimaryBasicAcademicalCultureDetailGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculatePrimaryElectiveMajorDetailGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculatePrimaryMandatoryMajorDetailGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.ChapelResult; @@ -44,7 +51,10 @@ class CalculateGraduationService implements CalculateGraduationUseCase { private final CalculateCoreCultureGraduationUseCase calculateCoreCultureGraduationUseCase; private final CalculatePrimaryMandatoryMajorDetailGraduationUseCase calculatePrimaryMandatoryMajorDetailGraduationUseCase; private final CalculatePrimaryElectiveMajorDetailGraduationUseCase calculatePrimaryElectiveMajorDetailGraduationUseCase; - private final CalculatePrimaryBasicAcademicalCultureDetailGraduationService calculatePrimaryBasicAcademicalCultureDetailGraduationService; + private final CalculatePrimaryBasicAcademicalCultureDetailGraduationUseCase calculatePrimaryBasicAcademicalCultureDetailGraduationUseCase; + private final CalculateDualMandatoryMajorDetailGraduationUseCase calculateDualMandatoryMajorDetailGraduationUseCase; + private final CalculateDualElectiveMajorDetailGraduationUseCase calculateDualElectiveMajorDetailGraduationUseCase; + private final CalculateDualBasicAcademicalCultureDetailGraduationUseCase calculateDualBasicAcademicalCultureDetailGraduationUseCase; private final UpdateStudentInformationUseCase updateStudentInformationUseCase; @Override @@ -85,9 +95,13 @@ private List generateDetailGraduationResults(User user, generteBasicAcademicalDetailGraduationResult( user, takenLectureInventory, graduationRequirement) )); + detailGraduationResults.addAll( + generatePrimaryMajorDetailGraduations(user, takenLectureInventory, graduationRequirement)); - addPrimaryMajorDetailGraduation(user, takenLectureInventory, graduationRequirement, detailGraduationResults); - + if (user.getStudentCategory() == StudentCategory.DUAL_MAJOR) { + detailGraduationResults.addAll( + generateDualMajorDetailGraduations(user, takenLectureInventory, graduationRequirement)); + } if (user.getStudentCategory() == StudentCategory.SUB_MAJOR) { detailGraduationResults.add( generateSubMajorDetailGraduationResult(user, takenLectureInventory, graduationRequirement)); @@ -110,15 +124,15 @@ private DetailGraduationResult generateCoreCultureDetailGraduationResult(User us private DetailGraduationResult generteBasicAcademicalDetailGraduationResult(User user, TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { - return calculatePrimaryBasicAcademicalCultureDetailGraduationService.calculateDetailGraduation(user, + return calculatePrimaryBasicAcademicalCultureDetailGraduationUseCase.calculateDetailGraduation(user, takenLectureInventory, graduationRequirement); } - private void addPrimaryMajorDetailGraduation(User user, TakenLectureInventory takenLectureInventory, - GraduationRequirement graduationRequirement, List detailGraduationResults) { + private List generatePrimaryMajorDetailGraduations(User user, + TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { Set graduationPrimaryMajorLectures = findMajorPort.findMajor(user.getPrimaryMajor()); - MajorManager majorManager = new MajorManager(); + GraduationManager majorManager = new MajorManager(PRIMARY); DetailGraduationResult primaryMajorDetailGraduationResult = majorManager.createDetailGraduationResult(user, takenLectureInventory, graduationPrimaryMajorLectures, graduationRequirement.getPrimaryMajorCredit()); DetailGraduationResult primaryMandatoryMajorDetailGraduationResult = calculatePrimaryMandatoryMajorDetailGraduationUseCase.isolatePrimaryMandatoryMajorDetailGraduation( @@ -126,8 +140,24 @@ private void addPrimaryMajorDetailGraduation(User user, TakenLectureInventory ta DetailGraduationResult primaryElectiveMajorDetailGraduationResult = calculatePrimaryElectiveMajorDetailGraduationUseCase.isolatePrimaryElectiveMajorDetailGraduation( primaryMajorDetailGraduationResult); - detailGraduationResults.addAll( - List.of(primaryMandatoryMajorDetailGraduationResult, primaryElectiveMajorDetailGraduationResult)); + return List.of(primaryMandatoryMajorDetailGraduationResult, primaryElectiveMajorDetailGraduationResult); + } + + private List generateDualMajorDetailGraduations(User user, + TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { + Set graduationDualMajorLectures = findMajorPort.findMajor(user.getDualMajor()); + + GraduationManager majorManager = new MajorManager(DUAL); + DetailGraduationResult dualMajorDetailGraduationResult = majorManager.createDetailGraduationResult(user, + takenLectureInventory, graduationDualMajorLectures, graduationRequirement.getDualMajorCredit()); + DetailGraduationResult dualMandatoryMajorDetailGraduationResult = calculateDualMandatoryMajorDetailGraduationUseCase.isolateDualMandatoryMajorDetailGraduation( + dualMajorDetailGraduationResult); + DetailGraduationResult dualElectiveMajorDetailGraduationResult = calculateDualElectiveMajorDetailGraduationUseCase.isolateDualElectiveMajorDetailGraduation( + dualMajorDetailGraduationResult); + DetailGraduationResult dualBasicAcademicalCultureDetailGraduationResult = calculateDualBasicAcademicalCultureDetailGraduationUseCase.calculateDetailGraduation( + user, takenLectureInventory, graduationRequirement); + return List.of(dualMandatoryMajorDetailGraduationResult, dualElectiveMajorDetailGraduationResult, + dualBasicAcademicalCultureDetailGraduationResult); } private DetailGraduationResult generateSubMajorDetailGraduationResult(User user, @@ -143,7 +173,7 @@ private GraduationResult generateGraduationResult(ChapelResult chapelResult, GraduationRequirement graduationRequirement) { GraduationResult graduationResult = GraduationResult.create(chapelResult, detailGraduationResults); graduationResult.handleLeftTakenLectures(takenLectureInventory, graduationRequirement); - graduationResult.checkGraduated(); + graduationResult.checkGraduated(graduationRequirement); return graduationResult; } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationService.java index c899b2bb..71c85bbf 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationService.java @@ -8,7 +8,7 @@ import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDetailGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculatePrimaryBasicAcademicalCultureDetailGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; @@ -28,7 +28,7 @@ @Transactional(readOnly = true) @RequiredArgsConstructor public class CalculatePrimaryBasicAcademicalCultureDetailGraduationService - implements CalculateDetailGraduationUseCase { + implements CalculatePrimaryBasicAcademicalCultureDetailGraduationUseCase { private final FindBasicAcademicalCulturePort findBasicAcademicalCulturePort; @@ -41,12 +41,12 @@ public boolean supports(GraduationCategory graduationCategory) { public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { Set graduationBasicAcademicalCultureLectures = findBasicAcademicalCulturePort.findBasicAcademicalCulture( - user); + user.getPrimaryMajor()); GraduationManager basicAcademicalCultureGraduationManager = determineBasicAcademicalCultureGraduationManager( user); DetailGraduationResult detailGraduationResult = basicAcademicalCultureGraduationManager.createDetailGraduationResult( user, takenLectureInventory, graduationBasicAcademicalCultureLectures, - graduationRequirement.getPrimaryBasicAcademicalCredit()); + graduationRequirement.getPrimaryBasicAcademicalCultureCredit()); detailGraduationResult.assignGraduationCategory(PRIMARY_BASIC_ACADEMICAL_CULTURE); return detailGraduationResult; } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryElectiveMajorDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryElectiveMajorDetailGraduationService.java index 30edb262..f898cee5 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryElectiveMajorDetailGraduationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryElectiveMajorDetailGraduationService.java @@ -1,6 +1,7 @@ package com.plzgraduate.myongjigraduatebe.graduation.application.service; import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_ELECTIVE_MAJOR; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory.PRIMARY; import java.util.List; import java.util.Set; @@ -39,7 +40,7 @@ public boolean supports(GraduationCategory graduationCategory) { public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { Set graduationMajorLectures = findMajorPort.findMajor(user.getPrimaryMajor()); - GraduationManager majorGraduationManager = new MajorManager(); + GraduationManager majorGraduationManager = new MajorManager(PRIMARY); DetailGraduationResult majorDetailGraduationResult = majorGraduationManager.createDetailGraduationResult(user, takenLectureInventory, graduationMajorLectures, graduationRequirement.getPrimaryMajorCredit()); @@ -60,10 +61,12 @@ public DetailGraduationResult isolatePrimaryElectiveMajorDetailGraduation( private DetailCategoryResult separateElectiveMajor( DetailGraduationResult majorDetailGraduationResult) { - return majorDetailGraduationResult.getDetailCategory() + DetailCategoryResult primaryElectiveDetailCategoryResult = majorDetailGraduationResult.getDetailCategory() .stream() .filter(detailCategoryResult -> detailCategoryResult.getDetailCategoryName().equals("전공선택")) .findFirst() - .orElseThrow(() -> new IllegalArgumentException("Not Found DetailCategoryResult(전공 선택)")); + .orElseThrow(() -> new RuntimeException("Not Found DetailCategoryResult(전공 선택)")); + primaryElectiveDetailCategoryResult.assignDetailCategoryName("주전공선택"); + return primaryElectiveDetailCategoryResult; } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMandatoryMajorDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMandatoryMajorDetailGraduationService.java index ff16a213..dd23a463 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMandatoryMajorDetailGraduationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMandatoryMajorDetailGraduationService.java @@ -1,6 +1,7 @@ package com.plzgraduate.myongjigraduatebe.graduation.application.service; import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_MANDATORY_MAJOR; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory.PRIMARY; import java.util.List; import java.util.Set; @@ -39,7 +40,7 @@ public boolean supports(GraduationCategory graduationCategory) { public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { Set graduationMajorLectures = findMajorPort.findMajor(user.getPrimaryMajor()); - GraduationManager majorGraduationManager = new MajorManager(); + GraduationManager majorGraduationManager = new MajorManager(PRIMARY); DetailGraduationResult majorDetailGraduationResult = majorGraduationManager.createDetailGraduationResult(user, takenLectureInventory, graduationMajorLectures, graduationRequirement.getPrimaryMajorCredit()); @@ -59,9 +60,11 @@ public DetailGraduationResult isolatePrimaryMandatoryMajorDetailGraduation( private DetailCategoryResult separateMandatoryMajor( DetailGraduationResult majorDetailGraduationResult) { - return majorDetailGraduationResult.getDetailCategory().stream() + DetailCategoryResult primaryMandatoryMajorDetailCategoryResult = majorDetailGraduationResult.getDetailCategory().stream() .filter(detailCategoryResult -> detailCategoryResult.getDetailCategoryName().equals("전공필수")) .findFirst() - .orElseThrow(() -> new IllegalArgumentException("Not Found DetailCategoryResult(전공 필수)")); + .orElseThrow(() -> new RuntimeException("Not Found DetailCategoryResult(전공 필수)")); + primaryMandatoryMajorDetailCategoryResult.assignDetailCategoryName("주전공필수"); + return primaryMandatoryMajorDetailCategoryResult; } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualElectiveMajorDetailGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualElectiveMajorDetailGraduationUseCase.java new file mode 100644 index 00000000..f5d152f2 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualElectiveMajorDetailGraduationUseCase.java @@ -0,0 +1,9 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; + +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; + +public interface CalculateDualElectiveMajorDetailGraduationUseCase extends CalculateDetailGraduationUseCase { + + DetailGraduationResult isolateDualElectiveMajorDetailGraduation( + DetailGraduationResult dualMajorDetailGraduationResult); +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualMajorDetailGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualMajorDetailGraduationUseCase.java deleted file mode 100644 index 8af57051..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualMajorDetailGraduationUseCase.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; - -public interface CalculateDualMajorDetailGraduationUseCase extends CalculateDetailGraduationUseCase { -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualMandatoryMajorDetailGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualMandatoryMajorDetailGraduationUseCase.java new file mode 100644 index 00000000..ff21fa6f --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualMandatoryMajorDetailGraduationUseCase.java @@ -0,0 +1,9 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; + +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; + +public interface CalculateDualMandatoryMajorDetailGraduationUseCase extends CalculateDetailGraduationUseCase { + + DetailGraduationResult isolateDualMandatoryMajorDetailGraduation( + DetailGraduationResult dualMajorDetailGraduationResult); +} 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 d11cbfb6..86020402 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 @@ -51,8 +51,8 @@ public GraduationRequirement convertToProfitGraduationRequirement(User user) { .primaryMajorCredit(this.majorLectureCredit) .dualMajorCredit(0) .subMajorCredit(0) - .primaryBasicAcademicalCredit(this.basicAcademicalLectureCredit) - .dualBasicAcademicalCredit(0) + .primaryBasicAcademicalCultureCredit(this.basicAcademicalLectureCredit) + .dualBasicAcademicalCultureCredit(0) .commonCultureCredit(this.commonCultureCredit) .coreCultureCredit(this.coreCultureCredit) .normalCultureCredit(this.normalLectureCredit) @@ -71,13 +71,7 @@ private void checkIsEnglishFreeUserAndTransferCredit(User user, GraduationRequir 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()); + graduationRequirement.modifyCreditForDualMajor(user); } if (user.getStudentCategory() == StudentCategory.SUB_MAJOR) { graduationRequirement.modifyCreditForSubMajor(); 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 e322276c..80e096b7 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 @@ -14,7 +14,7 @@ @Getter public class DetailCategoryResult { - private final String detailCategoryName; + private String detailCategoryName; private boolean isCompleted; private final boolean isSatisfiedMandatory; private final int totalCredits; @@ -49,6 +49,10 @@ public static DetailCategoryResult create(String detailCategoryName, boolean isS .build(); } + public void assignDetailCategoryName(String detailCategoryName) { + this.detailCategoryName = detailCategoryName; + } + public void calculate(Set taken, Set graduationLectures) { addTakenLectures(taken); calculateLeftCredit(); 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 index 7b3f944a..5a22c6cb 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DualMajorGraduationRequirementType.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DualMajorGraduationRequirementType.java @@ -9,19 +9,21 @@ @RequiredArgsConstructor public enum DualMajorGraduationRequirementType { - HUMANITIES("인문대", 36, 36), - SOCIAL_SCIENCE("사회과학대", 36, 36), - BUSINESS("경영대", 45, 45), - LAW("법대", 36, 36), - ICT("ICT융합대", 42, 42); + HUMANITIES("인문대", 36, 12), + SOCIAL_SCIENCE("사회과학대", 36, 12), + BUSINESS("경영대", 45, 6), + LAW("법대", 36, 9), + ICT("ICT융합대", 42, 18); - private final String name; - private final int originMajorCredit; - private final int dualMajorCredit; + private final String collageName; + private final int majorCredit; + private final int basicAcademicalCultureCredit; - public static DualMajorGraduationRequirementType findBelongingDualMajorGraduationRequirementType(String name) { + public static DualMajorGraduationRequirementType findBelongingDualMajorGraduationRequirementType( + String collageName) { return Arrays.stream(DualMajorGraduationRequirementType.values()) - .filter(dualMajorGraduationRequirementType -> dualMajorGraduationRequirementType.getName().equals(name)) + .filter(dualMajorGraduationRequirementType -> + dualMajorGraduationRequirementType.getCollageName().equals(collageName)) .findFirst() .orElseThrow(() -> new IllegalArgumentException("소속 단과대가 존재하지 않습니다.")); } 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 f81aa671..a00c9c1c 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 @@ -15,10 +15,11 @@ public enum GraduationCategory { CORE_CULTURE("핵심교양"), PRIMARY_MANDATORY_MAJOR("주전공필수"), PRIMARY_ELECTIVE_MAJOR("주전공선택"), - DUAL_MAJOR("복수전공"), + DUAL_MANDATORY_MAJOR("복수전공필수"), + DUAL_ELECTIVE_MAJOR("복수전공선택"), SUB_MAJOR("부전공"), - PRIMARY_BASIC_ACADEMICAL_CULTURE("주 학문기초교양"), - DUAL_BASIC_ACADEMICAL_CULTURE("복수 학문기초교양"), + PRIMARY_BASIC_ACADEMICAL_CULTURE("주학문기초교양"), + DUAL_BASIC_ACADEMICAL_CULTURE("복수학문기초교양"), NORMAL_CULTURE("일반교양"), FREE_ELECTIVE("자유선택"), CHAPEL("채플"); 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 cdf44c2c..7697901e 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 @@ -1,7 +1,11 @@ package com.plzgraduate.myongjigraduatebe.graduation.domain.model; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.DualMajorGraduationRequirementType.findBelongingDualMajorGraduationRequirementType; import static com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCultureCategory.*; +import com.plzgraduate.myongjigraduatebe.user.domain.model.College; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + import lombok.Builder; import lombok.Getter; @@ -12,8 +16,8 @@ public class GraduationRequirement { private int primaryMajorCredit; private int dualMajorCredit; private int subMajorCredit; - private final int primaryBasicAcademicalCredit; - private final int dualBasicAcademicalCredit; + private final int primaryBasicAcademicalCultureCredit; + private int dualBasicAcademicalCultureCredit; private int commonCultureCredit; private final int coreCultureCredit; private int normalCultureCredit; @@ -21,14 +25,15 @@ public class GraduationRequirement { @Builder private GraduationRequirement(int totalCredit, int primaryMajorCredit, int dualMajorCredit, int subMajorCredit, - int primaryBasicAcademicalCredit, int dualBasicAcademicalCredit, int commonCultureCredit, int coreCultureCredit, + int primaryBasicAcademicalCultureCredit, int dualBasicAcademicalCultureCredit, int commonCultureCredit, + int coreCultureCredit, int normalCultureCredit, int freeElectiveCredit) { this.totalCredit = totalCredit; this.primaryMajorCredit = primaryMajorCredit; this.dualMajorCredit = dualMajorCredit; this.subMajorCredit = subMajorCredit; - this.primaryBasicAcademicalCredit = primaryBasicAcademicalCredit; - this.dualBasicAcademicalCredit = dualBasicAcademicalCredit; + this.primaryBasicAcademicalCultureCredit = primaryBasicAcademicalCultureCredit; + this.dualBasicAcademicalCultureCredit = dualBasicAcademicalCultureCredit; this.commonCultureCredit = commonCultureCredit; this.coreCultureCredit = coreCultureCredit; this.normalCultureCredit = normalCultureCredit; @@ -45,7 +50,25 @@ public void modifyCreditForSubMajor() { freeElectiveCredit = 0; } - public void modifyCreditForDualMajor(int primaryMajorCredit, int dualMajorCredit) { - //TODO: 복수 전공의 정확한 졸업요건 체크 후 로직 작성 + public void modifyCreditForDualMajor(User user) { + DualMajorGraduationRequirementType primaryMajorGraduationRequirementType = + findBelongingDualMajorGraduationRequirementType( + College.findBelongingCollege(user.getPrimaryMajor()).getName()); + DualMajorGraduationRequirementType dualMajorGraduationRequirementType = + findBelongingDualMajorGraduationRequirementType( + College.findBelongingCollege(user.getDualMajor()).getName()); + + primaryMajorCredit = primaryMajorGraduationRequirementType.getMajorCredit(); + dualMajorCredit = dualMajorGraduationRequirementType.getMajorCredit(); + dualBasicAcademicalCultureCredit = dualMajorGraduationRequirementType.getBasicAcademicalCultureCredit(); + normalCultureCredit = 0; + freeElectiveCredit = calculateFreeElectiveCreditWithDualMajorStudent(); + } + + private int calculateFreeElectiveCreditWithDualMajorStudent() { + int freeElectiveCredit = + totalCredit - commonCultureCredit - coreCultureCredit - primaryMajorCredit - dualMajorCredit + - primaryBasicAcademicalCultureCredit - dualBasicAcademicalCultureCredit; + return Math.max(freeElectiveCredit, 0); } } 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 28909058..dd49193d 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 @@ -1,7 +1,5 @@ package com.plzgraduate.myongjigraduatebe.graduation.domain.model; -import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.*; - import java.util.List; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; @@ -51,8 +49,8 @@ public void handleLeftTakenLectures(TakenLectureInventory takenLectureInventory, handleLeftTakenFreeElective(takenLectureInventory, graduationRequirement); } - public void checkGraduated() { - addUpTotalCredit(); + public void checkGraduated(GraduationRequirement graduationRequirement) { + addUpTotalCredit(graduationRequirement.getTotalCredit()); addUpTakenCredit(); boolean isAllDetailGraduationResultCompleted = detailGraduationResults.stream() @@ -61,12 +59,17 @@ public void checkGraduated() { && normalCultureGraduationResult.isCompleted() && freeElectiveGraduationResult.isCompleted(); } - private void addUpTotalCredit() { - this.totalCredit = detailGraduationResults.stream() + private void addUpTotalCredit(int originTotalCredit) { + int combinedScore = detailGraduationResults.stream() .mapToInt(DetailGraduationResult::getTotalCredit) .sum() + normalCultureGraduationResult.getTotalCredit() + freeElectiveGraduationResult.getTotalCredit(); + if (originTotalCredit < combinedScore) { + this.totalCredit = originTotalCredit; + return; + } + this.totalCredit = combinedScore; } private void addUpTakenCredit() { @@ -74,8 +77,7 @@ private void addUpTakenCredit() { .mapToDouble(DetailGraduationResult::getTakenCredit) .sum() + normalCultureGraduationResult.getTakenCredit() - + freeElectiveGraduationResult.getTakenCredit() - + chapelResult.getTakenChapelCredit(); + + freeElectiveGraduationResult.getTakenCredit(); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MajorGraduationCategory.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MajorGraduationCategory.java new file mode 100644 index 00000000..15d82803 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MajorGraduationCategory.java @@ -0,0 +1,10 @@ +package com.plzgraduate.myongjigraduatebe.graduation.domain.service.major; + +import lombok.Getter; + +@Getter +public enum MajorGraduationCategory { + PRIMARY, + DUAL, + SUB +} 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 6fdb9a47..bbb7ec19 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 @@ -16,8 +16,13 @@ import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor public class MajorManager implements GraduationManager { + private final MajorGraduationCategory majorGraduationCategory; + /** * * @param user 사용자 @@ -36,13 +41,14 @@ public DetailGraduationResult createDetailGraduationResult(User user, Set mandatoryLectures = filterMandatoryLectures(majorLectures); Set electiveLectures = filterElectiveLectures(majorLectures); - List majorExceptionHandlers = List.of(new OptionalMandatoryHandler(), + List majorExceptionHandlers = List.of( + new OptionalMandatoryHandler(), new ReplaceMandatoryMajorHandler()); MandatoryMajorManager mandatoryMajorManager = new MandatoryMajorManager(majorExceptionHandlers); ElectiveMajorManager electiveMajorManager = new ElectiveMajorManager(); DetailCategoryResult mandantoryDetailCategoryResult = mandatoryMajorManager.createDetailCategoryResult( - user, takenLectureInventory, mandatoryLectures, electiveLectures); + user, takenLectureInventory, mandatoryLectures, electiveLectures, majorGraduationCategory); int electiveMajorTotalCredit = graduationResultTotalCredit - mandantoryDetailCategoryResult.getTotalCredits(); DetailCategoryResult electiveDetailCategoryResult = electiveMajorManager.createDetailCategoryResult( @@ -78,7 +84,8 @@ private Set filterElectiveLectures(Set majorLectures) { * 사용자가 B과목을 들었다면 A,C는 전공과목에서 삭제한다. * B과목만 takenLectures(수강했던 전공과목)에 넣어주면 되고 A,C 과목은 haveToTLectures(들어야하는 전공과목)에 넣어주면 안되기 떄문이다. */ - private void removeDuplicateLectureIfTaken(TakenLectureInventory takenLectureInventory, Set graduationLectures) { + private void removeDuplicateLectureIfTaken(TakenLectureInventory takenLectureInventory, + Set graduationLectures) { Set duplicatedTakenLectures = findDuplicatedTakenLecture(takenLectureInventory); graduationLectures.removeIf(graduationLecture -> duplicatedTakenLectures.stream() diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MandatoryMajorManager.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MandatoryMajorManager.java index aa7e4557..723aae1c 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MandatoryMajorManager.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MandatoryMajorManager.java @@ -18,17 +18,18 @@ public class MandatoryMajorManager { private final List majorExceptionHandlers; - public DetailCategoryResult createDetailCategoryResult(User user, - TakenLectureInventory takenLectureInventory, Set mandatoryLectures, Set electiveLectures) { + public DetailCategoryResult createDetailCategoryResult(User user, TakenLectureInventory takenLectureInventory, + Set mandatoryLectures, Set electiveLectures, + MajorGraduationCategory majorGraduationCategory) { Set takenMandatory = new HashSet<>(); Set finishedTakenLecture = new HashSet<>(); boolean isSatisfiedMandatory = true; int removeMandatoryTotalCredit = 0; for (MajorExceptionHandler majorExceptionHandler : majorExceptionHandlers) { - if (majorExceptionHandler.isSupport(user)) { - isSatisfiedMandatory = majorExceptionHandler.checkMandatoryCondition(user, - takenLectureInventory, mandatoryLectures, electiveLectures); + if (majorExceptionHandler.isSupport(user, majorGraduationCategory)) { + isSatisfiedMandatory = majorExceptionHandler.checkMandatoryCondition(takenLectureInventory, + mandatoryLectures, electiveLectures); removeMandatoryTotalCredit = majorExceptionHandler.getRemovedMandatoryTotalCredit(); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/MajorExceptionHandler.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/MajorExceptionHandler.java index e78aac70..e4dfd64e 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/MajorExceptionHandler.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/MajorExceptionHandler.java @@ -2,14 +2,15 @@ import java.util.Set; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; public interface MajorExceptionHandler { - boolean isSupport(User user); + boolean isSupport(User user, MajorGraduationCategory majorGraduationCategory); - boolean checkMandatoryCondition(User user, TakenLectureInventory takenLectureInventory, + boolean checkMandatoryCondition(TakenLectureInventory takenLectureInventory, Set mandatoryLectures, Set electiveLectures); int getRemovedMandatoryTotalCredit(); 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 2b4f0308..4801477b 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 @@ -5,7 +5,6 @@ import java.util.Set; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -21,13 +20,19 @@ public enum OptionalMandatory { Lecture.of("HBA01113", "비영리조직", 3, 0, null), Lecture.of("HBA01222", "커뮤니티개발연구", 3, 0, null) )), - BUSINESS("경영학과", 4, Set.of( - Lecture.of("HBX01104", "회계원리", 3, 0, null), - Lecture.of("HBX01113", "인적자원관리", 3, 0, null), - Lecture.of("HBX01106", "마케팅원론", 3, 0, null), - Lecture.of("HBX01105", "재무관리원론", 3, 0, null), - Lecture.of("HBX01114", "생산운영관리", 3, 1, null), - Lecture.of("HBX01143", "운영관리", 3, 0, null) + // 기존 OptionalMandatory + // BUSINESS("경영학과", 4, Set.of( + // Lecture.of("HBX01104", "회계원리", 3, 0, null), + // Lecture.of("HBX01113", "인적자원관리", 3, 0, null), + // Lecture.of("HBX01106", "마케팅원론", 3, 0, null), + // Lecture.of("HBX01105", "재무관리원론", 3, 0, null), + // Lecture.of("HBX01114", "생산운영관리", 3, 1, null), + // Lecture.of("HBX01143", "운영관리", 3, 0, null) + BUSINESS("경영학과", 1, Set.of( + Lecture.of("HBW01201", "국제통산원론", 3, 0, "HBW01201"), + Lecture.of("HBX01127", "국제경영학", 3, 0, "CE224"), + Lecture.of("HBX01125", "경영정보", 3, 0, "KMJ01116"), + Lecture.of("HBY01103", "경영정보", 3, 1, "KMJ01116") )), INTERNATIONAL_TRADE("국제통상학과", 4, Set.of( Lecture.of("HBX01104", "회계원리", 3, 0, null), @@ -40,17 +45,16 @@ public enum OptionalMandatory { MANAGEMENT_INFORMATION("경영정보학과", 2, Set.of( Lecture.of("HBX01113", "인적자원관리", 3, 0, null), Lecture.of("HBX01106", "마케팅원론", 3, 0, null), - Lecture.of("HBX01105", "재무관리원론",3, 0, null) + Lecture.of("HBX01105", "재무관리원론", 3, 0, null) )); private final String department; private final int chooseNumber; private final Set optionalMandatoryLectures; - public static OptionalMandatory from(User user) { + public static OptionalMandatory from(String major) { return Arrays.stream(OptionalMandatory.values()) - .filter(optionalMandatory -> Objects.equals(optionalMandatory.getDepartment(), - user.getPrimaryMajor())) + .filter(optionalMandatory -> Objects.equals(optionalMandatory.getDepartment(), major)) .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 2beb3188..192cc1c6 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 @@ -1,15 +1,18 @@ package com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.exception; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory.DUAL; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory.PRIMARY; + import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; - import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; public class OptionalMandatoryHandler implements MajorExceptionHandler { @@ -20,27 +23,32 @@ public class OptionalMandatoryHandler implements MajorExceptionHandler { private static final int CLASS_OF_17 = 17; private static final int CLASS_OF_19 = 19; private int removedMandatoryTotalCredit = 0; + private OptionalMandatory optionalMandatory; - public boolean isSupport(User user) { - if (user.getPrimaryMajor().equals(MANAGEMENT_INFORMATION) && user.getEntryYear() >= CLASS_OF_19) { + public boolean isSupport(User user, MajorGraduationCategory majorGraduationCategory) { + String calculatingMajor = getCalculatingMajor(user, majorGraduationCategory); + if (calculatingMajor.equals(MANAGEMENT_INFORMATION) && user.getEntryYear() >= CLASS_OF_19) { + this.optionalMandatory = OptionalMandatory.from(getCalculatingMajor(user, majorGraduationCategory)); + return true; + } + if (calculatingMajor.equals(ADMINISTRATIONS) && user.getEntryYear() >= CLASS_OF_17) { + this.optionalMandatory = OptionalMandatory.from(getCalculatingMajor(user, majorGraduationCategory)); return true; } - if (user.getPrimaryMajor().equals(ADMINISTRATIONS) && user.getEntryYear() >= CLASS_OF_17) { + if (List.of(BUSINESS, INTERNATIONAL_TRADE).contains(calculatingMajor)) { + this.optionalMandatory = OptionalMandatory.from(getCalculatingMajor(user, majorGraduationCategory)); return true; } - return List.of(BUSINESS, INTERNATIONAL_TRADE).contains(user.getPrimaryMajor()); + return false; } @Override - public boolean checkMandatoryCondition(User user, - TakenLectureInventory takenLectureInventory, Set mandatoryLectures, Set electiveLectures) { - - boolean checkMandatoryCondition = checkCompleteOptionalMandatory(user, takenLectureInventory, - mandatoryLectures, + public boolean checkMandatoryCondition(TakenLectureInventory takenLectureInventory, + Set mandatoryLectures, Set electiveLectures) { + boolean checkMandatoryCondition = checkCompleteOptionalMandatory(takenLectureInventory, mandatoryLectures, electiveLectures); if (!checkMandatoryCondition) { - OptionalMandatory optionalMandatory = OptionalMandatory.from(user); removedMandatoryTotalCredit = optionalMandatory.getTotalOptionalMandatoryCredit(optionalMandatory) - optionalMandatory.getChooseLectureCredit(optionalMandatory); } @@ -52,10 +60,8 @@ public int getRemovedMandatoryTotalCredit() { return removedMandatoryTotalCredit; } - public boolean checkCompleteOptionalMandatory(User user, - TakenLectureInventory takenLectureInventory, Set mandatoryLectures, Set electiveLectures) { - - OptionalMandatory optionalMandatory = OptionalMandatory.from(user); + private boolean checkCompleteOptionalMandatory(TakenLectureInventory takenLectureInventory, + Set mandatoryLectures, Set electiveLectures) { int chooseNum = optionalMandatory.getChooseNumber(); //전공과목Set에서 전공필수과목에 해당되는 과목들을 추출한다. Set optionalMandatoryLectures = mandatoryLectures.stream().filter( @@ -75,4 +81,14 @@ public boolean checkCompleteOptionalMandatory(User user, } return count >= chooseNum; } + + private String getCalculatingMajor(User user, MajorGraduationCategory majorGraduationCategory) { + if (majorGraduationCategory == PRIMARY) { + return user.getPrimaryMajor(); + } + if (majorGraduationCategory == DUAL) { + return user.getDualMajor(); + } + return user.getSubMajor(); + } } 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 00c2d1b5..b46bc96c 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 @@ -1,10 +1,13 @@ package com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.exception; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory.*; + import java.util.Comparator; import java.util.List; import java.util.Set; import java.util.stream.Collectors; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @@ -22,13 +25,21 @@ public class ReplaceMandatoryMajorHandler implements MajorExceptionHandler { ); @Override - public boolean isSupport(User user) { - return user.getPrimaryMajor().equals("철학과") && user.getEntryYear() <= 21; + public boolean isSupport(User user, MajorGraduationCategory majorGraduationCategory) { + String major; + if (majorGraduationCategory == PRIMARY) { + major = user.getPrimaryMajor(); + } else if (majorGraduationCategory == DUAL) { + major = user.getDualMajor(); + } else { + major = user.getSubMajor(); + } + return major.equals("철학과") && user.getEntryYear() <= 21; } @Override - public boolean checkMandatoryCondition(User user, - TakenLectureInventory takenLectureInventory, Set mandatoryLectures, Set electiveLectures) { + public boolean checkMandatoryCondition(TakenLectureInventory takenLectureInventory, + Set mandatoryLectures, Set electiveLectures) { boolean checkCondition = checkCompleteReplaceMandatory(takenLectureInventory, mandatoryLectures, electiveLectures); if (!checkCondition) { diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/FindBasicAcademicalCulturePort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/FindBasicAcademicalCulturePort.java index fa31cf39..84c040a4 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/FindBasicAcademicalCulturePort.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/FindBasicAcademicalCulturePort.java @@ -3,9 +3,8 @@ import java.util.Set; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; public interface FindBasicAcademicalCulturePort { - Set findBasicAcademicalCulture(User user); + Set findBasicAcademicalCulture(String major); } 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 674066e3..cf41b493 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 @@ -4,12 +4,11 @@ import java.util.stream.Collectors; import com.plzgraduate.myongjigraduatebe.core.meta.PersistenceAdapter; -import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.mapper.LectureMapper; -import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.BasicAcademicalCultureRepository; import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindBasicAcademicalCulturePort; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.mapper.LectureMapper; +import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.BasicAcademicalCultureRepository; import com.plzgraduate.myongjigraduatebe.user.domain.model.College; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; @@ -21,8 +20,8 @@ public class FindBasicAcademicalCulturePersistenceAdapter implements FindBasicAc private final LectureMapper lectureMapper; @Override - public Set findBasicAcademicalCulture(User user) { - College userCollege = College.findBelongingCollege(user.getPrimaryMajor()); + public Set findBasicAcademicalCulture(String major) { + College userCollege = College.findBelongingCollege(major); return basicAcademicalCultureRepository.findAllByCollege(userCollege.getName()).stream() .map(lectureMapper::mapToBasicAcademicalCultureLectureModel) .collect(Collectors.toSet()); 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 107461c3..43ac2184 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 @@ -63,7 +63,7 @@ public static User create(String authId, String password, EnglishLevel englishLe .build(); } - public void updateStudentInformation(String name, String major, String subMajor, String dualMajor, + public void updateStudentInformation(String name, String major, String dualMajor, String subMajor, StudentCategory studentCategory, int totalCredit, double takenCredit, boolean graduate) { this.name = name; this.primaryMajor = major; 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 2d5a2789..25e16e58 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 @@ -40,6 +40,7 @@ public UserJpaEntity mapToJpaEntity(User user) { .studentNumber(user.getStudentNumber()) .entryYear(user.getEntryYear()) .major(user.getPrimaryMajor()) + .dualMajor(user.getDualMajor()) .subMajor(user.getSubMajor()) .studentCategory(user.getStudentCategory()) .totalCredit(user.getTotalCredit()) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditsControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditsControllerTest.java index 987f3d9d..c475517d 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditsControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/completedcredit/api/FindCompletedCreditsControllerTest.java @@ -51,4 +51,30 @@ void findCompletedCredits() throws Exception { .andExpect(jsonPath("$[1].completed").value(false)); } + + + @WithMockAuthenticationUser + @DisplayName("유저의 이수 학점을 조회 시 totalCredit이 0인 CompletedCredit은 조회하지 않는다.") + @Test + void findCompletedCreditsWithZeroTotalCredit() throws Exception { + //given + List completedCredits = List.of( + CompletedCredit.builder() + .graduationCategory(GraduationCategory.COMMON_CULTURE) + .totalCredit(0) + .takenCredit(10) + .build(), + CompletedCredit.builder() + .graduationCategory(GraduationCategory.CORE_CULTURE) + .totalCredit(0) + .takenCredit(5) + .build()); + given(findCompletedCreditUseCase.findCompletedCredits(1L)).willReturn(completedCredits); + + //when //then + mockMvc.perform(get("/api/v1/graduations/credits")) + .andDo(print()) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.length()").value(0)); + } } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/SingleCalculateDetailGraduationUseCaseResolverTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/SingleCalculateDetailGraduationUseCaseResolverTest.java index eb25140c..2d21459e 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/SingleCalculateDetailGraduationUseCaseResolverTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/SingleCalculateDetailGraduationUseCaseResolverTest.java @@ -22,8 +22,8 @@ class SingleCalculateDetailGraduationUseCaseResolverTest { @DisplayName("졸업 카테고리를 계산할 수 있는 CalculateDetailGraduationUseCaseResolver 반환한다.") @ValueSource(strings = - {"COMMON_CULTURE", "CORE_CULTURE", "PRIMARY_MANDATORY_MAJOR", "PRIMARY_ELECTIVE_MAJOR", "DUAL_MAJOR", - "SUB_MAJOR", "PRIMARY_BASIC_ACADEMICAL_CULTURE", "DUAL_BASIC_ACADEMICAL_CULTURE" + {"COMMON_CULTURE", "CORE_CULTURE", "PRIMARY_MANDATORY_MAJOR", "PRIMARY_ELECTIVE_MAJOR", "DUAL_MANDATORY_MAJOR", + "DUAL_ELECTIVE_MAJOR", "SUB_MAJOR", "PRIMARY_BASIC_ACADEMICAL_CULTURE", "DUAL_BASIC_ACADEMICAL_CULTURE" }) @ParameterizedTest void resolveCalculateDetailGraduationUseCase(String graduationCategoryName) { diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualBasicAcademicalCultureDetailGraduationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualBasicAcademicalCultureDetailGraduationServiceTest.java new file mode 100644 index 00000000..d6106bb0 --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualBasicAcademicalCultureDetailGraduationServiceTest.java @@ -0,0 +1,67 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.service; + +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.DUAL_BASIC_ACADEMICAL_CULTURE; +import static com.plzgraduate.myongjigraduatebe.user.domain.model.College.ICT; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; + +import java.util.HashSet; +import java.util.Set; + +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.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindBasicAcademicalCulturePort; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +@ExtendWith(MockitoExtension.class) +class CalculateDualBasicAcademicalCultureDetailGraduationServiceTest { + + @Mock + private FindBasicAcademicalCulturePort findBasicAcademicalCulturePort; + @InjectMocks + private CalculateDualBasicAcademicalCultureDetailGraduationService calculateDualBasicAcademicalCultureDetailGraduationService; + + @DisplayName("유저의 복수전공 핵심교양 상세 졸업결과를 계산한다.") + @Test + void calculateCoreCulture() { + //given + User user = User.builder() + .id(1L) + .dualMajor("응용소프트웨어전공") + .entryYear(19).build(); + HashSet graduationCoreCultures = new HashSet<>( + Set.of(BasicAcademicalCultureLecture.of(Lecture.from("KMA02128"), ICT.getName()))); + given(findBasicAcademicalCulturePort.findBasicAcademicalCulture(user.getDualMajor())).willReturn(graduationCoreCultures); + + HashSet takenLectures = new HashSet<>( + Set.of( + TakenLecture.builder().lecture(Lecture.builder() + .lectureCode("KMA02128") + .credit(3).build()).build())); + TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); + + GraduationRequirement graduationRequirement = GraduationRequirement.builder() + .dualBasicAcademicalCultureCredit(18).build(); + + //when + DetailGraduationResult detailCoreCultureGraduationResult = calculateDualBasicAcademicalCultureDetailGraduationService.calculateDetailGraduation( + user, takenLectureInventory, graduationRequirement); + + //then + assertThat(detailCoreCultureGraduationResult) + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(DUAL_BASIC_ACADEMICAL_CULTURE, false, 18, 3.0); + } + +} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualElectiveMajorDetailGraduationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualElectiveMajorDetailGraduationServiceTest.java new file mode 100644 index 00000000..a57ddf88 --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualElectiveMajorDetailGraduationServiceTest.java @@ -0,0 +1,104 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.service; + +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.DUAL_ELECTIVE_MAJOR; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +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.graduation.domain.model.DetailCategoryResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindMajorPort; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +@ExtendWith(MockitoExtension.class) +class CalculateDualElectiveMajorDetailGraduationServiceTest { + + @Mock + private FindMajorPort findMajorPort; + @InjectMocks + private CalculateDualElectiveMajorDetailGraduationService calculateDualElectiveMajorDetailGraduationService; + + @DisplayName("유저의 복수전공선택 졸업결과를 계산한다.") + @Test + void calculateCoreCulture() { + //given + User user = User.builder() + .id(1L) + .dualMajor("응용소프트웨어전공") + .entryYear(19).build(); + HashSet graduationMajorLectures = new HashSet<>( + Set.of( + MajorLecture.of(Lecture.builder().lectureCode("HEC01211").credit(3).build(), "응용소프트웨어전공", 1, 16, 23), + MajorLecture.of(Lecture.builder().lectureCode("HEC01304").credit(3).build(), "응용소프트웨어전공", 0, 16, 23))); + given(findMajorPort.findMajor(user.getDualMajor())).willReturn(graduationMajorLectures); + + HashSet takenLectures = new HashSet<>( + Set.of( + TakenLecture.builder().lecture(Lecture.builder() + .lectureCode("HEC01211") //전공 필수 + .credit(3).build()).build(), + TakenLecture.builder().lecture(Lecture.builder() + .lectureCode("HEC01304") //전공 선택 + .credit(3).build()).build())); + TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); + + GraduationRequirement graduationRequirement = GraduationRequirement.builder() + .dualMajorCredit(70).build(); + + //when + DetailGraduationResult detailDualMandatoryMajorGraduationResult = calculateDualElectiveMajorDetailGraduationService.calculateDetailGraduation( + user, takenLectureInventory, graduationRequirement); + + //then + assertThat(detailDualMandatoryMajorGraduationResult) + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(DUAL_ELECTIVE_MAJOR, false, 67, 3.0); + } + + @DisplayName("복수전공 졸업결과에서 복수전공선택 졸업결과를 분리한다.") + @Test + void isolateDualElectiveMajorDetailGraduation() { + //given + DetailCategoryResult dualMandatoryMajorDetailCategoryResult = DetailCategoryResult.builder() + .detailCategoryName("전공필수") + .totalCredits(18) + .takenCredits(18) + .build(); + DetailCategoryResult dualElectiveMajorDetailCategoryResult = DetailCategoryResult.builder() + .detailCategoryName("전공선택") + .totalCredits(52) + .takenCredits(52) + .build(); + DetailGraduationResult dualMajorDetailGraduationResult = DetailGraduationResult.createNonCategorizedGraduationResult( + 70, List.of(dualMandatoryMajorDetailCategoryResult, dualElectiveMajorDetailCategoryResult)); + + //when + DetailGraduationResult primaryMandatoryMajorDetailGraduationResult = + calculateDualElectiveMajorDetailGraduationService.isolateDualElectiveMajorDetailGraduation( + dualMajorDetailGraduationResult); + + //then + assertThat(primaryMandatoryMajorDetailGraduationResult) + .extracting("graduationCategory", "totalCredit", "takenCredit") + .contains( + DUAL_ELECTIVE_MAJOR, + dualElectiveMajorDetailCategoryResult.getTotalCredits(), + dualElectiveMajorDetailCategoryResult.getTakenCredits()); + } + +} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualMandatoryMajorDetailGraduationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualMandatoryMajorDetailGraduationServiceTest.java new file mode 100644 index 00000000..e6f9bee4 --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualMandatoryMajorDetailGraduationServiceTest.java @@ -0,0 +1,103 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.service; + +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.DUAL_MANDATORY_MAJOR; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +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.graduation.domain.model.DetailCategoryResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindMajorPort; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +@ExtendWith(MockitoExtension.class) +class CalculateDualMandatoryMajorDetailGraduationServiceTest { + + @Mock + private FindMajorPort findMajorPort; + @InjectMocks + private CalculateDualMandatoryMajorDetailGraduationService calculateDualMandatoryMajorDetailGraduationService; + + @DisplayName("유저의 복수전공필수 졸업결과를 계산한다.") + @Test + void calculateCoreCulture() { + //given + User user = User.builder() + .id(1L) + .dualMajor("응용소프트웨어전공") + .entryYear(19).build(); + HashSet graduationMajorLectures = new HashSet<>( + Set.of( + MajorLecture.of(Lecture.builder().lectureCode("HEC01211").credit(3).build(), "응용소프트웨어전공", 1, 16, 23), + MajorLecture.of(Lecture.builder().lectureCode("HEC01204").credit(3).build(), "응용소프트웨어전공", 1, 16, 23))); + given(findMajorPort.findMajor(user.getDualMajor())).willReturn(graduationMajorLectures); + + HashSet takenLectures = new HashSet<>( + Set.of( + TakenLecture.builder().lecture(Lecture.builder() + .lectureCode("HEC01211") //전공 필수 + .credit(3).build()).build(), + TakenLecture.builder().lecture(Lecture.builder() + .lectureCode("HEC01305") //전공 선택 + .credit(3).build()).build())); + TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); + + GraduationRequirement graduationRequirement = GraduationRequirement.builder() + .dualMajorCredit(70).build(); + + //when + DetailGraduationResult detailDualMandatoryMajorGraduationResult = calculateDualMandatoryMajorDetailGraduationService.calculateDetailGraduation( + user, takenLectureInventory, graduationRequirement); + + //then + assertThat(detailDualMandatoryMajorGraduationResult) + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(DUAL_MANDATORY_MAJOR, false, 6, 3.0); + } + + @DisplayName("복수전공 졸업결과에서 복수전공필수 졸업결과를 분리한다.") + @Test + void isolateDualElectiveMajorDetailGraduation() { + //given + DetailCategoryResult dualMandatoryMajorDetailCategoryResult = DetailCategoryResult.builder() + .detailCategoryName("전공필수") + .totalCredits(18) + .takenCredits(18) + .build(); + DetailCategoryResult dualElectiveMajorDetailCategoryResult = DetailCategoryResult.builder() + .detailCategoryName("전공선택") + .totalCredits(52) + .takenCredits(52) + .build(); + DetailGraduationResult dualMajorDetailGraduationResult = DetailGraduationResult.createNonCategorizedGraduationResult( + 70, List.of(dualMandatoryMajorDetailCategoryResult, dualElectiveMajorDetailCategoryResult)); + + //when + DetailGraduationResult dualMandatoryMajorDetailGraduationResult = calculateDualMandatoryMajorDetailGraduationService.isolateDualMandatoryMajorDetailGraduation( + dualMajorDetailGraduationResult); + + //then + assertThat(dualMandatoryMajorDetailGraduationResult) + .extracting("graduationCategory", "totalCredit", "takenCredit") + .contains( + DUAL_MANDATORY_MAJOR, + dualMandatoryMajorDetailCategoryResult.getTotalCredits(), + dualMandatoryMajorDetailCategoryResult.getTakenCredits()); + } + +} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationServiceTest.java index 3259f6d6..d0597f36 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationServiceTest.java @@ -42,7 +42,7 @@ void calculateCoreCulture() { .entryYear(19).build(); HashSet graduationCoreCultures = new HashSet<>( Set.of(BasicAcademicalCultureLecture.of(Lecture.from("KMA02128"), ICT.getName()))); - given(findBasicAcademicalCulturePort.findBasicAcademicalCulture(user)).willReturn(graduationCoreCultures); + given(findBasicAcademicalCulturePort.findBasicAcademicalCulture(user.getPrimaryMajor())).willReturn(graduationCoreCultures); HashSet takenLectures = new HashSet<>( Set.of( @@ -52,7 +52,7 @@ void calculateCoreCulture() { TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); GraduationRequirement graduationRequirement = GraduationRequirement.builder() - .primaryBasicAcademicalCredit(18).build(); + .primaryBasicAcademicalCultureCredit(18).build(); //when DetailGraduationResult detailCoreCultureGraduationResult = calculatePrimaryBasicAcademicalCultureDetailGraduationService.calculateDetailGraduation( diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationServiceTest.java index 6d642be2..09ef141e 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationServiceTest.java @@ -41,8 +41,8 @@ @DisplayName("단일 카테고리 졸업상세결과를 조회한다.") @ValueSource(strings = - {"COMMON_CULTURE", "CORE_CULTURE", "PRIMARY_MANDATORY_MAJOR", "PRIMARY_ELECTIVE_MAJOR", "DUAL_MAJOR", - "SUB_MAJOR", "PRIMARY_BASIC_ACADEMICAL_CULTURE", "DUAL_BASIC_ACADEMICAL_CULTURE" + {"COMMON_CULTURE", "CORE_CULTURE", "PRIMARY_MANDATORY_MAJOR", "PRIMARY_ELECTIVE_MAJOR", "DUAL_MANDATORY_MAJOR", + "DUAL_ELECTIVE_MAJOR", "SUB_MAJOR", "PRIMARY_BASIC_ACADEMICAL_CULTURE", "DUAL_BASIC_ACADEMICAL_CULTURE" }) @ParameterizedTest void calculateSingleDetailGraduation(String graduationCategoryName) { 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 cdf1f5c8..f2f6264b 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 @@ -1,11 +1,14 @@ package com.plzgraduate.myongjigraduatebe.graduation.domain.model; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.DualMajorGraduationRequirementType.*; import static com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCultureCategory.*; import static org.assertj.core.api.Assertions.*; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + class GraduationRequirementTest { @DisplayName("공통교양의 영어카테고리 학점(6점)을 일반교양 학점으로 이관한다.") @@ -28,7 +31,39 @@ void transferEnglishCategoryCredit() { .isEqualTo(beforeTransferNormalCultureCredit + ENGLISH.getTotalCredit()); } - @DisplayName("자유선택 졸업 학점을 부전공 졸업학점으로 조정한다.") + @DisplayName("복수전공 학생 - 주전공, 복수전공, 복수학문기초교양, 일반교양, 자유선택 학점을 조정한다.") + @Test + void modifyCreditForDualMajor() { + //given + User user = User.builder() + .primaryMajor("응용소프트웨어전공") + .dualMajor("경영학과") + .build(); + + GraduationRequirement graduationRequirement = GraduationRequirement.builder() + .totalCredit(80) + .commonCultureCredit(10) + .coreCultureCredit(10) + .primaryMajorCredit(10) + .dualMajorCredit(10) + .primaryBasicAcademicalCultureCredit(10) + .dualBasicAcademicalCultureCredit(10) + .normalCultureCredit(10) + .freeElectiveCredit(10).build(); + + //when + graduationRequirement.modifyCreditForDualMajor(user); + + //then + assertThat(graduationRequirement.getPrimaryMajorCredit()).isEqualTo(ICT.getMajorCredit()); + assertThat(graduationRequirement.getDualMajorCredit()).isEqualTo(BUSINESS.getMajorCredit()); + assertThat(graduationRequirement.getDualBasicAcademicalCultureCredit()).isEqualTo( + BUSINESS.getBasicAcademicalCultureCredit()); + assertThat(graduationRequirement.getNormalCultureCredit()).isEqualTo(0); + assertThat(graduationRequirement.getFreeElectiveCredit()).isEqualTo(0); + } + + @DisplayName("부전공 학생 - 자유선택 졸업 학점을 부전공 졸업학점으로 조정한다.") @Test void deleteFreeElectiveCredit() { //given 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 18e9cfce..c75c6534 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 @@ -103,7 +103,7 @@ void checkCompletedGraduated() { .freeElectiveGraduationResult(freeElectiveGraduationResult).build(); //when - graduationResult.checkGraduated(); + graduationResult.checkGraduated(GraduationRequirement.builder().totalCredit(134).build()); //then assertThat(graduationResult.isGraduated()).isTrue(); @@ -127,7 +127,7 @@ void checkUnCompletedGraduated(ChapelResult chapelResult, List 데이터테크놀로지_전공 = MajorFixture.데이터테크놀로지_전공(); - MajorManager manager = new MajorManager(); + MajorManager manager = new MajorManager(PRIMARY); //when DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, @@ -122,7 +123,7 @@ class DataTechnologyMajorTest { ))); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); Set 데이터테크놀로지_전공 = MajorFixture.데이터테크놀로지_전공(); - MajorManager manager = new MajorManager(); + MajorManager manager = new MajorManager(PRIMARY); //when DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/InternationTradeMajorTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/InternationTradeMajorTest.java index 24d0d34e..119010ba 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/InternationTradeMajorTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/InternationTradeMajorTest.java @@ -1,5 +1,6 @@ package com.plzgraduate.myongjigraduatebe.graduation.domain.service.major; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory.*; import static org.assertj.core.api.Assertions.assertThat; import java.util.HashSet; @@ -59,7 +60,7 @@ class InternationTradeMajorTest { ))); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); Set 국제통상_전공 = MajorFixture.국제통상_전공(); - MajorManager manager = new MajorManager(); + MajorManager manager = new MajorManager(PRIMARY); //when DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, @@ -115,7 +116,7 @@ class InternationTradeMajorTest { ))); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); Set 국제통상_전공 = MajorFixture.국제통상_전공(); - MajorManager manager = new MajorManager(); + MajorManager manager = new MajorManager(PRIMARY); //when DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, @@ -172,7 +173,7 @@ class InternationTradeMajorTest { ))); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); Set 국제통상_전공 = MajorFixture.국제통상_전공(); - MajorManager manager = new MajorManager(); + MajorManager manager = new MajorManager(PRIMARY); //when DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, @@ -226,7 +227,7 @@ class InternationTradeMajorTest { ))); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); Set 국제통상_전공 = MajorFixture.국제통상_전공(); - MajorManager manager = new MajorManager(); + MajorManager manager = new MajorManager(PRIMARY); //when DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, @@ -265,7 +266,7 @@ class InternationTradeMajorTest { ))); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); Set 국제통상_전공 = MajorFixture.국제통상_전공(); - MajorManager manager = new MajorManager(); + MajorManager manager = new MajorManager(PRIMARY); //when DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, @@ -296,7 +297,7 @@ class InternationTradeMajorTest { ))); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); Set 국제통상_전공 = MajorFixture.국제통상_전공(); - MajorManager manager = new MajorManager(); + MajorManager manager = new MajorManager(PRIMARY); //when DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/ReplaceMandatoryMajorHandlerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/ReplaceMandatoryMajorHandlerTest.java index a1f5b60d..b2deda28 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/ReplaceMandatoryMajorHandlerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/ReplaceMandatoryMajorHandlerTest.java @@ -1,6 +1,6 @@ package com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.exception; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; import java.util.HashSet; import java.util.Map; @@ -25,7 +25,7 @@ class ReplaceMandatoryMajorHandlerTest { @DisplayName("답사1와 답사2를 수강했을 경우 세부조건을 달성한다.") @Test void 답사과목_수강() { - + //given Set mandatoryLectures = new HashSet<>(Set.of( mockLectureMap.get("HAI01110"), //답사1 @@ -46,10 +46,10 @@ class ReplaceMandatoryMajorHandlerTest { //when MajorExceptionHandler exceptionHandler = new ReplaceMandatoryMajorHandler(); - boolean checkMandatoryCondition = exceptionHandler.checkMandatoryCondition(user, - takenLectureInventory, mandatoryLectures, electiveLectures); + boolean checkMandatoryCondition = exceptionHandler.checkMandatoryCondition(takenLectureInventory, + mandatoryLectures, electiveLectures); int removedMandatoryTotalCredit = exceptionHandler.getRemovedMandatoryTotalCredit(); - + //then assertThat(checkMandatoryCondition).isTrue(); assertThat(removedMandatoryTotalCredit).isZero(); @@ -60,7 +60,7 @@ class ReplaceMandatoryMajorHandlerTest { @DisplayName("답사1,답사2를 수강했을 못했고, 대체과목을 수강했을 경우 세부조건을 달성한다. 이때 나중에 들은 대체과목은 전공선택으로 인정된다.") @Test void 답사과목_미수강_대체과목_수강() { - + //given Set mandatoryLectures = new HashSet<>(Set.of( mockLectureMap.get("HAI01110"), //답사1 @@ -80,10 +80,10 @@ class ReplaceMandatoryMajorHandlerTest { //when MajorExceptionHandler exceptionHandler = new ReplaceMandatoryMajorHandler(); - boolean checkMandatoryCondition = exceptionHandler.checkMandatoryCondition(user, - takenLectureInventory, mandatoryLectures, electiveLectures); + boolean checkMandatoryCondition = exceptionHandler.checkMandatoryCondition(takenLectureInventory, + mandatoryLectures, electiveLectures); int removedMandatoryTotalCredit = exceptionHandler.getRemovedMandatoryTotalCredit(); - + //then assertThat(checkMandatoryCondition).isTrue(); assertThat(removedMandatoryTotalCredit).isZero(); @@ -94,7 +94,7 @@ class ReplaceMandatoryMajorHandlerTest { @DisplayName("답사1,답사2를 수강했을 못했고, 대체과목을 수강하지 못했을 경우 대체과목은 전공필수 과목으로 이동한다.") @Test void 답사_미수강_대체과목_미수강() { - + //given Set mandatoryLectures = new HashSet<>(Set.of( mockLectureMap.get("HAI01110"), //답사1 @@ -110,10 +110,10 @@ class ReplaceMandatoryMajorHandlerTest { //when MajorExceptionHandler exceptionHandler = new ReplaceMandatoryMajorHandler(); - boolean checkMandatoryCondition = exceptionHandler.checkMandatoryCondition(user, - takenLectureInventory, mandatoryLectures, electiveLectures); + boolean checkMandatoryCondition = exceptionHandler.checkMandatoryCondition(takenLectureInventory, + mandatoryLectures, electiveLectures); int removedMandatoryTotalCredit = exceptionHandler.getRemovedMandatoryTotalCredit(); - + //then assertThat(checkMandatoryCondition).isFalse(); assertThat(removedMandatoryTotalCredit).isEqualTo(3); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindBasicAcademicalCulturePersistenceAdapterTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindBasicAcademicalCulturePersistenceAdapterTest.java index d2563c97..54c82b30 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindBasicAcademicalCulturePersistenceAdapterTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindBasicAcademicalCulturePersistenceAdapterTest.java @@ -12,12 +12,11 @@ import org.springframework.beans.factory.annotation.Autowired; import com.plzgraduate.myongjigraduatebe.fixture.UserFixture; -import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.FindBasicAcademicalCulturePersistenceAdapter; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.BasicAcademicalCultureLectureJpaEntity; import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.LectureJpaEntity; import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.BasicAcademicalCultureRepository; import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.LectureRepository; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @@ -30,7 +29,7 @@ class FindBasicAcademicalCulturePersistenceAdapterTest extends PersistenceTestSu @Autowired private FindBasicAcademicalCulturePersistenceAdapter basicAcademicalCulturePersistenceAdapter; - @DisplayName("유저의 단과대에 속하는 학문기초교양 과목들을 반환한다.") + @DisplayName("전공학과의 단과대에 속하는 학문기초교양 과목들을 반환한다.") @Test void findBasicAcademicalCulture() { //given @@ -55,7 +54,7 @@ void findBasicAcademicalCulture() { //when Set basicAcademicalCulture = basicAcademicalCulturePersistenceAdapter.findBasicAcademicalCulture( - user); + user.getPrimaryMajor()); //then assertThat(basicAcademicalCulture).hasSize(1) .extracting("college") From 9a36c31b1dc71b0839ac95ba6156fc8bbe5c4530 Mon Sep 17 00:00:00 2001 From: 5uhwann <106325839+5uhwann@users.noreply.github.com> Date: Wed, 5 Jun 2024 23:32:42 +0900 Subject: [PATCH 21/27] =?UTF-8?q?[DEV-33]=20=EB=B3=B5=EC=88=98=EC=A0=84?= =?UTF-8?q?=EA=B3=B5=20=ED=95=99=EB=AC=B8=EA=B8=B0=EC=B4=88=EA=B5=90?= =?UTF-8?q?=EC=96=91=20=EC=A1=B8=EC=97=85=EA=B3=84=EC=82=B0=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=88=98=EC=A0=95=20(#269)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 복수전공 - 수강 중복 학문기초교양 조회 구현 * feat: 복수전공 - 학문기초교양 중복과목 수강 처리 로직 구현 --- .../service/CalculateGraduationService.java | 61 ++++++++++++++++--- .../domain/model/GraduationResult.java | 4 ++ .../port/FindBasicAcademicalCulturePort.java | 3 + ...icAcademicalCulturePersistenceAdapter.java | 12 ++++ .../BasicAcademicalCultureRepository.java | 10 +++ .../domain/model/TakenLectureInventory.java | 17 +++++- ...cademicalCultureLectureRepositoryTest.java | 61 ++++++++++++++++++- .../model/TakenLectureInventoryTest.java | 58 ++++++++++++------ 8 files changed, 196 insertions(+), 30 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 1a6466b3..15bfb9fa 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 @@ -4,6 +4,7 @@ import static com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory.PRIMARY; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Set; @@ -27,7 +28,9 @@ import com.plzgraduate.myongjigraduatebe.graduation.domain.service.GraduationManager; import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorManager; import com.plzgraduate.myongjigraduatebe.graduation.domain.service.submajor.SubMajorManager; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindBasicAcademicalCulturePort; import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindMajorPort; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureUseCase; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; @@ -45,6 +48,7 @@ class CalculateGraduationService implements CalculateGraduationUseCase { private final FindMajorPort findMajorPort; + private final FindBasicAcademicalCulturePort findBasicAcademicalCulturePort; private final FindTakenLectureUseCase findTakenLectureUseCase; private final CalculateCommonCultureGraduationUseCase calculateCommonCultureGraduationUseCase; @@ -68,10 +72,21 @@ public GraduationResult calculateGraduation(User user) { GraduationResult graduationResult = generateGraduationResult(chapelResult, detailGraduationResults, takenLectureInventory, graduationRequirement); + handleDuplicatedTakenCredit(user, graduationResult); updateUserGraduationInformation(user, graduationResult); return graduationResult; } + private void handleDuplicatedTakenCredit(User user, GraduationResult graduationResult) { + if (user.getStudentCategory() == StudentCategory.DUAL_MAJOR) { + int duplicatedBasicAcademicalCultureCredit = + findBasicAcademicalCulturePort.findDuplicatedLecturesBetweenMajors(user).stream() + .mapToInt(basicAcademicalCulture -> basicAcademicalCulture.getLecture().getCredit()) + .sum(); + graduationResult.deductDuplicatedCredit(duplicatedBasicAcademicalCultureCredit); + } + } + private GraduationRequirement determineGraduationRequirement(User user) { College userCollage = College.findBelongingCollege(user.getPrimaryMajor()); DefaultGraduationRequirementType defaultGraduationRequirement = DefaultGraduationRequirementType.determineGraduationRequirement( @@ -91,13 +106,12 @@ private List generateDetailGraduationResults(User user, generateCommonCultureDetailGraduationResult( user, takenLectureInventory, graduationRequirement), generateCoreCultureDetailGraduationResult( - user, takenLectureInventory, graduationRequirement), - generteBasicAcademicalDetailGraduationResult( user, takenLectureInventory, graduationRequirement) )); detailGraduationResults.addAll( generatePrimaryMajorDetailGraduations(user, takenLectureInventory, graduationRequirement)); - + detailGraduationResults.addAll(generateBasicAcademicalDetailGraduationResult( + user, takenLectureInventory, graduationRequirement)); if (user.getStudentCategory() == StudentCategory.DUAL_MAJOR) { detailGraduationResults.addAll( generateDualMajorDetailGraduations(user, takenLectureInventory, graduationRequirement)); @@ -122,10 +136,39 @@ private DetailGraduationResult generateCoreCultureDetailGraduationResult(User us graduationRequirement); } - private DetailGraduationResult generteBasicAcademicalDetailGraduationResult(User user, + private List generateBasicAcademicalDetailGraduationResult(User user, TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { - return calculatePrimaryBasicAcademicalCultureDetailGraduationUseCase.calculateDetailGraduation(user, - takenLectureInventory, graduationRequirement); + if (user.getStudentCategory() == StudentCategory.DUAL_MAJOR) { + TakenLectureInventory copiedTakenLectureForPrimaryBasicAcademicalCulture = takenLectureInventory.copy(); + TakenLectureInventory copiedTakenLectureForDualBasicAcademicalCulture = takenLectureInventory.copy(); + DetailGraduationResult primaryBasicAcademicalCultureDetailGraduationResult = calculatePrimaryBasicAcademicalCultureDetailGraduationUseCase.calculateDetailGraduation( + user, copiedTakenLectureForPrimaryBasicAcademicalCulture, graduationRequirement); + DetailGraduationResult dualBasicAcademicalCultureDetailGraduationResult = calculateDualBasicAcademicalCultureDetailGraduationUseCase.calculateDetailGraduation( + user, copiedTakenLectureForDualBasicAcademicalCulture, graduationRequirement); + syncOriginalTakenLectureInventory(takenLectureInventory, + primaryBasicAcademicalCultureDetailGraduationResult, + dualBasicAcademicalCultureDetailGraduationResult); + return List.of(primaryBasicAcademicalCultureDetailGraduationResult, + dualBasicAcademicalCultureDetailGraduationResult); + } + DetailGraduationResult primaryBasicAcademicalCultureGraduationResult = calculatePrimaryBasicAcademicalCultureDetailGraduationUseCase.calculateDetailGraduation( + user, takenLectureInventory, graduationRequirement); + return List.of(primaryBasicAcademicalCultureGraduationResult); + } + + private void syncOriginalTakenLectureInventory(TakenLectureInventory originalTakenLectureInventory, + DetailGraduationResult primaryBasicAcademicalCultureDetailGraduationResult, + DetailGraduationResult dualBasicAcademicalCultureDetailGraduationResult) { + List primaryBasicAcademicalCultureTakenLectures = primaryBasicAcademicalCultureDetailGraduationResult.getDetailCategory() + .get(0) + .getTakenLectures(); + List dualBasicAcademicalCultureTakenLectures = dualBasicAcademicalCultureDetailGraduationResult.getDetailCategory() + .get(0) + .getTakenLectures(); + Set basicAcademicalCultureTakenLectures = new HashSet<>(); + basicAcademicalCultureTakenLectures.addAll(primaryBasicAcademicalCultureTakenLectures); + basicAcademicalCultureTakenLectures.addAll(dualBasicAcademicalCultureTakenLectures); + originalTakenLectureInventory.handleFinishedLectures(basicAcademicalCultureTakenLectures); } private List generatePrimaryMajorDetailGraduations(User user, @@ -154,10 +197,8 @@ private List generateDualMajorDetailGraduations(User use dualMajorDetailGraduationResult); DetailGraduationResult dualElectiveMajorDetailGraduationResult = calculateDualElectiveMajorDetailGraduationUseCase.isolateDualElectiveMajorDetailGraduation( dualMajorDetailGraduationResult); - DetailGraduationResult dualBasicAcademicalCultureDetailGraduationResult = calculateDualBasicAcademicalCultureDetailGraduationUseCase.calculateDetailGraduation( - user, takenLectureInventory, graduationRequirement); - return List.of(dualMandatoryMajorDetailGraduationResult, dualElectiveMajorDetailGraduationResult, - dualBasicAcademicalCultureDetailGraduationResult); + + return List.of(dualMandatoryMajorDetailGraduationResult, dualElectiveMajorDetailGraduationResult); } private DetailGraduationResult generateSubMajorDetailGraduationResult(User user, 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 dd49193d..cf7929e7 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 @@ -59,6 +59,10 @@ public void checkGraduated(GraduationRequirement graduationRequirement) { && normalCultureGraduationResult.isCompleted() && freeElectiveGraduationResult.isCompleted(); } + public void deductDuplicatedCredit(int duplicatedCredit) { + this.takenCredit -= duplicatedCredit; + } + private void addUpTotalCredit(int originTotalCredit) { int combinedScore = detailGraduationResults.stream() .mapToInt(DetailGraduationResult::getTotalCredit) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/FindBasicAcademicalCulturePort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/FindBasicAcademicalCulturePort.java index 84c040a4..8ed91959 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/FindBasicAcademicalCulturePort.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/application/port/FindBasicAcademicalCulturePort.java @@ -3,8 +3,11 @@ import java.util.Set; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; public interface FindBasicAcademicalCulturePort { Set findBasicAcademicalCulture(String major); + + Set findDuplicatedLecturesBetweenMajors(User user); } 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 cf41b493..c8e54cb7 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 @@ -9,6 +9,7 @@ import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.mapper.LectureMapper; import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.BasicAcademicalCultureRepository; import com.plzgraduate.myongjigraduatebe.user.domain.model.College; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; @@ -26,4 +27,15 @@ public Set findBasicAcademicalCulture(String majo .map(lectureMapper::mapToBasicAcademicalCultureLectureModel) .collect(Collectors.toSet()); } + + @Override + public Set findDuplicatedLecturesBetweenMajors(User user) { + College primaryMajorCollage = College.findBelongingCollege(user.getPrimaryMajor()); + College dualMajorCollage = College.findBelongingCollege(user.getDualMajor()); + return basicAcademicalCultureRepository.findAllDuplicatedTakenByCollages(user.getId(), + primaryMajorCollage.getName(), dualMajorCollage.getName()).stream() + .map(lectureMapper::mapToBasicAcademicalCultureLectureModel) + .collect(Collectors.toSet()); + } + } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/BasicAcademicalCultureRepository.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/BasicAcademicalCultureRepository.java index 15d02955..0695ee28 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/BasicAcademicalCultureRepository.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/BasicAcademicalCultureRepository.java @@ -12,4 +12,14 @@ public interface BasicAcademicalCultureRepository extends JpaRepository findAllByCollege(@Param("college") String college); + + @Query("SELECT pb " + + "FROM BasicAcademicalCultureLectureJpaEntity pb " + + "JOIN BasicAcademicalCultureLectureJpaEntity db ON pb.lectureJpaEntity.id = db.lectureJpaEntity.id " + + "JOIN TakenLectureJpaEntity tl ON pb.lectureJpaEntity.id = tl.lecture.id " + + "WHERE tl.user.id = :userId " + + "AND pb.college = :primary " + + "AND db.college = :dual") + List findAllDuplicatedTakenByCollages(@Param("userId") Long id, + @Param("primary") String primaryMajorCollage, @Param("dual") String dualMajorCollage); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/domain/model/TakenLectureInventory.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/domain/model/TakenLectureInventory.java index 9158e7d5..83a089c4 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/domain/model/TakenLectureInventory.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/domain/model/TakenLectureInventory.java @@ -1,9 +1,12 @@ package com.plzgraduate.myongjigraduatebe.takenlecture.domain.model; import java.util.Collections; +import java.util.HashSet; import java.util.Set; import java.util.stream.Collectors; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; + import lombok.Builder; public class TakenLectureInventory { @@ -19,6 +22,10 @@ public Set getTakenLectures() { return Collections.unmodifiableSet(takenLecture); } + public TakenLectureInventory copy() { + return TakenLectureInventory.from(new HashSet<>(takenLecture)); + } + public Set getCultureLectures() { return takenLecture.stream() .filter(taken -> taken.getLecture().isCulture()) @@ -35,12 +42,20 @@ public void handleFinishedTakenLectures(Set finishedTakenLecture) takenLecture.removeAll(finishedTakenLecture); } + public void handleFinishedLectures(Set finishedBasicAcademicalCultureLecture) { + takenLecture.removeAll( + takenLecture.stream() + .filter(taken -> finishedBasicAcademicalCultureLecture.contains(taken.getLecture())) + .collect(Collectors.toSet()) + ); + } + public int calculateTotalCredit() { int totalCredit = this.takenLecture .stream() .mapToInt(takenLecture -> takenLecture.getLecture().getCredit()) .sum(); - if(checkChapelCountIsFour(this.takenLecture)) { + if (checkChapelCountIsFour(this.takenLecture)) { totalCredit += 2; } return totalCredit; diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/BasicAcademicalCultureLectureRepositoryTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/BasicAcademicalCultureLectureRepositoryTest.java index 8b0d001b..b98ca7b7 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/BasicAcademicalCultureLectureRepositoryTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/BasicAcademicalCultureLectureRepositoryTest.java @@ -1,25 +1,33 @@ package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository; +import static com.plzgraduate.myongjigraduatebe.user.domain.model.College.*; import static org.assertj.core.api.Assertions.*; import java.util.List; import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import org.springframework.beans.factory.annotation.Autowired; import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.BasicAcademicalCultureLectureJpaEntity; import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.LectureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.BasicAcademicalCultureRepository; -import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.LectureRepository; import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; +import com.plzgraduate.myongjigraduatebe.takenlecture.infrastructure.adapter.persistence.TakenLectureRepository; +import com.plzgraduate.myongjigraduatebe.takenlecture.infrastructure.adapter.persistence.entity.TakenLectureJpaEntity; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.entity.UserJpaEntity; +import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.repository.UserRepository; class BasicAcademicalCultureLectureRepositoryTest extends PersistenceTestSupport { @Autowired private LectureRepository lectureRepository; @Autowired + private UserRepository userRepository; + @Autowired + private TakenLectureRepository takenLectureRepository; + @Autowired private BasicAcademicalCultureRepository basicAcademicalCultureRepository; @DisplayName("유저의 단과대에 해당하는 학문기초교양과목을 조회한다.") @@ -45,6 +53,55 @@ void findByCollege(String college) { .contains(college); } + @DisplayName("유저가 수강한 과목 중 유저의 주전공, 복수전공 양쪽 모두에 해당하는 학문기초교양의 수를 조회한다.") + @Test + void findAllDuplicatedTakenCountByCollages() { + //given + UserJpaEntity userJpaEntity = userRepository.save(UserJpaEntity.builder() + .authId("test") + .password("test") + .studentNumber("12341234") + .major("응용소프트웨어전공") + .dualMajor("경영학과").build()); + + LectureJpaEntity lectureJpaEntityA = LectureJpaEntity.builder() + .lectureCode("TESTA").build(); + LectureJpaEntity lectureJpaEntityB = LectureJpaEntity.builder() + .lectureCode("TESTB").build(); + List lectureJpaEntities = lectureRepository.saveAll( + List.of(lectureJpaEntityA, lectureJpaEntityB)); + + TakenLectureJpaEntity takenLectureJpaEntityA = TakenLectureJpaEntity.builder() + .user(userJpaEntity) + .lecture(lectureJpaEntities.get(0)) + .build(); + TakenLectureJpaEntity takenLectureJpaEntityB = TakenLectureJpaEntity.builder() + .user(userJpaEntity) + .lecture(lectureJpaEntities.get(1)) + .build(); + takenLectureRepository.saveAll(List.of(takenLectureJpaEntityA, takenLectureJpaEntityB)); + + BasicAcademicalCultureLectureJpaEntity ictBasicAcademicalCultureJpaEntity = BasicAcademicalCultureLectureJpaEntity.builder() + .lectureJpaEntity(lectureJpaEntities.get(0)) + .college(ICT.getName()).build(); + BasicAcademicalCultureLectureJpaEntity businessBasicAcademicalCultureJpaEntity = BasicAcademicalCultureLectureJpaEntity.builder() + .lectureJpaEntity(lectureJpaEntities.get(1)) + .college(BUSINESS.getName()).build(); + BasicAcademicalCultureLectureJpaEntity bothBasicAcademicalCultureJpaEntity = BasicAcademicalCultureLectureJpaEntity.builder() + .lectureJpaEntity(lectureJpaEntities.get(0)) + .college(BUSINESS.getName()).build(); + basicAcademicalCultureRepository.saveAll( + List.of(ictBasicAcademicalCultureJpaEntity, businessBasicAcademicalCultureJpaEntity, + bothBasicAcademicalCultureJpaEntity)); + + //when + List duplicatedTakenBasicAcademicalCultures = basicAcademicalCultureRepository.findAllDuplicatedTakenByCollages( + userJpaEntity.getId(), ICT.getName(), BUSINESS.getName()); + + //then + assertThat(duplicatedTakenBasicAcademicalCultures).hasSize(1); + } + private List createBasicAcademicalCultures( LectureJpaEntity lectureJpaEntity) { BasicAcademicalCultureLectureJpaEntity humanities = BasicAcademicalCultureLectureJpaEntity.builder() diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/domain/model/TakenLectureInventoryTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/domain/model/TakenLectureInventoryTest.java index 56ac0923..1a8b7f03 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/domain/model/TakenLectureInventoryTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/domain/model/TakenLectureInventoryTest.java @@ -1,6 +1,6 @@ package com.plzgraduate.myongjigraduatebe.takenlecture.domain.model; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; import java.util.HashSet; import java.util.Map; @@ -18,36 +18,23 @@ class TakenLectureInventoryTest { private final User user = UserFixture.경영학과_19학번_ENG34(); private final Map mockLectureMap = LectureFixture.getMockLectureMap(); - private final TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(new HashSet<>(Set.of( - TakenLecture.of(user, mockLectureMap.get("KMA00101"), 2019, Semester.FIRST), - TakenLecture.of(user, mockLectureMap.get("KMA02102"), 2019, Semester.FIRST), - TakenLecture.of(user, mockLectureMap.get("KMA02122"), 2019, Semester.FIRST), - TakenLecture.of(user, mockLectureMap.get("KMA02104"), 2023, Semester.FIRST), - TakenLecture.of(user, mockLectureMap.get("KMA02141"), 2023, Semester.FIRST), - TakenLecture.of(user, mockLectureMap.get("KMA02106"), 2023, Semester.FIRST), - TakenLecture.of(user, mockLectureMap.get("KMA02107"), 2023, Semester.FIRST), - TakenLecture.of(user, mockLectureMap.get("KMA02123"), 2023, Semester.FIRST), - TakenLecture.of(user, mockLectureMap.get("KMA02124"), 2023, Semester.FIRST), - TakenLecture.of(user, mockLectureMap.get("KMA02108"), 2023, Semester.FIRST), - TakenLecture.of(user, mockLectureMap.get("KMA02109"), 2023, Semester.FIRST), - TakenLecture.of(user, mockLectureMap.get("KMA02125"), 2023, Semester.FIRST), - TakenLecture.of(user, mockLectureMap.get("KMA02126"), 2023, Semester.FIRST) - ))); @DisplayName("수강과목 목록에서 교양 수강과목 목록을 반환한다.") @Test void getTakenCultureLectures() { //given //when + TakenLectureInventory takenLectureInventory = getTakenLectureInventory(); Set cultureLectures = takenLectureInventory.getCultureLectures(); //then assertThat(cultureLectures).hasSize(takenLectureInventory.getTakenLectures().size()); } - @DisplayName("수강과목 목록에서 처리 완료된 과목을 제거한다.") + @DisplayName("수강과목 목록에서 처리 완료된 수강과목들을 제거한다.") @Test void handleFinishedTakenLectures() { //given + TakenLectureInventory takenLectureInventory = getTakenLectureInventory(); int beforeHandleSize = takenLectureInventory.getTakenLectures().size(); Set finishedTakenLecture = new HashSet<>(Set.of( TakenLecture.of(user, mockLectureMap.get("KMA00101"), 2019, Semester.FIRST), @@ -84,4 +71,41 @@ void calculateTotalCredit() { //then assertThat(calculatedCredit).isEqualTo(4); } + + @DisplayName("수강과목 목록에서 처리 완료된 과목을 제거한다.") + @Test + void handleFinishedLectures() { + //given + TakenLectureInventory takenLectureInventory = getTakenLectureInventory(); + int beforeHandleSize = takenLectureInventory.getTakenLectures().size(); + Set finishedLectures = new HashSet<>(Set.of( + mockLectureMap.get("KMA00101"), + mockLectureMap.get("KMA02102") + )); + + //when + takenLectureInventory.handleFinishedLectures(finishedLectures); + + //then + assertThat(takenLectureInventory.getTakenLectures()) + .hasSize(beforeHandleSize - finishedLectures.size()); + } + + private TakenLectureInventory getTakenLectureInventory() { + return TakenLectureInventory.from(new HashSet<>(Set.of( + TakenLecture.of(user, mockLectureMap.get("KMA00101"), 2019, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA02102"), 2019, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA02122"), 2019, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA02104"), 2023, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA02141"), 2023, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA02106"), 2023, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA02107"), 2023, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA02123"), 2023, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA02124"), 2023, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA02108"), 2023, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA02109"), 2023, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA02125"), 2023, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA02126"), 2023, Semester.FIRST) + ))); + } } From f6a2b9f2fa8351d0032ad74f30363bbd5d8566c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=EC=A7=80=ED=99=98?= <64758861+stophwan@users.noreply.github.com> Date: Thu, 13 Jun 2024 10:28:43 +0900 Subject: [PATCH 22/27] =?UTF-8?q?[DEV-35]=20=ED=95=99=EC=82=AC=EC=95=88?= =?UTF-8?q?=EB=82=B4=EB=AC=B8=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20?= =?UTF-8?q?=EB=B0=98=EC=98=81=20(#272)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: MajorExceptionHandler -> MandotoryMajorSpecialCaseHandler 인터페이스변경 * refactor: 인터페이스명 변경에 따른 exception 폴더 제거 * refactor: 경영학과 전공 학사안내문 반영 --- .../service/major/ElectiveMajorManager.java | 4 +- .../domain/service/major/MajorManager.java | 9 +- .../service/major/MandatoryMajorManager.java | 18 ++-- ... => MandatoryMajorSpecialCaseHandler.java} | 10 +- .../MandatorySpecialCaseInformation.java | 22 +++++ .../{exception => }/OptionalMandatory.java | 27 ++---- ...ava => OptionalMandatoryMajorHandler.java} | 56 +++++------ .../ReplaceMandatoryMajorHandler.java | 24 ++--- .../OptionalMandatoryMajorHandlerTest.java | 94 +++++++++++++++++++ .../ReplaceMandatoryMajorHandlerTest.java | 38 +++++--- 10 files changed, 210 insertions(+), 92 deletions(-) rename src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/{exception/MajorExceptionHandler.java => MandatoryMajorSpecialCaseHandler.java} (62%) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MandatorySpecialCaseInformation.java rename src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/{exception => }/OptionalMandatory.java (67%) rename src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/{exception/OptionalMandatoryHandler.java => OptionalMandatoryMajorHandler.java} (56%) rename src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/{exception => }/ReplaceMandatoryMajorHandler.java (78%) create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/OptionalMandatoryMajorHandlerTest.java diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/ElectiveMajorManager.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/ElectiveMajorManager.java index 60032d1b..8ac2d32d 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/ElectiveMajorManager.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/ElectiveMajorManager.java @@ -9,6 +9,8 @@ import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; public class ElectiveMajorManager { + + private static final String ELECTIVE_MAJOR_NAME = "전공선택"; public DetailCategoryResult createDetailCategoryResult(TakenLectureInventory takenLectureInventory, Set electiveLectures, int electiveMajorTotalCredit) { Set takenElective = new HashSet<>(); @@ -19,7 +21,7 @@ public DetailCategoryResult createDetailCategoryResult(TakenLectureInventory tak finishedTakenLecture.add(takenLecture); takenElective.add(takenLecture.getLecture()); }); - DetailCategoryResult electiveMajorResult = DetailCategoryResult.create("전공선택", true, electiveMajorTotalCredit); + DetailCategoryResult electiveMajorResult = DetailCategoryResult.create(ELECTIVE_MAJOR_NAME, true, electiveMajorTotalCredit); electiveMajorResult.calculate(takenElective, electiveLectures); takenLectureInventory.handleFinishedTakenLectures(finishedTakenLecture); 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 bbb7ec19..e964fd68 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 @@ -7,9 +7,6 @@ import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailCategoryResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.service.GraduationManager; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.exception.MajorExceptionHandler; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.exception.OptionalMandatoryHandler; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.exception.ReplaceMandatoryMajorHandler; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; @@ -41,10 +38,10 @@ public DetailGraduationResult createDetailGraduationResult(User user, Set mandatoryLectures = filterMandatoryLectures(majorLectures); Set electiveLectures = filterElectiveLectures(majorLectures); - List majorExceptionHandlers = List.of( - new OptionalMandatoryHandler(), + List mandatoryMajorSpecialCaseHandlers = List.of( + new OptionalMandatoryMajorHandler(), new ReplaceMandatoryMajorHandler()); - MandatoryMajorManager mandatoryMajorManager = new MandatoryMajorManager(majorExceptionHandlers); + MandatoryMajorManager mandatoryMajorManager = new MandatoryMajorManager(mandatoryMajorSpecialCaseHandlers); ElectiveMajorManager electiveMajorManager = new ElectiveMajorManager(); DetailCategoryResult mandantoryDetailCategoryResult = mandatoryMajorManager.createDetailCategoryResult( diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MandatoryMajorManager.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MandatoryMajorManager.java index 723aae1c..f28c35b5 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MandatoryMajorManager.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MandatoryMajorManager.java @@ -5,7 +5,6 @@ import java.util.Set; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailCategoryResult; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.exception.MajorExceptionHandler; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @@ -16,7 +15,9 @@ @RequiredArgsConstructor public class MandatoryMajorManager { - private final List majorExceptionHandlers; + private static final String MANDATORY_MAJOR_NAME = "전공필수"; + + private final List mandatoryMajorSpecialCaseHandlers; public DetailCategoryResult createDetailCategoryResult(User user, TakenLectureInventory takenLectureInventory, Set mandatoryLectures, Set electiveLectures, @@ -26,11 +27,12 @@ public DetailCategoryResult createDetailCategoryResult(User user, TakenLectureIn boolean isSatisfiedMandatory = true; int removeMandatoryTotalCredit = 0; - for (MajorExceptionHandler majorExceptionHandler : majorExceptionHandlers) { - if (majorExceptionHandler.isSupport(user, majorGraduationCategory)) { - isSatisfiedMandatory = majorExceptionHandler.checkMandatoryCondition(takenLectureInventory, - mandatoryLectures, electiveLectures); - removeMandatoryTotalCredit = majorExceptionHandler.getRemovedMandatoryTotalCredit(); + for (MandatoryMajorSpecialCaseHandler mandatoryMajorSpecialCaseHandler : mandatoryMajorSpecialCaseHandlers) { + if (mandatoryMajorSpecialCaseHandler.isSupport(user, majorGraduationCategory)) { + MandatorySpecialCaseInformation mandatorySpecialCaseInformation = mandatoryMajorSpecialCaseHandler.getMandatorySpecialCaseInformation( + user, majorGraduationCategory, takenLectureInventory, mandatoryLectures, electiveLectures); + isSatisfiedMandatory = mandatorySpecialCaseInformation.isCompleteMandatorySpecialCase(); + removeMandatoryTotalCredit = mandatorySpecialCaseInformation.getRemovedMandatoryTotalCredit(); } } @@ -40,7 +42,7 @@ public DetailCategoryResult createDetailCategoryResult(User user, TakenLectureIn finishedTakenLecture.add(takenLecture); takenMandatory.add(takenLecture.getLecture()); }); - DetailCategoryResult majorMandatoryResult = DetailCategoryResult.create("전공필수", isSatisfiedMandatory, + DetailCategoryResult majorMandatoryResult = DetailCategoryResult.create(MANDATORY_MAJOR_NAME, isSatisfiedMandatory, calculateTotalCredit(takenMandatory, mandatoryLectures, removeMandatoryTotalCredit)); majorMandatoryResult.calculate(takenMandatory, mandatoryLectures); takenLectureInventory.handleFinishedTakenLectures(finishedTakenLecture); diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/MajorExceptionHandler.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MandatoryMajorSpecialCaseHandler.java similarity index 62% rename from src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/MajorExceptionHandler.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MandatoryMajorSpecialCaseHandler.java index e4dfd64e..7602e313 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/MajorExceptionHandler.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MandatoryMajorSpecialCaseHandler.java @@ -1,17 +1,15 @@ -package com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.exception; +package com.plzgraduate.myongjigraduatebe.graduation.domain.service.major; import java.util.Set; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; -public interface MajorExceptionHandler { +public interface MandatoryMajorSpecialCaseHandler { boolean isSupport(User user, MajorGraduationCategory majorGraduationCategory); - boolean checkMandatoryCondition(TakenLectureInventory takenLectureInventory, + MandatorySpecialCaseInformation getMandatorySpecialCaseInformation( + User user, MajorGraduationCategory majorGraduationCategory, TakenLectureInventory takenLectureInventory, Set mandatoryLectures, Set electiveLectures); - - int getRemovedMandatoryTotalCredit(); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MandatorySpecialCaseInformation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MandatorySpecialCaseInformation.java new file mode 100644 index 00000000..8ede98a1 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MandatorySpecialCaseInformation.java @@ -0,0 +1,22 @@ +package com.plzgraduate.myongjigraduatebe.graduation.domain.service.major; + +import lombok.Builder; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@Builder +@RequiredArgsConstructor +public class MandatorySpecialCaseInformation { + + private final boolean isCompleteMandatorySpecialCase; + + private final int removedMandatoryTotalCredit; + + public static MandatorySpecialCaseInformation of(boolean completeMandatorySpecialCase, int removedMandatoryTotalCredit) { + return MandatorySpecialCaseInformation.builder() + .isCompleteMandatorySpecialCase(completeMandatorySpecialCase) + .removedMandatoryTotalCredit(removedMandatoryTotalCredit) + .build(); + } +} 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/OptionalMandatory.java similarity index 67% rename from src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/OptionalMandatory.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/OptionalMandatory.java index 4801477b..7a85f2b0 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/OptionalMandatory.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.exception; +package com.plzgraduate.myongjigraduatebe.graduation.domain.service.major; import java.util.Arrays; import java.util.Objects; @@ -20,19 +20,12 @@ public enum OptionalMandatory { Lecture.of("HBA01113", "비영리조직", 3, 0, null), Lecture.of("HBA01222", "커뮤니티개발연구", 3, 0, null) )), - // 기존 OptionalMandatory - // BUSINESS("경영학과", 4, Set.of( - // Lecture.of("HBX01104", "회계원리", 3, 0, null), - // Lecture.of("HBX01113", "인적자원관리", 3, 0, null), - // Lecture.of("HBX01106", "마케팅원론", 3, 0, null), - // Lecture.of("HBX01105", "재무관리원론", 3, 0, null), - // Lecture.of("HBX01114", "생산운영관리", 3, 1, null), - // Lecture.of("HBX01143", "운영관리", 3, 0, null) + BUSINESS("경영학과", 1, Set.of( - Lecture.of("HBW01201", "국제통산원론", 3, 0, "HBW01201"), - Lecture.of("HBX01127", "국제경영학", 3, 0, "CE224"), - Lecture.of("HBX01125", "경영정보", 3, 0, "KMJ01116"), - Lecture.of("HBY01103", "경영정보", 3, 1, "KMJ01116") + Lecture.of("HBX01128", "국제통상원론", 3, 0, null), + Lecture.of("HBX01127", "국제경영학", 3, 0, null), + Lecture.of("HBX01125", "경영정보", 3, 0, null), + Lecture.of("HBY01103", "경영정보", 3, 1, null) )), INTERNATIONAL_TRADE("국제통상학과", 4, Set.of( Lecture.of("HBX01104", "회계원리", 3, 0, null), @@ -59,15 +52,15 @@ public static OptionalMandatory from(String major) { .orElseThrow(() -> new IllegalArgumentException("해당 전공선택필수를 찾을 수 없습니다.")); } - public int getTotalOptionalMandatoryCredit(OptionalMandatory optionalMandatory) { - return optionalMandatory.optionalMandatoryLectures.stream() + public int getTotalOptionalMandatoryCredit() { + return optionalMandatoryLectures.stream() .filter(lecture -> lecture.getIsRevoked() == 0) .mapToInt(Lecture::getCredit) .sum(); } - public int getChooseLectureCredit(OptionalMandatory optionalMandatory) { - return optionalMandatory.chooseNumber * 3; + public int getChooseLectureCredit() { + return chooseNumber * 3; } } 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/OptionalMandatoryMajorHandler.java similarity index 56% rename from src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/OptionalMandatoryHandler.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/OptionalMandatoryMajorHandler.java index 192cc1c6..7adc6ad5 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/OptionalMandatoryMajorHandler.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.exception; +package com.plzgraduate.myongjigraduatebe.graduation.domain.service.major; import static com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory.DUAL; import static com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory.PRIMARY; @@ -8,13 +8,18 @@ import java.util.Set; import java.util.stream.Collectors; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; -public class OptionalMandatoryHandler implements MajorExceptionHandler { +/** + * N택 M의 선택과목이 있는 경우 처리하는 핸들러 클래스 + * 국제통상의 경우 회계원리, 마케팅원론, 재무관리 원론, 인적자원관리, 생산운영관리(폐지), 운영관리(구, 생산운영관리) 5개 중 4개 선택 + * 경영정보의 경우 인적자원관리, 마켓팅원론, 재무관리원론에서 ~18학번까지는 3개 모두 이수, 19학번 이후 택 2 + * 경영의 경우 국제통상원론, 국제경양, 경영정보 중 택1 + **/ +public class OptionalMandatoryMajorHandler implements MandatoryMajorSpecialCaseHandler { private static final String MANAGEMENT_INFORMATION = "경영정보학과"; private static final String BUSINESS = "경영학과"; @@ -22,51 +27,48 @@ public class OptionalMandatoryHandler implements MajorExceptionHandler { private static final String INTERNATIONAL_TRADE = "국제통상학과"; private static final int CLASS_OF_17 = 17; private static final int CLASS_OF_19 = 19; - private int removedMandatoryTotalCredit = 0; - private OptionalMandatory optionalMandatory; public boolean isSupport(User user, MajorGraduationCategory majorGraduationCategory) { String calculatingMajor = getCalculatingMajor(user, majorGraduationCategory); if (calculatingMajor.equals(MANAGEMENT_INFORMATION) && user.getEntryYear() >= CLASS_OF_19) { - this.optionalMandatory = OptionalMandatory.from(getCalculatingMajor(user, majorGraduationCategory)); return true; } if (calculatingMajor.equals(ADMINISTRATIONS) && user.getEntryYear() >= CLASS_OF_17) { - this.optionalMandatory = OptionalMandatory.from(getCalculatingMajor(user, majorGraduationCategory)); return true; } - if (List.of(BUSINESS, INTERNATIONAL_TRADE).contains(calculatingMajor)) { - this.optionalMandatory = OptionalMandatory.from(getCalculatingMajor(user, majorGraduationCategory)); - return true; - } - return false; + return List.of(BUSINESS, INTERNATIONAL_TRADE).contains(calculatingMajor); } @Override - public boolean checkMandatoryCondition(TakenLectureInventory takenLectureInventory, + public MandatorySpecialCaseInformation getMandatorySpecialCaseInformation(User user, + MajorGraduationCategory majorGraduationCategory, TakenLectureInventory takenLectureInventory, Set mandatoryLectures, Set electiveLectures) { - boolean checkMandatoryCondition = checkCompleteOptionalMandatory(takenLectureInventory, mandatoryLectures, - electiveLectures); - - if (!checkMandatoryCondition) { - removedMandatoryTotalCredit = optionalMandatory.getTotalOptionalMandatoryCredit(optionalMandatory) - - optionalMandatory.getChooseLectureCredit(optionalMandatory); + OptionalMandatory optionalMandatory = OptionalMandatory.from(getCalculatingMajor(user, majorGraduationCategory)); + int removedMandatoryTotalCredit = 0; + boolean isCompletedMandatorySpecialCase = checkCompleteOptionalMandatory(takenLectureInventory, mandatoryLectures, + electiveLectures, optionalMandatory); + if (!isCompletedMandatorySpecialCase ) { + removedMandatoryTotalCredit = optionalMandatory.getTotalOptionalMandatoryCredit() + - optionalMandatory.getChooseLectureCredit(); } - return checkMandatoryCondition; - } - - @Override - public int getRemovedMandatoryTotalCredit() { - return removedMandatoryTotalCredit; + return MandatorySpecialCaseInformation.of(isCompletedMandatorySpecialCase , removedMandatoryTotalCredit); } private boolean checkCompleteOptionalMandatory(TakenLectureInventory takenLectureInventory, - Set mandatoryLectures, Set electiveLectures) { + Set mandatoryLectures, Set electiveLectures, OptionalMandatory optionalMandatory) { int chooseNum = optionalMandatory.getChooseNumber(); - //전공과목Set에서 전공필수과목에 해당되는 과목들을 추출한다. + /* + * 전공과목 Set 에서 전공선택필수과목에 해당되는 과목들을 추출한다. + */ Set optionalMandatoryLectures = mandatoryLectures.stream().filter( optionalMandatory.getOptionalMandatoryLectures()::contains).collect(Collectors.toSet()); + /* + remainingMandatoryLectures에 모든 전공선택필수 과목을 넣고 수강했을 시 제거한다. + 최종적으로 전공선택필수 과목들 목록에서 사용자가 전공선택필수과목을 수강했다면 제거한다. + 최종적으로 remainingMandatoryLectures에 남아있는 과목은 수강해야하는 과목들이다. + N택 M개 수강이라면 M개 이상 수강하였으면 전공필수에서 전부 제거, 전공 선택으로 이관하고 아니라면 전공필수에 그대로 남아있어야한다. + */ Set remainingMandatoryLectures = new HashSet<>(optionalMandatoryLectures); int count = 0; for (TakenLecture takenLecture : takenLectureInventory.getTakenLectures()) { 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/ReplaceMandatoryMajorHandler.java similarity index 78% rename from src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/ReplaceMandatoryMajorHandler.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/ReplaceMandatoryMajorHandler.java index b46bc96c..9ed0b167 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/ReplaceMandatoryMajorHandler.java @@ -1,4 +1,4 @@ -package com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.exception; +package com.plzgraduate.myongjigraduatebe.graduation.domain.service.major; import static com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory.*; @@ -7,14 +7,16 @@ import java.util.Set; import java.util.stream.Collectors; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; -public class ReplaceMandatoryMajorHandler implements MajorExceptionHandler { - private int removedMandatoryTotalCredit = 0; +/** + * 철학과의 경우 답사1, 답사2는 폐지 되었지만 2021번 이전까지 전공필수 + * '신유학의 이해' '유학사상의이해' 중 택1 이수 시 대체 인정 + */ +public class ReplaceMandatoryMajorHandler implements MandatoryMajorSpecialCaseHandler { private static final List REPLACED_LECTURES = List.of( Lecture.of("HAI01110", "답사1", 1, 1, null), Lecture.of("HAI01111", "답사2", 1, 1, "HAI01111") @@ -38,19 +40,17 @@ public boolean isSupport(User user, MajorGraduationCategory majorGraduationCateg } @Override - public boolean checkMandatoryCondition(TakenLectureInventory takenLectureInventory, + public MandatorySpecialCaseInformation getMandatorySpecialCaseInformation(User user, + MajorGraduationCategory majorGraduationCategory, TakenLectureInventory takenLectureInventory, Set mandatoryLectures, Set electiveLectures) { - boolean checkCondition = checkCompleteReplaceMandatory(takenLectureInventory, mandatoryLectures, + boolean completeMandatorySpecialCase = checkCompleteReplaceMandatory(takenLectureInventory, mandatoryLectures, electiveLectures); - if (!checkCondition) { + int removedMandatoryTotalCredit = 0; + if (!completeMandatorySpecialCase) { removedMandatoryTotalCredit = 3; } - return checkCondition; - } + return MandatorySpecialCaseInformation.of(completeMandatorySpecialCase, removedMandatoryTotalCredit); - @Override - public int getRemovedMandatoryTotalCredit() { - return removedMandatoryTotalCredit; } public boolean checkCompleteReplaceMandatory(TakenLectureInventory takenLectureInventory, diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/OptionalMandatoryMajorHandlerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/OptionalMandatoryMajorHandlerTest.java new file mode 100644 index 00000000..7353ee3e --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/OptionalMandatoryMajorHandlerTest.java @@ -0,0 +1,94 @@ +package com.plzgraduate.myongjigraduatebe.graduation.domain.service.major; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import com.plzgraduate.myongjigraduatebe.fixture.LectureFixture; +import com.plzgraduate.myongjigraduatebe.fixture.UserFixture; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.Semester; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +@DisplayName("N개 중에 M개 이상을 수강할 경우 세부조건을 달성한다.") +class OptionalMandatoryMajorHandlerTest { + private static final User user = UserFixture.경영학과_19학번_ENG12(); + private static final MajorGraduationCategory majorGraduationCategory = MajorGraduationCategory.PRIMARY; + private static final Map mockLectureMap = LectureFixture.getMockLectureMap(); + + @DisplayName("3개 중에 1개를 수강할 경우 세부조건을 달성한다.") + @Test + void 세개중한과목_수강() { + + //given + Set mandatoryLectures = new HashSet<>(Set.of( + mockLectureMap.get("HBX01128"), //국제통상원론 + mockLectureMap.get("HBX01127"), //국제경영학 + mockLectureMap.get("HBY01103"), //경영정보(구) + mockLectureMap.get("HBX01125"), //경영정보(신) + mockLectureMap.get("HBX01105"), //재무관리원론 + mockLectureMap.get("HBX01113") //인적자원관리 + )); + Set electiveLectures = new HashSet<>(); + Set takenLectures = Set.of( + TakenLecture.of(user, mockLectureMap.get("HBX01128"), 2020, Semester.FIRST), //국제통상원론 + TakenLecture.of(user, mockLectureMap.get("HBX01105"), 2020, Semester.SECOND), //재무관리원론 + TakenLecture.of(user, mockLectureMap.get("HBX01113"), 2020, Semester.SECOND) //인적자원관리 + ); + TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); + + //when + MandatoryMajorSpecialCaseHandler exceptionHandler = new OptionalMandatoryMajorHandler(); + MandatorySpecialCaseInformation mandatorySpecialCaseInformation = exceptionHandler.getMandatorySpecialCaseInformation( + user, majorGraduationCategory, takenLectureInventory, mandatoryLectures, electiveLectures); + boolean isCompleteMandatorySpecialCase = mandatorySpecialCaseInformation.isCompleteMandatorySpecialCase(); + int removedMandatoryTotalCredit = mandatorySpecialCaseInformation.getRemovedMandatoryTotalCredit(); + + //then + assertThat(isCompleteMandatorySpecialCase).isTrue(); + assertThat(removedMandatoryTotalCredit).isZero(); + assertThat(mandatoryLectures).hasSize(3); + assertThat(electiveLectures).hasSize(3); + } + + @DisplayName("3개 중에 0개를 수강할 경우 세부조건을 달성하지 못한다.") + @Test + void 전공선택과목_미수강() { + + //given + Set mandatoryLectures = new HashSet<>(Set.of( + mockLectureMap.get("HBX01128"), //국제통상원론 + mockLectureMap.get("HBX01127"), //국제경영학 + mockLectureMap.get("HBY01103"), //경영정보(구) + mockLectureMap.get("HBX01125"), //경영정보(신) + mockLectureMap.get("HBX01105"), //재무관리원론 + mockLectureMap.get("HBX01113") //인적자원관리 + )); + Set electiveLectures = new HashSet<>(); + Set takenLectures = Set.of( + TakenLecture.of(user, mockLectureMap.get("HBX01105"), 2020, Semester.SECOND), //재무관리원론 + TakenLecture.of(user, mockLectureMap.get("HBX01113"), 2020, Semester.SECOND) //인적자원관리 + ); + TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); + + //when + MandatoryMajorSpecialCaseHandler exceptionHandler = new OptionalMandatoryMajorHandler(); + MandatorySpecialCaseInformation mandatorySpecialCaseInformation = exceptionHandler.getMandatorySpecialCaseInformation( + user, majorGraduationCategory, takenLectureInventory, mandatoryLectures, electiveLectures); + boolean isCompleteMandatorySpecialCase = mandatorySpecialCaseInformation.isCompleteMandatorySpecialCase(); + int removedMandatoryTotalCredit = mandatorySpecialCaseInformation.getRemovedMandatoryTotalCredit(); + + //then + assertThat(isCompleteMandatorySpecialCase).isFalse(); + assertThat(removedMandatoryTotalCredit).isEqualTo(6); + assertThat(mandatoryLectures).hasSize(6); + assertThat(electiveLectures).isEmpty(); + } +} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/ReplaceMandatoryMajorHandlerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/ReplaceMandatoryMajorHandlerTest.java index b2deda28..430a9115 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/ReplaceMandatoryMajorHandlerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/ReplaceMandatoryMajorHandlerTest.java @@ -11,6 +11,10 @@ import com.plzgraduate.myongjigraduatebe.fixture.LectureFixture; import com.plzgraduate.myongjigraduatebe.fixture.UserFixture; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MandatoryMajorSpecialCaseHandler; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MandatorySpecialCaseInformation; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.ReplaceMandatoryMajorHandler; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.Semester; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; @@ -20,6 +24,7 @@ @DisplayName("21학번 이전 철학과 학생의 경우 폐지된 전공필수의 대체 과목을 인정한다.") class ReplaceMandatoryMajorHandlerTest { private static final User user = UserFixture.철학과_20학번(); + private static final MajorGraduationCategory majorGraduationCategory = MajorGraduationCategory.PRIMARY; private static final Map mockLectureMap = LectureFixture.getMockLectureMap(); @DisplayName("답사1와 답사2를 수강했을 경우 세부조건을 달성한다.") @@ -45,13 +50,14 @@ class ReplaceMandatoryMajorHandlerTest { TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); //when - MajorExceptionHandler exceptionHandler = new ReplaceMandatoryMajorHandler(); - boolean checkMandatoryCondition = exceptionHandler.checkMandatoryCondition(takenLectureInventory, - mandatoryLectures, electiveLectures); - int removedMandatoryTotalCredit = exceptionHandler.getRemovedMandatoryTotalCredit(); + MandatoryMajorSpecialCaseHandler exceptionHandler = new ReplaceMandatoryMajorHandler(); + MandatorySpecialCaseInformation mandatorySpecialCaseInformation = exceptionHandler.getMandatorySpecialCaseInformation( + user, majorGraduationCategory, takenLectureInventory, mandatoryLectures, electiveLectures); + boolean isCompleteMandatorySpecialCase = mandatorySpecialCaseInformation.isCompleteMandatorySpecialCase(); + int removedMandatoryTotalCredit = mandatorySpecialCaseInformation.getRemovedMandatoryTotalCredit(); //then - assertThat(checkMandatoryCondition).isTrue(); + assertThat(isCompleteMandatorySpecialCase).isTrue(); assertThat(removedMandatoryTotalCredit).isZero(); assertThat(mandatoryLectures).hasSize(4); assertThat(electiveLectures).hasSize(2); @@ -79,13 +85,14 @@ class ReplaceMandatoryMajorHandlerTest { TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); //when - MajorExceptionHandler exceptionHandler = new ReplaceMandatoryMajorHandler(); - boolean checkMandatoryCondition = exceptionHandler.checkMandatoryCondition(takenLectureInventory, - mandatoryLectures, electiveLectures); - int removedMandatoryTotalCredit = exceptionHandler.getRemovedMandatoryTotalCredit(); + MandatoryMajorSpecialCaseHandler exceptionHandler = new ReplaceMandatoryMajorHandler(); + MandatorySpecialCaseInformation mandatorySpecialCaseInformation = exceptionHandler.getMandatorySpecialCaseInformation( + user, majorGraduationCategory, takenLectureInventory, mandatoryLectures, electiveLectures); + boolean isCompleteMandatorySpecialCase = mandatorySpecialCaseInformation.isCompleteMandatorySpecialCase(); + int removedMandatoryTotalCredit = mandatorySpecialCaseInformation.getRemovedMandatoryTotalCredit(); //then - assertThat(checkMandatoryCondition).isTrue(); + assertThat(isCompleteMandatorySpecialCase).isTrue(); assertThat(removedMandatoryTotalCredit).isZero(); assertThat(mandatoryLectures).hasSize(5).contains(mockLectureMap.get("HAI01348")); assertThat(electiveLectures).hasSize(1).contains(mockLectureMap.get("HAI01247")); @@ -109,13 +116,14 @@ class ReplaceMandatoryMajorHandlerTest { TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(new HashSet<>()); //when - MajorExceptionHandler exceptionHandler = new ReplaceMandatoryMajorHandler(); - boolean checkMandatoryCondition = exceptionHandler.checkMandatoryCondition(takenLectureInventory, - mandatoryLectures, electiveLectures); - int removedMandatoryTotalCredit = exceptionHandler.getRemovedMandatoryTotalCredit(); + MandatoryMajorSpecialCaseHandler exceptionHandler = new ReplaceMandatoryMajorHandler(); + MandatorySpecialCaseInformation mandatorySpecialCaseInformation = exceptionHandler.getMandatorySpecialCaseInformation( + user, majorGraduationCategory, takenLectureInventory, mandatoryLectures, electiveLectures); + boolean isCompleteMandatorySpecialCase = mandatorySpecialCaseInformation.isCompleteMandatorySpecialCase(); + int removedMandatoryTotalCredit = mandatorySpecialCaseInformation.getRemovedMandatoryTotalCredit(); //then - assertThat(checkMandatoryCondition).isFalse(); + assertThat(isCompleteMandatorySpecialCase).isFalse(); assertThat(removedMandatoryTotalCredit).isEqualTo(3); assertThat(mandatoryLectures).hasSize(6); assertThat(electiveLectures).isEmpty(); From b9810ab071b9b9e42744770cb223acfbbbc60341 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=EC=A7=80=ED=99=98?= <64758861+stophwan@users.noreply.github.com> Date: Sun, 30 Jun 2024 00:19:13 +0900 Subject: [PATCH 23/27] =?UTF-8?q?[DEV-36]=20=EC=A1=B8=EC=97=85=20=EA=B2=80?= =?UTF-8?q?=EC=82=AC=20=EC=BD=94=EB=93=9C=20=EB=A6=AC=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81=20(#274)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: MajorGraduationCategory -> MajorType 변경 * feat: User도메인 MajorType 별 전공과목 반환 메서드 구현 * feat: GraduationRequirement도메인 MajorType별 졸업요견 반환 메서드 구현 * feat: GraduationCategory 도메인 전공필수, 선택 확인하는 메서드 추가 * refactor: 학문기초교양 졸업 계산 Service 리팩토링 * refactor: 전공 졸업 계산 Service 리팩토링 * refactor: UseCaseResolver 삭제 및 하위 메서드 통합 * refactor: CalculateGraduationService 책임 분리 리팩토링 * refactor: CalculateDetailGraduationUsecase 인터페이스 수정 * test: 리팩토링 이후 테스트코드 작성 * refactor: 리팩토링 이후 불필요한 클래스 삭제 * test: 리팩토링 이후 테스트 코드 수정 * fix: DetailCategoryResult categoryName 필드 기본할당 문제 수정 * refactor: code smell 수정 * refactor: code smell 수정 * refactor: 수강 과목 동기화 메서드 네이밍 수정 * refactor: 코드 포맷 수정 * refactor: 코드 오류 수정 --------- Co-authored-by: 5uhwann <5uhwann27@gmail.com> --- ...sicAcademicalCultureGraduationService.java | 102 ++++++++ ...lculateCommonCultureGraduationService.java | 15 +- ...CalculateCoreCultureGraduationService.java | 17 +- ...demicalCultureDetailGraduationService.java | 65 ------ ...lElectiveMajorDetailGraduationService.java | 70 ------ ...MandatoryMajorDetailGraduationService.java | 70 ------ .../service/CalculateGraduationService.java | 161 +++---------- .../CalculateMajorGraduationService.java | 161 +++++++++++++ ...demicalCultureDetailGraduationService.java | 65 ------ ...yElectiveMajorDetailGraduationService.java | 72 ------ ...MandatoryMajorDetailGraduationService.java | 70 ------ ...alculateSingleDetailGraduationService.java | 18 +- ...culateSubMajorDetailGraduationService.java | 27 --- ...lculateCommonCultureGraduationUseCase.java | 4 - ...CalculateCoreCultureGraduationUseCase.java | 5 - .../CalculateDetailGraduationUseCase.java | 2 +- ...demicalCultureDetailGraduationUseCase.java | 4 - ...lElectiveMajorDetailGraduationUseCase.java | 9 - ...MandatoryMajorDetailGraduationUseCase.java | 9 - ...demicalCultureDetailGraduationUseCase.java | 5 - ...yElectiveMajorDetailGraduationUseCase.java | 9 - ...MandatoryMajorDetailGraduationUseCase.java | 9 - ...culateSubMajorDetailGraduationUseCase.java | 4 - .../domain/model/DetailGraduationResult.java | 2 +- .../domain/model/GraduationCategory.java | 4 + .../domain/model/GraduationRequirement.java | 16 ++ .../graduation/domain/model/MajorType.java | 23 ++ ... => BasicAcademicalGraduationManager.java} | 3 +- ...nessBasicAcademicalGraduationManager.java} | 13 +- ...aultBasicAcademicalGraduationManager.java} | 24 +- ...cienceBasicAcademicGraduationManager.java} | 11 +- .../CommonCultureDetailCategoryManager.java | 24 +- ...ager.java => CommonGraduationManager.java} | 6 +- .../CoreCultureDetailCategoryManager.java | 14 +- ...anager.java => CoreGraduationManager.java} | 5 +- .../service/major/ElectiveMajorManager.java | 3 + .../major/MajorGraduationCategory.java | 10 - ...nager.java => MajorGraduationManager.java} | 22 +- .../service/major/MandatoryMajorManager.java | 11 +- .../MandatoryMajorSpecialCaseHandler.java | 5 +- .../major/OptionalMandatoryMajorHandler.java | 25 +- .../major/ReplaceMandatoryMajorHandler.java | 20 +- ...er.java => SubMajorGraduationManager.java} | 5 +- ...culateDetailGraduationUseCaseResolver.java | 9 - ...culateDetailGraduationUseCaseResolver.java | 27 --- .../domain/model/TakenLectureInventory.java | 4 +- .../UpdateStudentInformationCommand.java | 15 ++ .../user/domain/model/User.java | 14 ++ ...teDetailGraduationUseCaseResolverTest.java | 40 ---- ...cademicalCultureGraduationServiceTest.java | 126 ++++++++++ ...ateCommonCultureGraduationServiceTest.java | 30 ++- ...ulateCoreCultureGraduationServiceTest.java | 35 ++- ...calCultureDetailGraduationServiceTest.java | 67 ------ ...ctiveMajorDetailGraduationServiceTest.java | 104 --------- ...atoryMajorDetailGraduationServiceTest.java | 103 -------- .../CalculateMajorGraduationServiceTest.java | 219 ++++++++++++++++++ ...calCultureDetailGraduationServiceTest.java | 67 ------ ...ctiveMajorDetailGraduationServiceTest.java | 107 --------- ...atoryMajorDetailGraduationServiceTest.java | 103 -------- ...lateSingleDetailGraduationServiceTest.java | 39 ++-- .../domain/model/GraduationCategoryTest.java | 21 ++ .../domain/model/MajorTypeTest.java | 37 +++ ...BasicAcademicalGraduationManagerTest.java} | 7 +- ...BasicAcademicalGraduationManagerTest.java} | 7 +- ...SocialScienceBasicAcademicManagerTest.java | 5 +- .../CommonCultureGraduationManagerTest.java | 3 +- .../CoreCultureGraduationManagerTest.java | 2 +- .../major/DataTechnologyMajorTest.java | 14 +- .../major/InternationTradeMajorTest.java | 38 +-- .../OptionalMandatoryMajorHandlerTest.java | 7 +- .../ReplaceMandatoryMajorHandlerTest.java | 10 +- ...ava => SubMajorGraduationManagerTest.java} | 4 +- .../model/TakenLectureInventoryTest.java | 4 +- .../user/domain/model/UserTest.java | 18 ++ 74 files changed, 1043 insertions(+), 1462 deletions(-) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateBasicAcademicalCultureGraduationService.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualBasicAcademicalCultureDetailGraduationService.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualElectiveMajorDetailGraduationService.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualMandatoryMajorDetailGraduationService.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateMajorGraduationService.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationService.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryElectiveMajorDetailGraduationService.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMandatoryMajorDetailGraduationService.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSubMajorDetailGraduationService.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateCommonCultureGraduationUseCase.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateCoreCultureGraduationUseCase.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualBasicAcademicalCultureDetailGraduationUseCase.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualElectiveMajorDetailGraduationUseCase.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualMandatoryMajorDetailGraduationUseCase.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryBasicAcademicalCultureDetailGraduationUseCase.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryElectiveMajorDetailGraduationUseCase.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryMandatoryMajorDetailGraduationUseCase.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateSubMajorDetailGraduationUseCase.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/MajorType.java rename src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/{BasicAcademicalManager.java => BasicAcademicalGraduationManager.java} (80%) rename src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/{BusinessBasicAcademicalManager.java => BusinessBasicAcademicalGraduationManager.java} (87%) rename src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/{DefaultBasicAcademicalManager.java => DefaultBasicAcademicalGraduationManager.java} (64%) rename src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/{SocialScienceBasicAcademicManager.java => SocialScienceBasicAcademicGraduationManager.java} (89%) rename src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/{CommonCultureGraduationManager.java => CommonGraduationManager.java} (93%) rename src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/coreculture/{CoreCultureGraduationManager.java => CoreGraduationManager.java} (91%) delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MajorGraduationCategory.java rename src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/{MajorManager.java => MajorGraduationManager.java} (88%) rename src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/submajor/{SubMajorManager.java => SubMajorGraduationManager.java} (94%) delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/support/resolver/CalculateDetailGraduationUseCaseResolver.java delete mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/graduation/support/resolver/SingleCalculateDetailGraduationUseCaseResolver.java delete mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/SingleCalculateDetailGraduationUseCaseResolverTest.java create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateBasicAcademicalCultureGraduationServiceTest.java delete mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualBasicAcademicalCultureDetailGraduationServiceTest.java delete mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualElectiveMajorDetailGraduationServiceTest.java delete mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualMandatoryMajorDetailGraduationServiceTest.java create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateMajorGraduationServiceTest.java delete mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationServiceTest.java delete mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryElectiveMajorDetailGraduationServiceTest.java delete mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMandatoryMajorDetailGraduationServiceTest.java create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationCategoryTest.java create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/MajorTypeTest.java rename src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/{BusinessBasicAcademicalManagerTest.java => BusinessBasicAcademicalGraduationManagerTest.java} (93%) rename src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/{DefaultBasicAcademicalManagerTest.java => DefaultBasicAcademicalGraduationManagerTest.java} (94%) rename src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/submajor/{SubMajorManagerTest.java => SubMajorGraduationManagerTest.java} (99%) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateBasicAcademicalCultureGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateBasicAcademicalCultureGraduationService.java new file mode 100644 index 00000000..6d49fe81 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateBasicAcademicalCultureGraduationService.java @@ -0,0 +1,102 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.service; + +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.DUAL_BASIC_ACADEMICAL_CULTURE; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.springframework.transaction.annotation.Transactional; + +import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDetailGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.MajorType; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.GraduationManager; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.BasicAcademicalGraduationManager; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.DefaultBasicAcademicalGraduationManager; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindBasicAcademicalCulturePort; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +import lombok.RequiredArgsConstructor; + +@UseCase +@Transactional(readOnly = true) +@RequiredArgsConstructor +public class CalculateBasicAcademicalCultureGraduationService implements CalculateDetailGraduationUseCase { + + private final FindBasicAcademicalCulturePort findBasicAcademicalCulturePort; + private final List basicAcademicalGraduationManagers; + + @Override + public boolean supports(GraduationCategory graduationCategory) { + return graduationCategory == PRIMARY_BASIC_ACADEMICAL_CULTURE + || graduationCategory == DUAL_BASIC_ACADEMICAL_CULTURE; + } + + @Override + public DetailGraduationResult calculateSingleDetailGraduation(User user, GraduationCategory graduationCategory, + TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { + MajorType majorType = MajorType.from(graduationCategory); + String userMajor = user.getMajorByMajorType(majorType); + Set graduationBasicAcademicalCultureLectures = + findBasicAcademicalCulturePort.findBasicAcademicalCulture(userMajor); + GraduationManager basicAcademicalCultureGraduationManager = + determineBasicAcademicalCultureGraduationManager(userMajor); + DetailGraduationResult detailGraduationResult = basicAcademicalCultureGraduationManager.createDetailGraduationResult( + user, takenLectureInventory, graduationBasicAcademicalCultureLectures, + graduationRequirement.getBasicCreditByMajorType(majorType)); + detailGraduationResult.assignGraduationCategory(graduationCategory); + return detailGraduationResult; + } + + public List calculateAllDetailGraduation(User user, + TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { + if (user.getStudentCategory() == StudentCategory.DUAL_MAJOR) { + TakenLectureInventory copiedTakenLectureForPrimaryBasicAcademicalCulture = takenLectureInventory.copy(); + TakenLectureInventory copiedTakenLectureForDualBasicAcademicalCulture = takenLectureInventory.copy(); + DetailGraduationResult primaryBasicAcademicalCultureDetailGraduationResult = calculateSingleDetailGraduation( + user, PRIMARY_BASIC_ACADEMICAL_CULTURE, copiedTakenLectureForPrimaryBasicAcademicalCulture, + graduationRequirement); + DetailGraduationResult dualBasicAcademicalCultureDetailGraduationResult = calculateSingleDetailGraduation( + user, DUAL_BASIC_ACADEMICAL_CULTURE, copiedTakenLectureForDualBasicAcademicalCulture, + graduationRequirement); + syncOriginalTakenLectureInventory(takenLectureInventory, + primaryBasicAcademicalCultureDetailGraduationResult, dualBasicAcademicalCultureDetailGraduationResult); + return List.of(primaryBasicAcademicalCultureDetailGraduationResult, + dualBasicAcademicalCultureDetailGraduationResult); + } + DetailGraduationResult primaryBasicAcademicalCultureGraduationResult = calculateSingleDetailGraduation( + user, PRIMARY_BASIC_ACADEMICAL_CULTURE, takenLectureInventory, graduationRequirement); + return List.of(primaryBasicAcademicalCultureGraduationResult); + } + + private GraduationManager determineBasicAcademicalCultureGraduationManager( + String userMajor) { + return basicAcademicalGraduationManagers.stream() + .filter(basicAcademicalManager -> basicAcademicalManager.isSatisfied(userMajor)) + .findFirst() + .orElse(new DefaultBasicAcademicalGraduationManager()); + } + + private void syncOriginalTakenLectureInventory(TakenLectureInventory originalTakenLectureInventory, + DetailGraduationResult primaryBasicAcademicalCultureDetailGraduationResult, + DetailGraduationResult dualBasicAcademicalCultureDetailGraduationResult) { + List primaryBasicAcademicalCultureTakenLectures = + primaryBasicAcademicalCultureDetailGraduationResult.getDetailCategory().get(0).getTakenLectures(); + List dualBasicAcademicalCultureTakenLectures = + dualBasicAcademicalCultureDetailGraduationResult.getDetailCategory().get(0).getTakenLectures(); + + Set basicAcademicalCultureTakenLectures = new HashSet<>(); + basicAcademicalCultureTakenLectures.addAll(primaryBasicAcademicalCultureTakenLectures); + basicAcademicalCultureTakenLectures.addAll(dualBasicAcademicalCultureTakenLectures); + originalTakenLectureInventory.sync(basicAcademicalCultureTakenLectures); + } +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCommonCultureGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCommonCultureGraduationService.java index 977b7421..7ace4a10 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCommonCultureGraduationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCommonCultureGraduationService.java @@ -4,16 +4,14 @@ import java.util.Set; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateCommonCultureGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDetailGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.GraduationManager; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.commonculture.CommonCultureGraduationManager; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.commonculture.CommonGraduationManager; import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindCommonCulturePort; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCulture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; @@ -24,9 +22,10 @@ @UseCase @Transactional(readOnly = true) @RequiredArgsConstructor -public class CalculateCommonCultureGraduationService implements CalculateCommonCultureGraduationUseCase { +public class CalculateCommonCultureGraduationService implements CalculateDetailGraduationUseCase { private final FindCommonCulturePort findCommonCulturePort; + private final CommonGraduationManager commonCultureGraduationManager; @Override public boolean supports(GraduationCategory graduationCategory) { @@ -34,12 +33,10 @@ public boolean supports(GraduationCategory graduationCategory) { } @Override - public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, - GraduationRequirement graduationRequirement) { + public DetailGraduationResult calculateSingleDetailGraduation(User user, GraduationCategory graduationCategory, + TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { Set graduationCommonCultures = findCommonCulturePort.findCommonCulture(user); - GraduationManager commonCultureGraduationManager = new CommonCultureGraduationManager(); return commonCultureGraduationManager.createDetailGraduationResult( user, takenLectureInventory, graduationCommonCultures, graduationRequirement.getCommonCultureCredit()); } - } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCoreCultureGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCoreCultureGraduationService.java index fbe7c073..d5422e28 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCoreCultureGraduationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCoreCultureGraduationService.java @@ -4,19 +4,15 @@ import java.util.Set; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateCoreCultureGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDetailGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.GraduationManager; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.commonculture.CommonCultureGraduationManager; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.coreculture.CoreCultureGraduationManager; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.coreculture.CoreGraduationManager; import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindCoreCulturePort; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCulture; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CoreCulture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @@ -26,10 +22,10 @@ @UseCase @Transactional(readOnly = true) @RequiredArgsConstructor -public class CalculateCoreCultureGraduationService - implements CalculateCoreCultureGraduationUseCase { +public class CalculateCoreCultureGraduationService implements CalculateDetailGraduationUseCase { private final FindCoreCulturePort findCoreCulturePort; + private final CoreGraduationManager coreCultureGraduationManager; @Override public boolean supports(GraduationCategory graduationCategory) { @@ -37,10 +33,9 @@ public boolean supports(GraduationCategory graduationCategory) { } @Override - public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, - GraduationRequirement graduationRequirement) { + public DetailGraduationResult calculateSingleDetailGraduation(User user, GraduationCategory graduationCategory, + TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { Set graduationCoreCultures = findCoreCulturePort.findCoreCulture(user); - GraduationManager coreCultureGraduationManager = new CoreCultureGraduationManager(); return coreCultureGraduationManager.createDetailGraduationResult( user, takenLectureInventory, graduationCoreCultures, graduationRequirement.getCoreCultureCredit()); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualBasicAcademicalCultureDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualBasicAcademicalCultureDetailGraduationService.java deleted file mode 100644 index b2de4ffb..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualBasicAcademicalCultureDetailGraduationService.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.service; - -import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.DUAL_BASIC_ACADEMICAL_CULTURE; - -import java.util.List; -import java.util.Set; - -import org.springframework.transaction.annotation.Transactional; - -import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDualBasicAcademicalCultureDetailGraduationUseCase; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.GraduationManager; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.BasicAcademicalManager; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.BusinessBasicAcademicalManager; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.DefaultBasicAcademicalManager; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.SocialScienceBasicAcademicManager; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindBasicAcademicalCulturePort; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; - -import lombok.RequiredArgsConstructor; - -@UseCase -@Transactional(readOnly = true) -@RequiredArgsConstructor -public class CalculateDualBasicAcademicalCultureDetailGraduationService implements - CalculateDualBasicAcademicalCultureDetailGraduationUseCase { - - private final FindBasicAcademicalCulturePort findBasicAcademicalCulturePort; - - @Override - public boolean supports(GraduationCategory graduationCategory) { - return graduationCategory == DUAL_BASIC_ACADEMICAL_CULTURE; - } - - @Override - public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, - GraduationRequirement graduationRequirement) { - Set graduationBasicAcademicalCultureLectures = findBasicAcademicalCulturePort.findBasicAcademicalCulture( - user.getDualMajor()); - GraduationManager basicAcademicalCultureGraduationManager = determineBasicAcademicalCultureGraduationManager( - user); - DetailGraduationResult detailGraduationResult = basicAcademicalCultureGraduationManager.createDetailGraduationResult( - user, takenLectureInventory, graduationBasicAcademicalCultureLectures, - graduationRequirement.getDualBasicAcademicalCultureCredit()); - detailGraduationResult.assignGraduationCategory(DUAL_BASIC_ACADEMICAL_CULTURE); - return detailGraduationResult; - } - - private GraduationManager determineBasicAcademicalCultureGraduationManager( - User user) { - List basicAcademicalManagers = List.of( - new BusinessBasicAcademicalManager(), - new SocialScienceBasicAcademicManager()); - - return basicAcademicalManagers.stream() - .filter(basicAcademicalManager -> basicAcademicalManager.isSatisfied(user.getDualMajor())) - .findFirst() - .orElse(new DefaultBasicAcademicalManager()); - } -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualElectiveMajorDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualElectiveMajorDetailGraduationService.java deleted file mode 100644 index bf6879bf..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualElectiveMajorDetailGraduationService.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.service; - -import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.DUAL_ELECTIVE_MAJOR; -import static com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory.DUAL; - -import java.util.List; -import java.util.Set; - -import org.springframework.transaction.annotation.Transactional; - -import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDualElectiveMajorDetailGraduationUseCase; -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.graduation.domain.model.GraduationRequirement; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.GraduationManager; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorManager; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindMajorPort; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; - -import lombok.RequiredArgsConstructor; - -@UseCase -@Transactional(readOnly = true) -@RequiredArgsConstructor -public class CalculateDualElectiveMajorDetailGraduationService - implements CalculateDualElectiveMajorDetailGraduationUseCase { - - private final FindMajorPort findMajorPort; - - @Override - public boolean supports(GraduationCategory graduationCategory) { - return graduationCategory == DUAL_ELECTIVE_MAJOR; - } - - @Override - public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, - GraduationRequirement graduationRequirement) { - Set graduationMajorLectures = findMajorPort.findMajor(user.getDualMajor()); - GraduationManager majorGraduationManager = new MajorManager(DUAL); - DetailGraduationResult majorDetailGraduationResult = majorGraduationManager.createDetailGraduationResult(user, - takenLectureInventory, graduationMajorLectures, graduationRequirement.getDualMajorCredit()); - - DetailCategoryResult electiveMajorDetailCategoryResult = separateElectiveMajor(majorDetailGraduationResult); - return DetailGraduationResult.create(DUAL_ELECTIVE_MAJOR, electiveMajorDetailCategoryResult.getTotalCredits(), - List.of(electiveMajorDetailCategoryResult)); - } - - @Override - public DetailGraduationResult isolateDualElectiveMajorDetailGraduation( - DetailGraduationResult dualMajorDetailGraduationResult) { - DetailCategoryResult electiveMajorDetailCategoryResult = separateElectiveMajor( - dualMajorDetailGraduationResult); - return DetailGraduationResult.create(DUAL_ELECTIVE_MAJOR, - electiveMajorDetailCategoryResult.getTotalCredits(), List.of(electiveMajorDetailCategoryResult)); - } - - private DetailCategoryResult separateElectiveMajor( - DetailGraduationResult majorDetailGraduationResult) { - DetailCategoryResult dualElectiveMajorDetailCategoryResult = majorDetailGraduationResult.getDetailCategory().stream() - .filter(detailCategoryResult -> detailCategoryResult.getDetailCategoryName().equals("전공선택")) - .findFirst() - .orElseThrow(() -> new RuntimeException("Not Found DetailCategoryResult(전공 선택)")); - dualElectiveMajorDetailCategoryResult.assignDetailCategoryName("복수전공선택"); - return dualElectiveMajorDetailCategoryResult; - } -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualMandatoryMajorDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualMandatoryMajorDetailGraduationService.java deleted file mode 100644 index f358e3d1..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualMandatoryMajorDetailGraduationService.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.service; - -import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.DUAL_MANDATORY_MAJOR; -import static com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory.DUAL; - -import java.util.List; -import java.util.Set; - -import org.springframework.transaction.annotation.Transactional; - -import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDualMandatoryMajorDetailGraduationUseCase; -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.graduation.domain.model.GraduationRequirement; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.GraduationManager; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorManager; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindMajorPort; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; - -import lombok.RequiredArgsConstructor; - -@UseCase -@Transactional(readOnly = true) -@RequiredArgsConstructor -public class CalculateDualMandatoryMajorDetailGraduationService - implements CalculateDualMandatoryMajorDetailGraduationUseCase { - - private final FindMajorPort findMajorPort; - - @Override - public boolean supports(GraduationCategory graduationCategory) { - return graduationCategory == DUAL_MANDATORY_MAJOR; - } - - @Override - public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, - GraduationRequirement graduationRequirement) { - Set graduationMajorLectures = findMajorPort.findMajor(user.getDualMajor()); - GraduationManager majorGraduationManager = new MajorManager(DUAL); - DetailGraduationResult majorDetailGraduationResult = majorGraduationManager.createDetailGraduationResult(user, - takenLectureInventory, graduationMajorLectures, graduationRequirement.getDualMajorCredit()); - - DetailCategoryResult mandatoryMajorDetailCategoryResult = separateMandatoryMajor(majorDetailGraduationResult); - return DetailGraduationResult.create(DUAL_MANDATORY_MAJOR, - mandatoryMajorDetailCategoryResult.getTotalCredits(), List.of(mandatoryMajorDetailCategoryResult)); - } - - @Override - public DetailGraduationResult isolateDualMandatoryMajorDetailGraduation( - DetailGraduationResult dualMajorDetailGraduationResult) { - DetailCategoryResult mandatoryMajorDetailCategoryResult = separateMandatoryMajor( - dualMajorDetailGraduationResult); - return DetailGraduationResult.create(DUAL_MANDATORY_MAJOR, - mandatoryMajorDetailCategoryResult.getTotalCredits(), List.of(mandatoryMajorDetailCategoryResult)); - } - - private DetailCategoryResult separateMandatoryMajor( - DetailGraduationResult majorDetailGraduationResult) { - DetailCategoryResult dualMandatoryMajorDetailCategoryResult = majorDetailGraduationResult.getDetailCategory().stream() - .filter(detailCategoryResult -> detailCategoryResult.getDetailCategoryName().equals("전공필수")) - .findFirst() - .orElseThrow(() -> new RuntimeException("Not Found DetailCategoryResult(전공 필수)")); - dualMandatoryMajorDetailCategoryResult.assignDetailCategoryName("복수전공필수"); - return dualMandatoryMajorDetailCategoryResult; - } -} 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 15bfb9fa..c9dd1c3d 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 @@ -1,37 +1,19 @@ package com.plzgraduate.myongjigraduatebe.graduation.application.service; -import static com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory.DUAL; -import static com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory.PRIMARY; - import java.util.ArrayList; -import java.util.HashSet; import java.util.List; -import java.util.Set; import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateCommonCultureGraduationUseCase; -import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateCoreCultureGraduationUseCase; -import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDualBasicAcademicalCultureDetailGraduationUseCase; -import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDualElectiveMajorDetailGraduationUseCase; -import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDualMandatoryMajorDetailGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateGraduationUseCase; -import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculatePrimaryBasicAcademicalCultureDetailGraduationUseCase; -import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculatePrimaryElectiveMajorDetailGraduationUseCase; -import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculatePrimaryMandatoryMajorDetailGraduationUseCase; 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.GraduationCategory; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationResult; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.GraduationManager; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorManager; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.submajor.SubMajorManager; import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindBasicAcademicalCulturePort; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindMajorPort; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureUseCase; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; import com.plzgraduate.myongjigraduatebe.user.application.usecase.update.UpdateStudentInformationCommand; @@ -43,22 +25,16 @@ import lombok.RequiredArgsConstructor; @UseCase -@Transactional(readOnly = true) +@Transactional @RequiredArgsConstructor class CalculateGraduationService implements CalculateGraduationUseCase { - private final FindMajorPort findMajorPort; private final FindBasicAcademicalCulturePort findBasicAcademicalCulturePort; - private final FindTakenLectureUseCase findTakenLectureUseCase; - private final CalculateCommonCultureGraduationUseCase calculateCommonCultureGraduationUseCase; - private final CalculateCoreCultureGraduationUseCase calculateCoreCultureGraduationUseCase; - private final CalculatePrimaryMandatoryMajorDetailGraduationUseCase calculatePrimaryMandatoryMajorDetailGraduationUseCase; - private final CalculatePrimaryElectiveMajorDetailGraduationUseCase calculatePrimaryElectiveMajorDetailGraduationUseCase; - private final CalculatePrimaryBasicAcademicalCultureDetailGraduationUseCase calculatePrimaryBasicAcademicalCultureDetailGraduationUseCase; - private final CalculateDualMandatoryMajorDetailGraduationUseCase calculateDualMandatoryMajorDetailGraduationUseCase; - private final CalculateDualElectiveMajorDetailGraduationUseCase calculateDualElectiveMajorDetailGraduationUseCase; - private final CalculateDualBasicAcademicalCultureDetailGraduationUseCase calculateDualBasicAcademicalCultureDetailGraduationUseCase; + private final CalculateCommonCultureGraduationService calculateCommonCultureGraduationService; + private final CalculateCoreCultureGraduationService calculateCoreCultureGraduationService; + private final CalculateBasicAcademicalCultureGraduationService calculateBasicAcademicalCultureGraduationService; + private final CalculateMajorGraduationService calculateMajorGraduationService; private final UpdateStudentInformationUseCase updateStudentInformationUseCase; @Override @@ -77,16 +53,6 @@ public GraduationResult calculateGraduation(User user) { return graduationResult; } - private void handleDuplicatedTakenCredit(User user, GraduationResult graduationResult) { - if (user.getStudentCategory() == StudentCategory.DUAL_MAJOR) { - int duplicatedBasicAcademicalCultureCredit = - findBasicAcademicalCulturePort.findDuplicatedLecturesBetweenMajors(user).stream() - .mapToInt(basicAcademicalCulture -> basicAcademicalCulture.getLecture().getCredit()) - .sum(); - graduationResult.deductDuplicatedCredit(duplicatedBasicAcademicalCultureCredit); - } - } - private GraduationRequirement determineGraduationRequirement(User user) { College userCollage = College.findBelongingCollege(user.getPrimaryMajor()); DefaultGraduationRequirementType defaultGraduationRequirement = DefaultGraduationRequirementType.determineGraduationRequirement( @@ -108,105 +74,35 @@ private List generateDetailGraduationResults(User user, generateCoreCultureDetailGraduationResult( user, takenLectureInventory, graduationRequirement) )); - detailGraduationResults.addAll( - generatePrimaryMajorDetailGraduations(user, takenLectureInventory, graduationRequirement)); detailGraduationResults.addAll(generateBasicAcademicalDetailGraduationResult( user, takenLectureInventory, graduationRequirement)); - if (user.getStudentCategory() == StudentCategory.DUAL_MAJOR) { - detailGraduationResults.addAll( - generateDualMajorDetailGraduations(user, takenLectureInventory, graduationRequirement)); - } - if (user.getStudentCategory() == StudentCategory.SUB_MAJOR) { - detailGraduationResults.add( - generateSubMajorDetailGraduationResult(user, takenLectureInventory, graduationRequirement)); - } - + detailGraduationResults.addAll(generateMajorDetailGraduationResult( + user, takenLectureInventory, graduationRequirement)); return detailGraduationResults; } private DetailGraduationResult generateCommonCultureDetailGraduationResult(User user, TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { - return calculateCommonCultureGraduationUseCase.calculateDetailGraduation(user, takenLectureInventory, - graduationRequirement); + return calculateCommonCultureGraduationService.calculateSingleDetailGraduation(user, + GraduationCategory.COMMON_CULTURE, takenLectureInventory, graduationRequirement); } private DetailGraduationResult generateCoreCultureDetailGraduationResult(User user, TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { - return calculateCoreCultureGraduationUseCase.calculateDetailGraduation(user, takenLectureInventory, - graduationRequirement); + return calculateCoreCultureGraduationService.calculateSingleDetailGraduation(user, + GraduationCategory.CORE_CULTURE, takenLectureInventory, graduationRequirement); } private List generateBasicAcademicalDetailGraduationResult(User user, TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { - if (user.getStudentCategory() == StudentCategory.DUAL_MAJOR) { - TakenLectureInventory copiedTakenLectureForPrimaryBasicAcademicalCulture = takenLectureInventory.copy(); - TakenLectureInventory copiedTakenLectureForDualBasicAcademicalCulture = takenLectureInventory.copy(); - DetailGraduationResult primaryBasicAcademicalCultureDetailGraduationResult = calculatePrimaryBasicAcademicalCultureDetailGraduationUseCase.calculateDetailGraduation( - user, copiedTakenLectureForPrimaryBasicAcademicalCulture, graduationRequirement); - DetailGraduationResult dualBasicAcademicalCultureDetailGraduationResult = calculateDualBasicAcademicalCultureDetailGraduationUseCase.calculateDetailGraduation( - user, copiedTakenLectureForDualBasicAcademicalCulture, graduationRequirement); - syncOriginalTakenLectureInventory(takenLectureInventory, - primaryBasicAcademicalCultureDetailGraduationResult, - dualBasicAcademicalCultureDetailGraduationResult); - return List.of(primaryBasicAcademicalCultureDetailGraduationResult, - dualBasicAcademicalCultureDetailGraduationResult); - } - DetailGraduationResult primaryBasicAcademicalCultureGraduationResult = calculatePrimaryBasicAcademicalCultureDetailGraduationUseCase.calculateDetailGraduation( - user, takenLectureInventory, graduationRequirement); - return List.of(primaryBasicAcademicalCultureGraduationResult); - } - - private void syncOriginalTakenLectureInventory(TakenLectureInventory originalTakenLectureInventory, - DetailGraduationResult primaryBasicAcademicalCultureDetailGraduationResult, - DetailGraduationResult dualBasicAcademicalCultureDetailGraduationResult) { - List primaryBasicAcademicalCultureTakenLectures = primaryBasicAcademicalCultureDetailGraduationResult.getDetailCategory() - .get(0) - .getTakenLectures(); - List dualBasicAcademicalCultureTakenLectures = dualBasicAcademicalCultureDetailGraduationResult.getDetailCategory() - .get(0) - .getTakenLectures(); - Set basicAcademicalCultureTakenLectures = new HashSet<>(); - basicAcademicalCultureTakenLectures.addAll(primaryBasicAcademicalCultureTakenLectures); - basicAcademicalCultureTakenLectures.addAll(dualBasicAcademicalCultureTakenLectures); - originalTakenLectureInventory.handleFinishedLectures(basicAcademicalCultureTakenLectures); - } - - private List generatePrimaryMajorDetailGraduations(User user, - TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { - Set graduationPrimaryMajorLectures = findMajorPort.findMajor(user.getPrimaryMajor()); - - GraduationManager majorManager = new MajorManager(PRIMARY); - DetailGraduationResult primaryMajorDetailGraduationResult = majorManager.createDetailGraduationResult(user, - takenLectureInventory, graduationPrimaryMajorLectures, graduationRequirement.getPrimaryMajorCredit()); - DetailGraduationResult primaryMandatoryMajorDetailGraduationResult = calculatePrimaryMandatoryMajorDetailGraduationUseCase.isolatePrimaryMandatoryMajorDetailGraduation( - primaryMajorDetailGraduationResult); - DetailGraduationResult primaryElectiveMajorDetailGraduationResult = calculatePrimaryElectiveMajorDetailGraduationUseCase.isolatePrimaryElectiveMajorDetailGraduation( - primaryMajorDetailGraduationResult); - - return List.of(primaryMandatoryMajorDetailGraduationResult, primaryElectiveMajorDetailGraduationResult); - } - - private List generateDualMajorDetailGraduations(User user, - TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { - Set graduationDualMajorLectures = findMajorPort.findMajor(user.getDualMajor()); - - GraduationManager majorManager = new MajorManager(DUAL); - DetailGraduationResult dualMajorDetailGraduationResult = majorManager.createDetailGraduationResult(user, - takenLectureInventory, graduationDualMajorLectures, graduationRequirement.getDualMajorCredit()); - DetailGraduationResult dualMandatoryMajorDetailGraduationResult = calculateDualMandatoryMajorDetailGraduationUseCase.isolateDualMandatoryMajorDetailGraduation( - dualMajorDetailGraduationResult); - DetailGraduationResult dualElectiveMajorDetailGraduationResult = calculateDualElectiveMajorDetailGraduationUseCase.isolateDualElectiveMajorDetailGraduation( - dualMajorDetailGraduationResult); - - return List.of(dualMandatoryMajorDetailGraduationResult, dualElectiveMajorDetailGraduationResult); + return calculateBasicAcademicalCultureGraduationService.calculateAllDetailGraduation(user, + takenLectureInventory, graduationRequirement); } - private DetailGraduationResult generateSubMajorDetailGraduationResult(User user, + private List generateMajorDetailGraduationResult(User user, TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { - Set graduationSubMajorLectures = findMajorPort.findMajor(user.getSubMajor()); - GraduationManager subMajorManager = new SubMajorManager(); - return subMajorManager.createDetailGraduationResult(user, takenLectureInventory, graduationSubMajorLectures, - graduationRequirement.getSubMajorCredit()); + return calculateMajorGraduationService.calculateAllDetailGraduation(user, takenLectureInventory, + graduationRequirement); } private GraduationResult generateGraduationResult(ChapelResult chapelResult, @@ -218,18 +114,19 @@ private GraduationResult generateGraduationResult(ChapelResult chapelResult, return graduationResult; } + private void handleDuplicatedTakenCredit(User user, GraduationResult graduationResult) { + if (user.getStudentCategory() == StudentCategory.DUAL_MAJOR) { + int duplicatedBasicAcademicalCultureCredit = + findBasicAcademicalCulturePort.findDuplicatedLecturesBetweenMajors(user).stream() + .mapToInt(basicAcademicalCulture -> basicAcademicalCulture.getLecture().getCredit()) + .sum(); + graduationResult.deductDuplicatedCredit(duplicatedBasicAcademicalCultureCredit); + } + } + private void updateUserGraduationInformation(User user, GraduationResult graduationResult) { - UpdateStudentInformationCommand updateStudentInformationCommand = UpdateStudentInformationCommand.builder() - .user(user) - .name(user.getName()) - .studentCategory(user.getStudentCategory()) - .major(user.getPrimaryMajor()) - .dualMajor(user.getDualMajor()) - .subMajor(user.getSubMajor()) - .totalCredit(graduationResult.getTotalCredit()) - .takenCredit(graduationResult.getTakenCredit()) - .graduate(graduationResult.isGraduated()) - .build(); + UpdateStudentInformationCommand updateStudentInformationCommand = UpdateStudentInformationCommand.update(user, + graduationResult); updateStudentInformationUseCase.updateUser(updateStudentInformationCommand); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateMajorGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateMajorGraduationService.java new file mode 100644 index 00000000..179e3683 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateMajorGraduationService.java @@ -0,0 +1,161 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.service; + +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.DUAL_ELECTIVE_MAJOR; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.DUAL_MANDATORY_MAJOR; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_ELECTIVE_MAJOR; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_MANDATORY_MAJOR; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.SUB_MAJOR; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import org.springframework.transaction.annotation.Transactional; + +import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; +import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDetailGraduationUseCase; +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.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.MajorType; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationManager; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.submajor.SubMajorGraduationManager; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindMajorPort; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +import lombok.RequiredArgsConstructor; + +@UseCase +@Transactional(readOnly = true) +@RequiredArgsConstructor +public class CalculateMajorGraduationService implements CalculateDetailGraduationUseCase { + + private final FindMajorPort findMajorPort; + private final MajorGraduationManager majorGraduationManager; + private final SubMajorGraduationManager subMajorGraduationManager; + + @Override + public boolean supports(GraduationCategory graduationCategory) { + return graduationCategory == PRIMARY_MANDATORY_MAJOR + || graduationCategory == PRIMARY_ELECTIVE_MAJOR + || graduationCategory == DUAL_MANDATORY_MAJOR + || graduationCategory == DUAL_ELECTIVE_MAJOR + || graduationCategory == SUB_MAJOR; + } + + @Override + public DetailGraduationResult calculateSingleDetailGraduation(User user, GraduationCategory graduationCategory, + TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { + MajorType majorType = MajorType.from(graduationCategory); + + if (majorType == MajorType.SUB) { + return generateSubMajorDetailGraduationResult(user, takenLectureInventory, graduationRequirement); + } + + DetailGraduationResult majorDetailGraduationResult = generateMajorDetailGraduationResult(user, + majorType, takenLectureInventory, graduationRequirement); + + boolean isMandatory = graduationCategory.checkMandatoryIfSeperatedByMandatoryAndElective(); + + if (isMandatory) { + DetailCategoryResult majorDetailCategoryResult = separateMandatoryMajor(graduationCategory, + majorDetailGraduationResult); + return DetailGraduationResult.create(graduationCategory, + majorDetailCategoryResult.getTotalCredits(), List.of(majorDetailCategoryResult)); + } + + DetailCategoryResult majorDetailCategoryResult = separateElectiveMajor(graduationCategory, + majorDetailGraduationResult); + return DetailGraduationResult.create(graduationCategory, + majorDetailCategoryResult.getTotalCredits(), List.of(majorDetailCategoryResult)); + } + + public List calculateAllDetailGraduation(User user, + TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement) { + + DetailGraduationResult primaryMajorDetailGraduationResult = generateMajorDetailGraduationResult(user, + MajorType.PRIMARY, takenLectureInventory, graduationRequirement); + DetailGraduationResult primaryMandatoryMajorDetailGraduationResult = isolateMandatoryMajorDetailGraduation( + PRIMARY_MANDATORY_MAJOR, primaryMajorDetailGraduationResult); + DetailGraduationResult primaryElectiveMajorDetailGraduationResult = isolateElectiveMajorDetailGraduation( + PRIMARY_ELECTIVE_MAJOR, primaryMajorDetailGraduationResult); + + List majorGraduationResults = new ArrayList<>( + List.of(primaryMandatoryMajorDetailGraduationResult, primaryElectiveMajorDetailGraduationResult)); + + if (user.getStudentCategory() == StudentCategory.DUAL_MAJOR) { + DetailGraduationResult dualMajorDetailGraduationResult = generateMajorDetailGraduationResult(user, + MajorType.DUAL, takenLectureInventory, graduationRequirement); + DetailGraduationResult dualMandatoryMajorDetailGraduationResult = isolateMandatoryMajorDetailGraduation( + DUAL_MANDATORY_MAJOR, dualMajorDetailGraduationResult); + DetailGraduationResult dualElectiveMajorDetailGraduationResult = isolateElectiveMajorDetailGraduation( + DUAL_ELECTIVE_MAJOR, dualMajorDetailGraduationResult); + majorGraduationResults.addAll( + List.of(dualMandatoryMajorDetailGraduationResult, dualElectiveMajorDetailGraduationResult)); + } + if (user.getStudentCategory() == StudentCategory.SUB_MAJOR) { + majorGraduationResults.add( + generateSubMajorDetailGraduationResult(user, takenLectureInventory, graduationRequirement)); + } + return majorGraduationResults; + } + + private DetailGraduationResult generateMajorDetailGraduationResult(User user, MajorType majorType, + TakenLectureInventory takenLectureInventory, + GraduationRequirement graduationRequirement) { + Set graduationMajorLectures = findMajorPort.findMajor(user.getMajorByMajorType(majorType)); + return majorGraduationManager.createDetailGraduationResult(user, majorType, + takenLectureInventory, graduationMajorLectures, graduationRequirement.getMajorCreditByMajorType(majorType)); + } + + private DetailGraduationResult generateSubMajorDetailGraduationResult(User user, + TakenLectureInventory takenLectureInventory, + GraduationRequirement graduationRequirement) { + Set graduationSubMajorLectures = findMajorPort.findMajor(user.getSubMajor()); + return subMajorGraduationManager.createDetailGraduationResult(user, takenLectureInventory, + graduationSubMajorLectures, + graduationRequirement.getSubMajorCredit()); + } + + private DetailGraduationResult isolateMandatoryMajorDetailGraduation( + GraduationCategory graduationCategory, DetailGraduationResult majorDetailGraduationResult) { + DetailCategoryResult mandatoryMajorDetailCategoryResult = separateMandatoryMajor( + graduationCategory, majorDetailGraduationResult); + return DetailGraduationResult.create(graduationCategory, + mandatoryMajorDetailCategoryResult.getTotalCredits(), List.of(mandatoryMajorDetailCategoryResult)); + } + + private DetailGraduationResult isolateElectiveMajorDetailGraduation( + GraduationCategory graduationCategory, DetailGraduationResult majorDetailGraduationResult) { + DetailCategoryResult electiveMajorDetailCategoryResult = separateElectiveMajor( + graduationCategory, majorDetailGraduationResult); + return DetailGraduationResult.create(graduationCategory, + electiveMajorDetailCategoryResult.getTotalCredits(), List.of(electiveMajorDetailCategoryResult)); + } + + private DetailCategoryResult separateMandatoryMajor( + GraduationCategory graduationCategory, DetailGraduationResult majorDetailGraduationResult) { + DetailCategoryResult mandatoryMajorDetailCategoryResult = majorDetailGraduationResult.getDetailCategory() + .stream() + .filter(detailCategoryResult -> detailCategoryResult.getDetailCategoryName().equals("전공필수")) + .findFirst() + .orElseThrow(() -> new RuntimeException("Not Found DetailCategoryResult(전공 필수)")); + mandatoryMajorDetailCategoryResult.assignDetailCategoryName(graduationCategory.getName()); + return mandatoryMajorDetailCategoryResult; + } + + private DetailCategoryResult separateElectiveMajor( + GraduationCategory graduationCategory, DetailGraduationResult majorDetailGraduationResult) { + DetailCategoryResult electiveMajorDetailCategoryResult = majorDetailGraduationResult.getDetailCategory() + .stream() + .filter(detailCategoryResult -> detailCategoryResult.getDetailCategoryName().equals("전공선택")) + .findFirst() + .orElseThrow(() -> new RuntimeException("Not Found DetailCategoryResult(전공 선택)")); + electiveMajorDetailCategoryResult.assignDetailCategoryName(graduationCategory.getName()); + return electiveMajorDetailCategoryResult; + } +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationService.java deleted file mode 100644 index 71c85bbf..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationService.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.service; - -import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE; - -import java.util.List; -import java.util.Set; - -import org.springframework.transaction.annotation.Transactional; - -import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculatePrimaryBasicAcademicalCultureDetailGraduationUseCase; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.GraduationManager; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.BasicAcademicalManager; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.BusinessBasicAcademicalManager; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.DefaultBasicAcademicalManager; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.SocialScienceBasicAcademicManager; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindBasicAcademicalCulturePort; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; - -import lombok.RequiredArgsConstructor; - -@UseCase -@Transactional(readOnly = true) -@RequiredArgsConstructor -public class CalculatePrimaryBasicAcademicalCultureDetailGraduationService - implements CalculatePrimaryBasicAcademicalCultureDetailGraduationUseCase { - - private final FindBasicAcademicalCulturePort findBasicAcademicalCulturePort; - - @Override - public boolean supports(GraduationCategory graduationCategory) { - return graduationCategory == PRIMARY_BASIC_ACADEMICAL_CULTURE; - } - - @Override - public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, - GraduationRequirement graduationRequirement) { - Set graduationBasicAcademicalCultureLectures = findBasicAcademicalCulturePort.findBasicAcademicalCulture( - user.getPrimaryMajor()); - GraduationManager basicAcademicalCultureGraduationManager = determineBasicAcademicalCultureGraduationManager( - user); - DetailGraduationResult detailGraduationResult = basicAcademicalCultureGraduationManager.createDetailGraduationResult( - user, takenLectureInventory, graduationBasicAcademicalCultureLectures, - graduationRequirement.getPrimaryBasicAcademicalCultureCredit()); - detailGraduationResult.assignGraduationCategory(PRIMARY_BASIC_ACADEMICAL_CULTURE); - return detailGraduationResult; - } - - private GraduationManager determineBasicAcademicalCultureGraduationManager( - User user) { - List basicAcademicalManagers = List.of( - new BusinessBasicAcademicalManager(), - new SocialScienceBasicAcademicManager()); - - return basicAcademicalManagers.stream() - .filter(basicAcademicalManager -> basicAcademicalManager.isSatisfied(user.getPrimaryMajor())) - .findFirst() - .orElse(new DefaultBasicAcademicalManager()); - } -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryElectiveMajorDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryElectiveMajorDetailGraduationService.java deleted file mode 100644 index f898cee5..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryElectiveMajorDetailGraduationService.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.service; - -import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_ELECTIVE_MAJOR; -import static com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory.PRIMARY; - -import java.util.List; -import java.util.Set; - -import org.springframework.transaction.annotation.Transactional; - -import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculatePrimaryElectiveMajorDetailGraduationUseCase; -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.graduation.domain.model.GraduationRequirement; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.GraduationManager; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorManager; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindMajorPort; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; - -import lombok.RequiredArgsConstructor; - -@UseCase -@Transactional(readOnly = true) -@RequiredArgsConstructor -public class CalculatePrimaryElectiveMajorDetailGraduationService - implements CalculatePrimaryElectiveMajorDetailGraduationUseCase { - - private final FindMajorPort findMajorPort; - - @Override - public boolean supports(GraduationCategory graduationCategory) { - return graduationCategory == PRIMARY_ELECTIVE_MAJOR; - } - - @Override - public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, - GraduationRequirement graduationRequirement) { - Set graduationMajorLectures = findMajorPort.findMajor(user.getPrimaryMajor()); - GraduationManager majorGraduationManager = new MajorManager(PRIMARY); - DetailGraduationResult majorDetailGraduationResult = majorGraduationManager.createDetailGraduationResult(user, - takenLectureInventory, graduationMajorLectures, graduationRequirement.getPrimaryMajorCredit()); - - DetailCategoryResult electiveMajorDetailCategoryResult = separateElectiveMajor(majorDetailGraduationResult); - - return DetailGraduationResult.create(PRIMARY_ELECTIVE_MAJOR, - electiveMajorDetailCategoryResult.getTotalCredits(), List.of(electiveMajorDetailCategoryResult)); - } - - @Override - public DetailGraduationResult isolatePrimaryElectiveMajorDetailGraduation( - DetailGraduationResult detailPrimaryMajorGraduationResult) { - DetailCategoryResult electiveMajorDetailCategoryResult = separateElectiveMajor( - detailPrimaryMajorGraduationResult); - return DetailGraduationResult.create(PRIMARY_ELECTIVE_MAJOR, - electiveMajorDetailCategoryResult.getTotalCredits(), List.of(electiveMajorDetailCategoryResult)); - } - - private DetailCategoryResult separateElectiveMajor( - DetailGraduationResult majorDetailGraduationResult) { - DetailCategoryResult primaryElectiveDetailCategoryResult = majorDetailGraduationResult.getDetailCategory() - .stream() - .filter(detailCategoryResult -> detailCategoryResult.getDetailCategoryName().equals("전공선택")) - .findFirst() - .orElseThrow(() -> new RuntimeException("Not Found DetailCategoryResult(전공 선택)")); - primaryElectiveDetailCategoryResult.assignDetailCategoryName("주전공선택"); - return primaryElectiveDetailCategoryResult; - } -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMandatoryMajorDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMandatoryMajorDetailGraduationService.java deleted file mode 100644 index dd23a463..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMandatoryMajorDetailGraduationService.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.service; - -import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_MANDATORY_MAJOR; -import static com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory.PRIMARY; - -import java.util.List; -import java.util.Set; - -import org.springframework.transaction.annotation.Transactional; - -import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculatePrimaryMandatoryMajorDetailGraduationUseCase; -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.graduation.domain.model.GraduationRequirement; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.GraduationManager; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorManager; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindMajorPort; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; - -import lombok.RequiredArgsConstructor; - -@UseCase -@Transactional(readOnly = true) -@RequiredArgsConstructor -public class CalculatePrimaryMandatoryMajorDetailGraduationService - implements CalculatePrimaryMandatoryMajorDetailGraduationUseCase { - - private final FindMajorPort findMajorPort; - - @Override - public boolean supports(GraduationCategory graduationCategory) { - return graduationCategory == PRIMARY_MANDATORY_MAJOR; - } - - @Override - public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, - GraduationRequirement graduationRequirement) { - Set graduationMajorLectures = findMajorPort.findMajor(user.getPrimaryMajor()); - GraduationManager majorGraduationManager = new MajorManager(PRIMARY); - DetailGraduationResult majorDetailGraduationResult = majorGraduationManager.createDetailGraduationResult(user, - takenLectureInventory, graduationMajorLectures, graduationRequirement.getPrimaryMajorCredit()); - - DetailCategoryResult mandatoryMajorDetailCategoryResult = separateMandatoryMajor(majorDetailGraduationResult); - return DetailGraduationResult.create(PRIMARY_MANDATORY_MAJOR, - mandatoryMajorDetailCategoryResult.getTotalCredits(), List.of(mandatoryMajorDetailCategoryResult)); - } - - @Override - public DetailGraduationResult isolatePrimaryMandatoryMajorDetailGraduation( - DetailGraduationResult primaryMajorDetailGraduationResult) { - DetailCategoryResult mandatoryMajorDetailCategoryResult = separateMandatoryMajor( - primaryMajorDetailGraduationResult); - return DetailGraduationResult.create(PRIMARY_MANDATORY_MAJOR, - mandatoryMajorDetailCategoryResult.getTotalCredits(), List.of(mandatoryMajorDetailCategoryResult)); - } - - private DetailCategoryResult separateMandatoryMajor( - DetailGraduationResult majorDetailGraduationResult) { - DetailCategoryResult primaryMandatoryMajorDetailCategoryResult = majorDetailGraduationResult.getDetailCategory().stream() - .filter(detailCategoryResult -> detailCategoryResult.getDetailCategoryName().equals("전공필수")) - .findFirst() - .orElseThrow(() -> new RuntimeException("Not Found DetailCategoryResult(전공 필수)")); - primaryMandatoryMajorDetailCategoryResult.assignDetailCategoryName("주전공필수"); - return primaryMandatoryMajorDetailCategoryResult; - } -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationService.java index 943cf77a..ea4fb083 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationService.java @@ -1,9 +1,10 @@ package com.plzgraduate.myongjigraduatebe.graduation.application.service; +import java.util.List; + import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.graduation.support.resolver.CalculateDetailGraduationUseCaseResolver; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDetailGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateSingleDetailGraduationUseCase; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DefaultGraduationRequirementType; @@ -25,17 +26,26 @@ public class CalculateSingleDetailGraduationService implements CalculateSingleDe private final FindUserUseCase findUserUseCase; private final FindTakenLectureUseCase findTakenLectureUseCase; - private final CalculateDetailGraduationUseCaseResolver calculateDetailGraduationUseCaseResolver; + private final List calculateDetailGraduationUseCases; @Override public DetailGraduationResult calculateSingleDetailGraduation(Long userId, GraduationCategory graduationCategory) { User user = findUserUseCase.findUserById(userId); TakenLectureInventory takenLectures = findTakenLectureUseCase.findTakenLectures(userId); - CalculateDetailGraduationUseCase calculateDetailGraduationUseCase = calculateDetailGraduationUseCaseResolver.resolveCalculateDetailGraduationUseCase( + CalculateDetailGraduationUseCase calculateDetailGraduationUseCase = determineCalculateDetailGraduationUseCase( graduationCategory); GraduationRequirement graduationRequirement = determineGraduationRequirement(user); - return calculateDetailGraduationUseCase.calculateDetailGraduation(user, takenLectures, graduationRequirement); + return calculateDetailGraduationUseCase.calculateSingleDetailGraduation(user, graduationCategory, takenLectures, + graduationRequirement); + } + + private CalculateDetailGraduationUseCase determineCalculateDetailGraduationUseCase( + GraduationCategory graduationCategory) { + return calculateDetailGraduationUseCases.stream() + .filter(calculateDetailGraduationUseCase -> calculateDetailGraduationUseCase.supports(graduationCategory)) + .findFirst() + .orElseThrow(() -> new RuntimeException("No calculate detail graduation case found")); } private GraduationRequirement determineGraduationRequirement(User user) { diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSubMajorDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSubMajorDetailGraduationService.java deleted file mode 100644 index 8689a183..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSubMajorDetailGraduationService.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.service; - -import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.*; - -import org.springframework.stereotype.Service; - -import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; -import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateSubMajorDetailGraduationUseCase; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; -import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; - -@UseCase -public class CalculateSubMajorDetailGraduationService implements CalculateSubMajorDetailGraduationUseCase { - @Override - public boolean supports(GraduationCategory graduationCategory) { - return graduationCategory == SUB_MAJOR; - } - - @Override - public DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, - GraduationRequirement graduationRequirement) { - return null; - } -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateCommonCultureGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateCommonCultureGraduationUseCase.java deleted file mode 100644 index e8b1ec08..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateCommonCultureGraduationUseCase.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; - -public interface CalculateCommonCultureGraduationUseCase extends CalculateDetailGraduationUseCase{ -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateCoreCultureGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateCoreCultureGraduationUseCase.java deleted file mode 100644 index f94e99a5..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateCoreCultureGraduationUseCase.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; - -public interface CalculateCoreCultureGraduationUseCase extends CalculateDetailGraduationUseCase { - -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDetailGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDetailGraduationUseCase.java index 1e6e0cf1..664ecd02 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDetailGraduationUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDetailGraduationUseCase.java @@ -10,6 +10,6 @@ public interface CalculateDetailGraduationUseCase { boolean supports(GraduationCategory graduationCategory); - DetailGraduationResult calculateDetailGraduation(User user, TakenLectureInventory takenLectureInventory, + DetailGraduationResult calculateSingleDetailGraduation(User user, GraduationCategory graduationCategory, TakenLectureInventory takenLectureInventory, GraduationRequirement graduationRequirement); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualBasicAcademicalCultureDetailGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualBasicAcademicalCultureDetailGraduationUseCase.java deleted file mode 100644 index 89eb1937..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualBasicAcademicalCultureDetailGraduationUseCase.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; - -public interface CalculateDualBasicAcademicalCultureDetailGraduationUseCase extends CalculateDetailGraduationUseCase { -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualElectiveMajorDetailGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualElectiveMajorDetailGraduationUseCase.java deleted file mode 100644 index f5d152f2..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualElectiveMajorDetailGraduationUseCase.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; - -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; - -public interface CalculateDualElectiveMajorDetailGraduationUseCase extends CalculateDetailGraduationUseCase { - - DetailGraduationResult isolateDualElectiveMajorDetailGraduation( - DetailGraduationResult dualMajorDetailGraduationResult); -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualMandatoryMajorDetailGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualMandatoryMajorDetailGraduationUseCase.java deleted file mode 100644 index ff21fa6f..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateDualMandatoryMajorDetailGraduationUseCase.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; - -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; - -public interface CalculateDualMandatoryMajorDetailGraduationUseCase extends CalculateDetailGraduationUseCase { - - DetailGraduationResult isolateDualMandatoryMajorDetailGraduation( - DetailGraduationResult dualMajorDetailGraduationResult); -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryBasicAcademicalCultureDetailGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryBasicAcademicalCultureDetailGraduationUseCase.java deleted file mode 100644 index b1972c6f..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryBasicAcademicalCultureDetailGraduationUseCase.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; - -public interface CalculatePrimaryBasicAcademicalCultureDetailGraduationUseCase - extends CalculateDetailGraduationUseCase { -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryElectiveMajorDetailGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryElectiveMajorDetailGraduationUseCase.java deleted file mode 100644 index f7e32598..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryElectiveMajorDetailGraduationUseCase.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; - -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; - -public interface CalculatePrimaryElectiveMajorDetailGraduationUseCase extends CalculateDetailGraduationUseCase { - - DetailGraduationResult isolatePrimaryElectiveMajorDetailGraduation( - DetailGraduationResult primaryMajorDetailGraduationResult); -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryMandatoryMajorDetailGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryMandatoryMajorDetailGraduationUseCase.java deleted file mode 100644 index 2b0d616b..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculatePrimaryMandatoryMajorDetailGraduationUseCase.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; - -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; - -public interface CalculatePrimaryMandatoryMajorDetailGraduationUseCase extends CalculateDetailGraduationUseCase { - - DetailGraduationResult isolatePrimaryMandatoryMajorDetailGraduation( - DetailGraduationResult primaryMajorDetailGraduationResult); -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateSubMajorDetailGraduationUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateSubMajorDetailGraduationUseCase.java deleted file mode 100644 index f3e27dc0..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/usecase/CalculateSubMajorDetailGraduationUseCase.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.usecase; - -public interface CalculateSubMajorDetailGraduationUseCase extends CalculateDetailGraduationUseCase { -} 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 d3802c5f..b6176b57 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 @@ -16,7 +16,7 @@ public class DetailGraduationResult { @Builder private DetailGraduationResult(GraduationCategory graduationCategory, boolean isCompleted, int totalCredit, - int takenCredit, + double takenCredit, List detailCategory) { this.graduationCategory = graduationCategory; this.isCompleted = isCompleted; 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 a00c9c1c..d160ab11 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 @@ -32,4 +32,8 @@ public static GraduationCategory of(String name) { .findFirst() .orElseThrow(() -> new IllegalArgumentException("해당 카테고리를 찾을 수 없습니다.")); } + + public boolean checkMandatoryIfSeperatedByMandatoryAndElective() { + return this == PRIMARY_MANDATORY_MAJOR || this == DUAL_MANDATORY_MAJOR; + } } 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 7697901e..094f511c 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 @@ -71,4 +71,20 @@ private int calculateFreeElectiveCreditWithDualMajorStudent() { - primaryBasicAcademicalCultureCredit - dualBasicAcademicalCultureCredit; return Math.max(freeElectiveCredit, 0); } + + public int getBasicCreditByMajorType(MajorType majorType) { + if(majorType == MajorType.PRIMARY) { + return primaryBasicAcademicalCultureCredit; + } + return dualBasicAcademicalCultureCredit; + } + + public int getMajorCreditByMajorType(MajorType majorType) { + if(majorType == MajorType.PRIMARY) { + return primaryMajorCredit; + } else if(majorType == MajorType.DUAL) { + return dualMajorCredit; + } + return subMajorCredit; + } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/MajorType.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/MajorType.java new file mode 100644 index 00000000..23013ddd --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/MajorType.java @@ -0,0 +1,23 @@ +package com.plzgraduate.myongjigraduatebe.graduation.domain.model; + +import lombok.Getter; + +@Getter +public enum MajorType { + PRIMARY, + DUAL, + SUB; + + public static MajorType from(GraduationCategory graduationCategory) { + if(graduationCategory == GraduationCategory.PRIMARY_MANDATORY_MAJOR + || graduationCategory == GraduationCategory.PRIMARY_ELECTIVE_MAJOR + || graduationCategory == GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE) { + return PRIMARY; + } else if(graduationCategory == GraduationCategory.DUAL_MANDATORY_MAJOR + || graduationCategory == GraduationCategory.DUAL_ELECTIVE_MAJOR + || graduationCategory == GraduationCategory.DUAL_BASIC_ACADEMICAL_CULTURE) { + return DUAL; + } + return SUB; + } +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/BasicAcademicalManager.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/BasicAcademicalGraduationManager.java similarity index 80% rename from src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/BasicAcademicalManager.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/BasicAcademicalGraduationManager.java index 0aeeb817..752b1923 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/BasicAcademicalManager.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/BasicAcademicalGraduationManager.java @@ -6,9 +6,8 @@ import com.plzgraduate.myongjigraduatebe.graduation.domain.service.GraduationManager; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; -public interface BasicAcademicalManager extends GraduationManager { +public interface BasicAcademicalGraduationManager extends GraduationManager { boolean isSatisfied(String major); default Set convertToLectureSet(Set basicAcademicalCultureLectures) { 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/BusinessBasicAcademicalGraduationManager.java similarity index 87% rename from src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/BusinessBasicAcademicalManager.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/BusinessBasicAcademicalGraduationManager.java index 2006d2b6..db55fa66 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/BusinessBasicAcademicalGraduationManager.java @@ -1,22 +1,23 @@ package com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture; -import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE; import static com.plzgraduate.myongjigraduatebe.user.domain.model.College.*; import java.util.HashSet; import java.util.List; import java.util.Set; +import org.springframework.stereotype.Component; + import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailCategoryResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; -import com.plzgraduate.myongjigraduatebe.user.domain.model.College; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; -public class BusinessBasicAcademicalManager implements BasicAcademicalManager { +@Component +public class BusinessBasicAcademicalGraduationManager implements BasicAcademicalGraduationManager { private static final int TWENTY = 20; private static final String BUSINESS_ADMINISTRATION = "경영학과"; @@ -42,7 +43,7 @@ public DetailGraduationResult createDetailGraduationResult(User user, int basicAcademicalCredit) { Set basicAcademicalLectures = convertToLectureSet(graduationLectures); - Set removedTakenLecture = new HashSet<>(); + Set finishedTakenLecture = new HashSet<>(); Set taken = new HashSet<>(); Set finalBasicAcademicalLectures = resetBasicAcademicalLectureSet(basicAcademicalLectures, user); @@ -50,10 +51,10 @@ public DetailGraduationResult createDetailGraduationResult(User user, takenLectureInventory.getTakenLectures().stream() .filter(takenLecture -> finalBasicAcademicalLectures.contains(takenLecture.getLecture())) .forEach(takenLecture -> { - removedTakenLecture.add(takenLecture); + finishedTakenLecture.add(takenLecture); taken.add(takenLecture.getLecture()); }); - takenLectureInventory.handleFinishedTakenLectures(removedTakenLecture); + takenLectureInventory.handleFinishedTakenLectures(finishedTakenLecture); DetailCategoryResult detailCategoryResult = DetailCategoryResult.create( "학문기초교양", true, basicAcademicalCredit); 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/DefaultBasicAcademicalGraduationManager.java similarity index 64% rename from src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/DefaultBasicAcademicalManager.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/DefaultBasicAcademicalGraduationManager.java index d945b1df..f2754a96 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/DefaultBasicAcademicalGraduationManager.java @@ -1,11 +1,16 @@ package com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture; -import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE; +import static com.plzgraduate.myongjigraduatebe.user.domain.model.College.HUMANITIES; +import static com.plzgraduate.myongjigraduatebe.user.domain.model.College.ICT; +import static com.plzgraduate.myongjigraduatebe.user.domain.model.College.LAW; +import static com.plzgraduate.myongjigraduatebe.user.domain.model.College.findBelongingCollege; import java.util.HashSet; import java.util.List; import java.util.Set; +import org.springframework.stereotype.Component; + import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailCategoryResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; @@ -16,31 +21,30 @@ import lombok.NoArgsConstructor; +@Component @NoArgsConstructor -public class DefaultBasicAcademicalManager implements BasicAcademicalManager { +public class DefaultBasicAcademicalGraduationManager implements BasicAcademicalGraduationManager { @Override public boolean isSatisfied(String major) { - return false; + return List.of(HUMANITIES, LAW, ICT).contains(findBelongingCollege(major)); } @Override - public DetailGraduationResult createDetailGraduationResult(User user, - TakenLectureInventory takenLectureInventory, Set graduationLectures, - int basicAcademicalCredit) { - + public DetailGraduationResult createDetailGraduationResult(User user, TakenLectureInventory takenLectureInventory, + Set graduationLectures, int basicAcademicalCredit) { Set basicAcademicalLectures = convertToLectureSet(graduationLectures); - Set removedTakenLecture = new HashSet<>(); + Set finishedTakenLecture = new HashSet<>(); Set taken = new HashSet<>(); takenLectureInventory.getTakenLectures().stream() .filter(takenLecture -> basicAcademicalLectures.contains(takenLecture.getLecture())) .forEach(takenLecture -> { - removedTakenLecture.add(takenLecture); + finishedTakenLecture.add(takenLecture); taken.add(takenLecture.getLecture()); }); - takenLectureInventory.handleFinishedTakenLectures(removedTakenLecture); + takenLectureInventory.handleFinishedTakenLectures(finishedTakenLecture); DetailCategoryResult detailCategoryResult = DetailCategoryResult.create( "학문기초교양", true, basicAcademicalCredit); 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/SocialScienceBasicAcademicGraduationManager.java similarity index 89% rename from src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/SocialScienceBasicAcademicManager.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/SocialScienceBasicAcademicGraduationManager.java index 7343cdde..df9ad3db 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/SocialScienceBasicAcademicGraduationManager.java @@ -7,6 +7,8 @@ import java.util.List; import java.util.Set; +import org.springframework.stereotype.Component; + import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailCategoryResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; @@ -15,7 +17,8 @@ import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; -public class SocialScienceBasicAcademicManager implements BasicAcademicalManager { +@Component +public class SocialScienceBasicAcademicGraduationManager implements BasicAcademicalGraduationManager { private static final int TWENTY_THREE_YEAR = 2023; private static final Set lecturesAcceptTakenAfter2023 = Set.of( @@ -41,7 +44,7 @@ public DetailGraduationResult createDetailGraduationResult(User user, int basicAcademicalCredit) { Set basicAcademicalLectures = convertToLectureSet(graduationLectures); - Set removedTakenLecture = new HashSet<>(); + Set finishedTakenLecture = new HashSet<>(); Set taken = new HashSet<>(); takenLectureInventory.getTakenLectures().stream() @@ -49,10 +52,10 @@ public DetailGraduationResult createDetailGraduationResult(User user, .filter(takenLecture -> lecturesAcceptTakenAfter2023.contains(takenLecture.getLecture()) && !takenLecture.takenAfter(TWENTY_THREE_YEAR)) .forEach(takenLecture -> { - removedTakenLecture.add(takenLecture); + finishedTakenLecture.add(takenLecture); taken.add(takenLecture.getLecture()); }); - takenLectureInventory.handleFinishedTakenLectures(removedTakenLecture); + takenLectureInventory.handleFinishedTakenLectures(finishedTakenLecture); DetailCategoryResult detailCategoryResult = DetailCategoryResult.create( "학문기초교양", true, basicAcademicalCredit); diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureDetailCategoryManager.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureDetailCategoryManager.java index 923c2574..7a807f8b 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureDetailCategoryManager.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureDetailCategoryManager.java @@ -8,6 +8,8 @@ import java.util.Set; import java.util.stream.Collectors; +import org.springframework.stereotype.Component; + import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailCategoryResult; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCulture; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCultureCategory; @@ -16,6 +18,7 @@ import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; +@Component class CommonCultureDetailCategoryManager { private static final List CHRISTAIN_MANDATORY_LECTURE_CODE_LIST = @@ -27,32 +30,25 @@ class CommonCultureDetailCategoryManager { public DetailCategoryResult generate(User user, TakenLectureInventory takenLectureInventory, Set graduationLectures, CommonCultureCategory category) { - Set graduationCommonCultureLectures = categorizeCommonCultures( - graduationLectures, category); - - Set removedTakenLecture = new HashSet<>(); + Set graduationCommonCultureLectures = categorizeCommonCultures(graduationLectures, category); + Set finishedTakenLecture = new HashSet<>(); Set taken = new HashSet<>(); - takenLectureInventory.getTakenLectures().stream() .filter(takenLecture -> graduationCommonCultureLectures.contains(takenLecture.getLecture())) .forEach(takenLecture -> { - removedTakenLecture.add(takenLecture); + finishedTakenLecture.add(takenLecture); taken.add(takenLecture.getLecture()); }); - - + boolean isSatisfiedMandatory = checkMandatorySatisfaction(user, takenLectureInventory, category); + takenLectureInventory.handleFinishedTakenLectures(finishedTakenLecture); DetailCategoryResult commonCultureDetailCategoryResult = DetailCategoryResult.create( - category.getName(), checkMandatorySatisfaction(user, takenLectureInventory, category), - checkCategoryTotalCredit(user, category)); + category.getName(), isSatisfiedMandatory, checkCategoryTotalCredit(user, category)); commonCultureDetailCategoryResult.calculate(taken, graduationCommonCultureLectures); - - takenLectureInventory.handleFinishedTakenLectures(removedTakenLecture); - return commonCultureDetailCategoryResult; } private int checkCategoryTotalCredit(User user, CommonCultureCategory commonCultureCategory) { - if (user.getEnglishLevel() == FREE && commonCultureCategory == ENGLISH){ + if (user.getEnglishLevel() == FREE && commonCultureCategory == ENGLISH) { return 0; } return commonCultureCategory.getTotalCredit(); diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureGraduationManager.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonGraduationManager.java similarity index 93% rename from src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureGraduationManager.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonGraduationManager.java index ea90105e..76e4dc18 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureGraduationManager.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonGraduationManager.java @@ -8,7 +8,8 @@ import java.util.Set; import java.util.stream.Collectors; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.ChapelResult; +import org.springframework.stereotype.Component; + import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailCategoryResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.service.GraduationManager; @@ -17,7 +18,8 @@ import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; -public class CommonCultureGraduationManager implements GraduationManager { +@Component +public class CommonGraduationManager implements GraduationManager { @Override public DetailGraduationResult createDetailGraduationResult(User user, 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 76f2928f..16339019 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 @@ -7,6 +7,8 @@ import java.util.Set; import java.util.stream.Collectors; +import org.springframework.stereotype.Component; + import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailCategoryResult; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CoreCulture; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CoreCultureCategory; @@ -15,6 +17,7 @@ import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +@Component public class CoreCultureDetailCategoryManager { private static final List ICT_DEPARTMENTS = List.of( @@ -26,14 +29,11 @@ public class CoreCultureDetailCategoryManager { Lecture.from("KMA02155"), Lecture.from("KMA02156")); - public DetailCategoryResult generate(User user, - TakenLectureInventory takenLectureInventory, Set graduationLectures, - CoreCultureCategory category) { - - Set graduationCoreCultureLectures = categorizeCommonCultures(graduationLectures, category); + public DetailCategoryResult generate(User user, TakenLectureInventory takenLectureInventory, + Set graduationLectures, CoreCultureCategory category) { + Set graduationCoreCultureLectures = categorizeCoreCultures(graduationLectures, category); Set finishedTakenLecture = new HashSet<>(); Set taken = new HashSet<>(); - takenLectureInventory.getTakenLectures().stream() .filter(takenLecture -> graduationCoreCultureLectures.contains(takenLecture.getLecture())) .forEach(takenLecture -> { @@ -51,7 +51,7 @@ public DetailCategoryResult generate(User user, return commonCultureDetailCategoryResult; } - private Set categorizeCommonCultures(Set graduationLectures, + private Set categorizeCoreCultures(Set graduationLectures, CoreCultureCategory category) { return graduationLectures.stream() .filter(coreCulture -> coreCulture.getCoreCultureCategory() == category) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/coreculture/CoreCultureGraduationManager.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/coreculture/CoreGraduationManager.java similarity index 91% rename from src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/coreculture/CoreCultureGraduationManager.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/coreculture/CoreGraduationManager.java index e6f53b12..d41f7484 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/coreculture/CoreCultureGraduationManager.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/coreculture/CoreGraduationManager.java @@ -7,6 +7,8 @@ import java.util.Set; import java.util.stream.Collectors; +import org.springframework.stereotype.Component; + import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailCategoryResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.service.GraduationManager; @@ -15,7 +17,8 @@ import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; -public class CoreCultureGraduationManager implements GraduationManager { +@Component +public class CoreGraduationManager implements GraduationManager { @Override public DetailGraduationResult createDetailGraduationResult(User user, TakenLectureInventory takenLectureInventory, Set graduationLectures, int coreCultureGraduationTotalCredit) { diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/ElectiveMajorManager.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/ElectiveMajorManager.java index 8ac2d32d..175b4a82 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/ElectiveMajorManager.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/ElectiveMajorManager.java @@ -3,11 +3,14 @@ import java.util.HashSet; import java.util.Set; +import org.springframework.stereotype.Component; + import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailCategoryResult; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +@Component public class ElectiveMajorManager { private static final String ELECTIVE_MAJOR_NAME = "전공선택"; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MajorGraduationCategory.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MajorGraduationCategory.java deleted file mode 100644 index 15d82803..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MajorGraduationCategory.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.domain.service.major; - -import lombok.Getter; - -@Getter -public enum MajorGraduationCategory { - PRIMARY, - DUAL, - SUB -} 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/MajorGraduationManager.java similarity index 88% rename from src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MajorManager.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MajorGraduationManager.java index e964fd68..7fdc0aac 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/MajorGraduationManager.java @@ -4,9 +4,11 @@ import java.util.Set; import java.util.stream.Collectors; +import org.springframework.stereotype.Component; + import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailCategoryResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.GraduationManager; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.MajorType; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; @@ -15,21 +17,23 @@ import lombok.RequiredArgsConstructor; +@Component @RequiredArgsConstructor -public class MajorManager implements GraduationManager { +public class MajorGraduationManager { - private final MajorGraduationCategory majorGraduationCategory; + private final MandatoryMajorManager mandatoryMajorManager; + private final ElectiveMajorManager electiveMajorManager; /** * * @param user 사용자 + * @param majorType 주전공, 복수전공, 부전공 * @param takenLectureInventory 수강과목 목록 * @param majorLectures 해당 사용자의 전공과목 * @param graduationResultTotalCredit 해당 사용자의 전공 졸업 학점 * @return 전공 카테고리에 대한 졸업 결과 반환 */ - @Override - public DetailGraduationResult createDetailGraduationResult(User user, + public DetailGraduationResult createDetailGraduationResult(User user, MajorType majorType, TakenLectureInventory takenLectureInventory, Set majorLectures, int graduationResultTotalCredit) { removeDuplicateLectureIfTaken(takenLectureInventory, majorLectures); @@ -38,14 +42,8 @@ public DetailGraduationResult createDetailGraduationResult(User user, Set mandatoryLectures = filterMandatoryLectures(majorLectures); Set electiveLectures = filterElectiveLectures(majorLectures); - List mandatoryMajorSpecialCaseHandlers = List.of( - new OptionalMandatoryMajorHandler(), - new ReplaceMandatoryMajorHandler()); - MandatoryMajorManager mandatoryMajorManager = new MandatoryMajorManager(mandatoryMajorSpecialCaseHandlers); - ElectiveMajorManager electiveMajorManager = new ElectiveMajorManager(); - DetailCategoryResult mandantoryDetailCategoryResult = mandatoryMajorManager.createDetailCategoryResult( - user, takenLectureInventory, mandatoryLectures, electiveLectures, majorGraduationCategory); + user, takenLectureInventory, mandatoryLectures, electiveLectures, majorType); int electiveMajorTotalCredit = graduationResultTotalCredit - mandantoryDetailCategoryResult.getTotalCredits(); DetailCategoryResult electiveDetailCategoryResult = electiveMajorManager.createDetailCategoryResult( diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MandatoryMajorManager.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MandatoryMajorManager.java index f28c35b5..81edbea5 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MandatoryMajorManager.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MandatoryMajorManager.java @@ -4,7 +4,10 @@ import java.util.List; import java.util.Set; +import org.springframework.stereotype.Component; + import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailCategoryResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.MajorType; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @@ -12,6 +15,7 @@ import lombok.RequiredArgsConstructor; +@Component @RequiredArgsConstructor public class MandatoryMajorManager { @@ -20,17 +24,16 @@ public class MandatoryMajorManager { private final List mandatoryMajorSpecialCaseHandlers; public DetailCategoryResult createDetailCategoryResult(User user, TakenLectureInventory takenLectureInventory, - Set mandatoryLectures, Set electiveLectures, - MajorGraduationCategory majorGraduationCategory) { + Set mandatoryLectures, Set electiveLectures, MajorType majorType) { Set takenMandatory = new HashSet<>(); Set finishedTakenLecture = new HashSet<>(); boolean isSatisfiedMandatory = true; int removeMandatoryTotalCredit = 0; for (MandatoryMajorSpecialCaseHandler mandatoryMajorSpecialCaseHandler : mandatoryMajorSpecialCaseHandlers) { - if (mandatoryMajorSpecialCaseHandler.isSupport(user, majorGraduationCategory)) { + if (mandatoryMajorSpecialCaseHandler.isSupport(user, majorType)) { MandatorySpecialCaseInformation mandatorySpecialCaseInformation = mandatoryMajorSpecialCaseHandler.getMandatorySpecialCaseInformation( - user, majorGraduationCategory, takenLectureInventory, mandatoryLectures, electiveLectures); + user, majorType, takenLectureInventory, mandatoryLectures, electiveLectures); isSatisfiedMandatory = mandatorySpecialCaseInformation.isCompleteMandatorySpecialCase(); removeMandatoryTotalCredit = mandatorySpecialCaseInformation.getRemovedMandatoryTotalCredit(); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MandatoryMajorSpecialCaseHandler.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MandatoryMajorSpecialCaseHandler.java index 7602e313..b04690f8 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MandatoryMajorSpecialCaseHandler.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MandatoryMajorSpecialCaseHandler.java @@ -2,14 +2,15 @@ import java.util.Set; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.MajorType; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; public interface MandatoryMajorSpecialCaseHandler { - boolean isSupport(User user, MajorGraduationCategory majorGraduationCategory); + boolean isSupport(User user, MajorType majorType); MandatorySpecialCaseInformation getMandatorySpecialCaseInformation( - User user, MajorGraduationCategory majorGraduationCategory, TakenLectureInventory takenLectureInventory, + User user, MajorType majorType, TakenLectureInventory takenLectureInventory, Set mandatoryLectures, Set electiveLectures); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/OptionalMandatoryMajorHandler.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/OptionalMandatoryMajorHandler.java index 7adc6ad5..9df5a7ef 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/OptionalMandatoryMajorHandler.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/OptionalMandatoryMajorHandler.java @@ -1,13 +1,13 @@ package com.plzgraduate.myongjigraduatebe.graduation.domain.service.major; -import static com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory.DUAL; -import static com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory.PRIMARY; - import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; +import org.springframework.stereotype.Component; + +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.MajorType; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; @@ -19,6 +19,7 @@ * 경영정보의 경우 인적자원관리, 마켓팅원론, 재무관리원론에서 ~18학번까지는 3개 모두 이수, 19학번 이후 택 2 * 경영의 경우 국제통상원론, 국제경양, 경영정보 중 택1 **/ +@Component public class OptionalMandatoryMajorHandler implements MandatoryMajorSpecialCaseHandler { private static final String MANAGEMENT_INFORMATION = "경영정보학과"; @@ -28,8 +29,8 @@ public class OptionalMandatoryMajorHandler implements MandatoryMajorSpecialCaseH private static final int CLASS_OF_17 = 17; private static final int CLASS_OF_19 = 19; - public boolean isSupport(User user, MajorGraduationCategory majorGraduationCategory) { - String calculatingMajor = getCalculatingMajor(user, majorGraduationCategory); + public boolean isSupport(User user, MajorType majorType) { + String calculatingMajor = getCalculatingMajor(user, majorType); if (calculatingMajor.equals(MANAGEMENT_INFORMATION) && user.getEntryYear() >= CLASS_OF_19) { return true; } @@ -41,9 +42,9 @@ public boolean isSupport(User user, MajorGraduationCategory majorGraduationCateg @Override public MandatorySpecialCaseInformation getMandatorySpecialCaseInformation(User user, - MajorGraduationCategory majorGraduationCategory, TakenLectureInventory takenLectureInventory, + MajorType majorType, TakenLectureInventory takenLectureInventory, Set mandatoryLectures, Set electiveLectures) { - OptionalMandatory optionalMandatory = OptionalMandatory.from(getCalculatingMajor(user, majorGraduationCategory)); + OptionalMandatory optionalMandatory = OptionalMandatory.from(getCalculatingMajor(user, majorType)); int removedMandatoryTotalCredit = 0; boolean isCompletedMandatorySpecialCase = checkCompleteOptionalMandatory(takenLectureInventory, mandatoryLectures, electiveLectures, optionalMandatory); @@ -84,13 +85,7 @@ private boolean checkCompleteOptionalMandatory(TakenLectureInventory takenLectur return count >= chooseNum; } - private String getCalculatingMajor(User user, MajorGraduationCategory majorGraduationCategory) { - if (majorGraduationCategory == PRIMARY) { - return user.getPrimaryMajor(); - } - if (majorGraduationCategory == DUAL) { - return user.getDualMajor(); - } - return user.getSubMajor(); + private String getCalculatingMajor(User user, MajorType majorType) { + return user.getMajorByMajorType(majorType); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/ReplaceMandatoryMajorHandler.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/ReplaceMandatoryMajorHandler.java index 9ed0b167..4a803ec0 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/ReplaceMandatoryMajorHandler.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/ReplaceMandatoryMajorHandler.java @@ -1,12 +1,13 @@ package com.plzgraduate.myongjigraduatebe.graduation.domain.service.major; -import static com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory.*; - import java.util.Comparator; import java.util.List; import java.util.Set; import java.util.stream.Collectors; +import org.springframework.stereotype.Component; + +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.MajorType; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @@ -16,6 +17,8 @@ * 철학과의 경우 답사1, 답사2는 폐지 되었지만 2021번 이전까지 전공필수 * '신유학의 이해' '유학사상의이해' 중 택1 이수 시 대체 인정 */ + +@Component public class ReplaceMandatoryMajorHandler implements MandatoryMajorSpecialCaseHandler { private static final List REPLACED_LECTURES = List.of( Lecture.of("HAI01110", "답사1", 1, 1, null), @@ -27,21 +30,14 @@ public class ReplaceMandatoryMajorHandler implements MandatoryMajorSpecialCaseHa ); @Override - public boolean isSupport(User user, MajorGraduationCategory majorGraduationCategory) { - String major; - if (majorGraduationCategory == PRIMARY) { - major = user.getPrimaryMajor(); - } else if (majorGraduationCategory == DUAL) { - major = user.getDualMajor(); - } else { - major = user.getSubMajor(); - } + public boolean isSupport(User user, MajorType majorType) { + String major = user.getMajorByMajorType(majorType); return major.equals("철학과") && user.getEntryYear() <= 21; } @Override public MandatorySpecialCaseInformation getMandatorySpecialCaseInformation(User user, - MajorGraduationCategory majorGraduationCategory, TakenLectureInventory takenLectureInventory, + MajorType majorType, TakenLectureInventory takenLectureInventory, Set mandatoryLectures, Set electiveLectures) { boolean completeMandatorySpecialCase = checkCompleteReplaceMandatory(takenLectureInventory, mandatoryLectures, electiveLectures); diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/submajor/SubMajorManager.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/submajor/SubMajorGraduationManager.java similarity index 94% rename from src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/submajor/SubMajorManager.java rename to src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/submajor/SubMajorGraduationManager.java index 2c5fd986..29c2a3a3 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/submajor/SubMajorManager.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/submajor/SubMajorGraduationManager.java @@ -5,6 +5,8 @@ import java.util.Set; import java.util.stream.Collectors; +import org.springframework.stereotype.Component; + import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailCategoryResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; @@ -15,7 +17,8 @@ import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; -public class SubMajorManager implements GraduationManager { +@Component +public class SubMajorGraduationManager implements GraduationManager { @Override public DetailGraduationResult createDetailGraduationResult(User user, TakenLectureInventory takenLectureInventory, diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/support/resolver/CalculateDetailGraduationUseCaseResolver.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/support/resolver/CalculateDetailGraduationUseCaseResolver.java deleted file mode 100644 index fa53f676..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/support/resolver/CalculateDetailGraduationUseCaseResolver.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.support.resolver; - -import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDetailGraduationUseCase; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; - -public interface CalculateDetailGraduationUseCaseResolver { - - CalculateDetailGraduationUseCase resolveCalculateDetailGraduationUseCase(GraduationCategory graduationCategory); -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/support/resolver/SingleCalculateDetailGraduationUseCaseResolver.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/support/resolver/SingleCalculateDetailGraduationUseCaseResolver.java deleted file mode 100644 index 13795f4b..00000000 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/support/resolver/SingleCalculateDetailGraduationUseCaseResolver.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.support.resolver; - -import java.util.List; - -import org.springframework.stereotype.Component; - -import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDetailGraduationUseCase; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; - -import lombok.RequiredArgsConstructor; - -@Component() -@RequiredArgsConstructor -public class SingleCalculateDetailGraduationUseCaseResolver implements CalculateDetailGraduationUseCaseResolver { - - private final List calculateDetailGraduationUseCases; - - @Override - public CalculateDetailGraduationUseCase resolveCalculateDetailGraduationUseCase( - GraduationCategory graduationCategory) { - return calculateDetailGraduationUseCases.stream() - .filter(calculateDetailGraduationUseCase -> calculateDetailGraduationUseCase.supports(graduationCategory)) - .findFirst() - .orElseThrow(() -> new RuntimeException("No calculate detail graduation case found")); - } - -} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/domain/model/TakenLectureInventory.java b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/domain/model/TakenLectureInventory.java index 83a089c4..afafa30a 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/domain/model/TakenLectureInventory.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/takenlecture/domain/model/TakenLectureInventory.java @@ -42,10 +42,10 @@ public void handleFinishedTakenLectures(Set finishedTakenLecture) takenLecture.removeAll(finishedTakenLecture); } - public void handleFinishedLectures(Set finishedBasicAcademicalCultureLecture) { + public void sync(Set finishedLectures) { takenLecture.removeAll( takenLecture.stream() - .filter(taken -> finishedBasicAcademicalCultureLecture.contains(taken.getLecture())) + .filter(taken -> finishedLectures.contains(taken.getLecture())) .collect(Collectors.toSet()) ); } 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 31a3c684..ca5233b5 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 @@ -1,5 +1,6 @@ package com.plzgraduate.myongjigraduatebe.user.application.usecase.update; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationResult; import com.plzgraduate.myongjigraduatebe.parsing.domain.ParsingInformation; import com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @@ -53,4 +54,18 @@ public static UpdateStudentInformationCommand of(User user, ParsingInformation p .studentCategory(parsingInformation.getStudentCategory()) .build(); } + + public static UpdateStudentInformationCommand update(User user, GraduationResult graduationResult) { + return UpdateStudentInformationCommand.builder() + .user(user) + .name(user.getName()) + .studentCategory(user.getStudentCategory()) + .major(user.getPrimaryMajor()) + .dualMajor(user.getDualMajor()) + .subMajor(user.getSubMajor()) + .totalCredit(graduationResult.getTotalCredit()) + .takenCredit(graduationResult.getTakenCredit()) + .graduate(graduationResult.isGraduated()) + .build(); + } } 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 43ac2184..c9ca5878 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 @@ -1,10 +1,15 @@ package com.plzgraduate.myongjigraduatebe.user.domain.model; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.MajorType.DUAL; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.MajorType.PRIMARY; + import java.time.Instant; import java.util.Objects; import org.springframework.security.crypto.password.PasswordEncoder; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.MajorType; + import lombok.Builder; import lombok.Getter; @@ -105,6 +110,15 @@ public boolean isMyAuthId(String authId) { return this.authId.equals(authId); } + public String getMajorByMajorType(MajorType majorType) { + if(majorType == PRIMARY) { + return primaryMajor; + } else if(majorType == DUAL) { + return dualMajor; + } + return subMajor; + } + private static int parseEntryYearInStudentNumber(String studentNumber) { return Integer.parseInt(studentNumber.substring(2, 4)); } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/SingleCalculateDetailGraduationUseCaseResolverTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/SingleCalculateDetailGraduationUseCaseResolverTest.java deleted file mode 100644 index 2d21459e..00000000 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/SingleCalculateDetailGraduationUseCaseResolverTest.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.api; - -import static org.assertj.core.api.Assertions.assertThat; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.ActiveProfiles; - -import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDetailGraduationUseCase; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; -import com.plzgraduate.myongjigraduatebe.graduation.support.resolver.SingleCalculateDetailGraduationUseCaseResolver; - -@SpringBootTest -@ActiveProfiles("test") -class SingleCalculateDetailGraduationUseCaseResolverTest { - - @Autowired - private SingleCalculateDetailGraduationUseCaseResolver singleCalculateDetailGraduationUseCaseResolver; - - @DisplayName("졸업 카테고리를 계산할 수 있는 CalculateDetailGraduationUseCaseResolver 반환한다.") - @ValueSource(strings = - {"COMMON_CULTURE", "CORE_CULTURE", "PRIMARY_MANDATORY_MAJOR", "PRIMARY_ELECTIVE_MAJOR", "DUAL_MANDATORY_MAJOR", - "DUAL_ELECTIVE_MAJOR", "SUB_MAJOR", "PRIMARY_BASIC_ACADEMICAL_CULTURE", "DUAL_BASIC_ACADEMICAL_CULTURE" - }) - @ParameterizedTest - void resolveCalculateDetailGraduationUseCase(String graduationCategoryName) { - //given - GraduationCategory graduationCategory = GraduationCategory.valueOf(graduationCategoryName); - - // when - CalculateDetailGraduationUseCase calculateDetailGraduationUseCase = singleCalculateDetailGraduationUseCaseResolver.resolveCalculateDetailGraduationUseCase( - graduationCategory); - - //then - assertThat(calculateDetailGraduationUseCase.supports(graduationCategory)).isEqualTo(true); - } -} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateBasicAcademicalCultureGraduationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateBasicAcademicalCultureGraduationServiceTest.java new file mode 100644 index 00000000..27cea0de --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateBasicAcademicalCultureGraduationServiceTest.java @@ -0,0 +1,126 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.service; + +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.*; +import static com.plzgraduate.myongjigraduatebe.user.domain.model.College.BUSINESS; +import static com.plzgraduate.myongjigraduatebe.user.domain.model.College.ICT; +import static com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory.*; +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.BDDMockito.given; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.BasicAcademicalGraduationManager; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.BusinessBasicAcademicalGraduationManager; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.DefaultBasicAcademicalGraduationManager; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.basicacademicalculture.SocialScienceBasicAcademicGraduationManager; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindBasicAcademicalCulturePort; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +@ExtendWith(MockitoExtension.class) +class CalculateBasicAcademicalCultureGraduationServiceTest { + + @Mock + private FindBasicAcademicalCulturePort findBasicAcademicalCulturePort; + + private CalculateBasicAcademicalCultureGraduationService calculateBasicAcademicalCultureGraduationService; + + private User user; + + @BeforeEach + void setUp() { + List basicAcademicalGraduationManagers = + List.of(new DefaultBasicAcademicalGraduationManager(), new BusinessBasicAcademicalGraduationManager(), new SocialScienceBasicAcademicGraduationManager()); + calculateBasicAcademicalCultureGraduationService = new CalculateBasicAcademicalCultureGraduationService(findBasicAcademicalCulturePort, basicAcademicalGraduationManagers); + user = User.builder() + .id(1L) + .primaryMajor("응용소프트웨어전공") + .dualMajor("경영학과") + .studentCategory(DUAL_MAJOR) + .entryYear(19).build(); + } + + @DisplayName("BASIC_ACADEMICAL_CULTURE 관련 카테고리 일때만 BasicAcademicalCultureGraduationService를 호출한다.") + @Test + void shouldSupportBasicAcademicalCultureCategory() { + assertTrue(calculateBasicAcademicalCultureGraduationService.supports(PRIMARY_BASIC_ACADEMICAL_CULTURE)); + assertTrue(calculateBasicAcademicalCultureGraduationService.supports(DUAL_BASIC_ACADEMICAL_CULTURE)); + assertFalse(calculateBasicAcademicalCultureGraduationService.supports(CORE_CULTURE)); + assertFalse(calculateBasicAcademicalCultureGraduationService.supports(COMMON_CULTURE)); + } + + + @DisplayName("카테고리별 계산 시 유저의 핵심교양 상세 졸업결과를 계산한다.") + @Test + void shouldCalculateSingleDetailGraduationIfPrimaryCategory() { + //given + HashSet graduationCoreCultures = new HashSet<>( + Set.of(BasicAcademicalCultureLecture.of(Lecture.from("KMA02128"), ICT.getName()))); + given(findBasicAcademicalCulturePort.findBasicAcademicalCulture(anyString())).willReturn(graduationCoreCultures); + + HashSet takenLectures = new HashSet<>( + Set.of( + TakenLecture.builder().lecture(Lecture.builder() + .lectureCode("KMA02128") + .credit(3).build()).build())); + TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); + + GraduationRequirement graduationRequirement = GraduationRequirement.builder() + .primaryBasicAcademicalCultureCredit(18).build(); + + //when + DetailGraduationResult detailCoreCultureGraduationResult = calculateBasicAcademicalCultureGraduationService.calculateSingleDetailGraduation( + user, PRIMARY_BASIC_ACADEMICAL_CULTURE, takenLectureInventory, graduationRequirement); + + //then + assertThat(detailCoreCultureGraduationResult) + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(PRIMARY_BASIC_ACADEMICAL_CULTURE, false, 18, 3.0); + } + + @DisplayName("카테고리별 계산 시 유저의 복수전공 핵심교양 상세 졸업결과를 계산한다.") + @Test + void shouldCalculateSingleDetailGraduationIfDualCategory() { + //given + HashSet graduationBasicAcademicalCultures = new HashSet<>( + Set.of(BasicAcademicalCultureLecture.of(Lecture.from("KMA02128"), BUSINESS.getName()))); + + HashSet takenLectures = new HashSet<>( + Set.of( + TakenLecture.builder().lecture(Lecture.builder() + .lectureCode("KMA02128") + .credit(3).build()).build())); + TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); + + GraduationRequirement graduationRequirement = GraduationRequirement.builder() + .dualBasicAcademicalCultureCredit(18).build(); + + + given(findBasicAcademicalCulturePort.findBasicAcademicalCulture(anyString())).willReturn(graduationBasicAcademicalCultures); + + //when + DetailGraduationResult detailCoreCultureGraduationResult = calculateBasicAcademicalCultureGraduationService.calculateSingleDetailGraduation( + user, DUAL_BASIC_ACADEMICAL_CULTURE, takenLectureInventory, graduationRequirement); + + //then + assertThat(detailCoreCultureGraduationResult) + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(DUAL_BASIC_ACADEMICAL_CULTURE, false, 18, 3.0); + } +} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCommonCultureGraduationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCommonCultureGraduationServiceTest.java index da158ebb..4e813e34 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCommonCultureGraduationServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCommonCultureGraduationServiceTest.java @@ -3,11 +3,13 @@ import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.COMMON_CULTURE; import static com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCultureCategory.CHRISTIAN_A; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.BDDMockito.given; import java.util.HashSet; import java.util.Set; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -16,7 +18,9 @@ import org.mockito.junit.jupiter.MockitoExtension; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.commonculture.CommonGraduationManager; import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindCommonCulturePort; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCulture; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; @@ -29,12 +33,27 @@ class CalculateCommonCultureGraduationServiceTest { @Mock private FindCommonCulturePort findCommonCulturePort; + @InjectMocks private CalculateCommonCultureGraduationService calculateCommonCultureGraduationService; + @BeforeEach + void setUp() { + CommonGraduationManager commonGraduationManager = new CommonGraduationManager(); + calculateCommonCultureGraduationService = new CalculateCommonCultureGraduationService(findCommonCulturePort, + commonGraduationManager); + } + + @DisplayName("COMMON_CULTURE 카테고리 일때만 CommonCultureGraduationService를 호출한다.") + @Test + void shouldSupportCommonCultureCategory() { + assertTrue(calculateCommonCultureGraduationService.supports(GraduationCategory.COMMON_CULTURE)); + assertFalse(calculateCommonCultureGraduationService.supports(GraduationCategory.CORE_CULTURE)); + } + @DisplayName("유저의 공통교양 상세 졸업결과를 계산한다.") @Test - void calculateCommonCulture() { + void shouldCalculateCommonCulture() { //given User user = User.builder() .id(1L) @@ -42,21 +61,20 @@ void calculateCommonCulture() { .entryYear(19).build(); HashSet graduationCommonCultures = new HashSet<>( Set.of(CommonCulture.of(Lecture.from("KMA00101"), CHRISTIAN_A))); - given(findCommonCulturePort.findCommonCulture(user)).willReturn(graduationCommonCultures); - HashSet takenLectures = new HashSet<>( Set.of( TakenLecture.builder().lecture(Lecture.builder() .lectureCode("KMA00101") .credit(2).build()).build())); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); - GraduationRequirement graduationRequirement = GraduationRequirement.builder() .commonCultureCredit(17).build(); + given(findCommonCulturePort.findCommonCulture(user)).willReturn(graduationCommonCultures); + //when - DetailGraduationResult detailCommonCultureGraduationResult = calculateCommonCultureGraduationService.calculateDetailGraduation( - user, takenLectureInventory, graduationRequirement); + DetailGraduationResult detailCommonCultureGraduationResult = calculateCommonCultureGraduationService.calculateSingleDetailGraduation( + user, COMMON_CULTURE, takenLectureInventory, graduationRequirement); //then assertThat(detailCommonCultureGraduationResult) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCoreCultureGraduationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCoreCultureGraduationServiceTest.java index 41f77eca..c4b48953 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCoreCultureGraduationServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateCoreCultureGraduationServiceTest.java @@ -3,20 +3,24 @@ import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.CORE_CULTURE; import static com.plzgraduate.myongjigraduatebe.lecture.domain.model.CoreCultureCategory.CULTURE_ART; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.BDDMockito.given; import java.util.HashSet; import java.util.Set; +import org.junit.jupiter.api.BeforeEach; 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.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.coreculture.CoreGraduationManager; import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindCoreCulturePort; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CoreCulture; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; @@ -29,20 +33,32 @@ class CalculateCoreCultureGraduationServiceTest { @Mock private FindCoreCulturePort findCoreCulturePort; - @InjectMocks private CalculateCoreCultureGraduationService calculateCoreCultureGraduationService; + @BeforeEach + void setUp() { + calculateCoreCultureGraduationService = new CalculateCoreCultureGraduationService(findCoreCulturePort, new CoreGraduationManager()); + } + + @DisplayName("CORE_CULTURE 카테고리 일때만 CoreCultureGraduationService를 호출한다.") + @Test + void shouldSupportCoreCultureCategory() { + assertTrue(calculateCoreCultureGraduationService.supports(GraduationCategory.CORE_CULTURE)); + assertFalse(calculateCoreCultureGraduationService.supports(GraduationCategory.COMMON_CULTURE)); + } + @DisplayName("유저의 핵심교양 상세 졸업결과를 계산한다.") @Test - void calculateCoreCulture() { + void shouldCalculateCoreCulture() { //given User user = User.builder() .id(1L) .primaryMajor("응용소프트웨어전공") - .entryYear(19).build(); + .entryYear(19) + .build(); HashSet graduationCoreCultures = new HashSet<>( Set.of(CoreCulture.of(Lecture.from("KMA02128"), CULTURE_ART))); - given(findCoreCulturePort.findCoreCulture(user)).willReturn(graduationCoreCultures); + int coreCultureTotalCredit = 12; HashSet takenLectures = new HashSet<>( Set.of( @@ -50,13 +66,14 @@ void calculateCoreCulture() { .lectureCode("KMA02128") .credit(3).build()).build())); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); - GraduationRequirement graduationRequirement = GraduationRequirement.builder() - .coreCultureCredit(12).build(); + .coreCultureCredit(coreCultureTotalCredit).build(); + + given(findCoreCulturePort.findCoreCulture(user)).willReturn(graduationCoreCultures); //when - DetailGraduationResult detailCoreCultureGraduationResult = calculateCoreCultureGraduationService.calculateDetailGraduation( - user, takenLectureInventory, graduationRequirement); + DetailGraduationResult detailCoreCultureGraduationResult = calculateCoreCultureGraduationService.calculateSingleDetailGraduation( + user, CORE_CULTURE, takenLectureInventory, graduationRequirement); //then assertThat(detailCoreCultureGraduationResult) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualBasicAcademicalCultureDetailGraduationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualBasicAcademicalCultureDetailGraduationServiceTest.java deleted file mode 100644 index d6106bb0..00000000 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualBasicAcademicalCultureDetailGraduationServiceTest.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.service; - -import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.DUAL_BASIC_ACADEMICAL_CULTURE; -import static com.plzgraduate.myongjigraduatebe.user.domain.model.College.ICT; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.BDDMockito.given; - -import java.util.HashSet; -import java.util.Set; - -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.graduation.domain.model.DetailGraduationResult; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindBasicAcademicalCulturePort; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; - -@ExtendWith(MockitoExtension.class) -class CalculateDualBasicAcademicalCultureDetailGraduationServiceTest { - - @Mock - private FindBasicAcademicalCulturePort findBasicAcademicalCulturePort; - @InjectMocks - private CalculateDualBasicAcademicalCultureDetailGraduationService calculateDualBasicAcademicalCultureDetailGraduationService; - - @DisplayName("유저의 복수전공 핵심교양 상세 졸업결과를 계산한다.") - @Test - void calculateCoreCulture() { - //given - User user = User.builder() - .id(1L) - .dualMajor("응용소프트웨어전공") - .entryYear(19).build(); - HashSet graduationCoreCultures = new HashSet<>( - Set.of(BasicAcademicalCultureLecture.of(Lecture.from("KMA02128"), ICT.getName()))); - given(findBasicAcademicalCulturePort.findBasicAcademicalCulture(user.getDualMajor())).willReturn(graduationCoreCultures); - - HashSet takenLectures = new HashSet<>( - Set.of( - TakenLecture.builder().lecture(Lecture.builder() - .lectureCode("KMA02128") - .credit(3).build()).build())); - TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); - - GraduationRequirement graduationRequirement = GraduationRequirement.builder() - .dualBasicAcademicalCultureCredit(18).build(); - - //when - DetailGraduationResult detailCoreCultureGraduationResult = calculateDualBasicAcademicalCultureDetailGraduationService.calculateDetailGraduation( - user, takenLectureInventory, graduationRequirement); - - //then - assertThat(detailCoreCultureGraduationResult) - .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") - .contains(DUAL_BASIC_ACADEMICAL_CULTURE, false, 18, 3.0); - } - -} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualElectiveMajorDetailGraduationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualElectiveMajorDetailGraduationServiceTest.java deleted file mode 100644 index a57ddf88..00000000 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualElectiveMajorDetailGraduationServiceTest.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.service; - -import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.DUAL_ELECTIVE_MAJOR; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.BDDMockito.given; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -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.graduation.domain.model.DetailCategoryResult; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindMajorPort; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; - -@ExtendWith(MockitoExtension.class) -class CalculateDualElectiveMajorDetailGraduationServiceTest { - - @Mock - private FindMajorPort findMajorPort; - @InjectMocks - private CalculateDualElectiveMajorDetailGraduationService calculateDualElectiveMajorDetailGraduationService; - - @DisplayName("유저의 복수전공선택 졸업결과를 계산한다.") - @Test - void calculateCoreCulture() { - //given - User user = User.builder() - .id(1L) - .dualMajor("응용소프트웨어전공") - .entryYear(19).build(); - HashSet graduationMajorLectures = new HashSet<>( - Set.of( - MajorLecture.of(Lecture.builder().lectureCode("HEC01211").credit(3).build(), "응용소프트웨어전공", 1, 16, 23), - MajorLecture.of(Lecture.builder().lectureCode("HEC01304").credit(3).build(), "응용소프트웨어전공", 0, 16, 23))); - given(findMajorPort.findMajor(user.getDualMajor())).willReturn(graduationMajorLectures); - - HashSet takenLectures = new HashSet<>( - Set.of( - TakenLecture.builder().lecture(Lecture.builder() - .lectureCode("HEC01211") //전공 필수 - .credit(3).build()).build(), - TakenLecture.builder().lecture(Lecture.builder() - .lectureCode("HEC01304") //전공 선택 - .credit(3).build()).build())); - TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); - - GraduationRequirement graduationRequirement = GraduationRequirement.builder() - .dualMajorCredit(70).build(); - - //when - DetailGraduationResult detailDualMandatoryMajorGraduationResult = calculateDualElectiveMajorDetailGraduationService.calculateDetailGraduation( - user, takenLectureInventory, graduationRequirement); - - //then - assertThat(detailDualMandatoryMajorGraduationResult) - .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") - .contains(DUAL_ELECTIVE_MAJOR, false, 67, 3.0); - } - - @DisplayName("복수전공 졸업결과에서 복수전공선택 졸업결과를 분리한다.") - @Test - void isolateDualElectiveMajorDetailGraduation() { - //given - DetailCategoryResult dualMandatoryMajorDetailCategoryResult = DetailCategoryResult.builder() - .detailCategoryName("전공필수") - .totalCredits(18) - .takenCredits(18) - .build(); - DetailCategoryResult dualElectiveMajorDetailCategoryResult = DetailCategoryResult.builder() - .detailCategoryName("전공선택") - .totalCredits(52) - .takenCredits(52) - .build(); - DetailGraduationResult dualMajorDetailGraduationResult = DetailGraduationResult.createNonCategorizedGraduationResult( - 70, List.of(dualMandatoryMajorDetailCategoryResult, dualElectiveMajorDetailCategoryResult)); - - //when - DetailGraduationResult primaryMandatoryMajorDetailGraduationResult = - calculateDualElectiveMajorDetailGraduationService.isolateDualElectiveMajorDetailGraduation( - dualMajorDetailGraduationResult); - - //then - assertThat(primaryMandatoryMajorDetailGraduationResult) - .extracting("graduationCategory", "totalCredit", "takenCredit") - .contains( - DUAL_ELECTIVE_MAJOR, - dualElectiveMajorDetailCategoryResult.getTotalCredits(), - dualElectiveMajorDetailCategoryResult.getTakenCredits()); - } - -} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualMandatoryMajorDetailGraduationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualMandatoryMajorDetailGraduationServiceTest.java deleted file mode 100644 index e6f9bee4..00000000 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateDualMandatoryMajorDetailGraduationServiceTest.java +++ /dev/null @@ -1,103 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.service; - -import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.DUAL_MANDATORY_MAJOR; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.BDDMockito.given; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -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.graduation.domain.model.DetailCategoryResult; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindMajorPort; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; - -@ExtendWith(MockitoExtension.class) -class CalculateDualMandatoryMajorDetailGraduationServiceTest { - - @Mock - private FindMajorPort findMajorPort; - @InjectMocks - private CalculateDualMandatoryMajorDetailGraduationService calculateDualMandatoryMajorDetailGraduationService; - - @DisplayName("유저의 복수전공필수 졸업결과를 계산한다.") - @Test - void calculateCoreCulture() { - //given - User user = User.builder() - .id(1L) - .dualMajor("응용소프트웨어전공") - .entryYear(19).build(); - HashSet graduationMajorLectures = new HashSet<>( - Set.of( - MajorLecture.of(Lecture.builder().lectureCode("HEC01211").credit(3).build(), "응용소프트웨어전공", 1, 16, 23), - MajorLecture.of(Lecture.builder().lectureCode("HEC01204").credit(3).build(), "응용소프트웨어전공", 1, 16, 23))); - given(findMajorPort.findMajor(user.getDualMajor())).willReturn(graduationMajorLectures); - - HashSet takenLectures = new HashSet<>( - Set.of( - TakenLecture.builder().lecture(Lecture.builder() - .lectureCode("HEC01211") //전공 필수 - .credit(3).build()).build(), - TakenLecture.builder().lecture(Lecture.builder() - .lectureCode("HEC01305") //전공 선택 - .credit(3).build()).build())); - TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); - - GraduationRequirement graduationRequirement = GraduationRequirement.builder() - .dualMajorCredit(70).build(); - - //when - DetailGraduationResult detailDualMandatoryMajorGraduationResult = calculateDualMandatoryMajorDetailGraduationService.calculateDetailGraduation( - user, takenLectureInventory, graduationRequirement); - - //then - assertThat(detailDualMandatoryMajorGraduationResult) - .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") - .contains(DUAL_MANDATORY_MAJOR, false, 6, 3.0); - } - - @DisplayName("복수전공 졸업결과에서 복수전공필수 졸업결과를 분리한다.") - @Test - void isolateDualElectiveMajorDetailGraduation() { - //given - DetailCategoryResult dualMandatoryMajorDetailCategoryResult = DetailCategoryResult.builder() - .detailCategoryName("전공필수") - .totalCredits(18) - .takenCredits(18) - .build(); - DetailCategoryResult dualElectiveMajorDetailCategoryResult = DetailCategoryResult.builder() - .detailCategoryName("전공선택") - .totalCredits(52) - .takenCredits(52) - .build(); - DetailGraduationResult dualMajorDetailGraduationResult = DetailGraduationResult.createNonCategorizedGraduationResult( - 70, List.of(dualMandatoryMajorDetailCategoryResult, dualElectiveMajorDetailCategoryResult)); - - //when - DetailGraduationResult dualMandatoryMajorDetailGraduationResult = calculateDualMandatoryMajorDetailGraduationService.isolateDualMandatoryMajorDetailGraduation( - dualMajorDetailGraduationResult); - - //then - assertThat(dualMandatoryMajorDetailGraduationResult) - .extracting("graduationCategory", "totalCredit", "takenCredit") - .contains( - DUAL_MANDATORY_MAJOR, - dualMandatoryMajorDetailCategoryResult.getTotalCredits(), - dualMandatoryMajorDetailCategoryResult.getTakenCredits()); - } - -} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateMajorGraduationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateMajorGraduationServiceTest.java new file mode 100644 index 00000000..2a20f493 --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateMajorGraduationServiceTest.java @@ -0,0 +1,219 @@ +package com.plzgraduate.myongjigraduatebe.graduation.application.service; + +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.*; +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.BDDMockito.given; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.ElectiveMajorManager; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationManager; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MandatoryMajorManager; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.OptionalMandatoryMajorHandler; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.ReplaceMandatoryMajorHandler; +import com.plzgraduate.myongjigraduatebe.graduation.domain.service.submajor.SubMajorGraduationManager; +import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindMajorPort; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; +import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +@ExtendWith(MockitoExtension.class) +class CalculateMajorGraduationServiceTest { + + @Mock + private FindMajorPort findMajorPort; + + private CalculateMajorGraduationService calculateMajorGraduationService; + + + @BeforeEach + void setUp() { + MandatoryMajorManager mandatoryMajorManager = new MandatoryMajorManager( + List.of(new OptionalMandatoryMajorHandler(), new ReplaceMandatoryMajorHandler())); + ElectiveMajorManager electiveMajorManager = new ElectiveMajorManager(); + SubMajorGraduationManager subMajorGraduationManager = new SubMajorGraduationManager(); + MajorGraduationManager majorGraduationManager = new MajorGraduationManager(mandatoryMajorManager, electiveMajorManager); + calculateMajorGraduationService = new CalculateMajorGraduationService(findMajorPort, majorGraduationManager, subMajorGraduationManager); + } + + @DisplayName("MAJOR 관련 카테고리 일때만 MajorGraduationService를 호출한다.") + @Test + void shouldSupportMajorCategory() { + assertTrue(calculateMajorGraduationService.supports(PRIMARY_MANDATORY_MAJOR)); + assertTrue(calculateMajorGraduationService.supports(PRIMARY_ELECTIVE_MAJOR)); + assertTrue(calculateMajorGraduationService.supports(DUAL_MANDATORY_MAJOR)); + assertTrue(calculateMajorGraduationService.supports(DUAL_ELECTIVE_MAJOR)); + assertTrue(calculateMajorGraduationService.supports(SUB_MAJOR)); + assertFalse(calculateMajorGraduationService.supports(COMMON_CULTURE)); + assertFalse(calculateMajorGraduationService.supports(CORE_CULTURE)); + assertFalse(calculateMajorGraduationService.supports(PRIMARY_BASIC_ACADEMICAL_CULTURE)); + assertFalse(calculateMajorGraduationService.supports(DUAL_BASIC_ACADEMICAL_CULTURE)); + } + + @DisplayName("유저의 주전공필수 졸업결과를 계산한다.") + @Test + void shouldCalculateSingleDetailGraduationIfPrimaryMandatory() { + //given + User user = User.builder() + .id(1L) + .primaryMajor("응용소프트웨어전공") + .entryYear(19).build(); + HashSet graduationMajorLectures = new HashSet<>( + Set.of( + MajorLecture.of(Lecture.builder().lectureCode("HEC01211").credit(3).build(), "응용소프트웨어전공", 1, 16, 23), + MajorLecture.of(Lecture.builder().lectureCode("HEC01204").credit(3).build(), "응용소프트웨어전공", 1, 16, 23))); + given(findMajorPort.findMajor(user.getPrimaryMajor())).willReturn(graduationMajorLectures); + + HashSet takenLectures = new HashSet<>( + Set.of( + TakenLecture.builder().lecture(Lecture.builder() + .lectureCode("HEC01211") //전공 필수 + .credit(3).build()).build(), + TakenLecture.builder().lecture(Lecture.builder() + .lectureCode("HEC01305") //전공 선택 + .credit(3).build()).build())); + TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); + + GraduationRequirement graduationRequirement = GraduationRequirement.builder() + .primaryMajorCredit(70).build(); + + //when + DetailGraduationResult detailPrimaryMandatoryMajorGraduationResult = calculateMajorGraduationService.calculateSingleDetailGraduation( + user, PRIMARY_MANDATORY_MAJOR, takenLectureInventory, graduationRequirement); + + //then + assertThat(detailPrimaryMandatoryMajorGraduationResult) + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(PRIMARY_MANDATORY_MAJOR, false, 6, 3.0); + } + + @DisplayName("유저의 주전공선택 상세 졸업결과를 계산한다.") + @Test + void calculateSingleDetailGraduationIfPrimaryElective() { + //given + User user = User.builder() + .id(1L) + .primaryMajor("응용소프트웨어전공") + .entryYear(19).build(); + HashSet graduationMajorLectures = new HashSet<>( + Set.of( + // 전공 필수 + MajorLecture.of(Lecture.builder().lectureCode("HEC01211").credit(3).build(), "응용소프트웨어전공", 1, 16, 23), + // 전공 선택 + MajorLecture.of(Lecture.builder().lectureCode("HEC01305").credit(3).build(), "응용소프트웨어전공", 0, 16, 23), + // 전공 선택 + MajorLecture.of(Lecture.builder().lectureCode("HEC01318").credit(3).build(), "응용소프트웨어전공", 0, 16, 23))); + given(findMajorPort.findMajor(user.getPrimaryMajor())).willReturn(graduationMajorLectures); + + HashSet takenLectures = new HashSet<>( + Set.of( + TakenLecture.builder().lecture(Lecture.builder() + .lectureCode("HEC01211") //전공 필수 + .credit(3).build()).build(), + TakenLecture.builder().lecture(Lecture.builder() + .lectureCode("HEC01305") //전공 선택 + .credit(3).build()).build())); + TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); + + GraduationRequirement graduationRequirement = GraduationRequirement.builder() + .primaryMajorCredit(70).build(); + + //when + DetailGraduationResult detailPrimaryElectiveMajorGraduationResult = calculateMajorGraduationService.calculateSingleDetailGraduation( + user, PRIMARY_ELECTIVE_MAJOR, takenLectureInventory, graduationRequirement); + + //then + assertThat(detailPrimaryElectiveMajorGraduationResult) + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(PRIMARY_ELECTIVE_MAJOR, false, 67, 3.0); + } + + @DisplayName("유저의 복수전공필수 졸업결과를 계산한다.") + @Test + void calculateSingleDetailGraduationIfDualMandatory() { + //given + User user = User.builder() + .id(1L) + .dualMajor("응용소프트웨어전공") + .entryYear(19).build(); + HashSet graduationMajorLectures = new HashSet<>( + Set.of( + MajorLecture.of(Lecture.builder().lectureCode("HEC01211").credit(3).build(), "응용소프트웨어전공", 1, 16, 23), + MajorLecture.of(Lecture.builder().lectureCode("HEC01204").credit(3).build(), "응용소프트웨어전공", 1, 16, 23))); + given(findMajorPort.findMajor(user.getDualMajor())).willReturn(graduationMajorLectures); + + HashSet takenLectures = new HashSet<>( + Set.of( + TakenLecture.builder().lecture(Lecture.builder() + .lectureCode("HEC01211") //전공 필수 + .credit(3).build()).build(), + TakenLecture.builder().lecture(Lecture.builder() + .lectureCode("HEC01305") //전공 선택 + .credit(3).build()).build())); + TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); + + GraduationRequirement graduationRequirement = GraduationRequirement.builder() + .dualMajorCredit(70).build(); + + //when + DetailGraduationResult detailDualMandatoryMajorGraduationResult = calculateMajorGraduationService.calculateSingleDetailGraduation( + user, DUAL_MANDATORY_MAJOR, takenLectureInventory, graduationRequirement); + + //then + assertThat(detailDualMandatoryMajorGraduationResult) + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(DUAL_MANDATORY_MAJOR, false, 6, 3.0); + } + + @DisplayName("유저의 복수전공선택 졸업결과를 계산한다.") + @Test + void calculateCoreCulture() { + //given + User user = User.builder() + .id(1L) + .dualMajor("응용소프트웨어전공") + .entryYear(19).build(); + HashSet graduationMajorLectures = new HashSet<>( + Set.of( + MajorLecture.of(Lecture.builder().lectureCode("HEC01211").credit(3).build(), "응용소프트웨어전공", 1, 16, 23), + MajorLecture.of(Lecture.builder().lectureCode("HEC01304").credit(3).build(), "응용소프트웨어전공", 0, 16, 23))); + given(findMajorPort.findMajor(user.getDualMajor())).willReturn(graduationMajorLectures); + + HashSet takenLectures = new HashSet<>( + Set.of( + TakenLecture.builder().lecture(Lecture.builder() + .lectureCode("HEC01211") //전공 필수 + .credit(3).build()).build(), + TakenLecture.builder().lecture(Lecture.builder() + .lectureCode("HEC01304") //전공 선택 + .credit(3).build()).build())); + TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); + + GraduationRequirement graduationRequirement = GraduationRequirement.builder() + .dualMajorCredit(70).build(); + + //when + DetailGraduationResult detailDualMandatoryMajorGraduationResult = calculateMajorGraduationService.calculateSingleDetailGraduation( + user, DUAL_ELECTIVE_MAJOR, takenLectureInventory, graduationRequirement); + + //then + assertThat(detailDualMandatoryMajorGraduationResult) + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(DUAL_ELECTIVE_MAJOR, false, 67, 3.0); + } +} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationServiceTest.java deleted file mode 100644 index d0597f36..00000000 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryBasicAcademicalCultureDetailGraduationServiceTest.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.service; - -import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE; -import static com.plzgraduate.myongjigraduatebe.user.domain.model.College.ICT; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.BDDMockito.given; - -import java.util.HashSet; -import java.util.Set; - -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.graduation.domain.model.DetailGraduationResult; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindBasicAcademicalCulturePort; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.BasicAcademicalCultureLecture; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; - -@ExtendWith(MockitoExtension.class) -class CalculatePrimaryBasicAcademicalCultureDetailGraduationServiceTest { - - @Mock - private FindBasicAcademicalCulturePort findBasicAcademicalCulturePort; - @InjectMocks - private CalculatePrimaryBasicAcademicalCultureDetailGraduationService calculatePrimaryBasicAcademicalCultureDetailGraduationService; - - @DisplayName("유저의 핵심교양 상세 졸업결과를 계산한다.") - @Test - void calculateCoreCulture() { - //given - User user = User.builder() - .id(1L) - .primaryMajor("응용소프트웨어전공") - .entryYear(19).build(); - HashSet graduationCoreCultures = new HashSet<>( - Set.of(BasicAcademicalCultureLecture.of(Lecture.from("KMA02128"), ICT.getName()))); - given(findBasicAcademicalCulturePort.findBasicAcademicalCulture(user.getPrimaryMajor())).willReturn(graduationCoreCultures); - - HashSet takenLectures = new HashSet<>( - Set.of( - TakenLecture.builder().lecture(Lecture.builder() - .lectureCode("KMA02128") - .credit(3).build()).build())); - TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); - - GraduationRequirement graduationRequirement = GraduationRequirement.builder() - .primaryBasicAcademicalCultureCredit(18).build(); - - //when - DetailGraduationResult detailCoreCultureGraduationResult = calculatePrimaryBasicAcademicalCultureDetailGraduationService.calculateDetailGraduation( - user, takenLectureInventory, graduationRequirement); - - //then - assertThat(detailCoreCultureGraduationResult) - .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") - .contains(PRIMARY_BASIC_ACADEMICAL_CULTURE, false, 18, 3.0); - } - -} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryElectiveMajorDetailGraduationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryElectiveMajorDetailGraduationServiceTest.java deleted file mode 100644 index 7f950b90..00000000 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryElectiveMajorDetailGraduationServiceTest.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.service; - -import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_ELECTIVE_MAJOR; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.BDDMockito.given; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -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.graduation.domain.model.DetailCategoryResult; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindMajorPort; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; - -@ExtendWith(MockitoExtension.class) -class CalculatePrimaryElectiveMajorDetailGraduationServiceTest { - - @Mock - private FindMajorPort findMajorPort; - @InjectMocks - private CalculatePrimaryElectiveMajorDetailGraduationService calculatePrimaryElectiveMajorDetailGraduationService; - - @DisplayName("유저의 주전공선택 상세 졸업결과를 계산한다.") - @Test - void calculateCoreCulture() { - //given - User user = User.builder() - .id(1L) - .primaryMajor("응용소프트웨어전공") - .entryYear(19).build(); - HashSet graduationMajorLectures = new HashSet<>( - Set.of( - // 전공 필수 - MajorLecture.of(Lecture.builder().lectureCode("HEC01211").credit(3).build(), "응용소프트웨어전공", 1, 16, 23), - // 전공 선택 - MajorLecture.of(Lecture.builder().lectureCode("HEC01305").credit(3).build(), "응용소프트웨어전공", 0, 16, 23), - // 전공 선택 - MajorLecture.of(Lecture.builder().lectureCode("HEC01318").credit(3).build(), "응용소프트웨어전공", 0, 16, 23))); - given(findMajorPort.findMajor(user.getPrimaryMajor())).willReturn(graduationMajorLectures); - - HashSet takenLectures = new HashSet<>( - Set.of( - TakenLecture.builder().lecture(Lecture.builder() - .lectureCode("HEC01211") //전공 필수 - .credit(3).build()).build(), - TakenLecture.builder().lecture(Lecture.builder() - .lectureCode("HEC01305") //전공 선택 - .credit(3).build()).build())); - TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); - - GraduationRequirement graduationRequirement = GraduationRequirement.builder() - .primaryMajorCredit(70).build(); - - //when - DetailGraduationResult detailPrimaryElectiveMajorGraduationResult = calculatePrimaryElectiveMajorDetailGraduationService.calculateDetailGraduation( - user, takenLectureInventory, graduationRequirement); - - //then - assertThat(detailPrimaryElectiveMajorGraduationResult) - .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") - .contains(PRIMARY_ELECTIVE_MAJOR, false, 67, 3.0); - } - - @DisplayName("주전공 졸업결과에서 주전공선택 졸업결과를 분리한다.") - @Test - void isolatePrimaryElectiveMajorDetailGraduation() { - //given - DetailCategoryResult primaryMandatoryMajorDetailCategoryResult = DetailCategoryResult.builder() - .detailCategoryName("전공필수") - .totalCredits(18) - .takenCredits(18) - .build(); - DetailCategoryResult primaryElectiveMajorDetailCategoryResult = DetailCategoryResult.builder() - .detailCategoryName("전공선택") - .totalCredits(52) - .takenCredits(52) - .build(); - DetailGraduationResult primaryMajorDetailGraduationResult = DetailGraduationResult.createNonCategorizedGraduationResult( - 70, List.of(primaryMandatoryMajorDetailCategoryResult, primaryElectiveMajorDetailCategoryResult)); - - //when - DetailGraduationResult primaryElectiveMajorDetailGraduationResult = calculatePrimaryElectiveMajorDetailGraduationService.isolatePrimaryElectiveMajorDetailGraduation( - primaryMajorDetailGraduationResult); - - //then - assertThat(primaryElectiveMajorDetailGraduationResult) - .extracting("graduationCategory", "totalCredit", "takenCredit") - .contains( - PRIMARY_ELECTIVE_MAJOR, - primaryElectiveMajorDetailCategoryResult.getTotalCredits(), - primaryElectiveMajorDetailCategoryResult.getTakenCredits()); - } - -} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMandatoryMajorDetailGraduationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMandatoryMajorDetailGraduationServiceTest.java deleted file mode 100644 index b30454ef..00000000 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculatePrimaryMandatoryMajorDetailGraduationServiceTest.java +++ /dev/null @@ -1,103 +0,0 @@ -package com.plzgraduate.myongjigraduatebe.graduation.application.service; - -import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_MANDATORY_MAJOR; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.BDDMockito.given; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -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.graduation.domain.model.DetailCategoryResult; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; -import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindMajorPort; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.MajorLecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; -import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; -import com.plzgraduate.myongjigraduatebe.user.domain.model.User; - -@ExtendWith(MockitoExtension.class) -class CalculatePrimaryMandatoryMajorDetailGraduationServiceTest { - - @Mock - private FindMajorPort findMajorPort; - @InjectMocks - private CalculatePrimaryMandatoryMajorDetailGraduationService calculatePrimaryMandatoryMajorDetailGraduationService; - - @DisplayName("유저의 주전공필수 졸업결과를 계산한다.") - @Test - void calculateCoreCulture() { - //given - User user = User.builder() - .id(1L) - .primaryMajor("응용소프트웨어전공") - .entryYear(19).build(); - HashSet graduationMajorLectures = new HashSet<>( - Set.of( - MajorLecture.of(Lecture.builder().lectureCode("HEC01211").credit(3).build(), "응용소프트웨어전공", 1, 16, 23), - MajorLecture.of(Lecture.builder().lectureCode("HEC01204").credit(3).build(), "응용소프트웨어전공", 1, 16, 23))); - given(findMajorPort.findMajor(user.getPrimaryMajor())).willReturn(graduationMajorLectures); - - HashSet takenLectures = new HashSet<>( - Set.of( - TakenLecture.builder().lecture(Lecture.builder() - .lectureCode("HEC01211") //전공 필수 - .credit(3).build()).build(), - TakenLecture.builder().lecture(Lecture.builder() - .lectureCode("HEC01305") //전공 선택 - .credit(3).build()).build())); - TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); - - GraduationRequirement graduationRequirement = GraduationRequirement.builder() - .primaryMajorCredit(70).build(); - - //when - DetailGraduationResult detailPrimaryMandatoryMajorGraduationResult = calculatePrimaryMandatoryMajorDetailGraduationService.calculateDetailGraduation( - user, takenLectureInventory, graduationRequirement); - - //then - assertThat(detailPrimaryMandatoryMajorGraduationResult) - .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") - .contains(PRIMARY_MANDATORY_MAJOR, false, 6, 3.0); - } - - @DisplayName("주전공 졸업결과에서 주전공필수 졸업결과를 분리한다.") - @Test - void isolatePrimaryElectiveMajorDetailGraduation() { - //given - DetailCategoryResult primaryMandatoryMajorDetailCategoryResult = DetailCategoryResult.builder() - .detailCategoryName("전공필수") - .totalCredits(18) - .takenCredits(18) - .build(); - DetailCategoryResult primaryElectiveMajorDetailCategoryResult = DetailCategoryResult.builder() - .detailCategoryName("전공선택") - .totalCredits(52) - .takenCredits(52) - .build(); - DetailGraduationResult primaryMajorDetailGraduationResult = DetailGraduationResult.createNonCategorizedGraduationResult( - 70, List.of(primaryMandatoryMajorDetailCategoryResult, primaryElectiveMajorDetailCategoryResult)); - - //when - DetailGraduationResult primaryMandatoryMajorDetailGraduationResult = calculatePrimaryMandatoryMajorDetailGraduationService.isolatePrimaryMandatoryMajorDetailGraduation( - primaryMajorDetailGraduationResult); - - //then - assertThat(primaryMandatoryMajorDetailGraduationResult) - .extracting("graduationCategory", "totalCredit", "takenCredit") - .contains( - PRIMARY_MANDATORY_MAJOR, - primaryMandatoryMajorDetailCategoryResult.getTotalCredits(), - primaryMandatoryMajorDetailCategoryResult.getTakenCredits()); - } - -} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationServiceTest.java index 09ef141e..b9086668 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationServiceTest.java @@ -1,10 +1,14 @@ package com.plzgraduate.myongjigraduatebe.graduation.application.service; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.then; +import static org.mockito.Mockito.mock; import java.util.HashSet; +import java.util.List; +import java.util.stream.Stream; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.extension.ExtendWith; @@ -14,8 +18,8 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import com.plzgraduate.myongjigraduatebe.graduation.support.resolver.CalculateDetailGraduationUseCaseResolver; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateDetailGraduationUseCase; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureUseCase; @@ -24,17 +28,14 @@ import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @ExtendWith(MockitoExtension.class) -class -CalculateSingleDetailGraduationServiceTest { +class CalculateSingleDetailGraduationServiceTest { @Mock private FindUserUseCase findUserUseCase; @Mock private FindTakenLectureUseCase findTakenLectureUseCase; @Mock - private CalculateDetailGraduationUseCaseResolver calculateDetailGraduationUseCaseResolver; - @Mock - private CalculateDetailGraduationUseCase calculateDetailGraduationUseCase; + private List calculateDetailGraduationUseCases; @InjectMocks private CalculateSingleDetailGraduationService calculateSingleDetailGraduationService; @@ -51,24 +52,28 @@ void calculateSingleDetailGraduation(String graduationCategoryName) { .id(1L) .entryYear(19) .primaryMajor("응용소프트웨어전공").build(); - given(findUserUseCase.findUserById(user.getId())).willReturn(user); - + GraduationCategory graduationCategory = GraduationCategory.valueOf(graduationCategoryName); + CalculateDetailGraduationUseCase calculateDetailGraduationUseCase = mock(CalculateDetailGraduationUseCase.class); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(new HashSet<>()); - given(findTakenLectureUseCase.findTakenLectures(user.getId())).willReturn( - takenLectureInventory); - GraduationCategory graduationCategory = GraduationCategory.valueOf(graduationCategoryName); - given(calculateDetailGraduationUseCaseResolver.resolveCalculateDetailGraduationUseCase( - graduationCategory)).willReturn(calculateDetailGraduationUseCase); + given(findUserUseCase.findUserById(user.getId())).willReturn(user); + given(findTakenLectureUseCase.findTakenLectures(user.getId())).willReturn(takenLectureInventory); + given(calculateDetailGraduationUseCases.stream()).willReturn(Stream.of(calculateDetailGraduationUseCase)); + given(calculateDetailGraduationUseCase.supports(graduationCategory)).willReturn(true); + given(calculateDetailGraduationUseCase.calculateSingleDetailGraduation( + any(User.class), any(GraduationCategory.class), + any(TakenLectureInventory.class), any(GraduationRequirement.class))) + .willReturn(DetailGraduationResult.create(graduationCategory, 10, List.of())); // when - calculateSingleDetailGraduationService.calculateSingleDetailGraduation( - user.getId(), graduationCategory); + DetailGraduationResult result = + calculateSingleDetailGraduationService.calculateSingleDetailGraduation(1L, graduationCategory); // then + assertNotNull(result); then(calculateDetailGraduationUseCase).should() - .calculateDetailGraduation(any(User.class), any(TakenLectureInventory.class), - any(GraduationRequirement.class)); + .calculateSingleDetailGraduation(any(User.class), any(GraduationCategory.class), + any(TakenLectureInventory.class), any(GraduationRequirement.class)); } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationCategoryTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationCategoryTest.java new file mode 100644 index 00000000..9f6f08ec --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationCategoryTest.java @@ -0,0 +1,21 @@ +package com.plzgraduate.myongjigraduatebe.graduation.domain.model; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; + +class GraduationCategoryTest { + + @DisplayName("전공 관련 GraduationCategory인 경우 전공 필수인지 선택인지 확인한다.") + @CsvSource({"PRIMARY_MANDATORY_MAJOR, true", "DUAL_MANDATORY_MAJOR, true", "PRIMARY_ELECTIVE_MAJOR, false"}) + @ParameterizedTest + void checkMandatoryOrElective(GraduationCategory graduationCategory, boolean isMandatory) { + //when + boolean result = graduationCategory.checkMandatoryIfSeperatedByMandatoryAndElective(); + + //then + assertThat(result).isEqualTo(isMandatory); + } +} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/MajorTypeTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/MajorTypeTest.java new file mode 100644 index 00000000..674c5c89 --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/MajorTypeTest.java @@ -0,0 +1,37 @@ +package com.plzgraduate.myongjigraduatebe.graduation.domain.model; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.stream.Stream; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +class MajorTypeTest { + + private static Stream provideGraduationCategoryForCreatingMajorType() { + return Stream.of( + Arguments.of(GraduationCategory.PRIMARY_MANDATORY_MAJOR, MajorType.PRIMARY), + Arguments.of(GraduationCategory.PRIMARY_ELECTIVE_MAJOR, MajorType.PRIMARY), + Arguments.of(GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE, MajorType.PRIMARY), + Arguments.of(GraduationCategory.DUAL_MANDATORY_MAJOR, MajorType.DUAL), + Arguments.of(GraduationCategory.DUAL_ELECTIVE_MAJOR, MajorType.DUAL), + Arguments.of(GraduationCategory.DUAL_BASIC_ACADEMICAL_CULTURE, MajorType.DUAL), + Arguments.of(GraduationCategory.SUB_MAJOR, MajorType.SUB) + ); + } + + @DisplayName("GraduationCategory별로 올바른 MajorType이 반환되는지 확인한다.") + @MethodSource("provideGraduationCategoryForCreatingMajorType") + @ParameterizedTest + void getMajorByGraduationCategory(GraduationCategory graduationCategory, MajorType majorType) { + + //when + MajorType result = MajorType.from(graduationCategory); + + //then + assertThat(result).isEqualTo(majorType); + } +} 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/BusinessBasicAcademicalGraduationManagerTest.java similarity index 93% rename from src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/BusinessBasicAcademicalManagerTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/BusinessBasicAcademicalGraduationManagerTest.java index 82f0dbfd..c8a66f1b 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/BusinessBasicAcademicalGraduationManagerTest.java @@ -1,6 +1,5 @@ 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; @@ -25,7 +24,7 @@ import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @DisplayName("경영대의 학문기초교양 결과를 반환한다.") -class BusinessBasicAcademicalManagerTest { +class BusinessBasicAcademicalGraduationManagerTest { @DisplayName("경영학과의 학문기초교양 결과를 계산한다.") @Nested @@ -45,7 +44,7 @@ class 경영학과_학문기초교양 { TakenLecture.of(user, mockLectureMap.get("KMD02107"), 2019, Semester.FIRST) ))); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); - BasicAcademicalManager manager = new BusinessBasicAcademicalManager(); + BasicAcademicalGraduationManager manager = new BusinessBasicAcademicalGraduationManager(); //when DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, @@ -78,7 +77,7 @@ class 경영학과_학문기초교양 { TakenLecture.of(user, mockLectureMap.get("KMD02107"), 2019, Semester.FIRST) ))); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); - BasicAcademicalManager manager = new BusinessBasicAcademicalManager(); + BasicAcademicalGraduationManager manager = new BusinessBasicAcademicalGraduationManager(); //when DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, 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/DefaultBasicAcademicalGraduationManagerTest.java similarity index 94% rename from src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/DefaultBasicAcademicalManagerTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/basicacademicalculture/DefaultBasicAcademicalGraduationManagerTest.java index 9245a3ae..f9bdaf0c 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/DefaultBasicAcademicalGraduationManagerTest.java @@ -15,7 +15,6 @@ 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; @@ -24,7 +23,7 @@ import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @DisplayName("기본 단과대에 대해 학문기초교양 결과를 반환한다.") -class DefaultBasicAcademicalManagerTest { +class DefaultBasicAcademicalGraduationManagerTest { @DisplayName("인문대의 학문기초교양을 계산한다.") @Nested @@ -45,7 +44,7 @@ class 인문대_학문기초교양 { TakenLecture.of(user, mockLectureMap.get("KMB02122"), 2021, Semester.FIRST) ))); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); - BasicAcademicalManager manager = new DefaultBasicAcademicalManager(); + BasicAcademicalGraduationManager manager = new DefaultBasicAcademicalGraduationManager(); //when DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, @@ -76,7 +75,7 @@ class 인문대_학문기초교양 { TakenLecture.of(user, mockLectureMap.get("KMB02120"), 2020, Semester.FIRST) )); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); - BasicAcademicalManager manager = new DefaultBasicAcademicalManager(); + BasicAcademicalGraduationManager manager = new DefaultBasicAcademicalGraduationManager(); //when DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, 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 e80df1d5..bdd89557 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,7 +15,6 @@ 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; @@ -44,7 +43,7 @@ class 이십삼년도_이후_교과목_포함 { TakenLecture.of(user, mockLectureMap.get("KMD02186"), 2023, Semester.SECOND) ))); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); - BasicAcademicalManager manager = new DefaultBasicAcademicalManager(); + BasicAcademicalGraduationManager manager = new DefaultBasicAcademicalGraduationManager(); //when DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, @@ -77,7 +76,7 @@ class 이십삼년도_이후_교과목_포함 { TakenLecture.of(user, mockLectureMap.get("KMD02186"), 2020, Semester.SECOND) ))); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); - BasicAcademicalManager manager = new SocialScienceBasicAcademicManager(); + BasicAcademicalGraduationManager manager = new SocialScienceBasicAcademicGraduationManager(); //when DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, 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 f1e93f58..12225ea8 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 @@ -15,7 +15,6 @@ 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; @@ -28,7 +27,7 @@ class CommonCultureGraduationManagerTest { Map mockLectureMap = LectureFixture.getMockLectureMap(); - GraduationManager graduationManager = new CommonCultureGraduationManager(); + GraduationManager graduationManager = new CommonGraduationManager(); @DisplayName("모든 공통교양 세부 카테고리가 이수 완료일 경우 이수 완료 공통교양 전체 졸업 결과를 생성한다.") @ParameterizedTest 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 bd8e3df8..e55eaa6f 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 @@ -26,7 +26,7 @@ class CoreCultureGraduationManagerTest { Map mockLectureMap = LectureFixture.getMockLectureMap(); - GraduationManager graduationManager = new CoreCultureGraduationManager(); + GraduationManager graduationManager = new CoreGraduationManager(); @DisplayName("모든 핵심교양 세부 카테고리가 이수 완료일 경우 이수 완료 핵심교양 전체 졸업 결과를 생성한다.") @Test diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/DataTechnologyMajorTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/DataTechnologyMajorTest.java index cd8105b2..18efa985 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/DataTechnologyMajorTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/DataTechnologyMajorTest.java @@ -1,6 +1,6 @@ package com.plzgraduate.myongjigraduatebe.graduation.domain.service.major; -import static com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory.PRIMARY; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.MajorType.PRIMARY; import static org.assertj.core.api.Assertions.assertThat; import java.util.HashSet; @@ -66,10 +66,12 @@ class DataTechnologyMajorTest { ))); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); Set 데이터테크놀로지_전공 = MajorFixture.데이터테크놀로지_전공(); - MajorManager manager = new MajorManager(PRIMARY); + MandatoryMajorManager mandatoryMajorManager = new MandatoryMajorManager(List.of(new OptionalMandatoryMajorHandler(), new ReplaceMandatoryMajorHandler())); + ElectiveMajorManager electiveMajorManager = new ElectiveMajorManager(); + MajorGraduationManager manager = new MajorGraduationManager(mandatoryMajorManager, electiveMajorManager); //when - DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, + DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, PRIMARY, takenLectureInventory, 데이터테크놀로지_전공, 70); List detailCategory = detailGraduationResult.getDetailCategory(); DetailCategoryResult mandatoryDetailCategory = detailCategory.get(0); @@ -123,10 +125,12 @@ class DataTechnologyMajorTest { ))); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); Set 데이터테크놀로지_전공 = MajorFixture.데이터테크놀로지_전공(); - MajorManager manager = new MajorManager(PRIMARY); + MandatoryMajorManager mandatoryMajorManager = new MandatoryMajorManager(List.of(new OptionalMandatoryMajorHandler(), new ReplaceMandatoryMajorHandler())); + ElectiveMajorManager electiveMajorManager = new ElectiveMajorManager(); + MajorGraduationManager manager = new MajorGraduationManager(mandatoryMajorManager, electiveMajorManager); //when - DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, + DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, PRIMARY, takenLectureInventory, 데이터테크놀로지_전공, 70); List detailCategory = detailGraduationResult.getDetailCategory(); DetailCategoryResult mandatoryDetailCategory = detailCategory.get(0); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/InternationTradeMajorTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/InternationTradeMajorTest.java index 119010ba..8ca058a5 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/InternationTradeMajorTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/InternationTradeMajorTest.java @@ -1,6 +1,6 @@ package com.plzgraduate.myongjigraduatebe.graduation.domain.service.major; -import static com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory.*; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.MajorType.*; import static org.assertj.core.api.Assertions.assertThat; import java.util.HashSet; @@ -60,10 +60,12 @@ class InternationTradeMajorTest { ))); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); Set 국제통상_전공 = MajorFixture.국제통상_전공(); - MajorManager manager = new MajorManager(PRIMARY); + MandatoryMajorManager mandatoryMajorManager = new MandatoryMajorManager(List.of(new OptionalMandatoryMajorHandler(), new ReplaceMandatoryMajorHandler())); + ElectiveMajorManager electiveMajorManager = new ElectiveMajorManager(); + MajorGraduationManager manager = new MajorGraduationManager(mandatoryMajorManager, electiveMajorManager); //when - DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, + DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, PRIMARY, takenLectureInventory, 국제통상_전공, 63); List detailCategory = detailGraduationResult.getDetailCategory(); DetailCategoryResult mandatoryDetailCategory = detailCategory.get(0); @@ -116,10 +118,12 @@ class InternationTradeMajorTest { ))); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); Set 국제통상_전공 = MajorFixture.국제통상_전공(); - MajorManager manager = new MajorManager(PRIMARY); + MandatoryMajorManager mandatoryMajorManager = new MandatoryMajorManager(List.of(new OptionalMandatoryMajorHandler(), new ReplaceMandatoryMajorHandler())); + ElectiveMajorManager electiveMajorManager = new ElectiveMajorManager(); + MajorGraduationManager manager = new MajorGraduationManager(mandatoryMajorManager, electiveMajorManager); //when - DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, + DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, PRIMARY, takenLectureInventory, 국제통상_전공, 63); List detailCategory = detailGraduationResult.getDetailCategory(); DetailCategoryResult mandatoryDetailCategory = detailCategory.get(0); @@ -173,10 +177,12 @@ class InternationTradeMajorTest { ))); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); Set 국제통상_전공 = MajorFixture.국제통상_전공(); - MajorManager manager = new MajorManager(PRIMARY); + MandatoryMajorManager mandatoryMajorManager = new MandatoryMajorManager(List.of(new OptionalMandatoryMajorHandler(), new ReplaceMandatoryMajorHandler())); + ElectiveMajorManager electiveMajorManager = new ElectiveMajorManager(); + MajorGraduationManager manager = new MajorGraduationManager(mandatoryMajorManager, electiveMajorManager); //when - DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, + DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, PRIMARY, takenLectureInventory, 국제통상_전공, 63); List detailCategory = detailGraduationResult.getDetailCategory(); DetailCategoryResult mandatoryDetailCategory = detailCategory.get(0); @@ -227,10 +233,12 @@ class InternationTradeMajorTest { ))); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); Set 국제통상_전공 = MajorFixture.국제통상_전공(); - MajorManager manager = new MajorManager(PRIMARY); + MandatoryMajorManager mandatoryMajorManager = new MandatoryMajorManager(List.of(new OptionalMandatoryMajorHandler(), new ReplaceMandatoryMajorHandler())); + ElectiveMajorManager electiveMajorManager = new ElectiveMajorManager(); + MajorGraduationManager manager = new MajorGraduationManager(mandatoryMajorManager, electiveMajorManager); //when - DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, + DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, PRIMARY, takenLectureInventory, 국제통상_전공, 63); List detailCategory = detailGraduationResult.getDetailCategory(); DetailCategoryResult mandatoryDetailCategory = detailCategory.get(0); @@ -266,10 +274,12 @@ class InternationTradeMajorTest { ))); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); Set 국제통상_전공 = MajorFixture.국제통상_전공(); - MajorManager manager = new MajorManager(PRIMARY); + MandatoryMajorManager mandatoryMajorManager = new MandatoryMajorManager(List.of(new OptionalMandatoryMajorHandler(), new ReplaceMandatoryMajorHandler())); + ElectiveMajorManager electiveMajorManager = new ElectiveMajorManager(); + MajorGraduationManager manager = new MajorGraduationManager(mandatoryMajorManager, electiveMajorManager); //when - DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, + DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, PRIMARY, takenLectureInventory, 국제통상_전공, 70); List detailCategory = detailGraduationResult.getDetailCategory(); DetailCategoryResult mandatoryDetailCategory = detailCategory.get(0); @@ -297,10 +307,12 @@ class InternationTradeMajorTest { ))); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); Set 국제통상_전공 = MajorFixture.국제통상_전공(); - MajorManager manager = new MajorManager(PRIMARY); + MandatoryMajorManager mandatoryMajorManager = new MandatoryMajorManager(List.of(new OptionalMandatoryMajorHandler(), new ReplaceMandatoryMajorHandler())); + ElectiveMajorManager electiveMajorManager = new ElectiveMajorManager(); + MajorGraduationManager manager = new MajorGraduationManager(mandatoryMajorManager, electiveMajorManager); //when - DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, + DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, PRIMARY, takenLectureInventory, 국제통상_전공, 70); List detailCategory = detailGraduationResult.getDetailCategory(); DetailCategoryResult electiveDetailCategory = detailCategory.get(1); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/OptionalMandatoryMajorHandlerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/OptionalMandatoryMajorHandlerTest.java index 7353ee3e..1ff67a32 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/OptionalMandatoryMajorHandlerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/OptionalMandatoryMajorHandlerTest.java @@ -11,6 +11,7 @@ import com.plzgraduate.myongjigraduatebe.fixture.LectureFixture; import com.plzgraduate.myongjigraduatebe.fixture.UserFixture; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.MajorType; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.Semester; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; @@ -20,7 +21,7 @@ @DisplayName("N개 중에 M개 이상을 수강할 경우 세부조건을 달성한다.") class OptionalMandatoryMajorHandlerTest { private static final User user = UserFixture.경영학과_19학번_ENG12(); - private static final MajorGraduationCategory majorGraduationCategory = MajorGraduationCategory.PRIMARY; + private static final MajorType MAJOR_TYPE = MajorType.PRIMARY; private static final Map mockLectureMap = LectureFixture.getMockLectureMap(); @DisplayName("3개 중에 1개를 수강할 경우 세부조건을 달성한다.") @@ -47,7 +48,7 @@ class OptionalMandatoryMajorHandlerTest { //when MandatoryMajorSpecialCaseHandler exceptionHandler = new OptionalMandatoryMajorHandler(); MandatorySpecialCaseInformation mandatorySpecialCaseInformation = exceptionHandler.getMandatorySpecialCaseInformation( - user, majorGraduationCategory, takenLectureInventory, mandatoryLectures, electiveLectures); + user, MAJOR_TYPE, takenLectureInventory, mandatoryLectures, electiveLectures); boolean isCompleteMandatorySpecialCase = mandatorySpecialCaseInformation.isCompleteMandatorySpecialCase(); int removedMandatoryTotalCredit = mandatorySpecialCaseInformation.getRemovedMandatoryTotalCredit(); @@ -81,7 +82,7 @@ class OptionalMandatoryMajorHandlerTest { //when MandatoryMajorSpecialCaseHandler exceptionHandler = new OptionalMandatoryMajorHandler(); MandatorySpecialCaseInformation mandatorySpecialCaseInformation = exceptionHandler.getMandatorySpecialCaseInformation( - user, majorGraduationCategory, takenLectureInventory, mandatoryLectures, electiveLectures); + user, MAJOR_TYPE, takenLectureInventory, mandatoryLectures, electiveLectures); boolean isCompleteMandatorySpecialCase = mandatorySpecialCaseInformation.isCompleteMandatorySpecialCase(); int removedMandatoryTotalCredit = mandatorySpecialCaseInformation.getRemovedMandatoryTotalCredit(); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/ReplaceMandatoryMajorHandlerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/ReplaceMandatoryMajorHandlerTest.java index 430a9115..6059f84a 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/ReplaceMandatoryMajorHandlerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/exception/ReplaceMandatoryMajorHandlerTest.java @@ -11,7 +11,7 @@ import com.plzgraduate.myongjigraduatebe.fixture.LectureFixture; import com.plzgraduate.myongjigraduatebe.fixture.UserFixture; -import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MajorGraduationCategory; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.MajorType; import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MandatoryMajorSpecialCaseHandler; import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.MandatorySpecialCaseInformation; import com.plzgraduate.myongjigraduatebe.graduation.domain.service.major.ReplaceMandatoryMajorHandler; @@ -24,7 +24,7 @@ @DisplayName("21학번 이전 철학과 학생의 경우 폐지된 전공필수의 대체 과목을 인정한다.") class ReplaceMandatoryMajorHandlerTest { private static final User user = UserFixture.철학과_20학번(); - private static final MajorGraduationCategory majorGraduationCategory = MajorGraduationCategory.PRIMARY; + private static final MajorType MAJOR_TYPE = MajorType.PRIMARY; private static final Map mockLectureMap = LectureFixture.getMockLectureMap(); @DisplayName("답사1와 답사2를 수강했을 경우 세부조건을 달성한다.") @@ -52,7 +52,7 @@ class ReplaceMandatoryMajorHandlerTest { //when MandatoryMajorSpecialCaseHandler exceptionHandler = new ReplaceMandatoryMajorHandler(); MandatorySpecialCaseInformation mandatorySpecialCaseInformation = exceptionHandler.getMandatorySpecialCaseInformation( - user, majorGraduationCategory, takenLectureInventory, mandatoryLectures, electiveLectures); + user, MAJOR_TYPE, takenLectureInventory, mandatoryLectures, electiveLectures); boolean isCompleteMandatorySpecialCase = mandatorySpecialCaseInformation.isCompleteMandatorySpecialCase(); int removedMandatoryTotalCredit = mandatorySpecialCaseInformation.getRemovedMandatoryTotalCredit(); @@ -87,7 +87,7 @@ class ReplaceMandatoryMajorHandlerTest { //when MandatoryMajorSpecialCaseHandler exceptionHandler = new ReplaceMandatoryMajorHandler(); MandatorySpecialCaseInformation mandatorySpecialCaseInformation = exceptionHandler.getMandatorySpecialCaseInformation( - user, majorGraduationCategory, takenLectureInventory, mandatoryLectures, electiveLectures); + user, MAJOR_TYPE, takenLectureInventory, mandatoryLectures, electiveLectures); boolean isCompleteMandatorySpecialCase = mandatorySpecialCaseInformation.isCompleteMandatorySpecialCase(); int removedMandatoryTotalCredit = mandatorySpecialCaseInformation.getRemovedMandatoryTotalCredit(); @@ -118,7 +118,7 @@ class ReplaceMandatoryMajorHandlerTest { //when MandatoryMajorSpecialCaseHandler exceptionHandler = new ReplaceMandatoryMajorHandler(); MandatorySpecialCaseInformation mandatorySpecialCaseInformation = exceptionHandler.getMandatorySpecialCaseInformation( - user, majorGraduationCategory, takenLectureInventory, mandatoryLectures, electiveLectures); + user, MAJOR_TYPE, takenLectureInventory, mandatoryLectures, electiveLectures); boolean isCompleteMandatorySpecialCase = mandatorySpecialCaseInformation.isCompleteMandatorySpecialCase(); int removedMandatoryTotalCredit = mandatorySpecialCaseInformation.getRemovedMandatoryTotalCredit(); 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/SubMajorGraduationManagerTest.java similarity index 99% rename from src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/submajor/SubMajorManagerTest.java rename to src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/submajor/SubMajorGraduationManagerTest.java index f660182b..a3fba8eb 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/SubMajorGraduationManagerTest.java @@ -20,7 +20,7 @@ import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; -class SubMajorManagerTest { +class SubMajorGraduationManagerTest { @DisplayName("부전공 학생의 부전공 졸업 결과를 생성한다.") @Test @@ -41,7 +41,7 @@ void createDetailGraduationResult() { int subMajorGraduationCredit = 21; int takenLecturesCount = takenLectures.size(); - GraduationManager subMajorManager = new SubMajorManager(); + GraduationManager subMajorManager = new SubMajorGraduationManager(); //when DetailGraduationResult detailGraduationResult = subMajorManager.createDetailGraduationResult(user, diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/domain/model/TakenLectureInventoryTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/domain/model/TakenLectureInventoryTest.java index 1a8b7f03..36aa4e6c 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/domain/model/TakenLectureInventoryTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/takenlecture/domain/model/TakenLectureInventoryTest.java @@ -74,7 +74,7 @@ void calculateTotalCredit() { @DisplayName("수강과목 목록에서 처리 완료된 과목을 제거한다.") @Test - void handleFinishedLectures() { + void sync() { //given TakenLectureInventory takenLectureInventory = getTakenLectureInventory(); int beforeHandleSize = takenLectureInventory.getTakenLectures().size(); @@ -84,7 +84,7 @@ void handleFinishedLectures() { )); //when - takenLectureInventory.handleFinishedLectures(finishedLectures); + takenLectureInventory.sync(finishedLectures); //then assertThat(takenLectureInventory.getTakenLectures()) 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 e81262ba..902fb143 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 @@ -7,9 +7,13 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; import org.mockito.Mock; import org.springframework.security.crypto.password.PasswordEncoder; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.MajorType; + class UserTest { @Mock @@ -161,4 +165,18 @@ void isNotMyAuthId() { //then assertThat(result).isFalse(); } + + @DisplayName("MajorType별 사용자의 전공을 반환하는지 확인한다.") + @CsvSource({"PRIMARY, 융합소프트웨어부", "DUAL, 경영학과", "SUB, 영문학과"}) + @ParameterizedTest + void getMajorByMajorType(MajorType majorType, String major) { + //given + User dualMajorUser = User.builder().id(1L).primaryMajor("융합소프트웨어부").dualMajor("경영학과").subMajor("영문학과").build(); + + //when + String majorByMajorType = dualMajorUser.getMajorByMajorType(majorType); + + //then + assertThat(majorByMajorType).isEqualTo(major); + } } From 784eb0a42fbd6f994cbbff5268e0fab27a1b770f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=EC=A7=80=ED=99=98?= <64758861+stophwan@users.noreply.github.com> Date: Sun, 30 Jun 2024 14:21:37 +0900 Subject: [PATCH 24/27] =?UTF-8?q?[DEV-37]=20Codecov=20=EB=A6=AC=ED=8F=AC?= =?UTF-8?q?=ED=8A=B8=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95=20(#276)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/pr-test.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pr-test.yml b/.github/workflows/pr-test.yml index af4eeb22..37b7ab29 100644 --- a/.github/workflows/pr-test.yml +++ b/.github/workflows/pr-test.yml @@ -39,4 +39,6 @@ jobs: # report 업로드하기 - name: Upload coverage to Codecov - uses: codecov/codecov-action@v3.1.1 + uses: codecov/codecov-action@v4 + with: + token: ${{ secrets.CODECOV_TOKEN }} From a87c889b5239b8a3d05e5959350231897551e300 Mon Sep 17 00:00:00 2001 From: 5uhwann <106325839+5uhwann@users.noreply.github.com> Date: Sun, 30 Jun 2024 17:41:33 +0900 Subject: [PATCH 25/27] =?UTF-8?q?[DEV-38]=20=ED=9A=8C=EC=9B=90=ED=83=88?= =?UTF-8?q?=ED=87=B4=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95=20(#278)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: deleteAllByUserJpaEntity 구현 * feat: DeleteCompletedCreditPort 구현 * fix: 유저 탈퇴 오류 수정 - deleteUserCompletedCredits 로직 추가 --- .../port/DeleteCompletedCreditPort.java | 8 ++++ .../DeletedCompletedCreditAdapter.java | 25 ++++++++++++ .../repository/CompletedCreditRepository.java | 2 + .../service/withdraw/WithDrawUserService.java | 3 ++ .../CompletedCreditRepositoryTest.java | 39 ++++++++++++++++++- .../withdraw/WithDrawUserServiceTest.java | 4 ++ 6 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/port/DeleteCompletedCreditPort.java create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/DeletedCompletedCreditAdapter.java diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/port/DeleteCompletedCreditPort.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/port/DeleteCompletedCreditPort.java new file mode 100644 index 00000000..028f29a0 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/port/DeleteCompletedCreditPort.java @@ -0,0 +1,8 @@ +package com.plzgraduate.myongjigraduatebe.completedcredit.application.port; + +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; + +public interface DeleteCompletedCreditPort { + + void deleteAllCompletedCredits(User user); +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/DeletedCompletedCreditAdapter.java b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/DeletedCompletedCreditAdapter.java new file mode 100644 index 00000000..76e8919b --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/DeletedCompletedCreditAdapter.java @@ -0,0 +1,25 @@ +package com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence; + +import org.springframework.transaction.annotation.Transactional; + +import com.plzgraduate.myongjigraduatebe.completedcredit.application.port.DeleteCompletedCreditPort; +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 +@Transactional +@RequiredArgsConstructor +public class DeletedCompletedCreditAdapter implements DeleteCompletedCreditPort { + + private final CompletedCreditRepository completedCreditRepository; + private final UserMapper userMapper; + + @Override + public void deleteAllCompletedCredits(User user) { + completedCreditRepository.deleteAllByUserJpaEntity(userMapper.mapToJpaEntity(user)); + } +} 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 index 91b88b2e..b6f5d712 100644 --- 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 @@ -11,4 +11,6 @@ public interface CompletedCreditRepository extends JpaRepository findAllByUserJpaEntity(UserJpaEntity userJpaEntity); + void deleteAllByUserJpaEntity(UserJpaEntity userJpaEntity); + } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserService.java index 5a923142..3b809c55 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserService.java @@ -3,6 +3,7 @@ import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.transaction.annotation.Transactional; +import com.plzgraduate.myongjigraduatebe.completedcredit.application.port.DeleteCompletedCreditPort; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; import com.plzgraduate.myongjigraduatebe.parsing.application.port.DeleteParsingTextHistoryPort; import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.delete.DeleteTakenLectureUseCase; @@ -22,6 +23,7 @@ class WithDrawUserService implements WithDrawUserUseCase { private final DeleteTakenLectureUseCase deleteTakenLectureByUserUseCase; private final DeleteParsingTextHistoryPort deleteParsingTextHistoryPort; private final DeleteUserPort deleteUserPort; + private final DeleteCompletedCreditPort deleteCompletedCreditPort; private final PasswordEncoder passwordEncoder; @Override @@ -30,6 +32,7 @@ public void withDraw(Long userId, String password) { user.matchPassword(passwordEncoder, password); deleteTakenLectureByUserUseCase.deleteAllTakenLecturesByUser(user); deleteParsingTextHistoryPort.deleteUserParsingTextHistory(user); + deleteCompletedCreditPort.deleteAllCompletedCredits(user); deleteUserPort.deleteUser(user); } } 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 1f301ca9..a5fa5029 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,8 +1,9 @@ package com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.repository; +import static org.assertj.core.api.Assertions.assertThat; + 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; @@ -50,9 +51,43 @@ void findAllByUserJpaEntity() { userJpaEntity); //then - Assertions.assertThat(foundCompletedCredits).hasSize(2) + assertThat(foundCompletedCredits).hasSize(2) .extracting("userJpaEntity.authId") .contains(userJpaEntity.getAuthId()); } + @DisplayName("유저의 모든 이수학점 내역을 삭제한다.") + @Test + void deleteAllByUserJpaEntity() { + //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 + completedCreditRepository.deleteAllByUserJpaEntity(userJpaEntity); + + //then + List foundCompletedCredits = completedCreditRepository.findAllByUserJpaEntity( + userJpaEntity); + assertThat(foundCompletedCredits).isEmpty(); + } + } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserServiceTest.java index c380a037..0154bd10 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserServiceTest.java @@ -14,6 +14,7 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; +import com.plzgraduate.myongjigraduatebe.completedcredit.application.port.DeleteCompletedCreditPort; import com.plzgraduate.myongjigraduatebe.parsing.application.port.DeleteParsingTextHistoryPort; import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.delete.DeleteTakenLectureUseCase; import com.plzgraduate.myongjigraduatebe.user.application.port.DeleteUserPort; @@ -32,6 +33,8 @@ class WithDrawUserServiceTest { @Mock private DeleteUserPort deleteUserPort; @Mock + private DeleteCompletedCreditPort deleteCompletedCreditPort; + @Mock private PasswordEncoder passwordEncoder; @InjectMocks @@ -53,6 +56,7 @@ void withDraw() { withDrawUserService.withDraw(user.getId(), password); then(deleteTakenLectureByUserUseCase).should().deleteAllTakenLecturesByUser(user); then(deleteParsingTextHistoryPort).should().deleteUserParsingTextHistory(user); + then(deleteCompletedCreditPort).should().deleteAllCompletedCredits(user); then(deleteUserPort).should().deleteUser(user); } From 7debefa71a19312e81ee82463e252912dbde66fd Mon Sep 17 00:00:00 2001 From: 5uhwann <106325839+5uhwann@users.noreply.github.com> Date: Mon, 15 Jul 2024 15:18:06 +0900 Subject: [PATCH 26/27] =?UTF-8?q?[DEV-40]=20=EA=B8=B0=EC=B4=88=20=EC=98=81?= =?UTF-8?q?=EC=96=B4=20=EC=9C=A0=EC=A0=80=20=EB=A1=9C=EC=A7=81=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1=20(#280)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: 기초영어 레벨 추가 * feat: 기초영어 레벨 유저 공통교양 과목 조회 구현 * feat: 기초영어 레벨 유저 공통교양 과목 조회 Adapter 구현 * feat: CommonCultureDetailCategoryManager - 기초영어 계산 로직 추가 --- .../CommonCultureDetailCategoryManager.java | 11 +++ .../FindCommonCulturePersistenceAdapter.java | 9 +++ .../repository/CommonCultureRepository.java | 5 +- .../user/domain/model/EnglishLevel.java | 2 +- .../fixture/CommonCultureCategoryFixture.java | 2 +- .../fixture/CommonCultureFixture.java | 10 +++ .../fixture/UserFixture.java | 10 +-- ...ommonCultureDetailCategoryManagerTest.java | 70 +++++++++++++++++++ ...ndCommonCulturePersistenceAdapterTest.java | 35 ++++++++-- .../CommonCultureRepositoryTest.java | 39 +++++++++-- src/test/resources/lecture.csv | 1 + 11 files changed, 176 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureDetailCategoryManager.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureDetailCategoryManager.java index 7a807f8b..3b1fcccc 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureDetailCategoryManager.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureDetailCategoryManager.java @@ -23,6 +23,7 @@ class CommonCultureDetailCategoryManager { private static final List CHRISTAIN_MANDATORY_LECTURE_CODE_LIST = List.of("KMA02100", "KMA00100", "KMA00101"); // 성경개론, 성서의이해, 성서와인간이해 + private static final String BASIC_ENGLISH_LECTURE_CODE = "KMP02126"; private static final List ENGLISH_12_MANDATORY_LECTURE_CODE_LIST = List.of("KMA02106", "KMA02107", "KMA02108", "KMA02109"); // 영어1, 영어2, 영어회화1, 영어회화2 private static final List ENGLISH_34_MANDATORY_LECTURE_CODE_LIST = @@ -70,6 +71,9 @@ private boolean checkMandatorySatisfaction(User user, TakenLectureInventory take takenLecture -> CHRISTAIN_MANDATORY_LECTURE_CODE_LIST .contains(takenLecture.getLecture().getLectureCode())); } + if(user.getEnglishLevel() == BASIC && category == ENGLISH) { + return isTakenBasicEnglish(takenLectureInventory) && checkEnglish12Satisfaction(takenLectureInventory); + } if (user.getEnglishLevel() == ENG12 && category == ENGLISH) { return checkEnglish12Satisfaction(takenLectureInventory); } @@ -79,6 +83,13 @@ private boolean checkMandatorySatisfaction(User user, TakenLectureInventory take return true; } + private boolean isTakenBasicEnglish(TakenLectureInventory takenLectureInventory) { + return takenLectureInventory.getCultureLectures().stream() + .map(takenLecture -> takenLecture.getLecture().getLectureCode()) + .collect(Collectors.toList()) + .contains(BASIC_ENGLISH_LECTURE_CODE); + } + private boolean checkEnglish12Satisfaction(TakenLectureInventory takenLectureInventory) { for (String lectureCode : ENGLISH_12_MANDATORY_LECTURE_CODE_LIST) { if (!takenLectureInventory.getCultureLectures().stream() diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindCommonCulturePersistenceAdapter.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindCommonCulturePersistenceAdapter.java index 197f5114..ca4a1749 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindCommonCulturePersistenceAdapter.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindCommonCulturePersistenceAdapter.java @@ -23,6 +23,9 @@ public class FindCommonCulturePersistenceAdapter implements FindCommonCulturePor @Override public Set findCommonCulture(User user) { + if (user.getEnglishLevel() == BASIC) { + return findEngBasicCommonCultures(user); + } if (user.getEnglishLevel() == ENG12) { return findEng12CommonCultures(user); } @@ -32,6 +35,12 @@ public Set findCommonCulture(User user) { return findEngFreeCommonCultures(user); } + private Set findEngBasicCommonCultures(User user) { + return commonCultureRepository.findEngBasicGraduationCommonCulturesByEntryYear(user.getEntryYear()).stream() + .map(lectureMapper::mapToCommonCultureModel) + .collect(Collectors.toSet()); + } + private Set findEng12CommonCultures(User user) { return commonCultureRepository.findEng12GraduationCommonCulturesByEntryYear(user.getEntryYear()).stream() .map(lectureMapper::mapToCommonCultureModel) diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/CommonCultureRepository.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/CommonCultureRepository.java index 562d862c..aa1e7d2f 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/CommonCultureRepository.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/CommonCultureRepository.java @@ -11,9 +11,12 @@ public interface CommonCultureRepository extends JpaRepository { @Query("select cc from CommonCultureJpaEntity cc join fetch cc.lectureJpaEntity where cc.startEntryYear <= :entryYear and cc.endEntryYear >= :entryYear and cc.lectureJpaEntity.lectureCode not in ('KMA02123', 'KMA02124', 'KMA02125', 'KMA02126')") + List findEngBasicGraduationCommonCulturesByEntryYear(@Param("entryYear") int entryYear); + + @Query("select cc from CommonCultureJpaEntity cc join fetch cc.lectureJpaEntity where cc.startEntryYear <= :entryYear and cc.endEntryYear >= :entryYear and cc.lectureJpaEntity.lectureCode not in ('KMP02126','KMA02123', 'KMA02124', 'KMA02125', 'KMA02126')") List findEng12GraduationCommonCulturesByEntryYear(@Param("entryYear") int entryYear); - @Query("select cc from CommonCultureJpaEntity cc join fetch cc.lectureJpaEntity where cc.startEntryYear <= :entryYear and cc.endEntryYear >= :entryYear and cc.lectureJpaEntity.lectureCode not in ('KMA02106', 'KMA02107', 'KMA02108', 'KMA02109')") + @Query("select cc from CommonCultureJpaEntity cc join fetch cc.lectureJpaEntity where cc.startEntryYear <= :entryYear and cc.endEntryYear >= :entryYear and cc.lectureJpaEntity.lectureCode not in ('KMP02126','KMA02106', 'KMA02107', 'KMA02108', 'KMA02109')") List findEng34GraduationCommonCulturesByEntryYear(@Param("entryYear") int entryYear); @Query("select cc from CommonCultureJpaEntity cc join fetch cc.lectureJpaEntity where cc.startEntryYear <= :entryYear and cc.endEntryYear >= :entryYear and cc.commonCultureCategory != 'ENGLISH'") diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/EnglishLevel.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/EnglishLevel.java index c5cc9359..a199abd9 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/EnglishLevel.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/EnglishLevel.java @@ -6,5 +6,5 @@ @Getter @RequiredArgsConstructor public enum EnglishLevel { - ENG12, ENG34, FREE + BASIC, ENG12, ENG34, FREE } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/fixture/CommonCultureCategoryFixture.java b/src/test/java/com/plzgraduate/myongjigraduatebe/fixture/CommonCultureCategoryFixture.java index 762c82a2..aed9804a 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/fixture/CommonCultureCategoryFixture.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/fixture/CommonCultureCategoryFixture.java @@ -26,9 +26,9 @@ public Stream provideArguments(ExtensionContext context) th Arguments.arguments(CAREER, 공통교양_18_19()), Arguments.arguments(CAREER, 공통교양_20_21_22()), Arguments.arguments(DIGITAL_LITERACY, 공통교양_23()), + Arguments.arguments(ENGLISH, 영어레벨_Basic()), Arguments.arguments(ENGLISH, 영어레벨_12()), Arguments.arguments(ENGLISH, 영어레벨_34()) - ); } } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/fixture/CommonCultureFixture.java b/src/test/java/com/plzgraduate/myongjigraduatebe/fixture/CommonCultureFixture.java index ecbf4bf3..51533dab 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/fixture/CommonCultureFixture.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/fixture/CommonCultureFixture.java @@ -102,6 +102,16 @@ public Stream provideArguments(ExtensionContext context) th return lectureSet; } + public static Set 영어레벨_Basic() { + Set lectureSet = new HashSet<>(); + lectureSet.add(CommonCulture.of(mockLectureMap.get("KMP02126"), ENGLISH)); + lectureSet.add(CommonCulture.of(mockLectureMap.get("KMA02106"), ENGLISH)); + lectureSet.add(CommonCulture.of(mockLectureMap.get("KMA02107"), ENGLISH)); + lectureSet.add(CommonCulture.of(mockLectureMap.get("KMA02108"), ENGLISH)); + lectureSet.add(CommonCulture.of(mockLectureMap.get("KMA02109"), ENGLISH)); + return lectureSet; + } + public static Set 영어레벨_12() { Set lectureSet = new HashSet<>(); lectureSet.add(CommonCulture.of(mockLectureMap.get("KMA02106"), ENGLISH)); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/fixture/UserFixture.java b/src/test/java/com/plzgraduate/myongjigraduatebe/fixture/UserFixture.java index 5690e82a..d866723d 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/fixture/UserFixture.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/fixture/UserFixture.java @@ -36,11 +36,6 @@ public class UserFixture { StudentCategory.NORMAL); } - public static User 경영학과_19학번_ENG34_복수전공() { - return createUser("mj21", "1234", EnglishLevel.ENG34, "김경영", "60191021", 19, "경영학과", "국제통상학과", - StudentCategory.NORMAL); - } - public static User 경영학과_19학번_영어_면제() { return createUser("mj21", "1234", EnglishLevel.FREE, "김경영", "60191021", 19, "경영학과", null, StudentCategory.NORMAL); } @@ -75,6 +70,11 @@ public class UserFixture { StudentCategory.NORMAL); } + public static User 데이테크놀로지학과_18학번_Basic_Eng() { + return createUser("mj1001", "1234", EnglishLevel.BASIC, "정데테", "60181666", 18, "데이터테크놀로지전공", null, + StudentCategory.NORMAL); + } + public static User 데이테크놀로지학과_18학번() { return createUser("mj1003", "1234", EnglishLevel.ENG12, "정데테", "60181666", 18, "데이터테크놀로지전공", null, StudentCategory.NORMAL); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureDetailCategoryManagerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureDetailCategoryManagerTest.java index cf72b681..9e90b437 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureDetailCategoryManagerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureDetailCategoryManagerTest.java @@ -31,6 +31,43 @@ class CommonCultureDetailCategoryManagerTest { Map mockLectureMap = LectureFixture.getMockLectureMap(); CommonCultureDetailCategoryManager manager = new CommonCultureDetailCategoryManager(); + @DisplayName("영어 레벨 기초: 각 카테고리의 해당하는 과목의 이수 학점을 만족한 경우 이수 완료의 카테고리 졸업 결과를 생성한다.") + @ParameterizedTest + @ArgumentsSource(CommonCultureCategoryFixture.class) + void generateEngBasicCompletedCommonCultureDetailCategory(CommonCultureCategory commonCultureCategory, + Set graduationLectures) { + //given + User user = UserFixture.데이테크놀로지학과_18학번_Basic_Eng(); + Set takenLectures = new HashSet<>((Set.of( + TakenLecture.of(user, mockLectureMap.get("KMP02126"), 2019, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA00101"), 2019, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA02102"), 2019, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA02122"), 2019, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA02104"), 2023, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA02141"), 2023, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA02106"), 2023, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA02107"), 2023, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA02123"), 2023, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA02124"), 2023, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA02108"), 2023, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA02109"), 2023, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA02125"), 2023, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA02126"), 2023, Semester.FIRST) + ))); + TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); + String commonCultureCategoryName = commonCultureCategory.getName(); + int categoryTotalCredit = commonCultureCategory.getTotalCredit(); + + //when + DetailCategoryResult detailCategoryResult = manager.generate(user, takenLectureInventory, graduationLectures, + commonCultureCategory); + + //then + assertThat(detailCategoryResult) + .extracting("detailCategoryName", "isCompleted", "totalCredits") + .contains(commonCultureCategoryName, true, categoryTotalCredit); + } + @DisplayName("영어 레벨 12: 각 카테고리의 해당하는 과목의 이수 학점을 만족한 경우 이수 완료의 카테고리 졸업 결과를 생성한다.") @ParameterizedTest @ArgumentsSource(CommonCultureCategoryFixture.class) @@ -129,6 +166,39 @@ void generateEngFreeCompletedCommonCultureDetailCategory(CommonCultureCategory c .contains(commonCultureCategoryName, true); } + @DisplayName("영어 레벨 기초: 각 카테고리의 해당하는 과목의 이수 학점을 만족하지 못한 경우(기초영어 미수강) 이수 미 완료의 카테고리 졸업 결과를 생성한다.") + @Test + void generateEngBasicUnCompletedCommonCultureDetailCategory() { + //given + User user = UserFixture.데이테크놀로지학과_18학번_Basic_Eng(); + Set takenLectures = new HashSet<>((Set.of( + TakenLecture.of(user, mockLectureMap.get("KMA00101"), 2019, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA02106"), 2023, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA02107"), 2023, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA02108"), 2023, Semester.FIRST), + TakenLecture.of(user, mockLectureMap.get("KMA02109"), 2023, Semester.FIRST) + ))); + TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); + CommonCultureCategory commonCultureCategory = ENGLISH; + Set graduationLectures = new HashSet<>(Set.of( + CommonCulture.of(mockLectureMap.get("KMP02126"), commonCultureCategory), + CommonCulture.of(mockLectureMap.get("KMA02106"), commonCultureCategory), + CommonCulture.of(mockLectureMap.get("KMA02107"), commonCultureCategory), + CommonCulture.of(mockLectureMap.get("KMA02108"), commonCultureCategory), + CommonCulture.of(mockLectureMap.get("KMA02109"), commonCultureCategory))); + String commonCultureCategoryName = commonCultureCategory.getName(); + int categoryTotalCredit = commonCultureCategory.getTotalCredit(); + + //when + DetailCategoryResult detailCategoryResult = manager.generate(user, takenLectureInventory, graduationLectures, + commonCultureCategory); + + //then + assertThat(detailCategoryResult) + .extracting("detailCategoryName", "isCompleted", "totalCredits") + .contains(commonCultureCategoryName, false, categoryTotalCredit); + } + @DisplayName("영어 레벨 12: 각 카테고리의 해당하는 과목의 이수 학점을 만족하지 못한 경우 이수 미 완료의 카테고리 졸업 결과를 생성한다.") @ParameterizedTest @ArgumentsSource(CommonCultureCategoryFixture.class) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindCommonCulturePersistenceAdapterTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindCommonCulturePersistenceAdapterTest.java index f6e8e48f..bdeaf9c7 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindCommonCulturePersistenceAdapterTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindCommonCulturePersistenceAdapterTest.java @@ -11,17 +11,17 @@ import org.springframework.beans.factory.annotation.Autowired; import com.plzgraduate.myongjigraduatebe.fixture.UserFixture; -import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.FindCommonCulturePersistenceAdapter; +import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCulture; import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.CommonCultureJpaEntity; import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.LectureJpaEntity; import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.CommonCultureRepository; import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.LectureRepository; -import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCulture; import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; class FindCommonCulturePersistenceAdapterTest extends PersistenceTestSupport { + private static final String BASIC_ENGLISH_CODE = "KMP02126"; private static final String ENGLISH1_CODE = "KMA02106"; private static final String ENGLISH_CONVERSATION3_CODE = "KMA02123"; @@ -32,10 +32,26 @@ class FindCommonCulturePersistenceAdapterTest extends PersistenceTestSupport { @Autowired private FindCommonCulturePersistenceAdapter commonCulturePersistenceAdapter; + @DisplayName("Eng12: 유저의 입학년도와 영어레벨에 해당하는 공통교양과목들을 조회한다.") + @Test + void findBasicEngCommonCulture() { + //given + User basicEngUser = UserFixture.데이테크놀로지학과_18학번_Basic_Eng(); + createCommonCultures(); + + //when + Set commonCultures = commonCulturePersistenceAdapter.findCommonCulture(basicEngUser); + + //then + assertThat(commonCultures).hasSize(2) + .extracting("commonCultureCategory") + .contains(ENGLISH); + } + @DisplayName("Eng12: 유저의 입학년도와 영어레벨에 해당하는 공통교양과목들을 조회한다.") @Test void findEng12CommonCulture() { - //given + //given User eng12User = UserFixture.데이테크놀로지학과_18학번(); createCommonCultures(); @@ -85,7 +101,10 @@ private void createCommonCultures() { LectureJpaEntity lectureJpaEntityB = LectureJpaEntity.builder() .lectureCode(ENGLISH_CONVERSATION3_CODE) .build(); - lectureRepository.saveAll(List.of(lectureJpaEntityA, lectureJpaEntityB)); + LectureJpaEntity lectureJpaEntityC = LectureJpaEntity.builder() + .lectureCode(BASIC_ENGLISH_CODE) + .build(); + lectureRepository.saveAll(List.of(lectureJpaEntityA, lectureJpaEntityB, lectureJpaEntityC)); CommonCultureJpaEntity commonCultureJpaEntityA = CommonCultureJpaEntity.builder() .lectureJpaEntity(lectureJpaEntityA) @@ -97,7 +116,13 @@ private void createCommonCultures() { .commonCultureCategory(ENGLISH) .startEntryYear(16) .endEntryYear(17).build(); - commonCultureRepository.saveAll(List.of(commonCultureJpaEntityA, commonCultureJpaEntityB)); + CommonCultureJpaEntity commonCultureJpaEntityC = CommonCultureJpaEntity.builder() + .lectureJpaEntity(lectureJpaEntityC) + .commonCultureCategory(ENGLISH) + .startEntryYear(16) + .endEntryYear(99).build(); + commonCultureRepository.saveAll( + List.of(commonCultureJpaEntityA, commonCultureJpaEntityB, commonCultureJpaEntityC)); } } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/CommonCultureRepositoryTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/CommonCultureRepositoryTest.java index 342f0fee..dd9f3668 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/CommonCultureRepositoryTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/repository/CommonCultureRepositoryTest.java @@ -1,6 +1,6 @@ package com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; import java.util.List; import java.util.stream.Collectors; @@ -12,12 +12,11 @@ import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.CommonCultureJpaEntity; import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.LectureJpaEntity; -import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.CommonCultureRepository; -import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.LectureRepository; import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport; class CommonCultureRepositoryTest extends PersistenceTestSupport { + private static final String BASIC_ENGLISH_CODE = "KMP02126"; private static final String ENGLISH1_CODE = "KMA02106"; private static final String ENGLISH2_CODE = "KMA02107"; private static final String ENGLISH_CONVERSATION1_CODE = "KMA02108"; @@ -27,12 +26,37 @@ class CommonCultureRepositoryTest extends PersistenceTestSupport { private static final String ENGLISH_CONVERSATION3_CODE = "KMA02125"; private static final String ENGLISH_CONVERSATION4_CODE = "KMA02126"; - @Autowired private LectureRepository lectureRepository; @Autowired private CommonCultureRepository commonCultureRepository; + @DisplayName("BASIC ENG: 유저의 입학년도가 적용 시작 년도, 적용 마감 년도 사이에 속하는 공통 교양 과목을 조회한다.") + @ParameterizedTest + @ValueSource(ints = {16, 18, 20, 23}) + void findEngBasicAllByEntryYear(int entryYear) { + //given + saveEnglishLectures(); + + //when + List commonCultureGraduationLectures = commonCultureRepository.findEngBasicGraduationCommonCulturesByEntryYear( + entryYear); + + //then + assertThat(commonCultureGraduationLectures).hasSize(5) + .extracting("startEntryYear") + .contains(entryYear); + + List lectureCodes = commonCultureGraduationLectures.stream() + .map(commonCultureJpaEntity -> commonCultureJpaEntity.getLectureJpaEntity().getLectureCode()) + .collect(Collectors.toList()); + assertThat(lectureCodes).contains(BASIC_ENGLISH_CODE); + assertThat(lectureCodes).doesNotContain(ENGLISH3_CODE); + assertThat(lectureCodes).doesNotContain(ENGLISH4_CODE); + assertThat(lectureCodes).doesNotContain(ENGLISH_CONVERSATION3_CODE); + assertThat(lectureCodes).doesNotContain(ENGLISH_CONVERSATION4_CODE); + } + @DisplayName("ENG12: 유저의 입학년도가 적용 시작 년도, 적용 마감 년도 사이에 속하는 공통 교양 과목을 조회한다.") @ParameterizedTest @ValueSource(ints = {16, 18, 20, 23}) @@ -52,6 +76,7 @@ void findEng12AllByEntryYear(int entryYears) { List lectureCodes = commonCultureGraduationLectures.stream() .map(commonCultureJpaEntity -> commonCultureJpaEntity.getLectureJpaEntity().getLectureCode()) .collect(Collectors.toList()); + assertThat(lectureCodes).doesNotContain(BASIC_ENGLISH_CODE); assertThat(lectureCodes).doesNotContain(ENGLISH3_CODE); assertThat(lectureCodes).doesNotContain(ENGLISH4_CODE); assertThat(lectureCodes).doesNotContain(ENGLISH_CONVERSATION3_CODE); @@ -77,6 +102,7 @@ void findEng34AllAllByEntryYear(int entryYears) { List lectureCodes = commonCultureGraduationLectures.stream() .map(commonCultureJpaEntity -> commonCultureJpaEntity.getLectureJpaEntity().getLectureCode()) .collect(Collectors.toList()); + assertThat(lectureCodes).doesNotContain(BASIC_ENGLISH_CODE); assertThat(lectureCodes).doesNotContain(ENGLISH1_CODE); assertThat(lectureCodes).doesNotContain(ENGLISH2_CODE); assertThat(lectureCodes).doesNotContain(ENGLISH_CONVERSATION1_CODE); @@ -99,6 +125,9 @@ void findEngFreeAllAllByEntryYear(int entryYears) { } private void saveEnglishLectures() { + LectureJpaEntity 기초영어 = LectureJpaEntity.builder() + .lectureCode(BASIC_ENGLISH_CODE) + .build(); LectureJpaEntity 영어1 = LectureJpaEntity.builder() .lectureCode(ENGLISH1_CODE) .build(); @@ -123,7 +152,7 @@ private void saveEnglishLectures() { LectureJpaEntity 영어회화4 = LectureJpaEntity.builder() .lectureCode(ENGLISH_CONVERSATION4_CODE) .build(); - List englishLectures = List.of(영어1, 영어2, 영어3, 영어4, 영어회화1, 영어회화2, 영어회화3, 영어회화4); + List englishLectures = List.of(기초영어, 영어1, 영어2, 영어3, 영어4, 영어회화1, 영어회화2, 영어회화3, 영어회화4); lectureRepository.saveAll(englishLectures); for (LectureJpaEntity englishLecture : englishLectures) { diff --git a/src/test/resources/lecture.csv b/src/test/resources/lecture.csv index ac9ac9bf..4942d212 100644 --- a/src/test/resources/lecture.csv +++ b/src/test/resources/lecture.csv @@ -199,3 +199,4 @@ HAI01564, 동양철학개론, 3, 0, HAI01564 HAI01565, 철학적글쓰기, 3, 0, HAI01565 HAI01348, 신유학의이해, 3, 0, null HAI01247, 유학사상의이해, 3, 0, null +KMP02126, 기초영어, 2, 0, null From ed4acc4bf32c8378514f17f31de19c39f9698ba1 Mon Sep 17 00:00:00 2001 From: 5uhwann <106325839+5uhwann@users.noreply.github.com> Date: Fri, 19 Jul 2024 21:39:01 +0900 Subject: [PATCH 27/27] =?UTF-8?q?[DEV-32]=20=EC=BB=A4=EC=8A=A4=ED=85=80=20?= =?UTF-8?q?=EC=97=90=EB=9F=AC=EC=BD=94=EB=93=9C=20=EC=A0=81=EC=9A=A9=20(#2?= =?UTF-8?q?81)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: custom errorCode 정의 * feat: ExceptionResponse 스펙 수정 * refactor: ErrorCode 추가 및 적용 * refactor: Auth - 로그인 요청 custom errorCode 적용 * refactor: 수강과목 등록 - pdf parsing text custom errorCode 적용 * feat: StudentCategory - 학생 이수구분 카테고리에 졸업 카테고리가 포함 여부 검증 로직 추가 * feat: 유저아이디 찾기 커스텀 에러코드 적용 * feat: 유저검증 커스텀 에러코드 적용 * feat: 비밀번호 재설정 커스텀 에러코드 적용 * feat: 아이디 중복 체크 커스텀 에러코드 적용 * feat: 학번 중복 체크정 커스텀 에러코드 적용 * feat: 회원 탈퇴 커스텀 에러코드 적용 * feat: 회원가입 요청 커스텀 에러코드 적용 * refactor: GlobalExceptionHandler response 스펙 수정 * refactor: 불필요 import 제거 --- .../api/signin/dto/request/SignInRequest.java | 2 +- .../auth/security/JwtAccessDeniedHandler.java | 7 +- .../security/JwtAuthenticationEntryPoint.java | 9 +- .../security/JwtAuthenticationProvider.java | 6 +- .../core/exception/ErrorCode.java | 25 +++++ .../core/exception/ExceptionResponse.java | 20 +--- .../exception/GlobalExceptionHandler.java | 24 ++--- ...alculateSingleDetailGraduationService.java | 1 + .../service/ParsingTextService.java | 6 +- ...aveTakenLectureFromParsingTextService.java | 19 ++-- .../findauthid/FindAuthIdApiPresentation.java | 5 +- .../api/findauthid/FindAuthIdController.java | 9 +- .../ResetPasswordApiPresentation.java | 3 +- .../ResetPasswordController.java | 7 +- .../dto/request/ResetPasswordRequest.java | 4 +- .../api/signup/SignUpApiPresentation.java | 7 +- .../user/api/signup/SignUpController.java | 9 +- .../api/signup/dto/request/SignUpRequest.java | 6 +- .../service/find/FindUserService.java | 7 +- .../resetpassword/ResetPasswordService.java | 3 +- .../service/signup/SignUpService.java | 9 +- .../service/withdraw/WithDrawUserService.java | 5 +- .../user/domain/model/StudentCategory.java | 38 ++++++-- .../user/domain/model/User.java | 12 +-- .../auth/api/signin/SignInControllerTest.java | 7 +- .../auth/api/token/TokenControllerTest.java | 2 +- .../FindDetailGraduationsControllerTest.java | 4 +- ...lateSingleDetailGraduationServiceTest.java | 93 ++++++++++++++++++- .../api/SearchLectureControllerTest.java | 2 +- .../api/ParsingTextControllerTest.java | 3 +- .../service/ParsingTextServiceTest.java | 3 +- ...akenLectureFromParsingTextServiceTest.java | 3 +- .../findauthid/FindAuthIdControllerTest.java | 6 +- .../ResetPasswordControllerTest.java | 7 +- .../user/api/signup/SignUpControllerTest.java | 11 +-- .../service/find/FindUserServiceTest.java | 8 +- .../ResetPasswordServiceTest.java | 3 +- .../service/signup/SignUpServiceTest.java | 21 +++-- .../withdraw/WithDrawUserServiceTest.java | 3 +- .../domain/model/StudentCategoryTest.java | 32 +++++++ .../user/domain/model/UserTest.java | 10 +- 41 files changed, 335 insertions(+), 126 deletions(-) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/core/exception/ErrorCode.java create mode 100644 src/test/java/com/plzgraduate/myongjigraduatebe/user/domain/model/StudentCategoryTest.java diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/dto/request/SignInRequest.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/dto/request/SignInRequest.java index 5f597428..73ac31b8 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/dto/request/SignInRequest.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/dto/request/SignInRequest.java @@ -11,7 +11,7 @@ @NoArgsConstructor public class SignInRequest { - @NotBlank(message = "아아디를 입력해주세요.") + @NotBlank(message = "아이디를 입력해주세요.") @Schema(name = "authId", example = "plzgraduate") private String authId; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/security/JwtAccessDeniedHandler.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/security/JwtAccessDeniedHandler.java index 58e66399..d34a1190 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/security/JwtAccessDeniedHandler.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/security/JwtAccessDeniedHandler.java @@ -1,5 +1,7 @@ package com.plzgraduate.myongjigraduatebe.auth.security; +import static com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode.*; + import java.io.IOException; import javax.servlet.ServletException; @@ -12,6 +14,7 @@ import org.springframework.stereotype.Component; import com.fasterxml.jackson.databind.ObjectMapper; +import com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode; import com.plzgraduate.myongjigraduatebe.core.exception.ExceptionResponse; import lombok.RequiredArgsConstructor; @@ -20,13 +23,13 @@ @RequiredArgsConstructor public class JwtAccessDeniedHandler implements AccessDeniedHandler { - private static final ExceptionResponse E403 = ExceptionResponse.of(HttpStatus.FORBIDDEN, "Authentication error (cause: forbidden)"); + private static final ExceptionResponse E403 = ExceptionResponse.from(AUTHENTICATION_FAIL_FORBIDDEN.toString()); private final ObjectMapper om; @Override public void handle(HttpServletRequest request, HttpServletResponse response, - AccessDeniedException accessDeniedException) throws IOException, ServletException { + AccessDeniedException accessDeniedException) throws IOException { response.setStatus(HttpServletResponse.SC_FORBIDDEN); response.setHeader("content-type", "application/json"); response.getWriter().write(om.writeValueAsString(E403)); diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/security/JwtAuthenticationEntryPoint.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/security/JwtAuthenticationEntryPoint.java index 1eb3ffde..b42ed4a6 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/security/JwtAuthenticationEntryPoint.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/security/JwtAuthenticationEntryPoint.java @@ -1,5 +1,7 @@ package com.plzgraduate.myongjigraduatebe.auth.security; +import static com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode.*; + import java.io.IOException; import javax.servlet.ServletException; @@ -12,20 +14,21 @@ import org.springframework.stereotype.Component; import com.fasterxml.jackson.databind.ObjectMapper; +import com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode; import com.plzgraduate.myongjigraduatebe.core.exception.ExceptionResponse; import lombok.RequiredArgsConstructor; @Component @RequiredArgsConstructor -public class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint{ - private static final ExceptionResponse E401 = ExceptionResponse.of(HttpStatus.UNAUTHORIZED, "Authentication error (cause: unauthorized)"); +public class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint { + private static final ExceptionResponse E401 = ExceptionResponse.from(AUTHENTICATION_FAIL_UNAUTHORIZED.toString()); private final ObjectMapper om; @Override public void commence(HttpServletRequest request, HttpServletResponse response, - AuthenticationException authException) throws IOException, ServletException { + AuthenticationException authException) throws IOException { response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); response.setHeader("content-type", "application/json"); response.getWriter().write(om.writeValueAsString(E401)); diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/security/JwtAuthenticationProvider.java b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/security/JwtAuthenticationProvider.java index b0a713e0..6fba9d33 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/auth/security/JwtAuthenticationProvider.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/auth/security/JwtAuthenticationProvider.java @@ -1,5 +1,6 @@ package com.plzgraduate.myongjigraduatebe.auth.security; +import static com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode.*; import static org.hibernate.validator.internal.util.TypeHelper.isAssignable; import java.util.Collections; @@ -10,6 +11,7 @@ import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.crypto.password.PasswordEncoder; +import com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode; import com.plzgraduate.myongjigraduatebe.core.exception.UnAuthorizedException; import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @@ -35,14 +37,14 @@ public Authentication authenticate(Authentication authentication) throws Authent } private Authentication processAuthentication(JwtAuthenticationToken authenticationToken) { + User user = findUserUseCase.findUserByAuthId(String.valueOf(authenticationToken.getPrincipal())); try { - User user = findUserUseCase.findUserByAuthId(String.valueOf(authenticationToken.getPrincipal())); user.matchPassword(passwordEncoder, String.valueOf(authenticationToken.getCredentials())); return new JwtAuthenticationToken( user.getId(), null, Collections.singleton(new SimpleGrantedAuthority("ROLE_USER")) ); } catch (IllegalArgumentException e) { - throw new UnAuthorizedException("아이디 혹은 비밀번호가 일치하지 않습니다."); + throw new UnAuthorizedException(INCORRECT_PASSWORD.toString()); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/core/exception/ErrorCode.java b/src/main/java/com/plzgraduate/myongjigraduatebe/core/exception/ErrorCode.java new file mode 100644 index 00000000..22b65096 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/core/exception/ErrorCode.java @@ -0,0 +1,25 @@ +package com.plzgraduate.myongjigraduatebe.core.exception; + +public enum ErrorCode { + + INTERNAL_SEVER_ERROR, + INVALIDATED_GRADUATION_CATEGORY, + UNFITTED_GRADUATION_CATEGORY, + UNREGISTERED_USER, + INVALIDATED_STUDENT_NUMBER_TYPE, + INVALIDATED_PASSWORD_TYPE, + MISMATCHED_PASSWORD, + NOT_FOUND_AUTHID, + INVALIDATED_AUTHID_TYPE, + INCORRECT_PASSWORD, + DUPLICATED_STUDENT_NUMBER, + DUPLICATED_AUTHID, + NOT_FOUND_STUDENT_NUMBER, + INVALIDATED_AUTH_TOKEN, + INCORRECT_STUDENT_NUMBER, + NON_EXISTED_LECTURE, + UNSUPPORTED_STUDENT_CATEGORY, + UNSUPPORTED_STUDENT_NUMBER, + AUTHENTICATION_FAIL_FORBIDDEN, + AUTHENTICATION_FAIL_UNAUTHORIZED +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/core/exception/ExceptionResponse.java b/src/main/java/com/plzgraduate/myongjigraduatebe/core/exception/ExceptionResponse.java index beaa5c6d..1e9d09b1 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/core/exception/ExceptionResponse.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/core/exception/ExceptionResponse.java @@ -1,27 +1,17 @@ package com.plzgraduate.myongjigraduatebe.core.exception; -import org.springframework.http.HttpStatus; - import lombok.Getter; @Getter public class ExceptionResponse { - private final int status; - private final String message; + private final String errorCode; - private ExceptionResponse( - int status, - String message - ) { - this.status = status; - this.message = message; + private ExceptionResponse(String errorCode) { + this.errorCode = errorCode; } - public static ExceptionResponse of( - HttpStatus httpStatus, - String message - ) { - return new ExceptionResponse(httpStatus.value(), message); + public static ExceptionResponse from(String errorCode) { + return new ExceptionResponse(errorCode); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/core/exception/GlobalExceptionHandler.java b/src/main/java/com/plzgraduate/myongjigraduatebe/core/exception/GlobalExceptionHandler.java index 270a8eaf..c178fef9 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/core/exception/GlobalExceptionHandler.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/core/exception/GlobalExceptionHandler.java @@ -31,62 +31,56 @@ public class GlobalExceptionHandler { @ResponseStatus(HttpStatus.BAD_REQUEST) public ExceptionResponse handleBadRequestException(Exception e) { log.debug("Bad request exception occurred: {}", e.getMessage(), e); - return ExceptionResponse.of(HttpStatus.BAD_REQUEST, getMessage(e)); + return ExceptionResponse.from(e.getMessage()); } @ExceptionHandler(NoSuchElementException.class) @ResponseStatus(HttpStatus.NOT_FOUND) public ExceptionResponse handleNotFoundException(Exception e) { log.debug("Not Found exception occurred: {}", e.getMessage(), e); - return ExceptionResponse.of(HttpStatus.NOT_FOUND, getMessage(e)); + return ExceptionResponse.from(e.getMessage()); } @ExceptionHandler(UnAuthorizedException.class) @ResponseStatus(HttpStatus.UNAUTHORIZED) public ExceptionResponse handleUnAuthorizedException(Exception e) { log.debug("unauthorized exception occurred: {}", e.getMessage(), e); - return ExceptionResponse.of(HttpStatus.UNAUTHORIZED, getMessage(e)); + return ExceptionResponse.from(e.getMessage()); } @ExceptionHandler(ConstraintViolationException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) public ExceptionResponse handleValidationException(ConstraintViolationException e) { log.info("validated exception occurred: {}", e.getMessage(), e); - return ExceptionResponse.of(HttpStatus.BAD_REQUEST, getViolationErrorMessage(e)); + return ExceptionResponse.from(getViolationErrorMessage(e)); } - - @ExceptionHandler(MethodArgumentNotValidException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) public ExceptionResponse handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { log.debug("validation exception occurred: {}", e.getMessage(), e); - return ExceptionResponse.of(HttpStatus.BAD_REQUEST, getBindingErrorMessage(e)); + return ExceptionResponse.from(getBindingErrorMessage(e)); } @ExceptionHandler(MethodArgumentTypeMismatchException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) public ExceptionResponse handleMethodArgumentTypeMismatchException(MethodArgumentTypeMismatchException e) { - log.debug("graduation category mismatch exception occurred: {}", e.getMessage(), e); - return ExceptionResponse.of(HttpStatus.BAD_REQUEST, getMethodArgumentTypeMismatchErrorMessage(e)); + log.debug("graduation category mismatch exception occurred: {}", getMethodArgumentTypeMismatchErrorMessage(e)); + return ExceptionResponse.from(ErrorCode.INVALIDATED_GRADUATION_CATEGORY.toString()); } @ExceptionHandler({PdfParsingException.class, InvalidPdfException.class}) @ResponseStatus(HttpStatus.BAD_REQUEST) public ExceptionResponse handlePdfException(Exception e) { log.warn("pdf exception occurred: {}", e.getMessage(), e); - return ExceptionResponse.of(HttpStatus.BAD_REQUEST, getMessage(e)); + return ExceptionResponse.from(e.getMessage()); } @ExceptionHandler({RuntimeException.class, Exception.class}) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) public ExceptionResponse handleRuntimeException(RuntimeException e) { log.error("Unexpected exception occurred: {}", e.getMessage(), e); - return ExceptionResponse.of(HttpStatus.INTERNAL_SERVER_ERROR, getMessage(e)); - } - - private String getMessage(Exception e) { - return Optional.ofNullable(e.getCause()).map(Throwable::getMessage).orElse(e.getMessage()); + return ExceptionResponse.from(ErrorCode.INTERNAL_SEVER_ERROR.toString()); } private String getViolationErrorMessage(ConstraintViolationException e) { diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationService.java index ea4fb083..cc976fb9 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationService.java @@ -31,6 +31,7 @@ public class CalculateSingleDetailGraduationService implements CalculateSingleDe @Override public DetailGraduationResult calculateSingleDetailGraduation(Long userId, GraduationCategory graduationCategory) { User user = findUserUseCase.findUserById(userId); + user.getStudentCategory().validateGraduationCategoryInclusion(graduationCategory); TakenLectureInventory takenLectures = findTakenLectureUseCase.findTakenLectures(userId); CalculateDetailGraduationUseCase calculateDetailGraduationUseCase = determineCalculateDetailGraduationUseCase( graduationCategory); 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 0c5e26bc..6b1fa30b 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,5 +1,6 @@ package com.plzgraduate.myongjigraduatebe.parsing.application.service; +import static com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode.*; import static com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory.ASSOCIATED_MAJOR; import static com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory.DOUBLE_SUB; @@ -9,6 +10,7 @@ import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.completedcredit.application.usecase.GenerateOrModifyCompletedCreditUseCase; +import com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode; import com.plzgraduate.myongjigraduatebe.core.exception.InvalidPdfException; import com.plzgraduate.myongjigraduatebe.core.exception.PdfParsingException; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; @@ -81,7 +83,7 @@ private void validateParsingText(String parsingText) { private void validateStudentNumber(User user, ParsingInformation parsingInformation) { if (!user.compareStudentNumber(parsingInformation.getStudentNumber())) { - throw new InvalidPdfException("본인의 학번과 PDF 학번이 일치하지 않습니다."); + throw new InvalidPdfException(INCORRECT_STUDENT_NUMBER.toString()); } } @@ -100,7 +102,7 @@ private List getSaveTakenLectureCommand( private void checkUnSupportedUser(ParsingInformation parsingInformation) { if (parsingInformation.getStudentCategory() == ASSOCIATED_MAJOR || parsingInformation.getStudentCategory() == DOUBLE_SUB) { - throw new IllegalArgumentException("연계전공, 복수+부전공은 참여가 어렵습니다. 빠른 시일 내에 업데이트하도록 하겠습니다."); + throw new IllegalArgumentException(ErrorCode.UNSUPPORTED_STUDENT_CATEGORY.toString()); } } 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 b4456c5e..e41532ed 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 @@ -8,6 +8,7 @@ import org.springframework.transaction.annotation.Transactional; +import com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; import com.plzgraduate.myongjigraduatebe.lecture.application.usecase.FindLecturesUseCase; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; @@ -18,10 +19,12 @@ import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; @UseCase @Transactional @RequiredArgsConstructor +@Slf4j class SaveTakenLectureFromParsingTextService implements SaveTakenLectureFromParsingTextUseCase { private final SaveTakenLecturePort saveTakenLecturePort; @@ -38,18 +41,20 @@ private List makeTakenLectures(User user, List lectureMap) { return takenLectureInformationList.stream() .map(takenLectureInformation -> { - Lecture lecture = getLectureFromLectureMap(lectureMap, takenLectureInformation); - return TakenLecture.of(user, lecture, takenLectureInformation.getYear(), - takenLectureInformation.getSemester()); - } - ).collect(Collectors.toList()); + Lecture lecture = getLectureFromLectureMap(lectureMap, takenLectureInformation); + return TakenLecture.of(user, lecture, takenLectureInformation.getYear(), + takenLectureInformation.getSemester()); + } + ).collect(Collectors.toList()); } private Lecture getLectureFromLectureMap(Map lectureMap, TakenLectureInformation takenLectureInformation) { return Optional.ofNullable(lectureMap.get(takenLectureInformation.getLectureCode())) - .orElseThrow( - () -> new IllegalArgumentException(takenLectureInformation.getLectureCode() + "이 데이터베이스에 존재하지 않습니다.")); + .orElseThrow(() -> { + log.warn("Not Found Lecture in Database: {}", takenLectureInformation.getLectureCode()); + return new IllegalArgumentException(ErrorCode.NON_EXISTED_LECTURE.toString()); + }); } private Map makeLectureMapByLectureCodes( diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdApiPresentation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdApiPresentation.java index fd8e89a0..35a43988 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdApiPresentation.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdApiPresentation.java @@ -1,5 +1,8 @@ package com.plzgraduate.myongjigraduatebe.user.api.findauthid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Pattern; + import org.springframework.web.bind.annotation.PathVariable; import com.plzgraduate.myongjigraduatebe.user.api.findauthid.dto.response.UserAuthIdResponse; @@ -12,5 +15,5 @@ public interface FindAuthIdApiPresentation { UserAuthIdResponse findUserAuthId( - @Parameter(name = "studentNumber", description = "학번", in = ParameterIn.PATH) @PathVariable String studentNumber); + @Parameter(name = "studentNumber", description = "학번", in = ParameterIn.PATH) @PathVariable @Pattern(regexp = "^60\\d{6}$", message = "INVALIDATED_STUDENT_NUMBER_TYPE") String studentNumber); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdController.java index 423d8253..bda63075 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdController.java @@ -1,24 +1,29 @@ package com.plzgraduate.myongjigraduatebe.user.api.findauthid; +import javax.validation.constraints.Pattern; + +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import com.plzgraduate.myongjigraduatebe.core.meta.WebAdapter; -import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserAuthIdUseCase; import com.plzgraduate.myongjigraduatebe.user.api.findauthid.dto.response.UserAuthIdResponse; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserAuthIdUseCase; import lombok.RequiredArgsConstructor; @WebAdapter @RequestMapping("/api/v1/users") @RequiredArgsConstructor +@Validated public class FindAuthIdController implements FindAuthIdApiPresentation { private final FindUserAuthIdUseCase findUserAuthIdUseCase; @GetMapping("/{studentNumber}/auth-id") - public UserAuthIdResponse findUserAuthId(@PathVariable String studentNumber) { + public UserAuthIdResponse findUserAuthId( + @PathVariable @Pattern(regexp = "^60\\d{6}$", message = "INVALIDATED_STUDENT_NUMBER_TYPE") String studentNumber) { String foundUserAuthId = findUserAuthIdUseCase.findUserAuthId(studentNumber); return UserAuthIdResponse.of(foundUserAuthId, studentNumber); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordApiPresentation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordApiPresentation.java index 888a50bf..9ae3b03c 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordApiPresentation.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordApiPresentation.java @@ -1,6 +1,7 @@ package com.plzgraduate.myongjigraduatebe.user.api.resetpassword; import javax.validation.Valid; +import javax.validation.constraints.Pattern; import org.springframework.web.bind.annotation.PatchMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -22,7 +23,7 @@ public interface ResetPasswordApiPresentation { @Parameter(name = "auth-id", description = "아이디") ValidateUserResponse validateUser( @Parameter(name = "studentNumber", description = "학번", in = ParameterIn.PATH) - @PathVariable String studentNumber, + @PathVariable @Pattern(regexp = "^60\\d{6}$", message = "INVALIDATED_STUDENT_NUMBER_TYPE") String studentNumber, @RequestParam("auth-id") String authId); @PatchMapping("/password") diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordController.java index 83fd7f33..ebacbe8e 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordController.java @@ -1,7 +1,9 @@ package com.plzgraduate.myongjigraduatebe.user.api.resetpassword; import javax.validation.Valid; +import javax.validation.constraints.Pattern; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PatchMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -11,8 +13,8 @@ import com.plzgraduate.myongjigraduatebe.core.meta.WebAdapter; import com.plzgraduate.myongjigraduatebe.user.api.resetpassword.dto.request.ResetPasswordRequest; -import com.plzgraduate.myongjigraduatebe.user.application.usecase.resetpassword.ResetPasswordUseCase; import com.plzgraduate.myongjigraduatebe.user.api.resetpassword.dto.response.ValidateUserResponse; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.resetpassword.ResetPasswordUseCase; import com.plzgraduate.myongjigraduatebe.user.application.usecase.validate.ValidateUserUseCase; import lombok.RequiredArgsConstructor; @@ -20,6 +22,7 @@ @WebAdapter @RequestMapping("api/v1/users") @RequiredArgsConstructor +@Validated public class ResetPasswordController implements ResetPasswordApiPresentation { private final ValidateUserUseCase validateUserUseCase; @@ -27,7 +30,7 @@ public class ResetPasswordController implements ResetPasswordApiPresentation { @GetMapping("/{studentNumber}/validate") public ValidateUserResponse validateUser( - @PathVariable String studentNumber, + @PathVariable @Pattern(regexp = "^60\\d{6}$", message = "INVALIDATED_STUDENT_NUMBER_TYPE") String studentNumber, @RequestParam("auth-id") String authId) { boolean validated = validateUserUseCase.validateUser(studentNumber, authId); return ValidateUserResponse.builder().passedUserValidation(validated).build(); diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/dto/request/ResetPasswordRequest.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/dto/request/ResetPasswordRequest.java index 957eafb9..aac51d16 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/dto/request/ResetPasswordRequest.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/dto/request/ResetPasswordRequest.java @@ -17,12 +17,12 @@ public class ResetPasswordRequest { private String authId; @NotBlank(message = "비밀번호를 입력해주세요.") - @Pattern(regexp = "^(?=.*[!@#$%^&*])(?=.*[a-zA-Z0-9]).{8,20}$", message = "비밀번호는 특수문자를 포함한 8자에서 20자 사이여야합니다.") + @Pattern(regexp = "^(?=.*[!@#$%^&*])(?=.*[a-zA-Z0-9]).{8,20}$", message = "INVALIDATED_PASSWORD_TYPE") @Schema(name = "newPassword", example = "Plz1231343!?") private String newPassword; @NotBlank(message = "비밀번호 확인을 입력해주세요.") - @Pattern(regexp = "^(?=.*[!@#$%^&*])(?=.*[a-zA-Z0-9]).{8,20}$", message = "비밀번호는 특수문자를 포함한 8자에서 20자 사이여야합니다.") + @Pattern(regexp = "^(?=.*[!@#$%^&*])(?=.*[a-zA-Z0-9]).{8,20}$", message = "INVALIDATED_PASSWORD_TYPE") @Schema(name = "passwordCheck", example = "Plz1231343!?") private String passwordCheck; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpApiPresentation.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpApiPresentation.java index ede116ee..e6b84116 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpApiPresentation.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpApiPresentation.java @@ -1,6 +1,8 @@ package com.plzgraduate.myongjigraduatebe.user.api.signup; import javax.validation.Valid; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; @@ -21,10 +23,11 @@ public interface SignUpApiPresentation { @Operation(description = "로그인 아이디 중복 여부를 체크한다.") @Parameter(name = "auth-id", description = "아이디") - AuthIdDuplicationResponse checkAuthIdDuplication(@RequestParam("auth-id") String authId); + AuthIdDuplicationResponse checkAuthIdDuplication( + @RequestParam("auth-id") @Size(min = 6, max = 20, message = "INVALIDATED_AUTHID_TYPE") String authId); @Operation(description = "학번 중복 여부를 체크한다.") @Parameter(name = "student-number", description = "학번") StudentNumberDuplicationResponse checkStudentNumberDuplication( - @RequestParam("student-number") String studentNumber); + @RequestParam("student-number") @Pattern(regexp = "^60\\d{6}$", message = "INVALIDATED_STUDENT_NUMBER_TYPE") String studentNumber); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpController.java index 66c2b8cf..7280ffe8 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpController.java @@ -1,7 +1,10 @@ package com.plzgraduate.myongjigraduatebe.user.api.signup; import javax.validation.Valid; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -21,6 +24,7 @@ @WebAdapter @RequestMapping("/api/v1/users") @RequiredArgsConstructor +@Validated public class SignUpController implements SignUpApiPresentation { private final SignUpUseCase signUpUseCase; @@ -33,13 +37,14 @@ public void signUp(@Valid @RequestBody SignUpRequest signUpRequest) { } @GetMapping("/sign-up/check-duplicate-auth-id") - public AuthIdDuplicationResponse checkAuthIdDuplication(@RequestParam("auth-id") String authId) { + public AuthIdDuplicationResponse checkAuthIdDuplication( + @RequestParam("auth-id") @Size(min = 6, max = 20, message = "INVALIDATED_AUTHID_TYPE") String authId) { return checkAuthIdDuplicationUseCase.checkAuthIdDuplication(authId); } @GetMapping("/sign-up/check-duplicate-student-number") public StudentNumberDuplicationResponse checkStudentNumberDuplication( - @RequestParam("student-number") String studentNumber) { + @RequestParam("student-number") @Pattern(regexp = "^60\\d{6}$", message = "INVALIDATED_STUDENT_NUMBER_TYPE") String studentNumber) { return checkStudentNumberDuplicationUseCase.checkStudentNumberDuplication(studentNumber); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/dto/request/SignUpRequest.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/dto/request/SignUpRequest.java index e7943142..fad85c66 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/dto/request/SignUpRequest.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/api/signup/dto/request/SignUpRequest.java @@ -17,17 +17,17 @@ public class SignUpRequest { @NotBlank(message = "아이디를 입력해주세요.") - @Size(min = 6, max = 20, message = "아이디는 6자에서 20자 사이여야합니다.") + @Size(min = 6, max = 20, message = "INVALIDATED_AUTHID_TYPE") @Schema(name = "authId", example = "plzgraduate") private String authId; @NotBlank(message = "비밀번호를 입력해주세요.") - @Pattern(regexp = "^(?=.*[!@#$%^&*])(?=.*[a-zA-Z0-9]).{8,20}$", message = "비밀번호는 특수문자를 포함한 8자에서 20자 사이여야합니다.") + @Pattern(regexp = "^(?=.*[!@#$%^&*])(?=.*[a-zA-Z0-9]).{8,20}$", message = "INVALIDATED_PASSWORD_TYPE") @Schema(name = "password", example = "Plz1231343!") private String password; @NotBlank(message = "비밀번호를 입력해주세요.") - @Pattern(regexp = "\\d{8}", message = "학번은 8자리 숫자여야 합니다.") + @Pattern(regexp = "\\d{8}", message = "INVALIDATED_STUDENT_NUMBER_TYPE") @Schema(name = "studentNumber", example = "60202000") private String studentNumber; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserService.java index 1fed0c55..63736e5d 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserService.java @@ -1,7 +1,10 @@ package com.plzgraduate.myongjigraduatebe.user.application.service.find; +import static com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode.*; + import org.springframework.transaction.annotation.Transactional; +import com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; import com.plzgraduate.myongjigraduatebe.user.application.port.FindUserPort; @@ -26,13 +29,13 @@ public User findUserById(Long id) { @Override public User findUserByAuthId(String authId) { return findUserPort.findUserByAuthId(authId) - .orElseThrow(() -> new IllegalArgumentException(NOT_FOUND_USER_ERROR_MESSAGE)); + .orElseThrow(() -> new IllegalArgumentException(NOT_FOUND_AUTHID.toString())); } @Override public User findUserByStudentNumber(String studentNumber) { return findUserPort.findUserByStudentNumber(studentNumber) - .orElseThrow(() -> new IllegalArgumentException(NOT_FOUND_USER_ERROR_MESSAGE)); + .orElseThrow(() -> new IllegalArgumentException(UNREGISTERED_USER.toString())); } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/resetpassword/ResetPasswordService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/resetpassword/ResetPasswordService.java index 4c305487..7c3dbc71 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/resetpassword/ResetPasswordService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/resetpassword/ResetPasswordService.java @@ -3,6 +3,7 @@ import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.transaction.annotation.Transactional; +import com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; import com.plzgraduate.myongjigraduatebe.user.application.port.UpdateUserPort; import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; @@ -30,7 +31,7 @@ public void resetPassword(String authId, String newPassword, String passwordChec private void checkMatchPassword(String newPassword,String passwordCheck) { if (!newPassword.equals(passwordCheck)) { - throw new IllegalArgumentException("비밀번호와 비밀번호 확인이 일치하지 않습니다."); + throw new IllegalArgumentException(ErrorCode.MISMATCHED_PASSWORD.toString()); } } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/signup/SignUpService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/signup/SignUpService.java index ee9b4427..f96e0f17 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/signup/SignUpService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/signup/SignUpService.java @@ -1,8 +1,11 @@ package com.plzgraduate.myongjigraduatebe.user.application.service.signup; +import static com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode.*; + import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.transaction.annotation.Transactional; +import com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; import com.plzgraduate.myongjigraduatebe.user.application.usecase.signup.SignUpUseCase; import com.plzgraduate.myongjigraduatebe.user.application.usecase.signup.SignUpCommand; @@ -35,16 +38,16 @@ public void signUp(SignUpCommand signUpCommand) { private void checkStudentNumberOver16(User user) { if(user.checkBeforeEntryYear(CLASS_OF_2016)) { - throw new IllegalArgumentException("서비스 이용대상자는 16~23학번까지입니다."); + throw new IllegalArgumentException(UNSUPPORTED_STUDENT_NUMBER.toString()); } } private void checkDuplicateUser(SignUpCommand signUpCommand) { if(checkUserPort.checkDuplicateAuthId(signUpCommand.getAuthId())) { - throw new IllegalArgumentException("이미 존재하는 아이디입니다."); + throw new IllegalArgumentException(DUPLICATED_AUTHID.toString()); } if(checkUserPort.checkDuplicateStudentNumber(signUpCommand.getStudentNumber())) { - throw new IllegalArgumentException("이미 존재하는 학번입니다."); + throw new IllegalArgumentException(DUPLICATED_STUDENT_NUMBER.toString()); } } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserService.java index 3b809c55..09430edb 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserService.java @@ -4,6 +4,7 @@ import org.springframework.transaction.annotation.Transactional; import com.plzgraduate.myongjigraduatebe.completedcredit.application.port.DeleteCompletedCreditPort; +import com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode; import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; import com.plzgraduate.myongjigraduatebe.parsing.application.port.DeleteParsingTextHistoryPort; import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.delete.DeleteTakenLectureUseCase; @@ -29,7 +30,9 @@ class WithDrawUserService implements WithDrawUserUseCase { @Override public void withDraw(Long userId, String password) { User user = findUserUseCase.findUserById(userId); - user.matchPassword(passwordEncoder, password); + if(!user.matchPassword(passwordEncoder, password)){ + throw new IllegalArgumentException(ErrorCode.INCORRECT_PASSWORD.toString()); + } deleteTakenLectureByUserUseCase.deleteAllTakenLecturesByUser(user); deleteParsingTextHistoryPort.deleteUserParsingTextHistory(user); deleteCompletedCreditPort.deleteAllCompletedCredits(user); 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 11c35874..7e6f048e 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 @@ -1,10 +1,14 @@ package com.plzgraduate.myongjigraduatebe.user.domain.model; +import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.*; + import java.util.Arrays; import java.util.List; import java.util.Objects; +import com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode; import com.plzgraduate.myongjigraduatebe.core.exception.PdfParsingException; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -12,14 +16,30 @@ @Getter @RequiredArgsConstructor public enum StudentCategory { - NORMAL(List.of()), - CHANGE_MAJOR(List.of("전과")), - SUB_MAJOR(List.of("부전공")), - DUAL_MAJOR(List.of("복수전공")), - ASSOCIATED_MAJOR(List.of("연계전공")), - DOUBLE_SUB(List.of("복수전공", "부전공")); + NORMAL(List.of(), + List.of(COMMON_CULTURE, CORE_CULTURE, PRIMARY_BASIC_ACADEMICAL_CULTURE, PRIMARY_MANDATORY_MAJOR, + PRIMARY_ELECTIVE_MAJOR, NORMAL_CULTURE, FREE_ELECTIVE, CHAPEL)), + CHANGE_MAJOR(List.of("전과"), + List.of(COMMON_CULTURE, CORE_CULTURE, PRIMARY_BASIC_ACADEMICAL_CULTURE, PRIMARY_MANDATORY_MAJOR, + PRIMARY_ELECTIVE_MAJOR, NORMAL_CULTURE, FREE_ELECTIVE, CHAPEL)), + SUB_MAJOR(List.of("부전공"), + List.of(COMMON_CULTURE, CORE_CULTURE, PRIMARY_BASIC_ACADEMICAL_CULTURE, PRIMARY_MANDATORY_MAJOR, + PRIMARY_ELECTIVE_MAJOR, GraduationCategory.SUB_MAJOR, NORMAL_CULTURE, FREE_ELECTIVE, CHAPEL)), + DUAL_MAJOR(List.of("복수전공"), + List.of(COMMON_CULTURE, CORE_CULTURE, PRIMARY_BASIC_ACADEMICAL_CULTURE, DUAL_BASIC_ACADEMICAL_CULTURE, + PRIMARY_MANDATORY_MAJOR, PRIMARY_ELECTIVE_MAJOR, DUAL_MANDATORY_MAJOR, DUAL_ELECTIVE_MAJOR, NORMAL_CULTURE, + FREE_ELECTIVE, CHAPEL)), + ASSOCIATED_MAJOR(List.of("연계전공"), + // 현재 미지원 + List.of(COMMON_CULTURE, CORE_CULTURE, PRIMARY_BASIC_ACADEMICAL_CULTURE, PRIMARY_MANDATORY_MAJOR, + PRIMARY_ELECTIVE_MAJOR, NORMAL_CULTURE, FREE_ELECTIVE, CHAPEL)), + DOUBLE_SUB(List.of("복수전공", "부전공"), + // 현재 미지원 + List.of(COMMON_CULTURE, CORE_CULTURE, PRIMARY_BASIC_ACADEMICAL_CULTURE, PRIMARY_MANDATORY_MAJOR, + PRIMARY_ELECTIVE_MAJOR, NORMAL_CULTURE, FREE_ELECTIVE, CHAPEL)); private final List categories; + private final List includedGraduationCategories; public static StudentCategory from(List categories) { return Arrays.stream(StudentCategory.values()) @@ -28,4 +48,10 @@ public static StudentCategory from(List categories) { .orElseThrow(() -> new PdfParsingException("PDF 정보 추출에 실패했습니다.")); } + public void validateGraduationCategoryInclusion(GraduationCategory graduationCategory) { + if (!includedGraduationCategories.contains(graduationCategory)) { + throw new IllegalArgumentException(ErrorCode.UNFITTED_GRADUATION_CATEGORY.toString()); + } + } + } 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 c9ca5878..176aa136 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 @@ -68,7 +68,7 @@ public static User create(String authId, String password, EnglishLevel englishLe .build(); } - public void updateStudentInformation(String name, String major, String dualMajor, String subMajor, + public void updateStudentInformation(String name, String major, String dualMajor, String subMajor, StudentCategory studentCategory, int totalCredit, double takenCredit, boolean graduate) { this.name = name; this.primaryMajor = major; @@ -92,10 +92,8 @@ public boolean compareStudentNumber(String studentNumber) { return this.studentNumber.equals(studentNumber); } - public void matchPassword(PasswordEncoder passwordEncoder, String password) { - if (!passwordEncoder.matches(password, this.password)) { - throw new IllegalArgumentException("비밀번호가 일치하지 않습니다."); - } + public boolean matchPassword(PasswordEncoder passwordEncoder, String password) { + return passwordEncoder.matches(password, this.password); } public String getEncryptedAuthId() { @@ -111,9 +109,9 @@ public boolean isMyAuthId(String authId) { } public String getMajorByMajorType(MajorType majorType) { - if(majorType == PRIMARY) { + if (majorType == PRIMARY) { return primaryMajor; - } else if(majorType == DUAL) { + } else if (majorType == DUAL) { return dualMajor; } return subMajor; diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/SignInControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/SignInControllerTest.java index a9a9e086..54648b12 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/SignInControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/auth/api/signin/SignInControllerTest.java @@ -52,7 +52,7 @@ void blankAuthId() throws Exception { ) .andDo(print()) .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.message").value("아아디를 입력해주세요.")); + .andExpect(jsonPath("$.errorCode").value("아이디를 입력해주세요.")); } @DisplayName("비밀번호가 빈 문자열일 경우 에러를 반환한다.") @@ -71,7 +71,7 @@ void blankPassword() throws Exception { ) .andDo(print()) .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.message").value("비밀번호를 입력해주세요.")); + .andExpect(jsonPath("$.errorCode").value("비밀번호를 입력해주세요.")); } @DisplayName("아이디 및 비밀번호에 해당하는 사용자가 없을 경우 에러를 반환한다.") @@ -91,7 +91,6 @@ void invalidUser() throws Exception { ) .andDo(print()) .andExpect(status().isUnauthorized()) - .andExpect(jsonPath("$.status").value("401")) - .andExpect(jsonPath("$.message").value("아이디 혹은 비밀번호가 일치하지 않습니다.")); + .andExpect(jsonPath("$.errorCode").value("아이디 혹은 비밀번호가 일치하지 않습니다.")); } } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/auth/api/token/TokenControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/auth/api/token/TokenControllerTest.java index 4ca57e14..f545e6a3 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/auth/api/token/TokenControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/auth/api/token/TokenControllerTest.java @@ -65,6 +65,6 @@ void invalidRefreshToken() throws Exception { ) .andDo(print()) .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.message", is("유효하지 않은 토큰입니다.")));; + .andExpect(jsonPath("$.errorCode", is("유효하지 않은 토큰입니다.")));; } } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/FindDetailGraduationsControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/FindDetailGraduationsControllerTest.java index 48d59774..b3ca4d6e 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/FindDetailGraduationsControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/api/FindDetailGraduationsControllerTest.java @@ -1,5 +1,6 @@ package com.plzgraduate.myongjigraduatebe.graduation.api; +import static com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode.INVALIDATED_GRADUATION_CATEGORY; import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.COMMON_CULTURE; import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.CORE_CULTURE; import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.PRIMARY_BASIC_ACADEMICAL_CULTURE; @@ -202,8 +203,7 @@ void getDetailGraduationsWithInvalidGraduationCategory() throws Exception { .param("graduationCategory", invalidGraduationCategoryName)) .andDo(print()) .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.status").value(HttpStatus.BAD_REQUEST.value())) - .andExpect(jsonPath("$.message").value("Failed to convert value: " + invalidGraduationCategoryName)); + .andExpect(jsonPath("$.errorCode").value(INVALIDATED_GRADUATION_CATEGORY.toString())); } } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationServiceTest.java index b9086668..c961beff 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateSingleDetailGraduationServiceTest.java @@ -1,5 +1,6 @@ package com.plzgraduate.myongjigraduatebe.graduation.application.service; +import static com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory.*; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; @@ -25,6 +26,7 @@ import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureUseCase; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; import com.plzgraduate.myongjigraduatebe.user.application.usecase.find.FindUserUseCase; +import com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @ExtendWith(MockitoExtension.class) @@ -40,20 +42,103 @@ class CalculateSingleDetailGraduationServiceTest { @InjectMocks private CalculateSingleDetailGraduationService calculateSingleDetailGraduationService; - @DisplayName("단일 카테고리 졸업상세결과를 조회한다.") + @DisplayName("이수구분 NORMAL, CHANGE: 단일 카테고리 졸업상세결과를 조회한다.") + @ValueSource(strings = + {"COMMON_CULTURE", "CORE_CULTURE", "PRIMARY_MANDATORY_MAJOR", "PRIMARY_ELECTIVE_MAJOR", + "PRIMARY_BASIC_ACADEMICAL_CULTURE", "NORMAL_CULTURE", "FREE_ELECTIVE" + }) + @ParameterizedTest + void calculateSingleDetailGraduationForNormalAndChange(String graduationCategoryName) { + // given + User user = User.builder() + .id(1L) + .entryYear(19) + .studentCategory(NORMAL) + .primaryMajor("응용소프트웨어전공").build(); + GraduationCategory graduationCategory = GraduationCategory.valueOf(graduationCategoryName); + CalculateDetailGraduationUseCase calculateDetailGraduationUseCase = mock( + CalculateDetailGraduationUseCase.class); + TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(new HashSet<>()); + + given(findUserUseCase.findUserById(user.getId())).willReturn(user); + given(findTakenLectureUseCase.findTakenLectures(user.getId())).willReturn(takenLectureInventory); + given(calculateDetailGraduationUseCases.stream()).willReturn(Stream.of(calculateDetailGraduationUseCase)); + given(calculateDetailGraduationUseCase.supports(graduationCategory)).willReturn(true); + given(calculateDetailGraduationUseCase.calculateSingleDetailGraduation( + any(User.class), any(GraduationCategory.class), + any(TakenLectureInventory.class), any(GraduationRequirement.class))) + .willReturn(DetailGraduationResult.create(graduationCategory, 10, List.of())); + + // when + DetailGraduationResult result = + calculateSingleDetailGraduationService.calculateSingleDetailGraduation(1L, graduationCategory); + + // then + assertNotNull(result); + then(calculateDetailGraduationUseCase).should() + .calculateSingleDetailGraduation(any(User.class), any(GraduationCategory.class), + any(TakenLectureInventory.class), any(GraduationRequirement.class)); + + } + + @DisplayName("이수구분 DUAL: 단일 카테고리 졸업상세결과를 조회한다.") @ValueSource(strings = {"COMMON_CULTURE", "CORE_CULTURE", "PRIMARY_MANDATORY_MAJOR", "PRIMARY_ELECTIVE_MAJOR", "DUAL_MANDATORY_MAJOR", - "DUAL_ELECTIVE_MAJOR", "SUB_MAJOR", "PRIMARY_BASIC_ACADEMICAL_CULTURE", "DUAL_BASIC_ACADEMICAL_CULTURE" + "DUAL_ELECTIVE_MAJOR", "PRIMARY_BASIC_ACADEMICAL_CULTURE", "DUAL_BASIC_ACADEMICAL_CULTURE", + "NORMAL_CULTURE", "FREE_ELECTIVE" + }) + @ParameterizedTest + void calculateSingleDetailGraduationForDual(String graduationCategoryName) { + // given + User user = User.builder() + .id(1L) + .entryYear(19) + .studentCategory(DUAL_MAJOR) + .primaryMajor("응용소프트웨어전공") + .dualMajor("데이터테크놀로지전공") + .build(); + GraduationCategory graduationCategory = GraduationCategory.valueOf(graduationCategoryName); + CalculateDetailGraduationUseCase calculateDetailGraduationUseCase = mock( + CalculateDetailGraduationUseCase.class); + TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(new HashSet<>()); + + given(findUserUseCase.findUserById(user.getId())).willReturn(user); + given(findTakenLectureUseCase.findTakenLectures(user.getId())).willReturn(takenLectureInventory); + given(calculateDetailGraduationUseCases.stream()).willReturn(Stream.of(calculateDetailGraduationUseCase)); + given(calculateDetailGraduationUseCase.supports(graduationCategory)).willReturn(true); + given(calculateDetailGraduationUseCase.calculateSingleDetailGraduation( + any(User.class), any(GraduationCategory.class), + any(TakenLectureInventory.class), any(GraduationRequirement.class))) + .willReturn(DetailGraduationResult.create(graduationCategory, 10, List.of())); + + // when + DetailGraduationResult result = + calculateSingleDetailGraduationService.calculateSingleDetailGraduation(1L, graduationCategory); + + // then + assertNotNull(result); + then(calculateDetailGraduationUseCase).should() + .calculateSingleDetailGraduation(any(User.class), any(GraduationCategory.class), + any(TakenLectureInventory.class), any(GraduationRequirement.class)); + + } + + @DisplayName("이수구분 SUB: 단일 카테고리 졸업상세결과를 조회한다.") + @ValueSource(strings = + {"COMMON_CULTURE", "CORE_CULTURE", "PRIMARY_MANDATORY_MAJOR", "PRIMARY_ELECTIVE_MAJOR", "SUB_MAJOR", + "PRIMARY_BASIC_ACADEMICAL_CULTURE", "NORMAL_CULTURE", "FREE_ELECTIVE" }) @ParameterizedTest - void calculateSingleDetailGraduation(String graduationCategoryName) { + void calculateSingleDetailGraduationForSub(String graduationCategoryName) { // given User user = User.builder() .id(1L) .entryYear(19) + .studentCategory(SUB_MAJOR) .primaryMajor("응용소프트웨어전공").build(); GraduationCategory graduationCategory = GraduationCategory.valueOf(graduationCategoryName); - CalculateDetailGraduationUseCase calculateDetailGraduationUseCase = mock(CalculateDetailGraduationUseCase.class); + CalculateDetailGraduationUseCase calculateDetailGraduationUseCase = mock( + CalculateDetailGraduationUseCase.class); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(new HashSet<>()); given(findUserUseCase.findUserById(user.getId())).willReturn(user); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureControllerTest.java index 279bb55a..933d39e8 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/api/SearchLectureControllerTest.java @@ -54,7 +54,7 @@ void searchWithKeywordSizeUnder2() throws Exception { .param("keyword", "")) .andDo(print()) .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.message").value("검색어를 2자리 이상 입력해주세요.")); + .andExpect(jsonPath("$.errorCode").value("검색어를 2자리 이상 입력해주세요.")); } } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/api/ParsingTextControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/api/ParsingTextControllerTest.java index 285fd0f6..f316d154 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/api/ParsingTextControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/api/ParsingTextControllerTest.java @@ -73,8 +73,7 @@ void failToEnrollParsingText() throws Exception { actions .andDo(print()) .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.status").value(400)) - .andExpect(jsonPath("$.message").value("")); + .andExpect(jsonPath("$.errorCode").value("")); then(parsingTextHistoryUseCase).should().generateFailedParsingTextHistory(any(Long.class), any(String.class)); } 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 176edc93..05ac256b 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 @@ -1,5 +1,6 @@ package com.plzgraduate.myongjigraduatebe.parsing.application.service; +import static com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode.INCORRECT_STUDENT_NUMBER; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.BDDMockito.any; import static org.mockito.BDDMockito.anyLong; @@ -102,7 +103,7 @@ class ParsingTextServiceTest{ assertThatThrownBy(() -> parsingTextService.enrollParsingText(1L, parsingText)) .isInstanceOf(InvalidPdfException.class) - .hasMessage("본인의 학번과 PDF 학번이 일치하지 않습니다."); + .hasMessage(INCORRECT_STUDENT_NUMBER.toString()); } @DisplayName("RuntimeException이 발생했을 경우 PdfParsingException을 반환한다.") 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..a934d1e0 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 @@ -1,5 +1,6 @@ package com.plzgraduate.myongjigraduatebe.takenlecture.application.service.save; +import static com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode.NON_EXISTED_LECTURE; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.api.Assertions.tuple; @@ -82,7 +83,7 @@ void lectureDoesNotExist() { assertThatThrownBy( () -> saveTakenLectureFromParsingTextService.saveTakenLectures(user, takenLectureInformationList)) .isInstanceOf(IllegalArgumentException.class) - .hasMessage("KMA02135이 데이터베이스에 존재하지 않습니다."); + .hasMessage(NON_EXISTED_LECTURE.toString()); } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdControllerTest.java index 0b9dfd74..8dec43c6 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/findauthid/FindAuthIdControllerTest.java @@ -1,5 +1,6 @@ package com.plzgraduate.myongjigraduatebe.user.api.findauthid; +import static com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode.UNREGISTERED_USER; import static org.hamcrest.Matchers.is; import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; @@ -37,14 +38,13 @@ void findUserAuthIdWithoutUser() throws Exception { //given String studentNumber = "60191111"; given(findUserAuthIdUseCase.findUserAuthId(any())).willThrow( - new IllegalArgumentException("해당 사용자를 찾을 수 없습니다.")); + new IllegalArgumentException(UNREGISTERED_USER.toString())); //when //then mockMvc.perform(get("/api/v1/users/{student-number}/auth-id", studentNumber)) .andDo(print()) .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.status", is(400))) - .andExpect(jsonPath("$.message", is("해당 사용자를 찾을 수 없습니다."))); + .andExpect(jsonPath("$.errorCode", is(UNREGISTERED_USER.toString()))); } } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordControllerTest.java index 981e6554..890555ab 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/resetpassword/ResetPasswordControllerTest.java @@ -1,5 +1,6 @@ package com.plzgraduate.myongjigraduatebe.user.api.resetpassword; +import static com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode.INVALIDATED_PASSWORD_TYPE; import static org.hamcrest.Matchers.is; import static org.mockito.BDDMockito.given; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf; @@ -76,7 +77,7 @@ void resetPasswordWithNonAuthId() throws Exception { actions. andDo(print()) .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.message", is("아이디를 입력해주세요."))); + .andExpect(jsonPath("$.errorCode", is("아이디를 입력해주세요."))); } @DisplayName("새로운 비밀번호가 비밀번호 형식에 맞지 않을 시 예외가 발생한다.") @@ -99,7 +100,7 @@ void resetPasswordWithUnSuitableNewPassword() throws Exception { actions. andDo(print()) .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.message", is("비밀번호는 특수문자를 포함한 8자에서 20자 사이여야합니다."))); + .andExpect(jsonPath("$.errorCode", is(INVALIDATED_PASSWORD_TYPE.toString()))); } @DisplayName("비밀번호 확인 비밀번호가 비밀번호 형식에 맞지 않을 시 예외가 발생한다.") @@ -122,7 +123,7 @@ void resetPasswordWithUnSuitableCheckPassword() throws Exception { actions. andDo(print()) .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.message", is("비밀번호는 특수문자를 포함한 8자에서 20자 사이여야합니다."))); + .andExpect(jsonPath("$.errorCode", is(INVALIDATED_PASSWORD_TYPE.toString()))); } } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpControllerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpControllerTest.java index 631d5712..72110a8f 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpControllerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/api/signup/SignUpControllerTest.java @@ -1,5 +1,6 @@ package com.plzgraduate.myongjigraduatebe.user.api.signup; +import static com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode.*; 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; @@ -13,6 +14,7 @@ import org.springframework.http.MediaType; import org.springframework.test.web.servlet.ResultActions; +import com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode; import com.plzgraduate.myongjigraduatebe.support.WebAdaptorTestSupport; import com.plzgraduate.myongjigraduatebe.user.api.signup.dto.request.SignUpRequest; import com.plzgraduate.myongjigraduatebe.user.api.signup.dto.response.AuthIdDuplicationResponse; @@ -62,8 +64,7 @@ void signUp() throws Exception { ) .andDo(print()) .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.status").value(400)) - .andExpect(jsonPath("$.message").value("아이디는 6자에서 20자 사이여야합니다.")); + .andExpect(jsonPath("$.errorCode").value(INVALIDATED_AUTHID_TYPE.toString())); } @DisplayName("비밀번호는 8자리 이상 20자리 미민이어야한다.") @@ -85,8 +86,7 @@ void signUp() throws Exception { ) .andDo(print()) .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.status").value(400)) - .andExpect(jsonPath("$.message").value("비밀번호는 특수문자를 포함한 8자에서 20자 사이여야합니다.")); + .andExpect(jsonPath("$.errorCode").value(INVALIDATED_PASSWORD_TYPE.toString())); } @DisplayName("비밀번호는 하나 이상의 기호가 포함되어야한다.") @@ -107,8 +107,7 @@ void signUp() throws Exception { ) .andDo(print()) .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.status").value(400)) - .andExpect(jsonPath("$.message").value("비밀번호는 특수문자를 포함한 8자에서 20자 사이여야합니다.")); + .andExpect(jsonPath("$.errorCode").value(INVALIDATED_PASSWORD_TYPE.toString())); } @DisplayName("로그인 아이디 중복 여부를 체크한다.") diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserServiceTest.java index c760bb82..eeb7082d 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/find/FindUserServiceTest.java @@ -1,7 +1,9 @@ package com.plzgraduate.myongjigraduatebe.user.application.service.find; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.BDDMockito.*; +import static com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode.NOT_FOUND_AUTHID; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.BDDMockito.given; import java.util.Optional; @@ -87,7 +89,7 @@ void findUserByNotExistAuthId() { //when //test assertThatThrownBy(() -> findUserService.findUserByAuthId("tester00")) .isInstanceOf(IllegalArgumentException.class) - .hasMessage("해당 사용자를 찾을 수 없습니다."); + .hasMessage(NOT_FOUND_AUTHID.toString()); } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/resetpassword/ResetPasswordServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/resetpassword/ResetPasswordServiceTest.java index 40875d2a..5c3fd1a8 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/resetpassword/ResetPasswordServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/resetpassword/ResetPasswordServiceTest.java @@ -1,5 +1,6 @@ package com.plzgraduate.myongjigraduatebe.user.application.service.resetpassword; +import static com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode.MISMATCHED_PASSWORD; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.then; @@ -58,7 +59,7 @@ void resetPasswordWithDifferentPasswordCheck() { //when //then assertThatThrownBy(() -> resetPasswordService.resetPassword(authId, newPassword, passwordCheck)) .isInstanceOf(IllegalArgumentException.class) - .hasMessage("비밀번호와 비밀번호 확인이 일치하지 않습니다."); + .hasMessage(MISMATCHED_PASSWORD.toString()); } @DisplayName("해당 유저 아이디가 존재하지 않을 경우 예외가 발생한다.") diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/signup/SignUpServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/signup/SignUpServiceTest.java index d4baa620..b6ac15b8 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/signup/SignUpServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/signup/SignUpServiceTest.java @@ -1,7 +1,14 @@ package com.plzgraduate.myongjigraduatebe.user.application.service.signup; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.BDDMockito.*; +import static com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode.DUPLICATED_AUTHID; +import static com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode.DUPLICATED_STUDENT_NUMBER; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.BDDMockito.any; +import static org.mockito.BDDMockito.anyString; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.never; +import static org.mockito.BDDMockito.then; +import static org.mockito.BDDMockito.times; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -11,9 +18,9 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.security.crypto.password.PasswordEncoder; -import com.plzgraduate.myongjigraduatebe.user.application.usecase.signup.SignUpCommand; import com.plzgraduate.myongjigraduatebe.user.application.port.CheckUserPort; import com.plzgraduate.myongjigraduatebe.user.application.port.SaveUserPort; +import com.plzgraduate.myongjigraduatebe.user.application.usecase.signup.SignUpCommand; import com.plzgraduate.myongjigraduatebe.user.domain.model.EnglishLevel; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; @@ -31,7 +38,7 @@ class SignUpServiceTest { @DisplayName("회원가입을 진행한다") @Test void signUp() { - //given + //given SignUpCommand command = SignUpCommand.builder() .authId("mju-graduate") .password("1q2w3e4r!") @@ -43,7 +50,7 @@ void signUp() { //when signUpService.signUp(command); - //then + //then then(passwordEncoder).should().encode("1q2w3e4r!"); then(saveUserPort).should().saveUser(any(User.class)); } @@ -64,7 +71,7 @@ void signUp() { //when //then assertThatThrownBy(() -> signUpService.signUp(command)) .isInstanceOf(IllegalArgumentException.class) - .hasMessage("이미 존재하는 아이디입니다."); + .hasMessage(DUPLICATED_AUTHID.toString()); then(checkUserPort).should(times(1)).checkDuplicateAuthId(authId); then(checkUserPort).should(never()).checkDuplicateStudentNumber(anyString()); @@ -88,7 +95,7 @@ void signUp() { //when //then assertThatThrownBy(() -> signUpService.signUp(command)) .isInstanceOf(IllegalArgumentException.class) - .hasMessage("이미 존재하는 학번입니다."); + .hasMessage(DUPLICATED_STUDENT_NUMBER.toString()); then(checkUserPort).should(times(1)).checkDuplicateAuthId(anyString()); then(checkUserPort).should(times(1)).checkDuplicateStudentNumber(studentNumber); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserServiceTest.java index 0154bd10..0cc8d492 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/application/service/withdraw/WithDrawUserServiceTest.java @@ -1,5 +1,6 @@ package com.plzgraduate.myongjigraduatebe.user.application.service.withdraw; +import static com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode.INCORRECT_PASSWORD; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.BDDMockito.given; @@ -75,7 +76,7 @@ void withDrawWithUnValidationPassword() { //when //then assertThatThrownBy(() -> withDrawUserService.withDraw(user.getId(), password)) .isInstanceOf(IllegalArgumentException.class) - .hasMessage("비밀번호가 일치하지 않습니다."); + .hasMessage(INCORRECT_PASSWORD.toString()); } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/domain/model/StudentCategoryTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/domain/model/StudentCategoryTest.java new file mode 100644 index 00000000..ee39298e --- /dev/null +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/domain/model/StudentCategoryTest.java @@ -0,0 +1,32 @@ +package com.plzgraduate.myongjigraduatebe.user.domain.model; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +import com.plzgraduate.myongjigraduatebe.core.exception.ErrorCode; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; + +class StudentCategoryTest { + + @DisplayName("학생 이수구분 카테고리에 포함되는 졸업 카테고리인지 검증한다.") + @ParameterizedTest + @ValueSource(strings = {"DUAL_MANDATORY_MAJOR", "DUAL_ELECTIVE_MAJOR", "SUB_MAJOR", + "DUAL_BASIC_ACADEMICAL_CULTURE"}) + void validateGraduationCategoryInclusion(String graduationCategoryName) { + //given + User user = User.builder() + .studentCategory(StudentCategory.NORMAL).build(); + GraduationCategory graduationCategory = GraduationCategory.valueOf(graduationCategoryName); + + //when //then + assertThatThrownBy( + () -> user.getStudentCategory().validateGraduationCategoryInclusion(graduationCategory)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage(ErrorCode.UNFITTED_GRADUATION_CATEGORY.toString()); + + } + +} 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 902fb143..163caafd 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 @@ -96,10 +96,12 @@ void matchPassword() { void matchWrongPassword() { //given given(passwordEncoder.matches("wrongPassword", "tester00!")).willReturn(false); - //when //then - assertThatThrownBy(() -> user.matchPassword(passwordEncoder, "wrongPassword")) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("비밀번호가 일치하지 않습니다."); + + //when + boolean result = user.matchPassword(passwordEncoder, "wrongPassword"); + + // then + assertThat(result).isFalse(); } @DisplayName("유저의 암호화된 로그인 아이디(뒷 세자리 *** 대체)를 반환한다.")