data.tmpl 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package db
  2. import (
  3. "database/sql"
  4. "fmt"
  5. "os"
  6. "strconv"
  7. "time"
  8. "github.com/fgrid/uuid" // replace when go is go-ing to give me sha5 uuids
  9. )
  10. const scaffold = `{{ range $value := .Data }}{{ $value.GetCreate }}{{ end }}
  11. `
  12. type DB struct {
  13. *sql.DB
  14. }
  15. func NewDB() (*DB, error) {
  16. 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")))
  17. if err != nil {
  18. return nil, err
  19. }
  20. if err = db.Ping(); err != nil {
  21. return nil, err
  22. }
  23. retDb := &DB{db}
  24. return retDb, retDb.scaffold()
  25. }
  26. func (db *DB) scaffold() error {
  27. _, err := db.Exec(scaffold)
  28. return err
  29. }
  30. type Point struct {
  31. X string `json:"x"`
  32. Y string `json:"y"`
  33. }
  34. {{ range $value := .Data }}
  35. {{ $value.GetGoStruct }}
  36. const insert{{ $value.Name }} = `
  37. {{ $value.GetInsert }}
  38. `
  39. func (db *DB) Insert{{$value.Name}}(data *{{$value.Name}}) error {
  40. if len(data.UUID) == 0 {
  41. data.UUID = uuid.NewV5(uuid.NewNamespaceUUID("{{.Name}}"), []byte( {{.UniqueID}} )).String()
  42. }
  43. {{$value.CleanData}}
  44. _, err := db.Exec(insert{{$value.Name}},data.UUID{{$value.GetGoParams}})
  45. return err
  46. }
  47. const delete{{$value.Name}} = `UPDATE {{$value.GetName}} SET deleted=now() WHERE uuid = $1`
  48. func (db *DB) Delete{{$value.Name}}(uuid string) error {
  49. _, err := db.Query(delete{{$value.Name}}, uuid)
  50. return err
  51. }
  52. const get{{$value.Name}} = `SELECT {{$value.GetSelectParams}} FROM {{$value.GetName}} WHERE uuid = $1 AND deleted IS NULL`
  53. const get{{$value.Name}}s = `SELECT {{$value.GetSelectParams}} FROM {{$value.GetName}} WHERE deleted IS NULL`
  54. func (db *DB) Get{{$value.Name}}(uuid string) ([]*{{$value.Name}}, error) {
  55. var rows *sql.Rows
  56. var err error
  57. if len(uuid) != 0 {
  58. rows, err = db.Query(get{{$value.Name}}, uuid)
  59. } else {
  60. rows, err = db.Query(get{{$value.Name}}s)
  61. }
  62. if err != nil {
  63. return nil, err
  64. }
  65. records := []*{{$value.Name}}{}
  66. for rows.Next() {
  67. data := &{{$value.Name}}{}
  68. rows.Scan(&data.UUID{{.GetGoRefParams}})
  69. records = append(records, data)
  70. }
  71. return records, nil
  72. }
  73. {{ range $key, $val := .Routing }}
  74. const get{{$value.Name}}sBy{{$val}} = `SELECT {{$value.GetSelectParams}} FROM {{$value.GetName}} WHERE deleted IS NULL AND {{$.Underscore $val}} = $1`
  75. func (db *DB) Get{{$value.Name}}By{{$val}}(uuid string) ([]*{{$value.Name}}, error) {
  76. rows, err := db.Query(get{{$value.Name}}sBy{{$val}}, uuid)
  77. if err != nil {
  78. return nil, err
  79. }
  80. records := []*{{$value.Name}}{}
  81. for rows.Next() {
  82. data := &{{$value.Name}}{}
  83. rows.Scan(&data.UUID{{$value.GetGoRefParams}})
  84. records = append(records, data)
  85. }
  86. return records, nil
  87. }
  88. {{ end }}
  89. {{ end }}