/
niki02
/
Practice_SBER
Обзор
Документация
Войти
/
niki02
/
Practice_SBER
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/main/java/com/example/creditcalculator/api/LoanController.java
90 строк
3 KB
nikgilae
final commit
23 июн 2026, 12:08
23 июн 2026, 12:08
9a5fbe1
Код
Авторство
О чём код?
package com.example.creditcalculator.api; import com.example.creditcalculator.service.EarlyRepaymentService; import com.example.creditcalculator.service.LoanService; import com.example.creditcalculator.api.AccountSummaryResponse; import com.example.creditcalculator.service.OverdueService; import com.example.creditcalculator.service.PaymentProcessor; import jakarta.validation.Valid; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; import java.time.LocalDate; import java.util.UUID; @RestController @RequestMapping("/loans") public class LoanController { private final LoanService loanService; private final PaymentProcessor paymentProcessor; private final OverdueService overdueService; private final EarlyRepaymentService earlyRepaymentService; public LoanController(LoanService loanService, PaymentProcessor paymentProcessor, OverdueService overdueService, EarlyRepaymentService earlyRepaymentService) { this.loanService = loanService; this.paymentProcessor = paymentProcessor; this.overdueService = overdueService; this.earlyRepaymentService = earlyRepaymentService; } @PostMapping @ResponseStatus(HttpStatus.CREATED) public LoanResponse createLoan(@RequestBody @Valid CreateLoanRequest request) { return loanService.createLoan(request); } @GetMapping("/{id}") public LoanResponse getLoan(@PathVariable UUID id) { return loanService.getLoan(id); } @GetMapping("/{id}/schedule") public ScheduleResponse getSchedule( @PathVariable UUID id, @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate asOf) { return loanService.getSchedule(id, asOf); } @PostMapping("/{id}/payments") @ResponseStatus(HttpStatus.CREATED) public LoanResponse processPayment( @PathVariable UUID id, @RequestBody @Valid PaymentRequest request) { return paymentProcessor.processPayment(id, request.amount(), request.date()); } @PostMapping("/{id}/overdue") @ResponseStatus(HttpStatus.CREATED) public LoanResponse recordOverdue( @PathVariable UUID id, @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate overdueDate) { return overdueService.recordOverdue(id, overdueDate); } @GetMapping("/{id}/early-repayment/preview") public EarlyRepaymentPreviewResponse earlyRepaymentPreview( @PathVariable UUID id, @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate date, @RequestParam com.example.creditcalculator.domain.RepaymentType repaymentType, @RequestParam java.math.BigDecimal amount) { return earlyRepaymentService.preview(id, amount, repaymentType, date); } @PostMapping("/{id}/early-repayment") @ResponseStatus(HttpStatus.CREATED) public LoanResponse executeEarlyRepayment( @PathVariable UUID id, @RequestBody @Valid EarlyRepaymentRequest request) { return earlyRepaymentService.execute(id, request.amount(), request.repaymentType(), request.date()); } @GetMapping("/{id}/account-summary") public AccountSummaryResponse getAccountSummary(@PathVariable UUID id) { return loanService.getAccountSummary(id); } }