-
Notifications
You must be signed in to change notification settings - Fork 0
/
relation.go
115 lines (106 loc) · 4.5 KB
/
relation.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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package service
import (
"context"
"github.com/CloudStriver/go-pkg/utils/pconvertor"
"github.com/CloudStriver/platform-relation/biz/infrastructure/config"
relationmapper "github.com/CloudStriver/platform-relation/biz/infrastructure/mapper/relation"
genrelation "github.com/CloudStriver/service-idl-gen-go/kitex_gen/platform/relation"
"github.com/google/wire"
"github.com/zeromicro/go-zero/core/stores/redis"
)
type RelationService interface {
CreateRelation(ctx context.Context, req *genrelation.CreateRelationReq) (resp *genrelation.CreateRelationResp, err error)
GetRelation(ctx context.Context, req *genrelation.GetRelationReq) (resp *genrelation.GetRelationResp, err error)
DeleteRelation(ctx context.Context, req *genrelation.DeleteRelationReq) (resp *genrelation.DeleteRelationResp, err error)
GetRelations(ctx context.Context, req *genrelation.GetRelationsReq) (resp *genrelation.GetRelationsResp, err error)
GetRelationCount(ctx context.Context, req *genrelation.GetRelationCountReq) (resp *genrelation.GetRelationCountResp, err error)
}
var RelationSet = wire.NewSet(
wire.Struct(new(RelationServiceImpl), "*"),
wire.Bind(new(RelationService), new(*RelationServiceImpl)),
)
type RelationServiceImpl struct {
Config *config.Config
Redis *redis.Redis
RelationModel relationmapper.RelationNeo4jMapper
}
func (s *RelationServiceImpl) GetRelationCount(ctx context.Context, req *genrelation.GetRelationCountReq) (resp *genrelation.GetRelationCountResp, err error) {
resp = new(genrelation.GetRelationCountResp)
switch o := req.RelationFilterOptions.(type) {
case *genrelation.GetRelationCountReq_FromFilterOptions:
resp.Total, err = s.RelationModel.MatchFromEdgesCount(ctx, o.FromFilterOptions.FromType, o.FromFilterOptions.FromId, o.FromFilterOptions.ToType, req.RelationType)
case *genrelation.GetRelationCountReq_ToFilterOptions:
resp.Total, err = s.RelationModel.MatchToEdgesCount(ctx, o.ToFilterOptions.ToType, o.ToFilterOptions.ToId, o.ToFilterOptions.FromType, req.RelationType)
}
if err != nil {
return resp, err
}
return resp, nil
}
func (s *RelationServiceImpl) GetRelations(ctx context.Context, req *genrelation.GetRelationsReq) (resp *genrelation.GetRelationsResp, err error) {
resp = new(genrelation.GetRelationsResp)
p := pconvertor.PaginationOptionsToModelPaginationOptions(req.PaginationOptions)
switch o := req.RelationFilterOptions.(type) {
case *genrelation.GetRelationsReq_FromFilterOptions:
resp.Relations, resp.Total, err = s.RelationModel.MatchFromEdgesAndCount(ctx, o.FromFilterOptions.FromType, o.FromFilterOptions.FromId, o.FromFilterOptions.ToType,
req.RelationType, p)
case *genrelation.GetRelationsReq_ToFilterOptions:
resp.Relations, resp.Total, err = s.RelationModel.MatchToEdgesAndCount(ctx, o.ToFilterOptions.ToType, o.ToFilterOptions.ToId, o.ToFilterOptions.FromType,
req.RelationType, p)
}
if err != nil {
return resp, err
}
return resp, nil
}
func (s *RelationServiceImpl) DeleteRelation(ctx context.Context, req *genrelation.DeleteRelationReq) (resp *genrelation.DeleteRelationResp, err error) {
if err = s.RelationModel.DeleteEdge(ctx, &genrelation.Relation{
FromType: req.FromType,
FromId: req.FromId,
ToType: req.ToType,
ToId: req.ToId,
RelationType: req.RelationType,
}); err != nil {
return resp, err
}
return resp, nil
}
func (s *RelationServiceImpl) CreateRelation(ctx context.Context, req *genrelation.CreateRelationReq) (resp *genrelation.CreateRelationResp, err error) {
resp = new(genrelation.CreateRelationResp)
ok, err := s.RelationModel.MatchEdge(ctx, &genrelation.Relation{
FromType: req.FromType,
FromId: req.FromId,
ToType: req.ToType,
ToId: req.ToId,
RelationType: req.RelationType,
})
if err != nil {
return resp, err
}
if !ok {
if err = s.RelationModel.CreateEdge(ctx, &genrelation.Relation{
FromType: req.FromType,
FromId: req.FromId,
ToType: req.ToType,
ToId: req.ToId,
RelationType: req.RelationType,
}); err != nil {
return resp, err
}
resp.Ok = true
}
return resp, nil
}
func (s *RelationServiceImpl) GetRelation(ctx context.Context, req *genrelation.GetRelationReq) (resp *genrelation.GetRelationResp, err error) {
resp = new(genrelation.GetRelationResp)
if resp.Ok, err = s.RelationModel.MatchEdge(ctx, &genrelation.Relation{
FromType: req.FromType,
FromId: req.FromId,
ToType: req.ToType,
ToId: req.ToId,
RelationType: req.RelationType,
}); err != nil {
return resp, err
}
return resp, nil
}