/
category.go
69 lines (60 loc) · 1.48 KB
/
category.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
package dal
import (
"database/sql"
"time"
"github.com/freonservice/freon/internal/app"
"github.com/freonservice/freon/internal/dao"
"github.com/AlekSi/pointer"
)
func (r *Repo) CreateCategory(ctx Ctx, name string) error {
entity := &dao.Category{
Name: name,
CreatedAt: time.Now().UTC(),
UpdatedAt: pointer.ToTime(time.Now().UTC()),
}
if err := r.ReformDB.Save(entity); err != nil {
if isDuplicateKeyValue(err) {
return ErrDuplicateKeyValue
}
return err
}
return nil
}
func (r *Repo) GetCategories(ctx Ctx) ([]*dao.Category, error) {
rows, err := r.ReformDB.QueryContext(ctx, sqlSelectCategories)
if err != nil {
return nil, err
} else if rows.Err() != nil {
return nil, rows.Err()
}
defer rows.Close()
var entities []*dao.Category
for rows.Next() {
var entity dao.Category
err = rows.Scan(&entity.ID, &entity.Name)
if err != nil {
break
}
entities = append(entities, &entity)
}
if err != nil && err != sql.ErrNoRows {
return nil, err
}
return entities, nil
}
func (r *Repo) DeleteCategory(ctx Ctx, id int64) error {
_, err := r.ReformDB.ExecContext(ctx, sqlDeleteCategory, id)
return err
}
func (r *Repo) UpdateCategory(ctx app.Ctx, id int64, name string) error {
_, err := r.ReformDB.ExecContext(ctx, sqlUpdateNameCategory, name, id)
return err
}
func (r *Repo) GetCategory(id int64) (*dao.Category, error) {
var entity dao.Category
err := r.ReformDB.FindOneTo(&entity, "id", id)
if err != nil {
return nil, err
}
return &entity, nil
}