69 lines
1.5 KiB
Go
69 lines
1.5 KiB
Go
package database
|
|
|
|
import (
|
|
"Portifolio/internal/model"
|
|
"database/sql"
|
|
|
|
_ "github.com/mattn/go-sqlite3"
|
|
)
|
|
|
|
func GetTrades(db *sql.DB) ([]model.Trade, error) {
|
|
rows, err := db.Query("SELECT id, company_id, currency_id, shares, product, type, price, traded_at FROM trades")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
|
|
var trades []model.Trade
|
|
for rows.Next() {
|
|
var t model.Trade
|
|
err := rows.Scan(&t.Ticker, &t.Currency, &t.Shares, &t.Product, &t.Type, &t.Price, &t.Date)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
trades = append(trades, t)
|
|
}
|
|
if err = rows.Err(); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return trades, nil
|
|
}
|
|
|
|
func GetPositions(db *sql.DB) ([]model.Position, error) {
|
|
rows, err := db.Query("SELECT company_id, shares, weight, CostBases, currency_id")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
|
|
var positions []model.Position
|
|
for rows.Next() {
|
|
var t model.Position
|
|
err := rows.Scan(&t.Company.ID, &t.Shares, &t.Weight, &t.CostBasis, t.Currency)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
positions = append(positions, t)
|
|
}
|
|
if err = rows.Err(); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return positions, nil
|
|
}
|
|
|
|
func InsertTrade(db *sql.DB, trade model.Trade) error {
|
|
_, err := db.Exec(
|
|
"INSERT INTO trades (company_id, currency_id, shares, product, type, price, traded_at) VALUES (?, ?, ?, ?, ?, ?, ?)",
|
|
trade.Ticker.ID,
|
|
trade.Currency.ID,
|
|
trade.Shares,
|
|
trade.Product,
|
|
trade.Type,
|
|
trade.Price,
|
|
trade.Date,
|
|
)
|
|
return err
|
|
}
|