-
Notifications
You must be signed in to change notification settings - Fork 12
/
org_plan_service.go
143 lines (112 loc) · 7.12 KB
/
org_plan_service.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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
package service
import (
"github.com/google/uuid"
commonmodel "github.com/openline-ai/openline-customer-os/packages/server/events-processing-platform/domain/common/model"
"github.com/openline-ai/openline-customer-os/packages/server/events-processing-platform/domain/organization_plan/event_handler"
"github.com/openline-ai/openline-customer-os/packages/server/events-processing-platform/eventstore"
grpcerr "github.com/openline-ai/openline-customer-os/packages/server/events-processing-platform/grpc_errors"
"github.com/openline-ai/openline-customer-os/packages/server/events-processing-platform/logger"
"github.com/openline-ai/openline-customer-os/packages/server/events-processing-platform/tracing"
orgplanpb "github.com/openline-ai/openline-customer-os/packages/server/events-processing-proto/gen/proto/go/api/grpc/v1/org_plan"
"golang.org/x/net/context"
)
type organizationPlanService struct {
orgplanpb.UnimplementedOrganizationPlanGrpcServiceServer
log logger.Logger
eventHandlers *event_handler.EventHandlers
aggregateStore eventstore.AggregateStore
}
func NewOrganizationPlanService(log logger.Logger, commandHandlers *event_handler.EventHandlers, aggregateStore eventstore.AggregateStore) *organizationPlanService {
return &organizationPlanService{
log: log,
eventHandlers: commandHandlers,
aggregateStore: aggregateStore,
}
}
func (s *organizationPlanService) CreateOrganizationPlan(ctx context.Context, request *orgplanpb.CreateOrganizationPlanGrpcRequest) (*orgplanpb.OrganizationPlanIdGrpcResponse, error) {
ctx, span := tracing.StartGrpcServerTracerSpan(ctx, "OrganizationPlanService.CreateOrganizationPlan")
defer span.Finish()
tracing.SetServiceSpanTags(ctx, span, request.Tenant, request.LoggedInUserId)
tracing.LogObjectAsJson(span, "request", request)
organizationPlanId := uuid.New().String()
baseRequest := eventstore.NewBaseRequest(organizationPlanId, request.Tenant, request.LoggedInUserId, commonmodel.SourceFromGrpc(request.SourceFields))
if err := s.eventHandlers.CreateOrganizationPlan.Handle(ctx, baseRequest, request); err != nil {
tracing.TraceErr(span, err)
s.log.Errorf("(CreateOrganizationPlan.Handle) tenant:{%v}, err: %v", request.Tenant, err.Error())
return nil, grpcerr.ErrResponse(err)
}
return &orgplanpb.OrganizationPlanIdGrpcResponse{Id: organizationPlanId}, nil
}
func (s *organizationPlanService) CreateOrganizationPlanMilestone(ctx context.Context, request *orgplanpb.CreateOrganizationPlanMilestoneGrpcRequest) (*orgplanpb.OrganizationPlanMilestoneIdGrpcResponse, error) {
ctx, span := tracing.StartGrpcServerTracerSpan(ctx, "OrganizationPlanService.CreateOrganizationPlanMilestone")
defer span.Finish()
tracing.SetServiceSpanTags(ctx, span, request.Tenant, request.LoggedInUserId)
tracing.LogObjectAsJson(span, "request", request)
milestoneId := uuid.New().String()
baseRequest := eventstore.NewBaseRequest(milestoneId, request.Tenant, request.LoggedInUserId, commonmodel.SourceFromGrpc(request.SourceFields))
if err := s.eventHandlers.CreateOrganizationPlanMilestone.Handle(ctx, baseRequest, request); err != nil {
tracing.TraceErr(span, err)
s.log.Errorf("(CreateOrganizationPlanMilestone.Handle) tenant:{%v}, err: %v", request.Tenant, err.Error())
return nil, grpcerr.ErrResponse(err)
}
return &orgplanpb.OrganizationPlanMilestoneIdGrpcResponse{Id: milestoneId}, nil
}
func (s *organizationPlanService) UpdateOrganizationPlan(ctx context.Context, request *orgplanpb.UpdateOrganizationPlanGrpcRequest) (*orgplanpb.OrganizationPlanIdGrpcResponse, error) {
ctx, span := tracing.StartGrpcServerTracerSpan(ctx, "OrganizationPlanService.UpdateOrganizationPlan")
defer span.Finish()
tracing.SetServiceSpanTags(ctx, span, request.Tenant, request.LoggedInUserId)
tracing.LogObjectAsJson(span, "request", request)
span.SetTag(tracing.SpanTagEntityId, request.OrganizationPlanId)
if request.OrganizationPlanId == "" {
return nil, grpcerr.ErrResponse(grpcerr.ErrMissingField("organizationPlanId"))
}
srcFields := commonmodel.Source{AppSource: request.AppSource}
baseRequest := eventstore.NewBaseRequest(request.OrganizationPlanId, request.Tenant, request.LoggedInUserId, srcFields)
if err := s.eventHandlers.UpdateOrganizationPlan.Handle(ctx, baseRequest, request); err != nil {
tracing.TraceErr(span, err)
s.log.Errorf("(UpdateOrganizationPlan.Handle) tenant:{%v}, err: %v", request.Tenant, err.Error())
return nil, grpcerr.ErrResponse(err)
}
return &orgplanpb.OrganizationPlanIdGrpcResponse{Id: request.OrganizationPlanId}, nil
}
func (s *organizationPlanService) UpdateOrganizationPlanMilestone(ctx context.Context, request *orgplanpb.UpdateOrganizationPlanMilestoneGrpcRequest) (*orgplanpb.OrganizationPlanMilestoneIdGrpcResponse, error) {
ctx, span := tracing.StartGrpcServerTracerSpan(ctx, "OrganizationPlanService.UpdateOrganizationPlanMilestone")
defer span.Finish()
tracing.SetServiceSpanTags(ctx, span, request.Tenant, request.LoggedInUserId)
tracing.LogObjectAsJson(span, "request", request)
span.SetTag(tracing.SpanTagEntityId, request.OrganizationPlanId)
if request.OrganizationPlanId == "" {
return nil, grpcerr.ErrResponse(grpcerr.ErrMissingField("organizationPlanId"))
}
if request.OrganizationPlanMilestoneId == "" {
return nil, grpcerr.ErrResponse(grpcerr.ErrMissingField("organizationPlanMilestoneId"))
}
srcFields := commonmodel.Source{AppSource: request.AppSource}
baseRequest := eventstore.NewBaseRequest(request.OrganizationPlanMilestoneId, request.Tenant, request.LoggedInUserId, srcFields)
if err := s.eventHandlers.UpdateOrganizationPlanMilestone.Handle(ctx, baseRequest, request); err != nil {
tracing.TraceErr(span, err)
s.log.Errorf("(UpdateOrganizationPlanMilestone.Handle) tenant:{%v}, err: %v", request.Tenant, err.Error())
return nil, grpcerr.ErrResponse(err)
}
return &orgplanpb.OrganizationPlanMilestoneIdGrpcResponse{Id: request.OrganizationPlanMilestoneId}, nil
}
func (s *organizationPlanService) ReorderOrganizationPlanMilestones(ctx context.Context, request *orgplanpb.ReorderOrganizationPlanMilestonesGrpcRequest) (*orgplanpb.OrganizationPlanIdGrpcResponse, error) {
ctx, span := tracing.StartGrpcServerTracerSpan(ctx, "OrganizationPlanService.ReorderOrganizationPlanMilestones")
defer span.Finish()
tracing.SetServiceSpanTags(ctx, span, request.Tenant, request.LoggedInUserId)
tracing.LogObjectAsJson(span, "request", request)
if request.OrganizationPlanId == "" {
return nil, grpcerr.ErrResponse(grpcerr.ErrMissingField("organizationPlanId"))
}
if len(request.OrganizationPlanMilestoneIds) == 0 {
return nil, grpcerr.ErrResponse(grpcerr.ErrMissingField("organizationPlanMilestoneIds"))
}
srcFields := commonmodel.Source{AppSource: request.AppSource}
baseRequest := eventstore.NewBaseRequest(request.OrganizationPlanId, request.Tenant, request.LoggedInUserId, srcFields)
if err := s.eventHandlers.ReorderOrganizationPlanMilestones.Handle(ctx, baseRequest, request); err != nil {
tracing.TraceErr(span, err)
s.log.Errorf("(UpdateOrganizationPlanMilestone.Handle) tenant:{%v}, err: %v", request.Tenant, err.Error())
return nil, grpcerr.ErrResponse(err)
}
return &orgplanpb.OrganizationPlanIdGrpcResponse{Id: request.OrganizationPlanId}, nil
}