Initial commit
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
package models
|
||||
|
||||
type Category struct {
|
||||
CatID int
|
||||
CatDesc string
|
||||
}
|
||||
|
||||
func GetCategories() ([]*Category, error) {
|
||||
rows, err := db.Query("SELECT * FROM categories")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
cats := make([]*Category, 0)
|
||||
for rows.Next() {
|
||||
cat := new(Category)
|
||||
err := rows.Scan(&cat.CatID, &cat.CatDesc)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
cats = append(cats, cat)
|
||||
}
|
||||
if err = rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return cats, nil
|
||||
}
|
||||
|
||||
func AddCategory() error {
|
||||
sqlStat := "INSERT INTO categories (catdesc) VALUES ($1) RETURNING uid"
|
||||
var uid int
|
||||
err := db.QueryRow(sqlStat).Scan(&uid)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
_ "github.com/lib/pq"
|
||||
)
|
||||
|
||||
var db *sql.DB
|
||||
|
||||
func InitDB(dataSourceName string) error {
|
||||
var err error
|
||||
db, err = sql.Open("postgres", dataSourceName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err = db.Ping(); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
package models
|
||||
|
||||
import "time"
|
||||
|
||||
type Expense struct {
|
||||
ExpID int
|
||||
ExpDesc string
|
||||
ExpDate time.Time
|
||||
ExpPayer int
|
||||
ExpCat int
|
||||
ExpValue string
|
||||
}
|
||||
|
||||
func GetExpenses() ([]*Expense, error) {
|
||||
rows, err := db.Query("SELECT * FROM expenses")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
exps := make([]*Expense, 0)
|
||||
for rows.Next() {
|
||||
exp := new(Expense)
|
||||
err := rows.Scan(&exp.ExpID, &exp.ExpDesc, &exp.ExpDate, &exp.ExpPayer, &exp.ExpCat, &exp.ExpValue)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
exps = append(exps, exp)
|
||||
}
|
||||
if err = rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return exps, nil
|
||||
}
|
||||
|
||||
func AddExpense(desc, date, catdesc, pplname, value string) error {
|
||||
var cat int
|
||||
sqlStat := "SELECT catid FROM categories WHERE catdesc = $1"
|
||||
err := db.QueryRow(sqlStat, catdesc).Scan(&cat)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var payer int
|
||||
sqlStat = "SELECT peopid FROM people WHERE peopname = $1"
|
||||
err = db.QueryRow(sqlStat, pplname).Scan(&payer)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var expid int
|
||||
sqlStat = "INSERT INTO expenses (expdesc, expdate, exppayer, expcat, expvalue) VALUES ($1, $2, $3, $4, $5) RETURNING expid"
|
||||
err = db.QueryRow(sqlStat, desc, date, payer, cat, value).Scan(&expid)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func DeleteExpense(id int) error {
|
||||
var expid int
|
||||
sqlStat := "DELETE FROM expenses WHERE expid = $1 RETURNING expid"
|
||||
err := db.QueryRow(sqlStat, id).Scan(&expid)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package models
|
||||
|
||||
type People struct {
|
||||
PeopID int
|
||||
PeopName string
|
||||
}
|
||||
|
||||
func GetPeople() ([]*People, error) {
|
||||
rows, err := db.Query("SELECT * FROM people")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
ppls := make([]*People, 0)
|
||||
for rows.Next() {
|
||||
ppl := new(People)
|
||||
err := rows.Scan(&ppl.PeopID, &ppl.PeopName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
ppls = append(ppls, ppl)
|
||||
}
|
||||
if err = rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return ppls, nil
|
||||
}
|
||||
|
||||
func AddPeople() error {
|
||||
sqlStat := "INSERT INTO people (peopname) VALUES ($1) RETURNING uid"
|
||||
var uid int
|
||||
err := db.QueryRow(sqlStat).Scan(&uid)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package models
|
||||
|
||||
import "time"
|
||||
|
||||
type Summary struct {
|
||||
ExpID string
|
||||
ExpDesc string
|
||||
ExpDate string
|
||||
PeopleName string
|
||||
CatDesc string
|
||||
ExpValue string
|
||||
}
|
||||
|
||||
func GetSummary() ([]*Summary, error) {
|
||||
rows, err := db.Query("SELECT ex.expid, ex.expdesc, ex.expdate, p.peopname, ca.catdesc, ex.expvalue FROM expenses ex INNER JOIN people p ON ex.exppayer = p.peopid INNER JOIN categories ca ON ex.expcat = ca.catid")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
smrys := make([]*Summary, 0)
|
||||
for rows.Next() {
|
||||
date := new(time.Time)
|
||||
smry := new(Summary)
|
||||
err := rows.Scan(&smry.ExpID, &smry.ExpDesc, &date, &smry.PeopleName, &smry.CatDesc, &smry.ExpValue)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
smry.FormatDate(*date)
|
||||
smrys = append(smrys, smry)
|
||||
}
|
||||
if err = rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return smrys, nil
|
||||
}
|
||||
|
||||
func (smry *Summary) FormatDate(date time.Time) {
|
||||
smry.ExpDate = date.Format("2006-01-02")
|
||||
}
|
||||
Reference in New Issue
Block a user