Skip to content

Commit 5d2ea51

Browse files
authored
Merge pull request #159 from pirogramming/backend_sj
[fix] 보증금 로직 수정
2 parents cf4c580 + 43ea002 commit 5d2ea51

9 files changed

Lines changed: 52 additions & 4 deletions

File tree

backend/pirocheck/src/main/java/backend/pirocheck/Deposit/controller/DepositController.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,23 @@
33

44
import backend.pirocheck.Deposit.dto.DepositResDto;
55
import backend.pirocheck.Deposit.service.DepositService;
6+
import io.swagger.v3.oas.annotations.Operation;
7+
import io.swagger.v3.oas.annotations.tags.Tag;
68
import lombok.RequiredArgsConstructor;
79
import org.springframework.web.bind.annotation.GetMapping;
810
import org.springframework.web.bind.annotation.PathVariable;
911
import org.springframework.web.bind.annotation.RequestMapping;
1012
import org.springframework.web.bind.annotation.RestController;
1113

14+
@Tag(name = "보증금 관리", description = "수강생 보증금/차감/방어권 관련 API")
1215
@RestController
1316
@RequestMapping("/api/deposit")
1417
@RequiredArgsConstructor
1518
public class DepositController {
1619

1720
private final DepositService depositService;
1821

22+
@Operation(summary = "보증금 조회", description = "해당 유저의 현재 보증금, 차감 내역, 방어권 금액을 반환합니다.")
1923
@GetMapping("/{userId}")
2024
public DepositResDto getDeposit(@PathVariable Long userId) {
2125
return depositService.getDeposit(userId);

backend/pirocheck/src/main/java/backend/pirocheck/Deposit/dto/DepositResDto.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package backend.pirocheck.Deposit.dto;
22

33

4+
import io.swagger.v3.oas.annotations.media.Schema;
45
import lombok.AllArgsConstructor;
56
import lombok.Builder;
67
import lombok.Getter;
@@ -11,9 +12,16 @@
1112
@NoArgsConstructor
1213
@AllArgsConstructor
1314
public class DepositResDto {
15+
@Schema(description = "현재 보증금 잔액", example = "110000")
1416
private int amount;
17+
18+
@Schema(description = "과제 차감 총액", example = "10000")
1519
private int descentAssignment;
20+
21+
@Schema(description = "출석 차감 총액", example = "10000")
1622
private int descentAttendance;
23+
24+
@Schema(description = "방어권 보상 총액", example = "10000")
1725
private int ascentDefence;
1826

1927
}

backend/pirocheck/src/main/java/backend/pirocheck/Deposit/entity/Deposit.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,14 @@ public void updateAmounts(int descentAssignment, int descentAttendance, int asce
3232
this.ascentDefence = ascentDefence;
3333

3434
int calculateAmount = 120000 - descentAssignment - descentAttendance + ascentDefence;
35-
this.amount = Math.min(calculateAmount, 120000); // 12만원 넘어가지 않도록
35+
this.amount = Math.max(0, Math.min(calculateAmount, 120000)); // 0 이상 12만원 이하
3636
}
3737

3838
// 방어권 업데이트
3939
public void updateDefence(int newAscentDefence) {
4040
this.ascentDefence = newAscentDefence;
4141
int calculateAmount = 120000 - this.descentAssignment - this.descentAttendance + newAscentDefence;
42-
this.amount = Math.min(calculateAmount, 120000);
42+
this.amount = Math.max(0, Math.min(calculateAmount, 120000)); // 0 이상 12만원 이하
4343

4444
}
4545

backend/pirocheck/src/main/java/backend/pirocheck/ManageStudents/Controller/ManageStudentsController.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@
44
import backend.pirocheck.ManageStudents.dto.response.ManageStudentDetailResDto;
55
import backend.pirocheck.ManageStudents.dto.response.ManageStudentsListResDto;
66
import backend.pirocheck.ManageStudents.service.ManageStudentsService;
7+
import io.swagger.v3.oas.annotations.Operation;
8+
import io.swagger.v3.oas.annotations.tags.Tag;
79
import lombok.RequiredArgsConstructor;
810
import org.springframework.web.bind.annotation.*;
911

1012
import java.util.List;
1113

14+
@Tag(name = "수강생 관리", description = "관리자가 수강생을 조회하고 방어권을 수정하는 API")
1215
@RestController
1316
@RequestMapping("/api/admin/managestudent")
1417
@RequiredArgsConstructor
@@ -17,18 +20,21 @@ public class ManageStudentsController {
1720
private final ManageStudentsService manageStudentsService;
1821

1922
// 수강생 리스트 조회
23+
@Operation(summary = "수강생 리스트 조회", description = "이름에 따라 수강생 리스트를 검색합니다.")
2024
@GetMapping("")
2125
public List<ManageStudentsListResDto> getStudents(@RequestParam(required = false) String name) {
2226
return manageStudentsService.searchMembers(name);
2327
}
2428

2529
// 수강생 상세 조회
30+
@Operation(summary = "수강생 상세 조회", description = "studentId로 해당 수강생의 보증금, 방어권, 과제 정보를 조회합니다.")
2631
@GetMapping("/{studentId}")
2732
public ManageStudentDetailResDto getStudentDetail(@PathVariable Long studentId) {
2833
return manageStudentsService.getMemberDetail(studentId);
2934
}
3035

3136
// 방어권 업데이트
37+
@Operation(summary = "방어권 수정", description = "studentId에 해당하는 수강생의 보증금 방어권 금액을 수정합니다.")
3238
@PatchMapping("/{studentId}/defence")
3339
public void updateDefence(@PathVariable Long studentId, @RequestBody DefenceUpdateReqDto req) {
3440
manageStudentsService.updateDefence(studentId, req.getDefence());
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
package backend.pirocheck.ManageStudents.dto.request;
22

33

4+
import io.swagger.v3.oas.annotations.media.Schema;
45
import lombok.Getter;
56
import lombok.Setter;
67

78
@Getter
89
@Setter
910
public class DefenceUpdateReqDto {
11+
12+
@Schema(description = "방어권 금액", example = "20000")
1013
private int defence;
14+
1115
}

backend/pirocheck/src/main/java/backend/pirocheck/ManageStudents/dto/response/ManageStudentDetailResDto.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package backend.pirocheck.ManageStudents.dto.response;
22

3-
import jakarta.transaction.Transactional;
3+
import io.swagger.v3.oas.annotations.media.Schema;
44
import lombok.Builder;
55
import lombok.Getter;
66

@@ -10,8 +10,15 @@
1010
@Builder
1111
public class ManageStudentDetailResDto {
1212

13+
@Schema(description = "수강생 이름", example = "김피로")
1314
private String name;
15+
16+
@Schema(description = "현재 보증금 잔액", example = "11000")
1417
private int deposit;
18+
19+
@Schema(description = "방어권 금액", example = "10000")
1520
private int defence; // 방어권
21+
22+
@Schema(description = "과제 제목 리스트", example = "[\"제로초 인강\", \"토스 클론\"]")
1623
private List<String> assignmentTitles; // 과제 제목 리스트
1724
}

backend/pirocheck/src/main/java/backend/pirocheck/User/controller/UserController.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,19 @@
55
import backend.pirocheck.User.entity.User;
66
import backend.pirocheck.User.repository.UserRepository;
77
import backend.pirocheck.User.service.UserService;
8+
import io.swagger.v3.oas.annotations.Operation;
9+
import io.swagger.v3.oas.annotations.tags.Tag;
810
import jakarta.servlet.http.HttpServletResponse;
911
import jakarta.servlet.http.HttpSession;
12+
import jakarta.validation.Valid;
1013
import lombok.RequiredArgsConstructor;
1114
import org.springframework.http.ResponseEntity;
1215
import org.springframework.web.bind.annotation.PostMapping;
1316
import org.springframework.web.bind.annotation.RequestBody;
1417
import org.springframework.web.bind.annotation.RequestMapping;
1518
import org.springframework.web.bind.annotation.RestController;
1619

20+
@Tag(name = "유저 인증", description = "로그인 / 로그아웃 API")
1721
@RestController
1822
@RequestMapping("/api")
1923
@RequiredArgsConstructor
@@ -22,8 +26,9 @@ public class UserController {
2226
private final UserService userService;
2327

2428
// 로그인
29+
@Operation(summary = "로그인", description = "사용자 이름과 비밀번호로 로그인하고 세션을 생성합니다.")
2530
@PostMapping("/login")
26-
public ResponseEntity<LoginResponse> login(@RequestBody LoginRequest request, HttpSession session) {
31+
public ResponseEntity<LoginResponse> login(@RequestBody @Valid LoginRequest request, HttpSession session) {
2732
User user = userService.login(request.getName(), request.getPassword());
2833

2934
//세션에 로그인 정보 저장
@@ -34,6 +39,7 @@ public ResponseEntity<LoginResponse> login(@RequestBody LoginRequest request, Ht
3439
}
3540

3641
// 로그아웃
42+
@Operation(summary = "로그아웃", description = "세션을 종료하여 로그아웃합니다.")
3743
@PostMapping("/logout")
3844
public ResponseEntity<Void> logout(HttpSession session) {
3945
session.invalidate(); // 세션 종료 (메모리에서 삭제)
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
package backend.pirocheck.User.dto.request;
22

3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
import jakarta.validation.constraints.NotBlank;
35
import lombok.Getter;
46
import lombok.Setter;
57

68
@Getter
79
@Setter
810
public class LoginRequest {
911

12+
@Schema(description = "사용자 이름", example = "김피로")
13+
@NotBlank(message = "이름을 입력해주세요.")
1014
private String name;
15+
16+
@Schema(description = "비밀번호", example = "qwer1234!")
17+
@NotBlank(message = "비밀번호를 입력해주세요.")
1118
private String password;
1219
}

backend/pirocheck/src/main/java/backend/pirocheck/User/dto/response/LoginResponse.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,19 @@
22

33

44
import backend.pirocheck.User.entity.User;
5+
import io.swagger.v3.oas.annotations.media.Schema;
56
import lombok.Getter;
67

78
@Getter
89
public class LoginResponse {
910

11+
@Schema(description = "유저 고유 ID", example = "1")
1012
private Long id;
13+
14+
@Schema(description = "유저 이름", example = "김피로")
1115
private String name;
16+
17+
@Schema(description = "유저 권한", example = "MEMBER")
1218
private String role;
1319

1420
public LoginResponse(User user) {

0 commit comments

Comments
 (0)