package sample.controller;
import java.math.BigDecimal;
import java.time.*;
import java.util.*;
import java.util.stream.Collectors;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import lombok.*;
import sample.ActionStatusType;
import sample.context.Dto;
import sample.model.asset.CashInOut;
import sample.model.asset.CashInOut.RegCashOut;
import sample.usecase.AssetService;
/**
* 資産に関わる顧客のUI要求を処理します。
*/
@RestController
@RequestMapping("/api/asset")
@Setter
public class AssetController extends ControllerSupport {
@Autowired
private AssetService service;
/** 未処理の振込依頼情報を検索します。 */
@GetMapping("/cio/unprocessedOut/")
public List<CashOutUI> findUnprocessedCashOut() {
return service.findUnprocessedCashOut().stream().map((cio) -> CashOutUI.of(cio)).collect(Collectors.toList());
}
/**
* 振込出金依頼をします。
* low: RestControllerの標準の振る舞いとしてvoidやプリミティブ型はJSON化されないので注意してください。
* (解析時の優先順位の関係だと思いますが)
*/
@PostMapping("/cio/withdraw")
public ResponseEntity<Long> withdraw(@Valid RegCashOut p) {
return result(() -> service.withdraw(p));
}
/** 振込出金依頼情報の表示用Dto */
@Value
public static class CashOutUI implements Dto {
private static final long serialVersionUID = 1L;
private Long id;
private String currency;
private BigDecimal absAmount;
private LocalDate requestDay;
private LocalDateTime requestDate;
private LocalDate eventDay;
private LocalDate valueDay;
private ActionStatusType statusType;
private LocalDateTime updateDate;
private Long cashflowId;
public static CashOutUI of(final CashInOut cio) {
return new CashOutUI(cio.getId(), cio.getCurrency(), cio.getAbsAmount(), cio.getRequestDay(),
cio.getRequestDate(), cio.getEventDay(), cio.getValueDay(), cio.getStatusType(),
cio.getUpdateDate(), cio.getCashflowId());
}
}
}