This repository has been archived by the owner on Aug 18, 2022. It is now read-only.
/
db.go
109 lines (95 loc) · 2.37 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
98
99
100
101
102
103
104
105
106
107
108
109
package cockroachdb
import (
"context"
"database/sql"
"github.com/51st-state/api/pkg/apis/serviceaccount/key"
"github.com/google/uuid"
"github.com/51st-state/api/pkg/apis/serviceaccount"
)
// CreateSchema creates a new cockroachdb schema in a cockroachdb database for the serviceaccount service
func CreateSchema(ctx context.Context, db *sql.DB) (err error) {
_, err = db.ExecContext(
ctx,
`CREATE TABLE IF NOT EXISTS service_accounts (
guid UUID PRIMARY KEY,
name TEXT NOT NULL DEFAULT '',
description TEXT NOT NULL DEFAULT ''
);
CREATE UNIQUE INDEX IF NOT EXISTS service_accounts_idx_guid ON service_accounts (guid);`,
)
return
}
type db struct {
db *sql.DB
}
// NewRepository creates a new cockroachdb db storage repository
func NewRepository(d *sql.DB) serviceaccount.Repository {
return &db{d}
}
func (d *db) Get(ctx context.Context, id serviceaccount.Identifier) (serviceaccount.Complete, error) {
c := &complete{
id,
serviceaccount.NewIncomplete("", ""),
}
if err := d.db.QueryRowContext(
ctx,
`SELECT name,
description
FROM service_accounts
WHERE guid = $1`,
id.GUID(),
).Scan(
&c.Data().Name,
&c.Data().Description,
); err != nil {
return nil, err
}
return c, nil
}
func (d *db) Create(ctx context.Context, inc serviceaccount.Incomplete) (serviceaccount.Complete, error) {
rand, err := uuid.NewRandom()
if err != nil {
return nil, err
}
if _, err := d.db.ExecContext(
ctx,
`INSERT INTO service_accounts (
guid,
name,
description
) SELECT $1,
$2,
$3`,
rand.String(),
inc.Data().Name,
inc.Data().Description,
); err != nil {
return nil, err
}
return &complete{
key.NewIdentifier(rand.String()),
inc,
}, nil
}
func (d *db) Update(ctx context.Context, c serviceaccount.Complete) error {
_, err := d.db.ExecContext(
ctx,
`UPDATE service_accounts
SET name = $1,
description = $2
WHERE guid = $3`,
c.Data().Name,
c.Data().Description,
c.GUID(),
)
return err
}
func (d *db) Delete(ctx context.Context, id serviceaccount.Identifier) error {
_, err := d.db.ExecContext(
ctx,
`DELETE FROM service_accounts
WHERE guid = $1`,
id.GUID(),
)
return err
}