82 lines
1.7 KiB
Go
82 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"os"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"bank-emulator/internal/storage"
|
|
)
|
|
|
|
func main() {
|
|
store := storage.New("bank_data.json")
|
|
scanner := bufio.NewScanner(os.Stdin)
|
|
|
|
fmt.Println("Bank CLI. Commands: add, card, topup, list, quit")
|
|
|
|
for {
|
|
fmt.Print("> ")
|
|
if !scanner.Scan() {
|
|
break
|
|
}
|
|
parts := strings.Fields(scanner.Text())
|
|
if len(parts) == 0 {
|
|
continue
|
|
}
|
|
|
|
switch parts[0] {
|
|
case "add":
|
|
if len(parts) < 2 {
|
|
fmt.Println("usage: add <name>")
|
|
continue
|
|
}
|
|
acc := store.AddAccount(strings.Join(parts[1:], " "))
|
|
store.Save()
|
|
fmt.Printf("Created account #%d: %s\n", acc.ID, acc.Name)
|
|
|
|
case "card":
|
|
if len(parts) < 2 {
|
|
fmt.Println("usage: card <account_id>")
|
|
continue
|
|
}
|
|
id, _ := strconv.Atoi(parts[1])
|
|
card, err := store.AddCard(id)
|
|
if err != nil {
|
|
fmt.Println("Error:", err)
|
|
continue
|
|
}
|
|
store.Save()
|
|
fmt.Printf("Card created:\n Number: %s\n Holder: %s\n Expiry: %s\n CVV: %s\n", card.Number, card.HolderName, card.Expiry, card.CVV)
|
|
|
|
case "topup":
|
|
if len(parts) < 3 {
|
|
fmt.Println("usage: topup <card_number> <amount>")
|
|
continue
|
|
}
|
|
amount, _ := strconv.ParseFloat(parts[2], 64)
|
|
if err := store.TopUp(parts[1], amount); err != nil {
|
|
fmt.Println("Error:", err)
|
|
continue
|
|
}
|
|
store.Save()
|
|
fmt.Printf("Topped up %s with %.2f\n", parts[1], amount)
|
|
|
|
case "list":
|
|
for _, acc := range store.ListAccounts() {
|
|
fmt.Printf("Account #%d: %s\n", acc.ID, acc.Name)
|
|
for _, c := range acc.Cards {
|
|
fmt.Printf(" Card: %s Balance: %.2f\n", c.Number, c.Balance)
|
|
}
|
|
}
|
|
|
|
case "quit", "exit":
|
|
return
|
|
|
|
default:
|
|
fmt.Println("Unknown command. Available: add, card, topup, list, quit")
|
|
}
|
|
}
|
|
}
|