Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
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
22 changes: 18 additions & 4 deletions src/main/java/com/track/fin/controller/AccountController.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.track.fin.domain.Account;
import com.track.fin.record.*;
import com.track.fin.service.AccountManagementService;
import com.track.fin.service.AccountService;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
Expand All @@ -18,6 +19,7 @@
public class AccountController {

private final AccountService accountService;
private final AccountManagementService accountManagementService;

@PostMapping
public Account createAccount(
Expand All @@ -42,11 +44,12 @@ public Account getAccount(
return accountService.getAccount(id);
}

@DeleteMapping
public AccountRecord deleteAccount(
@RequestBody @Valid DeleteAccountRecord deleteAccountRecord
@PostMapping("/restore")
public AccountRecord restoreAccount(
@RequestParam Long userId,
@RequestParam String accountNumber
) {
return accountService.deleteAccount(deleteAccountRecord);
return accountManagementService.restoreAccount(userId, accountNumber);
}

@GetMapping("/{accountNumber}/transactions")
Expand Down Expand Up @@ -99,4 +102,15 @@ public boolean validateAutoTransferNotRegistered(
return accountService.validateAutoTransferNotRegistered(accountNumber);
}

@DeleteMapping
public AccountRecord deleteAccount(@Valid @RequestBody DeleteAccountRecord request) {
return accountManagementService.deleteAccount(request);
}

@DeleteMapping("/expired/{accountNumber}")
public void deleteExpiredAccount(@PathVariable String accountNumber) {
Account account = accountService.getAccountByNumber(accountNumber);
accountManagementService.deleteIfExpired(account);
}

}
83 changes: 58 additions & 25 deletions src/main/java/com/track/fin/controller/TransactionController.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,38 +5,47 @@
import com.track.fin.exception.AccountException;
import com.track.fin.record.*;
import com.track.fin.service.TransactionService;
import com.track.fin.type.TransactionType;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.util.List;

@Slf4j
@RequiredArgsConstructor
@RestController
@RequestMapping("/transactions")
public class TransactionController {

private final TransactionService transactionService;

@PostMapping("transaction/use")
public UseBalance.Response useBalance(
@Valid @RequestBody UseBalance.Request requset
@PostMapping("/use")
public TransferResponseRecord useBalance(
@Valid @RequestBody UseBalance.Request request
) {
try {
return UseBalance.Response.from(transactionService.useBalance(requset.getUserId(),
requset.getAccountNumber(), requset.getAmount())
return transactionService.useBalance(
request.getUserId(),
request.getAccountNumber(),
request.getAmount(),
request.getTransactionMethodType()
);
} catch (AccountException e) {
log.error("Failed to use balance. ");

log.error("잔액 사용 실패: {}", e.getMessage());
transactionService.saveFailedUseTransaction(
requset.getAccountNumber(),
requset.getAmount()
request.getAccountNumber(),
request.getAmount(),
request.getTransactionMethodType()
);
throw e;
}
}

@PostMapping("/transaction/deposit")
@PostMapping("/deposit")
public DepositRecord deposit(
@Valid @RequestBody DepositTransactionRecord request
) {
Expand All @@ -45,21 +54,23 @@ public DepositRecord deposit(
transactionService.deposit(
request.userId(),
request.accountNumber(),
request.amount()
request.amount(),
request.transactionMethodType()
)
);
} catch (AccountException e) {
log.error("Failed to deposit.");
log.error("입금 실패: {}", e.getMessage());

transactionService.saveFailedDepositTransaction(
request.accountNumber(),
request.amount()
request.amount(),
request.transactionMethodType()
);
throw e;
}
}

@PostMapping("/transaction/transfer")
@PostMapping("/transfer")
public TransferResponseRecord transfer(
@Valid @RequestBody TransferRequestRecord request
) {
Expand All @@ -68,20 +79,35 @@ public TransferResponseRecord transfer(
request.userId(),
request.fromAccountNumber(),
request.toAccountNumber(),
request.amount()
request.amount(),
request.transactionMethodType()
);
} catch (AccountException e) {
log.error("Failed to transfer.");
log.error("이체 실패: {}", e.getMessage());
transactionService.saveFailedTransferTransaction(
request.fromAccountNumber(),
request.toAccountNumber(),
request.amount()
request.amount(),
request.transactionMethodType()
);
throw e;
}
}

@PostMapping("/transaction/withdraw")
@GetMapping("/transfers")
public List<TransferResponseRecord> getTransfers(
@RequestParam String accountNumber,
Comment thread
Paransaik marked this conversation as resolved.
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime startDate,
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime endDate,
@RequestParam(required = false) TransactionType transactionType,
@RequestParam(defaultValue = "false") boolean sortDesc
) {
return transactionService.getTransferTransactionsByAccount(
accountNumber, startDate, endDate, transactionType, sortDesc
);
}

@PostMapping("/withdraw")
public WithdrawalRecord withdraw(
@Valid @RequestBody WithdrawalRequestRecord request
) {
Expand All @@ -90,37 +116,44 @@ public WithdrawalRecord withdraw(
transactionService.withdraw(
request.userId(),
request.accountNumber(),
request.amount()
request.amount(),
request.transactionMethodType()
)
);
} catch (AccountException e) {
log.error("Failed to withdraw.");
transactionService.saveFailedWithdrawTransaction(request.accountNumber(), request.amount());
log.error("출금 실패: {}", e.getMessage());
transactionService.saveFailedWithdrawTransaction(
request.accountNumber(),
request.amount(),
request.transactionMethodType()
);
throw e;
}
}

@PostMapping("/transaction/cancel")
@PostMapping("/cancel")
public TransferResponseRecord cancelBalance(
@Valid @RequestBody CancelBalance.Request request
) {
try {
return transactionService.cancelBalance(
String.valueOf(request.getTransactionId()),
request.getAccountNumber(),
request.getAmount()
request.getAmount(),
request.getTransactionMethodType()
);
} catch (AccountException e) {
log.error("Cancel failed", e);
transactionService.saveFailedCancelTransaction(
request.getAccountNumber(),
request.getAmount()
request.getAmount(),
request.getTransactionMethodType()
);
throw e;
}
}

@GetMapping("/transaction/{transactionId}")
@GetMapping("/{transactionId}")
public TransferResponseRecord queryTransaction(
@PathVariable String transactionId) {
return transactionService.queryTransactionId(transactionId);
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/com/track/fin/dto/CancelBalance.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.track.fin.dto;

import com.track.fin.type.TransactionMethodType;
import com.track.fin.type.TransactionResultType;
import jakarta.validation.constraints.*;
import lombok.AllArgsConstructor;
Expand All @@ -24,6 +25,10 @@ public static class Request {
@Min(10)
@Max(1000_000_000)
private Long amount;

@NotNull
private TransactionMethodType transactionMethodType;

}

@Getter
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/com/track/fin/dto/UseBalance.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.track.fin.dto;

import com.track.fin.type.TransactionMethodType;
import com.track.fin.type.TransactionResultType;
import jakarta.validation.constraints.*;
import lombok.AllArgsConstructor;
Expand All @@ -26,6 +27,9 @@ public static class Request {
@Min(10)
@Max(1000_000_000)
private Long amount;

@NotNull
private TransactionMethodType transactionMethodType;
}

@Getter
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/track/fin/record/DepositRecord.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@

import com.track.fin.domain.Transaction;


public record DepositRecord(

String transactionId,
String accountNumber,
Long amount,
Long balanceSnapshot

) {

public static DepositRecord from(Transaction transaction) {
Expand Down
17 changes: 16 additions & 1 deletion src/main/java/com/track/fin/record/DepositTransactionRecord.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,25 @@
package com.track.fin.record;

import com.track.fin.type.TransactionMethodType;
import jakarta.validation.constraints.*;

public record DepositTransactionRecord(

@NotNull
@Min(1)
Long userId,

@NotBlank
@Size(min = 10, max = 10)
String accountNumber,
Long amount

@NotNull
@Min(10)
@Max(1_000_000_000)
Long amount,

@NotNull
TransactionMethodType transactionMethodType

) {
}
Expand Down
19 changes: 18 additions & 1 deletion src/main/java/com/track/fin/record/TransferRequestRecord.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,29 @@
package com.track.fin.record;

import com.track.fin.type.TransactionMethodType;
import jakarta.validation.constraints.*;

public record TransferRequestRecord(

@NotNull
@Min(1)
Long userId,

@NotBlank
@Size(min = 10, max = 10)
String fromAccountNumber,

@NotBlank
@Size(min = 10, max = 10)
String toAccountNumber,
Long amount

@NotNull
@Min(10)
@Max(1_000_000_000)
Long amount,

@NotNull
TransactionMethodType transactionMethodType
) {
}

10 changes: 7 additions & 3 deletions src/main/java/com/track/fin/record/TransferResponseRecord.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.track.fin.record;

import com.track.fin.domain.Transaction;
import com.track.fin.type.TransactionType;

import java.time.LocalDateTime;

Expand All @@ -12,7 +13,8 @@ public record TransferResponseRecord(
Long amount,
Long fromBalanceSnapshot,
Long toBalanceSnapshot,
LocalDateTime transactionDate
LocalDateTime transactionDate,
TransactionType transactionType

) {

Expand All @@ -24,7 +26,8 @@ public static TransferResponseRecord from(Transaction fromTransaction, Transacti
fromTransaction.getAmount(),
fromTransaction.getBalanceSnapshot(),
toTransaction.getBalanceSnapshot(),
fromTransaction.getTransactionDate()
fromTransaction.getTransactionDate(),
fromTransaction.getTransactionType()
);
}

Expand All @@ -36,7 +39,8 @@ public static TransferResponseRecord from(Transaction transaction) {
transaction.getAmount(),
transaction.getBalanceSnapshot(),
null,
transaction.getTransactionDate()
transaction.getTransactionDate(),
transaction.getTransactionType()
);
}

Expand Down
17 changes: 15 additions & 2 deletions src/main/java/com/track/fin/record/WithdrawalRequestRecord.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,24 @@
package com.track.fin.record;

import com.track.fin.type.TransactionMethodType;
import jakarta.validation.constraints.*;

public record WithdrawalRequestRecord(

@NotNull
@Min(1)
Long userId,

@NotBlank
String accountNumber,
Long amount

@NotNull
@Min(10)
@Max(1000000000)
Long amount,

@NotNull
TransactionMethodType transactionMethodType

) {
}

Loading