Files
Portfolio-Engine/internal/shell/company.go
2026-03-26 08:39:42 +01:00

77 lines
1.7 KiB
Go

package shell
import (
"Portifolio/internal/database"
"Portifolio/internal/model"
"bufio"
"database/sql"
"fmt"
"strconv"
"strings"
_ "github.com/mattn/go-sqlite3"
)
func AddCompany(scanner *bufio.Scanner, db *sql.DB) {
input := model.CompanyInput{}
fmt.Print(" symbol: ")
scanner.Scan()
input.Symbol = strings.TrimSpace(scanner.Text())
fmt.Print(" Shares outstanding: ")
scanner.Scan()
shares, err := strconv.Atoi(strings.TrimSpace(scanner.Text()))
if err != nil {
fmt.Println(" Invalid number for shares.")
return
}
input.SharesOutstanding = shares
fmt.Print(" Price: ")
scanner.Scan()
price, err := strconv.ParseFloat(strings.TrimSpace(scanner.Text()), 64)
if err != nil {
fmt.Println(" Invalid number for price.")
return
}
input.Price = price
fmt.Print(" Currency Code: ")
scanner.Scan()
input.CurrencyCode = strings.TrimSpace(scanner.Text())
if _, err := database.AddCompany(db, input); err != nil {
fmt.Println(" Error:", err)
return
}
fmt.Printf(" ✓ Company '%s' added.\n", input.Symbol)
}
func ListCompanies(db *sql.DB) {
companies, err := database.GetAllCompanies(db)
if err != nil {
fmt.Println(" ✗ Error:", err)
return
}
if len(companies) == 0 {
fmt.Println(" No companies found.")
return
}
fmt.Printf("\n %-5s %-20s %-10s %-15s %s\n", "ID", "NAME", "CURRENCY", "PRICE", "SHARES")
fmt.Println(" " + strings.Repeat("-", 60))
for _, c := range companies {
currency, err := database.GetCurrencyByID(db, c.CurrencyID)
if err != nil {
fmt.Println("No currency by id.")
return
}
fmt.Printf(" %-5d %-20s %-10s %-15.2f %d\n",
c.ID, c.Symbol, currency.Code, c.Price, c.SharesOutstanding)
}
}