Skip to content

Commit

Permalink
[DEV-53] 교환학생 인정학점 추가 (#299)
Browse files Browse the repository at this point in the history
* feat: 교환학생 파싱 exchanged_credit에 교환학생 인정학점 저장

* feat: 교환학생 인정학점을 반영

* test: 교환학생 인정학점을 반영 테스트

* chore: 사용하지 않는 메소드 제거

* test: 교환학생 인정 학점 테스트 코드 추가
  • Loading branch information
tiemo0708 authored Jan 5, 2025
1 parent 35c7bf8 commit 1c63119
Show file tree
Hide file tree
Showing 29 changed files with 1,011 additions and 357 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,9 @@ public List<DetailGraduationResult> calculateAllDetailGraduation(
copiedTakenLectureForDualBasicAcademicalCulture,
graduationRequirement
);

addExchangeCreditsToDualBasicAcademicalCulture(user, dualBasicAcademicalCultureDetailGraduationResult);

syncOriginalTakenLectureInventory(
takenLectureInventory,
primaryBasicAcademicalCultureDetailGraduationResult,
Expand All @@ -92,6 +95,11 @@ public List<DetailGraduationResult> calculateAllDetailGraduation(
return List.of(primaryBasicAcademicalCultureGraduationResult);
}

private void addExchangeCreditsToDualBasicAcademicalCulture(User user, DetailGraduationResult dualBasicAcademicalCultureDetailGraduationResult) {
int additionalCredits = user.getExchangeCredit().getDualBasicAcademicalCulture();
dualBasicAcademicalCultureDetailGraduationResult.addCredit(additionalCredits);
}

private GraduationManager<BasicAcademicalCultureLecture> determineBasicAcademicalCultureGraduationManager(
String userMajor
) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,21 +116,37 @@ public List<DetailGraduationResult> calculateAllDetailGraduation(
DUAL_MANDATORY_MAJOR, dualMajorDetailGraduationResult);
DetailGraduationResult dualElectiveMajorDetailGraduationResult = isolateElectiveMajorDetailGraduation(
DUAL_ELECTIVE_MAJOR, dualMajorDetailGraduationResult);

addExchangeCreditsToDualElectiveMajor(user, dualElectiveMajorDetailGraduationResult);

majorGraduationResults.addAll(
List.of(
dualMandatoryMajorDetailGraduationResult,
dualElectiveMajorDetailGraduationResult
));
}
if (user.getStudentCategory() == StudentCategory.SUB_MAJOR) {
majorGraduationResults.add(
generateSubMajorDetailGraduationResult(user, takenLectureInventory,
graduationRequirement
));
DetailGraduationResult subMajorDetailGraduationResult = generateSubMajorDetailGraduationResult(
user, takenLectureInventory, graduationRequirement
);

processExchangeCreditsForSubMajor(user, subMajorDetailGraduationResult);
majorGraduationResults.add(subMajorDetailGraduationResult);
}
return majorGraduationResults;
}

private void processExchangeCreditsForSubMajor(User user, DetailGraduationResult subMajorDetailGraduationResult) {
int exchangeCredit = user.getExchangeCredit().getSubMajor();
subMajorDetailGraduationResult.addCredit(exchangeCredit);

}

private void addExchangeCreditsToDualElectiveMajor(User user, DetailGraduationResult dualElectiveMajorDetailGraduationResult) {
int additionalCredits = user.getExchangeCredit().getDualMajor();
dualElectiveMajorDetailGraduationResult.addCredit(additionalCredits);
}

private DetailGraduationResult generateMajorDetailGraduationResult(
User user,
MajorType majorType,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ private boolean checkCompleted() {
}
public void addTakenCredits(int credits) {
this.takenCredits += credits;
checkCompleted();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,16 @@ private static int calculateTakenCredit(TakenLectureInventory takenLectureInvent
.sum();

int transferFreeElectiveCredit = calculateTransferFreeElectiveCredit(user);
int exchangeFreeElectiveCredit = calculateExchangeFreeElectiveCredit(user);

return remainCreditByDetailGraduationResult + remainCreditByTakenLectures
+ leftNormalCultureCredit+transferFreeElectiveCredit;
+ leftNormalCultureCredit+transferFreeElectiveCredit+exchangeFreeElectiveCredit;
}

private static int calculateExchangeFreeElectiveCredit(User user) {
return user.getExchangeCredit().getFreeElective();
}

private static int calculateTransferFreeElectiveCredit(User user) {
if (user.getStudentCategory() == StudentCategory.TRANSFER) {
return user.getTransferCredit().getFreeElective();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,8 +104,9 @@ private void handleLeftTakenNormaCulture(
) {
int acknowledgedCredit = 0;
if (isTransferStudent(user)) {
acknowledgedCredit = user.getTransferCredit().getNormalCulture();
acknowledgedCredit += user.getTransferCredit().getNormalCulture();
}
acknowledgedCredit += user.getExchangeCredit().getNormalCulture();
this.normalCultureGraduationResult = NormalCultureGraduationResult.create(
graduationRequirement.getNormalCultureCredit(),
acknowledgedCredit,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,11 +66,13 @@ public DetailGraduationResult createDetailGraduationResult(User user,
taken.add(takenLecture.getLecture());
});
takenLectureInventory.handleFinishedTakenLectures(finishedTakenLecture);
int exchangeCredit = user.getExchangeCredit().getBasicAcademicalCulture();

DetailCategoryResult detailCategoryResult = DetailCategoryResult.create(
"학문기초교양", true, basicAcademicalCredit);
detailCategoryResult.calculate(taken, basicAcademicalLectures);

detailCategoryResult.addTakenCredits(exchangeCredit);

return DetailGraduationResult.createNonCategorizedGraduationResult(basicAcademicalCredit,
List.of(detailCategoryResult));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,12 @@ public DetailGraduationResult createDetailGraduationResult(User user,
});
takenLectureInventory.handleFinishedTakenLectures(finishedTakenLecture);

int exchangeCredit = user.getExchangeCredit().getBasicAcademicalCulture();

DetailCategoryResult detailCategoryResult = DetailCategoryResult.create(
"학문기초교양", true, basicAcademicalCredit);
detailCategoryResult.calculate(taken, basicAcademicalLectures);
detailCategoryResult.addTakenCredits(exchangeCredit);

return DetailGraduationResult.createNonCategorizedGraduationResult(basicAcademicalCredit,
List.of(detailCategoryResult));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,11 @@ public DetailGraduationResult createDetailGraduationResult(User user,
});
takenLectureInventory.handleFinishedTakenLectures(finishedTakenLecture);

int exchangeCredit = user.getExchangeCredit().getBasicAcademicalCulture();
DetailCategoryResult detailCategoryResult = DetailCategoryResult.create(
"학문기초교양", true, basicAcademicalCredit);
detailCategoryResult.calculate(taken, basicAcademicalLectures);
detailCategoryResult.addTakenCredits(exchangeCredit);

return DetailGraduationResult.createNonCategorizedGraduationResult(basicAcademicalCredit,
List.of(detailCategoryResult));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,19 @@ public DetailCategoryResult createDetailCategoryResult(
true, electiveMajorTotalCredit
);
processTransferStudent(user, electiveMajorResult);
processExchangeStudent(user, electiveMajorResult);

excludePracticeLectureForHaveToLecture(electiveLectures);
electiveMajorResult.calculate(takenElective, electiveLectures);
takenLectureInventory.handleFinishedTakenLectures(finishedTakenLecture);
return electiveMajorResult;
}

private void processExchangeStudent(User user, DetailCategoryResult electiveMajorResult) {
int exchangeCredit = user.getExchangeCredit().getMajor();
electiveMajorResult.addTakenCredits(exchangeCredit);
}

private void processTransferStudent(User user, DetailCategoryResult electiveMajorResult) {
if (user.getStudentCategory() == StudentCategory.TRANSFER) {
int transferCredit = user.getTransferCredit().getMajorLecture();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,20 +31,21 @@ public ParsingAnonymousDto parseAnonymous(EnglishLevel englishLevel, String pars


User anonymous = User.createAnonymous(
englishLevel,
parsingInformation.getStudentName(),
parsingInformation.getStudentNumber(),
parsingInformation.getMajor(),
parsingInformation.getSubMajor(),
parsingInformation.getDualMajor(),
parsingInformation.getAssociatedMajor(),
parsingInformation.getStudentCategory(),
parsingInformation.getTransferCredit()
englishLevel,
parsingInformation.getStudentName(),
parsingInformation.getStudentNumber(),
parsingInformation.getMajor(),
parsingInformation.getSubMajor(),
parsingInformation.getDualMajor(),
parsingInformation.getAssociatedMajor(),
parsingInformation.getStudentCategory(),
parsingInformation.getTransferCredit(),
parsingInformation.getExchangeCredit()
);

TakenLectureInventory takenLectureInventory = getTakenLectureInventory(
anonymous,
parsingInformation.getTakenLectureInformation()
anonymous,
parsingInformation.getTakenLectureInformation()
);

return new ParsingAnonymousDto(anonymous, takenLectureInventory);
Expand All @@ -63,18 +64,18 @@ private void checkUnSupportedUser(ParsingInformation parsingInformation) {
}

private TakenLectureInventory getTakenLectureInventory(
User anonymous,
List<ParsingTakenLectureDto> parsingTakenLectureDtoList
User anonymous,
List<ParsingTakenLectureDto> parsingTakenLectureDtoList
) {
Set<TakenLecture> takenLectures = parsingTakenLectureDtoList.stream()
.map(parsingTakenLectureDto -> TakenLecture.of(
anonymous,
Lecture.from(parsingTakenLectureDto.getLectureCode()),
parsingTakenLectureDto.getYear(),
parsingTakenLectureDto.getSemester()
.map(parsingTakenLectureDto -> TakenLecture.of(
anonymous,
Lecture.from(parsingTakenLectureDto.getLectureCode()),
parsingTakenLectureDto.getYear(),
parsingTakenLectureDto.getSemester()
)
)
)
.collect(Collectors.toSet());
.collect(Collectors.toSet());

return TakenLectureInventory.from(takenLectures);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.plzgraduate.myongjigraduatebe.parsing.domain;

import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.Semester;
import com.plzgraduate.myongjigraduatebe.user.domain.model.ExchangeCredit;
import com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory;
import java.util.ArrayList;
import java.util.Arrays;
Expand All @@ -23,21 +24,23 @@ public class ParsingInformation {
private final String dualMajor;
private final String associatedMajor;
private final TransferCredit transferCredit;
private final ExchangeCredit exchangeCredit;
private final StudentCategory studentCategory;
private final List<ParsingTakenLectureDto> takenLectureInformation;

@Builder
public ParsingInformation(
String studentName,
String studentNumber,
String major,
String changeMajor,
String subMajor,
String dualMajor,
String associatedMajor,
StudentCategory studentCategory,
TransferCredit transferCredit,
List<ParsingTakenLectureDto> takenLectureInformation
String studentName,
String studentNumber,
String major,
String changeMajor,
String subMajor,
String dualMajor,
String associatedMajor,
StudentCategory studentCategory,
TransferCredit transferCredit,
ExchangeCredit exchangeCredit,
List<ParsingTakenLectureDto> takenLectureInformation
) {
this.studentName = studentName;
this.studentNumber = studentNumber;
Expand All @@ -48,6 +51,7 @@ public ParsingInformation(
this.associatedMajor = associatedMajor;
this.studentCategory = studentCategory;
this.transferCredit = transferCredit;
this.exchangeCredit = exchangeCredit;
this.takenLectureInformation = takenLectureInformation;
}

Expand All @@ -56,14 +60,15 @@ public static ParsingInformation parsing(String parsingText) {
ParsingStudentCategoryDto parsingStudentCategoryDto = parseStudentCategory(splitText);

return ParsingInformation.builder().studentName(parseStudentName(splitText))
.studentNumber(parseStudentNumber(splitText)).major(parseMajor(splitText))
.dualMajor(parsingStudentCategoryDto.getDualMajor())
.changeMajor(parsingStudentCategoryDto.getChangeMajor())
.subMajor(parsingStudentCategoryDto.getSubMajor())
.associatedMajor(parsingStudentCategoryDto.getAssociatedMajor())
.studentCategory(parsingStudentCategoryDto.getStudentCategory())
.transferCredit(parsingStudentCategoryDto.getTransferCredit())
.takenLectureInformation(parseTakenLectureInformation(splitText)).build();
.studentNumber(parseStudentNumber(splitText)).major(parseMajor(splitText))
.dualMajor(parsingStudentCategoryDto.getDualMajor())
.changeMajor(parsingStudentCategoryDto.getChangeMajor())
.subMajor(parsingStudentCategoryDto.getSubMajor())
.associatedMajor(parsingStudentCategoryDto.getAssociatedMajor())
.studentCategory(parsingStudentCategoryDto.getStudentCategory())
.transferCredit(parsingStudentCategoryDto.getTransferCredit())
.exchangeCredit(parsingStudentCategoryDto.getExchangeCredit())
.takenLectureInformation(parseTakenLectureInformation(splitText)).build();
}

private static String[] splitParsingText(String parsingText) {
Expand Down Expand Up @@ -94,9 +99,11 @@ private static ParsingStudentCategoryDto parseStudentCategory(String[] splitText
String associatedMajor = null;
StudentCategory studentCategory;
TransferCredit transferCredit;
ExchangeCredit exchangeCredit;
String secondLineText = splitText[2];
String thirdLineText = splitText[3];
String fourthLineText = splitText[4];
String fifthLineText = splitText[5];
List<String> categories = new ArrayList<>();
String[] parts = secondLineText.split(", ");
String[] thirdLineParts = thirdLineText.split(", ");
Expand All @@ -122,23 +129,30 @@ private static ParsingStudentCategoryDto parseStudentCategory(String[] splitText
categories.add("편입");
}
}
studentCategory = StudentCategory.from(categories);


String fourthLine = fourthLineText.substring("편입생 인정학점 - ".length());
transferCredit = TransferCredit.from(Arrays.stream(fourthLine.split(","))
.map(s -> s.replaceAll("\\D", ""))
.collect(Collectors.joining("/")));

String fifthLine = fifthLineText.substring("교환학생 인정학점 - ".length());
exchangeCredit = ExchangeCredit.from(Arrays.stream(fifthLine.split(","))
.map(s -> s.replaceAll("\\D", ""))
.collect(Collectors.joining("/")));

studentCategory = StudentCategory.from(categories);
return ParsingStudentCategoryDto.of(
changeMajor, subMajor, dualMajor, associatedMajor, studentCategory, transferCredit
changeMajor, subMajor, dualMajor, associatedMajor, studentCategory, transferCredit, exchangeCredit
);
}

private static List<ParsingTakenLectureDto> parseTakenLectureInformation(String[] splitText) {
List<ParsingTakenLectureDto> takenLectureInformation = new ArrayList<>();
for (int i = 16; i < splitText.length; i += 7) {
if (i + 3 < splitText.length && !Pattern.matches(
"^[A-Z]+$",
splitText[i + 3].substring(0, 1)
"^[A-Z]+$",
splitText[i + 3].substring(0, 1)
)) {
return takenLectureInformation;
}
Expand All @@ -148,9 +162,9 @@ private static List<ParsingTakenLectureDto> parseTakenLectureInformation(String[
char grade = splitText[i + 6].charAt(0);
if (grade != 'F' && grade != 'N' && grade != 'R') {
takenLectureInformation.add(ParsingTakenLectureDto.of(
code,
year,
Semester.of(semester)
code,
year,
Semester.of(semester)
));
}
if (i + 7 < splitText.length && Character.isDigit(splitText[i + 7].charAt(0))) {
Expand Down
Loading

0 comments on commit 1c63119

Please sign in to comment.