Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[DEV-18] Completed Credit #247

Merged
merged 37 commits into from
Apr 9, 2024
Merged
Show file tree
Hide file tree
Changes from 34 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
f840bf0
refactor: 전공 필드명 변경에 따른 코드 수정
Hoya324 Mar 19, 2024
7587022
feat: 복수전공에 따른 전공이수 학점 Type
Hoya324 Mar 19, 2024
4b384ba
refactor: 복수전공 로직 추가에 따른 매개변수 변경
Hoya324 Mar 19, 2024
5764f45
refactor: 복수전공에 따른 졸업 요건 학점수 변경
Hoya324 Mar 19, 2024
4d4e2b4
refactor: 복수전공에 따른 parsing 로직 수정
Hoya324 Mar 19, 2024
4743ab7
refactor: 부전공 졸업 학점 변경 로직 시점 변경
Hoya324 Mar 19, 2024
fff2144
refactor: 유저 정보 수정시 복수전공 수정 추가
Hoya324 Mar 19, 2024
4c4fc66
refactor: user domain에 복수전공 필드 추 및 주전공 변수명 변경
Hoya324 Mar 19, 2024
b467e20
test: 부전공 졸업학점 조정 test로 수정
Hoya324 Mar 19, 2024
a02d3c6
test: 복수전공 parsing test
Hoya324 Mar 19, 2024
88a4df1
refactor: 졸업요건 계산 로직에 복수전공 추가
Hoya324 Mar 19, 2024
3b63e7d
refactor: 필요없는 import 제거
Hoya324 Mar 19, 2024
bde3cc9
refactor: GraduationCategory 타입 추가 및 수정
5uhwann Mar 27, 2024
4e2bcf4
feat: CompletedCredit 도메인 모델 작성
5uhwann Mar 28, 2024
b987a8d
feat: CompletedCredit jpa entity 작성
5uhwann Mar 28, 2024
ddbb9c8
feat: CompletedCredit jpa entity 작성
5uhwann Mar 28, 2024
caa99f7
feat: CompletedCreditPersistenceMapper 구현
5uhwann Mar 28, 2024
e185d3a
feat: CompletedCreditRepository - 이수 학점 조회 구현
5uhwann Mar 28, 2024
7488916
feat: FindCompletedCreditPort 구현
5uhwann Mar 28, 2024
368446f
feat: FindCompletedCreditUseCase 구현
5uhwann Mar 31, 2024
eeb2861
refactor: 불필요 컨트롤러 삭제
5uhwann Mar 31, 2024
6759d61
refactor: CalculateGraduationUseCase 리턴 타입 변경
5uhwann Mar 31, 2024
8318277
feat: GenerateOrModifyCompletedCreditPort 구현
5uhwann Apr 2, 2024
3d825db
feat: GenerateOrModifyCompletedCreditUseCase 구현
5uhwann Apr 3, 2024
cf49e79
refactor: 성적표 업로드로 인한 이수 학점 업데이트 구현
5uhwann Apr 3, 2024
a55741d
feat: CompletedCreditController 구현
5uhwann Apr 3, 2024
6aad94e
test: 테스트 오류 수정
5uhwann Apr 5, 2024
b8183ae
build: 테스트 코드 롬복 의존성 추가
5uhwann Apr 5, 2024
dadbcfd
refactor: 불필요 의존성 제거
5uhwann Apr 5, 2024
6ff3660
refactor: 부정확 로직 제거
5uhwann Apr 5, 2024
82d7a00
refactor: swagger 코드 추가
5uhwann Apr 5, 2024
f3b6a6f
refactor: endpoint 수정
5uhwann Apr 5, 2024
9a0e40d
refactor: 불필요 코드 삭제
5uhwann Apr 5, 2024
37a8bfe
refactor: 채플 이수 학점 오류 수정
5uhwann Apr 5, 2024
a2f9a86
refactor: GenerateOrModifyCompletedCreditUseCase 사용 위치 수정
5uhwann Apr 7, 2024
2749bd1
refactor: 채플 기이수 학점 산정 방식 수정
5uhwann Apr 7, 2024
a866f9a
refactor: GenerateOrModifyCompletedCredit 모델 생성 위치 수정
5uhwann Apr 7, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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'

Expand All @@ -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'


}
Expand Down
Original file line number Diff line number Diff line change
@@ -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<CompletedCreditResponse> getCompletedCredits(@LoginUser Long userId);
}
Original file line number Diff line number Diff line change
@@ -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<CompletedCreditResponse> getCompletedCredits(@LoginUser Long userId) {
return findCompletedCreditUseCase.findCompletedCredits(userId).stream()
.map(CompletedCreditResponse::from)
.collect(Collectors.toList());
}
}
Original file line number Diff line number Diff line change
@@ -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();
}
}
Original file line number Diff line number Diff line change
@@ -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<CompletedCredit> findCompletedCredit(User user);
}
Original file line number Diff line number Diff line change
@@ -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<CompletedCredit> completedCredits);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 부분만 분리되면 될거 같습니다! 수고하셨어요!

}
Original file line number Diff line number Diff line change
@@ -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<CompletedCredit> findCompletedCredits(Long userId) {
User user = findUserUseCase.findUserById(userId);
return findCompletedCreditPort.findCompletedCredit(user);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
package com.plzgraduate.myongjigraduatebe.completedcredit.application.service;

import static com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory.*;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;

import org.springframework.transaction.annotation.Transactional;

import com.plzgraduate.myongjigraduatebe.completedcredit.application.port.FindCompletedCreditPort;
import com.plzgraduate.myongjigraduatebe.completedcredit.application.port.GenerateOrModifyCompletedCreditPort;
import com.plzgraduate.myongjigraduatebe.completedcredit.application.usecase.GenerateOrModifyCompletedCreditUseCase;
import com.plzgraduate.myongjigraduatebe.completedcredit.domain.model.CompletedCredit;
import com.plzgraduate.myongjigraduatebe.core.meta.UseCase;
import com.plzgraduate.myongjigraduatebe.graduation.domain.model.ChapelResult;
import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult;
import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationResult;
import com.plzgraduate.myongjigraduatebe.user.domain.model.User;

import lombok.RequiredArgsConstructor;

@UseCase
@Transactional
@RequiredArgsConstructor
class GenerateOrModifyCompletedCreditService implements GenerateOrModifyCompletedCreditUseCase {

private final FindCompletedCreditPort findCompletedCreditPort;
private final GenerateOrModifyCompletedCreditPort generateOrModifyCompletedCreditPort;

@Override
public void generateOrModifyCompletedCredit(User user, GraduationResult graduationResult) {
List<CompletedCredit> completedCredits = findCompletedCreditPort.findCompletedCredit(user);
List<DetailGraduationResult> detailGraduationResults = graduationResult.getDetailGraduationResults();

Map<DetailGraduationResult, Optional<CompletedCredit>> resultMap = detailGraduationResults.stream()
.collect(Collectors.toMap(
Function.identity(),
detailGraduationResult -> completedCredits.stream()
.filter(completedCredit -> completedCredit.getGraduationCategory().equals(detailGraduationResult.getGraduationCategory()))
.findFirst()
));

List<CompletedCredit> completedCreditModels = resultMap.keySet().stream()
.map(completedCredit -> createCompletedCreditModel(completedCredit, resultMap.get(completedCredit)))
.collect(Collectors.toList());

CompletedCredit chapelCompletedCreditModel = createChapelCompletedCreditModel(completedCredits,
graduationResult);
CompletedCredit normalCultureCompletedCreditModel = createNormalCultureCompletedCreditModel(completedCredits,
graduationResult);
CompletedCredit freeElectiveCompletedCreditModel = createFreeElectiveCompletedCreditModel(completedCredits,
graduationResult);

ArrayList<CompletedCredit> allCompletedCreditModels = new ArrayList<>(completedCreditModels);
allCompletedCreditModels.addAll(
List.of(chapelCompletedCreditModel, normalCultureCompletedCreditModel, freeElectiveCompletedCreditModel));
generateOrModifyCompletedCreditPort.generateOrModifyCompletedCredits(user, allCompletedCreditModels);
}
Copy link
Member

@stophwan stophwan Apr 5, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

detailGraduationResult에서 GraduationCategory별로 Mapping을 해놓고 시작하면 더 좋을것 같다는 생각!
Map<GraduationCategory, DetailGraduationResult> 이런 방식으로?
그리고 CompletedCredit 리스트 순회하면서 GraduationCategory로 해당 맵에 있으면 업데이트하고 만약 없으면 따로 저장해놨다가 나중에 추가.
그러면 채플이나 일반, 자유 같은 경우는 굳이 completedCredits 순회 안돌고 바로 가져올 수 있고(키값으로 바로 가져오면 되니까), 가장 처음 resultMap만드는 것도 두번 안돌고, 로직더 가독성이 좋아질것 같은느낌?
수환이하고 경호 생각은 어때? 이 방법도 가능할 것 같아?

Copy link
Member Author

@5uhwann 5uhwann Apr 6, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저도 고민을 좀 해봤었는데 Map<GraduationCategory, DetailGraduationResult> 로 매핑이 힘든게 일반교양, 자유선택, 채플 졸업 결과는 타입이 각각 다 달라서 맵으로 매핑을 해놓을 수가 없었습니다.. 현재로서는 전체적인 ClaculateGraduationUseCase의 수정 없인 위 형태로 사전에 매핑해두는게 어려울거 같습니다.

Copy link
Member

@stophwan stophwan Apr 7, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

일반, 자유, 채플의 졸업결과도 결국 DetailGraduationResult에서 찾는거 아니야? DetailGraduationResult에 gradautionGategroy가 있는거고?

Copy link
Member Author

@5uhwann 5uhwann Apr 7, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

일반교양, 자유선택, 채플은 DetailGraduationResult가 아니라 NormalCultureGraduationResult, FreeElectiveGraduationResult, ChapelResult가 따로 있어요


private CompletedCredit createCompletedCreditModel(DetailGraduationResult detailGraduationResult,
Optional<CompletedCredit> completedCredit) {
return CompletedCredit.builder()
.id(completedCredit.map(CompletedCredit::getId).orElse(null))
.totalCredit(detailGraduationResult.getTotalCredit())
.takenCredit(detailGraduationResult.getTakenCredit())
.graduationCategory(detailGraduationResult.getGraduationCategory())
.build();
}

private CompletedCredit createChapelCompletedCreditModel(List<CompletedCredit> completedCredits,
GraduationResult graduationResult) {
return completedCredits.stream()
.filter(completedCredit -> completedCredit.getGraduationCategory() == CHAPEL)
.map(completedCredit -> CompletedCredit.builder()
.id(completedCredit.getId())
.totalCredit(ChapelResult.GRADUATION_COUNT)
.takenCredit(graduationResult.getChapelResult().getTakenCount())
.graduationCategory(CHAPEL).build())

Check warning on line 82 in src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java#L79-L82

Added lines #L79 - L82 were not covered by tests
.findFirst()
.orElse(CompletedCredit.builder()
.totalCredit(ChapelResult.GRADUATION_COUNT)
.takenCredit(graduationResult.getChapelResult().getTakenChapelCredit())
.graduationCategory(CHAPEL).build());
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

createCompletedCreditModel 메서드 류는 CompletedCreaditGenerator혹은 Creator로 해서 분리하는게 어때?
해당 클래스에서 switch문으로 GraduationCateory에 따라서 분기처리하는거지.

그리고 CompletedCredit을 생성하는 책임을 CompletedCredit에 넘겨주어도 좋을 것 같고. 만약에 CompeltedCredit 필드면 하나 수정되는 순간 바로 이 클래스까지 수정 범위가 커지기도 하니까!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

음 저도 생각해봤던건데 저 3가지 케이스를 switch문으로 분기처리하여 생성해주는게 과연 가독성이 더 좋을지는 잘 모르겠습니다. 다만 말씀대로 CompletedCredit 객체를 생성해주는 책임은 CompletedCredit에 두는게 훨씬 좋을거 같네요!

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저도 이 코드에 중복이 많아서 분기하는게 좋을지 따로 빼는게 좋을지 고민했는데, 개인적으로는 각각에 필요한게 조금씩 다르다보니 코드가 흐름의 중복은 조금 해결될지라도 전반적인 가독성이 해소가 될거 같지는 않다는 생각이 들었어요!

그리고 저도 생성은 CompletedCredit에게 넘기는게 좋아보입니다!!


private CompletedCredit createNormalCultureCompletedCreditModel(List<CompletedCredit> completedCredits,
GraduationResult graduationResult) {
return completedCredits.stream()
.filter(completedCredit -> completedCredit.getGraduationCategory() == NORMAL_CULTURE)
.map(completedCredit -> CompletedCredit.builder()
.id(completedCredit.getId())
.totalCredit(graduationResult.getNormalCultureGraduationResult().getTotalCredit())
.takenCredit(graduationResult.getNormalCultureGraduationResult().getTakenCredit())
.graduationCategory(NORMAL_CULTURE).build())

Check warning on line 98 in src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java#L95-L98

Added lines #L95 - L98 were not covered by tests
.findFirst()
.orElse(CompletedCredit.builder()
.totalCredit(graduationResult.getNormalCultureGraduationResult().getTotalCredit())
.takenCredit(graduationResult.getNormalCultureGraduationResult().getTakenCredit())
.graduationCategory(NORMAL_CULTURE).build());
}

private CompletedCredit createFreeElectiveCompletedCreditModel(List<CompletedCredit> completedCredits,
GraduationResult graduationResult) {
return completedCredits.stream()
.filter(completedCredit -> completedCredit.getGraduationCategory() == FREE_ELECTIVE)
.map(completedCredit -> CompletedCredit.builder()
.id(completedCredit.getId())
.totalCredit(graduationResult.getFreeElectiveGraduationResult().getTotalCredit())
.takenCredit(graduationResult.getFreeElectiveGraduationResult().getTakenCredit())
.graduationCategory(FREE_ELECTIVE).build())

Check warning on line 114 in src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/application/service/GenerateOrModifyCompletedCreditService.java#L111-L114

Added lines #L111 - L114 were not covered by tests
.findFirst()
.orElse(CompletedCredit.builder()
.totalCredit(graduationResult.getFreeElectiveGraduationResult().getTotalCredit())
.takenCredit(graduationResult.getFreeElectiveGraduationResult().getTakenCredit())
.graduationCategory(FREE_ELECTIVE).build());
}
}
Original file line number Diff line number Diff line change
@@ -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<CompletedCredit> findCompletedCredits(Long userId);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.plzgraduate.myongjigraduatebe.completedcredit.application.usecase;

import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationResult;
import com.plzgraduate.myongjigraduatebe.user.domain.model.User;

public interface GenerateOrModifyCompletedCreditUseCase {

void generateOrModifyCompletedCredit(User user, GraduationResult graduationResult);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.plzgraduate.myongjigraduatebe.completedcredit.domain.model;

import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory;

import lombok.Builder;
import lombok.Getter;

@Getter
public class CompletedCredit {

private final Long id;
private final GraduationCategory graduationCategory;
private final int totalCredit;
private final 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;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence;

import java.util.List;
import java.util.stream.Collectors;

import com.plzgraduate.myongjigraduatebe.completedcredit.application.port.FindCompletedCreditPort;
import com.plzgraduate.myongjigraduatebe.completedcredit.domain.model.CompletedCredit;
import com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.mapper.CompletedCreditPersistenceMapper;
import com.plzgraduate.myongjigraduatebe.completedcredit.infrastructure.persistence.repository.CompletedCreditRepository;
import com.plzgraduate.myongjigraduatebe.core.meta.PersistenceAdapter;
import com.plzgraduate.myongjigraduatebe.user.domain.model.User;
import com.plzgraduate.myongjigraduatebe.user.infrastructure.adapter.persistence.mapper.UserMapper;

import lombok.RequiredArgsConstructor;

@PersistenceAdapter
@RequiredArgsConstructor
public class FindCompletedCreditAdapter implements FindCompletedCreditPort {

private final UserMapper userMapper;
private final CompletedCreditPersistenceMapper completedCreditPersistenceMapper;
private final CompletedCreditRepository completedCreditRepository;
@Override
public List<CompletedCredit> findCompletedCredit(User user) {
return completedCreditRepository.findAllByUserJpaEntity(userMapper.mapToJpaEntity(user)).stream()
.map(completedCreditPersistenceMapper::mapToDomainModel)
.collect(Collectors.toList());

Check warning on line 27 in src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/FindCompletedCreditAdapter.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/com/plzgraduate/myongjigraduatebe/completedcredit/infrastructure/persistence/FindCompletedCreditAdapter.java#L25-L27

Added lines #L25 - L27 were not covered by tests
}
}
Original file line number Diff line number Diff line change
@@ -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<CompletedCredit> completedCredits) {
List<CompletedCreditJpaEntity> completedCreditJpaEntities = completedCredits.stream()
.map(completedCredit -> completedCreditPersistenceMapper.mapToJpaEntity(user, completedCredit))
.collect(Collectors.toList());

completedCreditRepository.saveAll(completedCreditJpaEntities);
}
}
Loading
Loading