source: server/account.go@ a531b45

main
Last change on this file since a531b45 was b715712, checked in by Stefan <trsunovstefan@…>, 8 weeks ago

Add the server side and configuration

  • Property mode set to 100644
File size: 2.3 KB
RevLine 
[b715712]1package main
2
3import (
4 "fmt"
5 "strconv"
6 "strings"
7
8 "bp_project/server/db"
9)
10
11// ShowBalance prints the logged-in user's balances.
12func ShowBalance(s *Session) {
13 var avail, invested float64
14 err := db.DB.QueryRow(
15 `SELECT available_balance, invested_balance FROM users WHERE id = $1`,
16 s.UserID,
17 ).Scan(&avail, &invested)
18 if err != nil {
19 fmt.Println("Error:", err)
20 return
21 }
22 fmt.Printf("\n Available: %.4f USD\n", avail)
23 fmt.Printf(" Invested : %.4f USD\n", invested)
24 fmt.Printf(" Total : %.4f USD\n", avail+invested)
25}
26
27// Deposit - UC0003
28// Transactional: updates users.available_balance and inserts a ledger row.
29func Deposit(s *Session) {
30 fmt.Println("\n-- Deposit virtual funds --")
31 amtStr := prompt("Amount (USD): ")
32 amt, err := strconv.ParseFloat(amtStr, 64)
33 if err != nil || amt <= 0 {
34 fmt.Println("Invalid amount.")
35 return
36 }
37
38 tx, err := db.DB.Begin()
39 if err != nil {
40 fmt.Println("Error:", err)
41 return
42 }
43 defer tx.Rollback()
44
45 if _, err := tx.Exec(
46 `UPDATE users
47 SET available_balance = available_balance + $1,
48 updated_at = now()
49 WHERE id = $2`,
50 amt, s.UserID,
51 ); err != nil {
52 fmt.Println("Error:", err)
53 return
54 }
55 if _, err := tx.Exec(
56 `INSERT INTO transactions (user_id, type, amount, currency, description)
57 VALUES ($1, 'deposit', $2, 'USD', 'Virtual deposit')`,
58 s.UserID, amt,
59 ); err != nil {
60 fmt.Println("Error:", err)
61 return
62 }
63 if err := tx.Commit(); err != nil {
64 fmt.Println("Error:", err)
65 return
66 }
67 fmt.Printf("Deposited %.4f USD.\n", amt)
68}
69
70// ShowTransactions lists the last 20 ledger entries for the user.
71func ShowTransactions(s *Session) {
72 rows, err := db.DB.Query(
73 `SELECT created_at, type, amount, currency, COALESCE(description, '')
74 FROM transactions
75 WHERE user_id = $1
76 ORDER BY created_at DESC
77 LIMIT 20`,
78 s.UserID,
79 )
80 if err != nil {
81 fmt.Println("Error:", err)
82 return
83 }
84 defer rows.Close()
85
86 fmt.Println()
87 fmt.Printf(" %-20s %-8s %12s %-3s %s\n", "When", "Type", "Amount", "Cur", "Description")
88 fmt.Println(" " + strings.Repeat("-", 70))
89 for rows.Next() {
90 var when, typ, cur, desc string
91 var amt float64
92 if err := rows.Scan(&when, &typ, &amt, &cur, &desc); err != nil {
93 fmt.Println("scan error:", err)
94 return
95 }
96 fmt.Printf(" %-20s %-8s %12.4f %-3s %s\n", when[:19], typ, amt, cur, desc)
97 }
98}
Note: See TracBrowser for help on using the repository browser.