| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- package db
- import (
- "database/sql"
- "fmt"
- "os"
-
- "strconv"
- "time"
- "github.com/fgrid/uuid" // replace when go is go-ing to give me sha5 uuids
- )
- const scaffold = `{{ range $value := .Data }}{{ $value.GetCreate }}{{ end }}
- `
- type DB struct {
- *sql.DB
- }
- func NewDB() (*DB, error) {
- db, err := sql.Open("postgres", fmt.Sprintf("host=%s dbname=%s sslmode=disable user=%s password=%s", os.Getenv("DB_HOST"), os.Getenv("DB_NAME"), os.Getenv("DB_USER"), os.Getenv("DB_PASSWORD")))
- if err != nil {
- return nil, err
- }
- if err = db.Ping(); err != nil {
- return nil, err
- }
- retDb := &DB{db}
- return retDb, retDb.scaffold()
- }
- func (db *DB) scaffold() error {
- _, err := db.Exec(scaffold)
- return err
- }
- type Point struct {
- X string `json:"x"`
- Y string `json:"y"`
- }
- {{ range $value := .Data }}
- {{ $value.GetGoStruct }}
- const insert{{ $value.Name }} = `
- {{ $value.GetInsert }}
- `
- func (db *DB) Insert{{$value.Name}}(data *{{$value.Name}}) error {
- if len(data.UUID) == 0 {
- data.UUID = uuid.NewV5(uuid.NewNamespaceUUID("{{.Name}}"), []byte( {{.UniqueID}} )).String()
- }
- {{$value.CleanData}}
- _, err := db.Exec(insert{{$value.Name}},data.UUID{{$value.GetGoParams}})
- return err
- }
- const delete{{$value.Name}} = `UPDATE {{$value.GetName}} SET deleted=now() WHERE uuid = $1`
- func (db *DB) Delete{{$value.Name}}(uuid string) error {
- _, err := db.Query(delete{{$value.Name}}, uuid)
- return err
- }
- const get{{$value.Name}} = `SELECT {{$value.GetSelectParams}} FROM {{$value.GetName}} WHERE uuid = $1 AND deleted IS NULL`
- const get{{$value.Name}}s = `SELECT {{$value.GetSelectParams}} FROM {{$value.GetName}} WHERE deleted IS NULL`
- func (db *DB) Get{{$value.Name}}(uuid string) ([]*{{$value.Name}}, error) {
- var rows *sql.Rows
- var err error
- if len(uuid) != 0 {
- rows, err = db.Query(get{{$value.Name}}, uuid)
- } else {
- rows, err = db.Query(get{{$value.Name}}s)
- }
- if err != nil {
- return nil, err
- }
- records := []*{{$value.Name}}{}
- for rows.Next() {
- data := &{{$value.Name}}{}
- rows.Scan(&data.UUID{{.GetGoRefParams}})
- records = append(records, data)
- }
- return records, nil
- }
- {{ range $key, $val := .Routing }}
- const get{{$value.Name}}sBy{{$val}} = `SELECT {{$value.GetSelectParams}} FROM {{$value.GetName}} WHERE deleted IS NULL AND {{$.Underscore $val}} = $1`
- func (db *DB) Get{{$value.Name}}By{{$val}}(uuid string) ([]*{{$value.Name}}, error) {
- rows, err := db.Query(get{{$value.Name}}sBy{{$val}}, uuid)
- if err != nil {
- return nil, err
- }
- records := []*{{$value.Name}}{}
- for rows.Next() {
- data := &{{$value.Name}}{}
- rows.Scan(&data.UUID{{$value.GetGoRefParams}})
- records = append(records, data)
- }
- return records, nil
- }
- {{ end }}
- {{ end }}
|