Recount-Server/db/db.go
2024-02-27 18:38:00 -08:00

129 lines
3.1 KiB
Go

package db
import (
"database/sql"
"fmt"
"github.com/jmoiron/sqlx"
_ "github.com/lib/pq"
_ "github.com/mattn/go-sqlite3"
"github.com/rs/zerolog/log"
"nickiel.net/recount_server/types"
)
var DB_TYPE string
var DB_SCHEMA string
var DB_CONNECTION_STRING string
func SetConstants(db_type string, db_schema string, db_conn_string string) {
DB_TYPE = db_type
DB_SCHEMA = db_schema
DB_CONNECTION_STRING = db_conn_string
}
func GetTransactions(transactions *[]types.Transaction, resultCount int, pageNum int) error {
db, err := sqlx.Connect(DB_TYPE, DB_CONNECTION_STRING)
if err != nil {
log.Fatal().
Err(err).
Msg("Fatal error in db_get_transactions\nCannot connect to server")
}
defer db.Close()
err = db.Select(transactions,
"SELECT trns_id, trns_amount, trns_description, "+
"trns_account, trns_bucket, trns_date "+
fmt.Sprintf("FROM %stransactions ORDER BY trns_id DESC ", DB_SCHEMA)+
fmt.Sprintf("LIMIT %d OFFSET %d",
resultCount, pageNum*resultCount))
if err != nil {
return err
}
return nil
}
func NewTransaction(transaction types.Transaction) error {
db, err := sqlx.Connect(DB_TYPE, DB_CONNECTION_STRING)
if err != nil {
log.Fatal().
Err(err).
Msg("Fatal error in db_get_transactions\nCannot connect to server")
}
defer db.Close()
log.Debug().Msgf("%#v", transaction)
_, err = db.NamedExec(
fmt.Sprintf("INSERT INTO %stransactions", DB_SCHEMA)+
"(trns_amount, trns_description, trns_account, trns_bucket, trns_date)"+
"VALUES (:trns_amount, :trns_description, :trns_account, :trns_bucket, :trns_date)",
transaction)
if err != nil {
log.Fatal().
Err(err).
Msg("Could not exec insert db query")
}
return nil
}
func GetUserAccounts(userID int) ([]types.Account, error) {
user_accounts := make([]types.Account, 4)
user_accounts[0] = types.Account{
Id: 1,
DisplayName: sql.NullString{
String: "Savings",
Valid: true,
},
Description: sql.NullString{
String: "BECU Saving Account",
Valid: true,
},
}
user_accounts[1] = types.Account{
Id: 2,
DisplayName: sql.NullString{
String: "BECU Credit Card",
Valid: true,
},
Description: sql.NullString{
String: "BECU Saving Account",
Valid: true,
},
}
return user_accounts, nil
}
func GetUserBuckets(userID int) ([]types.Bucket, error) {
bucket1 := types.Bucket{
Id: 1,
DisplayCode: sql.NullString{String: "SVNG", Valid: true},
DisplayName: sql.NullString{String: "Savings", Valid: true},
Description: sql.NullString{String: "The Savings Bucket", Valid: true},
}
bucket2 := types.Bucket{
Id: 2,
DisplayCode: sql.NullString{String: "SPND", Valid: true},
DisplayName: sql.NullString{String: "Spending", Valid: true},
Description: sql.NullString{String: "The Spending Bucket", Valid: true},
}
// Creating a slice of length two and populating it with the two structs
buckets := []types.Bucket{bucket1, bucket2}
return buckets, nil
}
func GetTransPaneEntries(userID int) ([]types.QuickTransactionType, error) {
transaction_types := make([]types.QuickTransactionType, 1)
transaction_types[0] = types.QuickTransactionType{
DisplayName: "Manual",
}
return transaction_types, nil
}