Skip to content

Commit a0da5f6

Browse files
committed
[fix]deposit update
1 parent 48b5a51 commit a0da5f6

4 files changed

Lines changed: 46 additions & 13 deletions

File tree

backend/pirocheck/src/main/java/backend/pirocheck/Assignment/service/AssignmentService.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313
import backend.pirocheck.Assignment.entity.AssignmentStatus;
1414
import backend.pirocheck.Assignment.repository.AssignmentItemRepository;
1515
import backend.pirocheck.Assignment.repository.AssignmentRepository;
16+
import backend.pirocheck.Deposit.entity.Deposit;
17+
import backend.pirocheck.Deposit.repository.DepositRepository;
18+
import backend.pirocheck.Deposit.service.DepositService;
1619
import backend.pirocheck.User.entity.Role;
1720
import backend.pirocheck.User.entity.User;
1821
import backend.pirocheck.User.repository.UserRepository;
@@ -33,6 +36,7 @@ public class AssignmentService {
3336
private final AssignmentItemRepository assignmentItemRepository;
3437
private final AssignmentRepository assignmentRepository;
3538
private final UserRepository userRepository;
39+
private final DepositService depositService;
3640

3741
public List<AssignmentWeekRes> search(Long userId) {
3842

@@ -163,6 +167,9 @@ public AssignmentStatus createAssignmentItem(Long userId, Long assignmentId, Ass
163167

164168
assignmentItemRepository.save(assignmentItem);
165169

170+
// 보증금 즉시 재계산
171+
depositService.recalculateDeposit(userId);
172+
166173
return assignmentItem.getSubmitted();
167174
}
168175

@@ -177,10 +184,12 @@ public AssignmentStatus updateAssignmentItem(Long userId, Long assignmentId, Ass
177184
AssignmentItem assignmentItem = assignmentItemRepository.findByUserAndAssignment(user, assignment)
178185
.orElseThrow(() -> new IllegalArgumentException("해당 유저의 과제 채점 결과가 없습니다."));
179186

180-
assignmentItem.update(req.getStatus()); // 상태 업데이트
181187

188+
assignmentItem.update(req.getStatus()); // 상태 업데이트
182189
assignmentItemRepository.save(assignmentItem); // 상태 저장
183190

191+
// 보증금 즉시 재계산
192+
depositService.recalculateDeposit(userId);
184193
return assignmentItem.getSubmitted();
185194
}
186195
}

backend/pirocheck/src/main/java/backend/pirocheck/Attendance/repository/AttendanceRepository.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,5 @@ public interface AttendanceRepository extends JpaRepository<Attendance, Long> {
2020

2121
// 특정 날짜와 차수에 대한 모든 출석 기록 조회
2222
List<Attendance> findByDateAndOrder(LocalDate date, int order);
23+
2324
}

backend/pirocheck/src/main/java/backend/pirocheck/Attendance/service/AttendanceService.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package backend.pirocheck.Attendance.service;
22

3+
import backend.pirocheck.Deposit.entity.Deposit;
4+
import backend.pirocheck.Deposit.repository.DepositRepository;
5+
import backend.pirocheck.Deposit.service.DepositService;
36
import backend.pirocheck.User.entity.Role;
47
import backend.pirocheck.User.entity.User;
58
import backend.pirocheck.User.repository.UserRepository;
@@ -30,6 +33,7 @@ public class AttendanceService {
3033
private final AttendanceRepository attendanceRepository;
3134
private final AttendanceCodeRepository attendanceCodeRepository;
3235
private final UserRepository userRepository;
36+
private final DepositService depositService;
3337

3438
// 출석코드 생성 함수
3539
@Transactional
@@ -121,6 +125,7 @@ public String expireAttendanceCode(String code) {
121125
attendanceCode.setExpired(true);
122126
attendanceCodeRepository.save(attendanceCode);
123127

128+
124129
return "출석 코드가 성공적으로 만료되었습니다";
125130
}
126131

@@ -171,6 +176,9 @@ public AttendanceMarkResponse markAttendance(Long userId, String inputCode) {
171176
attendance.setStatus(true);
172177
attendanceRepository.save(attendance);
173178

179+
//보증금 재계산
180+
depositService.recalculateDeposit(userId);
181+
174182
return AttendanceMarkResponse.success();
175183
}
176184

@@ -223,6 +231,10 @@ public boolean updateAttendanceStatus(Long attendanceId, boolean status) {
223231
Attendance attendance = attendanceOpt.get();
224232
attendance.setStatus(status);
225233
attendanceRepository.save(attendance);
234+
235+
// 출석 변경 → 보증금 재계산
236+
depositService.recalculateDeposit(attendance.getUser().getId());
237+
226238
return true;
227239
}
228240

backend/pirocheck/src/main/java/backend/pirocheck/Deposit/service/DepositService.java

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,29 +28,40 @@ public DepositResDto getDeposit(Long userId) {
2828
.orElseThrow(() -> new IllegalArgumentException("존재하지 않는 유저입니다."));
2929

3030
Deposit deposit = depositRepository.findByUser(user);
31+
calculateAndSave(user, deposit);
3132

32-
// 출석 실패
33+
return DepositResDto.builder()
34+
.amount(deposit.getAmount())
35+
.descentAssignment(deposit.getDescentAssignment())
36+
.descentAttendance(deposit.getDescentAttendance())
37+
.ascentDefence(deposit.getAscentDefence())
38+
.build();
39+
}
40+
41+
// 보증금 재계산 (내부 로직만 수행)
42+
@Transactional
43+
public void recalculateDeposit(Long userId) {
44+
User user = userRepository.findById(userId)
45+
.orElseThrow(() -> new IllegalArgumentException("존재하지 않는 유저입니다."));
46+
47+
Deposit deposit = depositRepository.findByUser(user);
48+
calculateAndSave(user, deposit);
49+
}
50+
51+
// 공통 계산 로직
52+
private void calculateAndSave(User user, Deposit deposit) {
53+
//출석
3354
int failAttendanceCount = attendanceRepository.countByUserAndStatusFalse(user);
3455
int descentAttendance = failAttendanceCount * 10_000;
3556

36-
// 과제 실패
57+
//과제
3758
int failAssignmentCount = assignmentItemRepository.countByUserAndSubmitted(user, AssignmentStatus.FAILURE);
3859
int weakAssignmentCount = assignmentItemRepository.countByUserAndSubmitted(user, AssignmentStatus.INSUFFICIENT);
3960
int descentAssignment = failAssignmentCount * 20_000 + weakAssignmentCount * 10_000;
4061

41-
// 방어권
4262
int ascentDefence = deposit.getAscentDefence();
4363

44-
// 보증금 업데이트
4564
deposit.updateAmounts(descentAssignment, descentAttendance, ascentDefence);
4665
depositRepository.save(deposit);
47-
48-
return DepositResDto.builder()
49-
.amount(deposit.getAmount())
50-
.descentAssignment(deposit.getDescentAssignment())
51-
.descentAttendance(deposit.getDescentAttendance())
52-
.ascentDefence(deposit.getAscentDefence())
53-
.build();
54-
5566
}
5667
}

0 commit comments

Comments
 (0)