-
Notifications
You must be signed in to change notification settings - Fork 0
/
sample.go
63 lines (52 loc) · 1.28 KB
/
sample.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
package entgo
import (
"context"
"github.com/tinygodsdev/orrery/internal/domain"
"github.com/tinygodsdev/orrery/internal/repository/entgo/ent"
"github.com/tinygodsdev/orrery/internal/repository/entgo/ent/sample"
)
func (r *EntgoRepository) GetSamples(ctx context.Context) ([]*domain.Sample, error) {
samples, err := r.client.Sample.Query().All(ctx)
if err != nil {
return nil, err
}
var res []*domain.Sample
for _, s := range samples {
res = append(res, entToDomainSample(s))
}
return res, nil
}
func (r *EntgoRepository) CreateOrUpdateSample(ctx context.Context, smp *domain.Sample) (*domain.Sample, error) {
s, err := r.client.Sample.Query().
Where(sample.CodeEQ(smp.Code)).
Only(ctx)
if err != nil {
if !ent.IsNotFound(err) {
return nil, err
}
// sample not found, create sample
s, err := r.client.Sample.Create().
SetCode(smp.Code).
SetCriteria(smp.Criteria).
Save(ctx)
if err != nil {
return nil, err
}
return entToDomainSample(s), nil
}
// update sample
s, err = s.Update().
SetCriteria(smp.Criteria).
Save(ctx)
if err != nil {
return nil, err
}
return entToDomainSample(s), nil
}
func entToDomainSample(s *ent.Sample) *domain.Sample {
return &domain.Sample{
ID: s.ID,
Code: s.Code,
Criteria: s.Criteria,
}
}