/
store_repository.go
54 lines (42 loc) · 1.2 KB
/
store_repository.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
package grpc
import (
"context"
"google.golang.org/grpc"
"github.com/LordMoMA/Intelli-Mall/internal/rpc"
"github.com/LordMoMA/Intelli-Mall/search/internal/application"
"github.com/LordMoMA/Intelli-Mall/search/internal/models"
"github.com/LordMoMA/Intelli-Mall/stores/storespb"
)
type StoreRepository struct {
endpoint string
}
var _ application.StoreRepository = (*StoreRepository)(nil)
func NewStoreRepository(endpoint string) StoreRepository {
return StoreRepository{
endpoint: endpoint,
}
}
func (r StoreRepository) Find(ctx context.Context, storeID string) (store *models.Store, err error) {
var conn *grpc.ClientConn
conn, err = r.dial(ctx)
if err != nil {
return nil, err
}
defer func(conn *grpc.ClientConn) {
_ = conn.Close()
}(conn)
resp, err := storespb.NewStoresServiceClient(conn).GetStore(ctx, &storespb.GetStoreRequest{Id: storeID})
if err != nil {
return nil, err
}
return r.storeToDomain(resp.Store), nil
}
func (r StoreRepository) storeToDomain(store *storespb.Store) *models.Store {
return &models.Store{
ID: store.GetId(),
Name: store.GetName(),
}
}
func (r StoreRepository) dial(ctx context.Context) (*grpc.ClientConn, error) {
return rpc.Dial(ctx, r.endpoint)
}