Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,15 @@ public GetMyAssignmentsResponse getMyAssignments(
return assignmentService.getMyAssignments(userId, week);
}

// 5. 생성한 과제 조회 (운영진)
@Operation(summary = "과제 목록 조회", description = "주차별로 화/목/토 과제 목록을 조회합니다.")
@GetMapping("/{week}/view")
public AssignmentWeekViewResponse getAssignmentView(
@PathVariable String week
) {
return assignmentService.getAssignmentView(week);
}


}

Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.example.Piroin.project.domain.assignment.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;

import java.time.LocalDate;
import java.util.List;

@Getter
@Builder
@AllArgsConstructor
public class AssignmentWeekViewResponse {

private String week;

private List<DayAssignmentResponse> days;

@Getter
@Builder
@AllArgsConstructor
public static class DayAssignmentResponse {
private String day;
private LocalDate sessionDate;
private List<AssignmentInfo> assignments;
}

@Getter
@Builder
@AllArgsConstructor
public static class AssignmentInfo {
private Integer assignmentId;
private String title;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,6 @@ public interface AssignmentRepository extends JpaRepository<Assignment, Integer>
List<Assignment> findByWeekOrderBySessionDateAsc(String week);

List<Assignment> findBySessionDate(LocalDate sessionDate);

List<Assignment> findBySessionDateOrderByIdAsc(LocalDate sessionDate);
}
Original file line number Diff line number Diff line change
Expand Up @@ -338,4 +338,44 @@ public StudentWeeklyStatusResponse getStudentWeeklyStatus(
.days(dayResponses)
.build();
}


// 6. 생성한 과제 조회
@Transactional(readOnly = true)
public AssignmentWeekViewResponse getAssignmentView(String week) {

Long weekValue = Long.valueOf(week);

List<StudySession> sessions =
curriculumRepository.findByWeekOrderBySessionDateAsc(weekValue);

List<AssignmentWeekViewResponse.DayAssignmentResponse> days =
sessions.stream()
.map(session -> {
LocalDate sessionDate = session.getSessionDate();

List<AssignmentWeekViewResponse.AssignmentInfo> assignments =
assignmentRepository.findBySessionDateOrderByIdAsc(sessionDate)
.stream()
.map(assignment ->
AssignmentWeekViewResponse.AssignmentInfo.builder()
.assignmentId(assignment.getId())
.title(assignment.getTitle())
.build()
)
.toList();

return AssignmentWeekViewResponse.DayAssignmentResponse.builder()
.day(sessionDate.getDayOfWeek().toString())
.sessionDate(sessionDate)
.assignments(assignments)
.build();
})
.toList();

return AssignmentWeekViewResponse.builder()
.week(week)
.days(days)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ public interface CurriculumRepository extends JpaRepository<StudySession, Long>

List<StudySession> findAllByOrderBySessionDateAscDayPartAsc();

List<StudySession> findByWeekOrderBySessionDateAsc(Long week);

// @Query("""
// SELECT s
// FROM StudySession s
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package com.example.Piroin.project.domain.deposit.controller;

import com.example.Piroin.project.domain.deposit.dto.AdminDepositViewResponse;
import com.example.Piroin.project.domain.deposit.dto.DepositResponse;
import com.example.Piroin.project.domain.deposit.dto.UpdateDefenceRequest;
import com.example.Piroin.project.domain.deposit.dto.UpdateDefenceResponse;
import com.example.Piroin.project.domain.deposit.service.DepositService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
Expand All @@ -16,7 +19,9 @@ public class DepositController {

private final DepositService depositService;

@Operation(summary = "나의 보증금 조회", description = "사용자가 본인의 남은 보증금, 차감된 보증금, 방어권을 조회합니다.")

// 1. 나의 보증금 조회
@Operation(summary = "(부원) 나의 보증금 조회", description = "사용자가 본인의 남은 보증금, 차감된 보증금, 방어권을 조회합니다.")
@GetMapping("/me")
public DepositResponse getMyDeposit(
Authentication authentication
Expand All @@ -26,4 +31,24 @@ public DepositResponse getMyDeposit(

return depositService.getMyDeposit(userId);
}


// 2. 운영진이 특정 부원의 보증금을 조회
@Operation(summary = "(운영진) 특정 부원 보증금 조회", description = "운영진이 특정 부원의 보증금 상태를 조회합니다.")
@GetMapping("/{userId}/deposit/view")
public AdminDepositViewResponse getUserDeposit(
@PathVariable Long userId
) {
return depositService.getUserDeposit(userId);
}

// 3. 운영진이 특정 부원의 보증금 정보를 수정
@Operation(summary = "(운영진) 특정 부원 보증금 방어권 수정", description = "운영진이 특정 부원의 보증금 방어권 금액을 수정합니다.")
@PatchMapping("/{userId}/deposit/defence")
public UpdateDefenceResponse updateUserDefence(
@PathVariable Long userId,
@RequestBody UpdateDefenceRequest request
) {
return depositService.updateUserDefence(userId, request);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.example.Piroin.project.domain.deposit.dto;

import lombok.Builder;
import lombok.Getter;

@Getter
@Builder
public class AdminDepositViewResponse {

private Long userId;

private String name;

private Integer amount;

private Integer descentAssignment;

private Integer descentAttendance;

private Integer ascentDefence;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.example.Piroin.project.domain.deposit.dto;

import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
public class UpdateDefenceRequest {

private Integer ascentDefence;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.example.Piroin.project.domain.deposit.dto;

import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public class UpdateDefenceResponse {

private Long userId;

private Integer amount;

private Integer ascentDefence;
}
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,18 @@ public void updateDepositAmount(
+ this.ascentDefence;
}

// 보증금 계산
public void updateDefenceAmount(Integer ascentDefence) {
this.ascentDefence = ascentDefence;

int baseAmount = 100_000;

this.amount = baseAmount
- this.descentAssignment
- this.descentAttendance
+ this.ascentDefence;
}


}

Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,5 @@ public interface DepositRepository extends JpaRepository<Deposit, Long> {
Optional<Deposit> findByUser(User user);

Optional<Deposit> findByUserId(Long userId);

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package com.example.Piroin.project.domain.deposit.service;

import com.example.Piroin.project.domain.attendance.repository.AttendanceRepository;
import com.example.Piroin.project.domain.deposit.dto.AdminDepositViewResponse;
import com.example.Piroin.project.domain.deposit.dto.DepositResponse;
import com.example.Piroin.project.domain.deposit.dto.UpdateDefenceRequest;
import com.example.Piroin.project.domain.deposit.dto.UpdateDefenceResponse;
import com.example.Piroin.project.domain.deposit.entity.Deposit;
import com.example.Piroin.project.domain.deposit.exception.DepositException;
import com.example.Piroin.project.domain.deposit.exception.code.DepositErrorCode;
Expand Down Expand Up @@ -54,4 +57,43 @@ public DepositResponse getMyDeposit(Long userId) {
.ascentDefence(deposit.getAscentDefence())
.build();
}


// 3. 운영진이 특정 부원의 보증금 조회 로직
@Transactional(readOnly = true)
public AdminDepositViewResponse getUserDeposit(Long userId) {

Deposit deposit = depositRepository.findByUserId(userId)
.orElseThrow(() -> new RuntimeException("보증금 정보가 존재하지 않습니다."));

return AdminDepositViewResponse.builder()
.userId(deposit.getUser().getId())
.name(deposit.getUser().getName())
.amount(deposit.getAmount())
.descentAssignment(deposit.getDescentAssignment())
.descentAttendance(deposit.getDescentAttendance())
.ascentDefence(deposit.getAscentDefence())
.build();
}

// 4. 운영진이 특정 부원의 보증금을 수정
@Transactional
public UpdateDefenceResponse updateUserDefence(
Long userId,
UpdateDefenceRequest request
) {

Deposit deposit = depositRepository.findByUserId(userId)
.orElseThrow(() -> new RuntimeException("보증금 정보가 존재하지 않습니다."));

if (request.getAscentDefence() != null) {
deposit.updateDefenceAmount(request.getAscentDefence());
}

return new UpdateDefenceResponse(
deposit.getUser().getId(),
deposit.getAmount(),
deposit.getAscentDefence()
);
}
}
Loading