This repository has been archived by the owner on Aug 27, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
db.go
97 lines (76 loc) · 2.09 KB
/
db.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package getresidence
import (
"database/sql"
"github.com/efficientgo/core/errors"
)
type grDb struct {
*sql.DB
}
func newDb(url string) (db grDb, err error) {
sqlDb, err := sql.Open("libsql", url)
if err != nil {
return db, errors.Wrap(err, "open db")
}
err = sqlDb.Ping()
if err != nil {
return db, errors.Wrap(err, "ping db")
}
db = grDb{sqlDb}
err = db.init()
if err != nil {
return db, errors.Wrap(err, "init db")
}
return db, nil
}
// sqlite schema
var schema = `
CREATE TABLE IF NOT EXISTS sessions (
id INTEGER PRIMARY KEY,
created_at INTEGER NOT NULL DEFAULT (unixepoch('now')),
name TEXT NOT NULL,
email TEXT NOT NULL,
phone TEXT NOT NULL
) STRICT
`
func (db grDb) init() error {
_, err := db.Exec(schema)
if err != nil {
return errors.Wrap(err, "exec schema")
}
return nil
}
func (db grDb) getOnboarding(id int64) (name, email, phone string, err error) {
err = db.QueryRow("SELECT name, email, phone FROM sessions WHERE id = :id", sql.Named("id", id)).Scan(&name, &email, &phone)
if err != nil {
return "", "", "", errors.Wrap(err, "select session")
}
return name, email, phone, nil
}
func (db grDb) newRow() (id int64, err error) {
err = db.QueryRow(`INSERT INTO sessions (name, email, phone) VALUES ("", "", "") RETURNING id`).Scan(&id)
if err != nil {
return id, errors.Wrap(err, "insert session")
}
return id, nil
}
func (db grDb) setName(id int64, name string) error {
_, err := db.Exec("UPDATE sessions SET name = :name WHERE id = :id", sql.Named("name", name), sql.Named("id", id))
if err != nil {
return errors.Wrap(err, "update name")
}
return nil
}
func (db grDb) setEmail(id int64, email string) error {
_, err := db.Exec("UPDATE sessions SET email = :email WHERE id = :id", sql.Named("email", email), sql.Named("id", id))
if err != nil {
return errors.Wrap(err, "update email")
}
return nil
}
func (db grDb) setPhone(id int64, phone string) error {
_, err := db.Exec("UPDATE sessions SET phone = :phone WHERE id = :id", sql.Named("phone", phone), sql.Named("id", id))
if err != nil {
return errors.Wrap(err, "update phone")
}
return nil
}