bank-emul/cmd/cli/main.go
2026-03-07 16:33:42 +03:00

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")
}
}
}