Initial commit

This commit is contained in:
2019-11-05 23:23:54 +09:00
commit 8a85437853
12 changed files with 533 additions and 0 deletions
+38
View File
@@ -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
}
+21
View File
@@ -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
}
+68
View File
@@ -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
}
+38
View File
@@ -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
}
+40
View File
@@ -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")
}