/
things.go
66 lines (56 loc) · 1.9 KB
/
things.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
package postgres
import (
"fmt"
thing "github.com/username/repo"
)
type thingService struct {
psql *psqlService
}
func NewThingService(psql *psqlService) *thingService {
return &thingService{psql}
}
func (ts thingService) CreateThing(t thing.Thing) error {
_, err := ts.psql.db.Exec("INSERT INTO things (name, description, type) VALUES ($1, $2, $3)", t.Name, t.Description, t.Type)
if err != nil {
return fmt.Errorf("failed to insert new thing: %s", err.Error())
}
return nil
}
func (ts thingService) GetThing(id string) (thing.Thing, error) {
var thing thing.Thing
err := ts.psql.db.QueryRow("SELECT * FROM things WHERE thing_id = $1", id).Scan(&thing.ID, &thing.Name, &thing.Description, &thing.CreatedAt, &thing.Type)
if err != nil {
return thing, fmt.Errorf("failed to retrieve thing: %s", err.Error())
}
return thing, nil
}
func (ss thingService) GetAllThings() ([]thing.Thing, error) {
rows, err := ss.psql.db.Query("SELECT * FROM things")
if err != nil {
return nil, fmt.Errorf("failed to retrieve things: %s", err.Error())
}
defer rows.Close()
var things []thing.Thing
for rows.Next() {
var thing thing.Thing
if err := rows.Scan(&thing.ID, &thing.Name, &thing.Description, &thing.CreatedAt, &thing.Type); err != nil {
return nil, fmt.Errorf("failed to retrieve thing: %s", err.Error())
}
things = append(things, thing)
}
return things, nil
}
func (ss thingService) UpdateThing(id string, thing thing.Thing) error {
_, err := ss.psql.db.Exec("UPDATE things SET name = $1, description = $2, type = $3 WHERE thing_id = $4", thing.Name, thing.Description, thing.Type, id)
if err != nil {
return fmt.Errorf("failed to update thing: %s", err.Error())
}
return nil
}
func (ss thingService) DeleteThing(id string) error {
_, err := ss.psql.db.Exec("DELETE FROM things WHERE thing_id = $1", id)
if err != nil {
return fmt.Errorf("failed to delete thing: %s", err.Error())
}
return nil
}