-
Notifications
You must be signed in to change notification settings - Fork 157
/
inventory_read_query.go
49 lines (40 loc) · 1.27 KB
/
inventory_read_query.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
package inmemory
import (
assetsdomain "github.com/Tanibox/tania-core/src/assets/domain"
assetsstorage "github.com/Tanibox/tania-core/src/assets/storage"
"github.com/Tanibox/tania-core/src/tasks/query"
uuid "github.com/satori/go.uuid"
)
type MaterialQueryInMemory struct {
Storage *assetsstorage.MaterialReadStorage
}
func NewMaterialQueryInMemory(s *assetsstorage.MaterialReadStorage) query.MaterialQuery {
return MaterialQueryInMemory{Storage: s}
}
func (s MaterialQueryInMemory) FindMaterialByID(inventoryUID uuid.UUID) <-chan query.QueryResult {
result := make(chan query.QueryResult)
go func() {
s.Storage.Lock.RLock()
defer s.Storage.Lock.RUnlock()
ci := query.TaskMaterialQueryResult{}
for _, val := range s.Storage.MaterialReadMap {
// WARNING, domain leakage
if val.UID == inventoryUID {
ci.UID = val.UID
ci.Name = val.Name
ci.TypeCode = val.Type.Code()
switch v := val.Type.(type) {
case assetsdomain.MaterialTypeSeed:
ci.DetailedTypeCode = v.PlantType.Code
case assetsdomain.MaterialTypePlant:
ci.DetailedTypeCode = v.PlantType.Code
case assetsdomain.MaterialTypeAgrochemical:
ci.DetailedTypeCode = v.ChemicalType.Code
}
}
}
result <- query.QueryResult{Result: ci}
close(result)
}()
return result
}