/
server.go
149 lines (117 loc) · 4.11 KB
/
server.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
144
145
146
147
148
149
package grpc
import (
"context"
"github.com/google/uuid"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/codes"
"go.opentelemetry.io/otel/trace"
"google.golang.org/grpc"
"github.com/LordMoMA/Intelli-Mall/internal/errorsotel"
"github.com/LordMoMA/Intelli-Mall/payments/internal/application"
"github.com/LordMoMA/Intelli-Mall/payments/paymentspb"
)
type server struct {
app application.App
paymentspb.UnimplementedPaymentsServiceServer
}
var _ paymentspb.PaymentsServiceServer = (*server)(nil)
func RegisterServer(_ context.Context, app application.App, registrar grpc.ServiceRegistrar) error {
paymentspb.RegisterPaymentsServiceServer(registrar, server{app: app})
return nil
}
func (s server) AuthorizePayment(ctx context.Context, request *paymentspb.AuthorizePaymentRequest) (*paymentspb.AuthorizePaymentResponse, error) {
span := trace.SpanFromContext(ctx)
id := uuid.New().String()
span.SetAttributes(
attribute.String("PaymentID", id),
attribute.String("CustomerID", request.GetCustomerId()),
)
err := s.app.AuthorizePayment(ctx, application.AuthorizePayment{
ID: id,
CustomerID: request.GetCustomerId(),
Amount: request.GetAmount(),
})
if err != nil {
span.RecordError(err, trace.WithAttributes(errorsotel.ErrAttrs(err)...))
span.SetStatus(codes.Error, err.Error())
}
return &paymentspb.AuthorizePaymentResponse{Id: id}, err
}
func (s server) ConfirmPayment(ctx context.Context, request *paymentspb.ConfirmPaymentRequest,
) (*paymentspb.ConfirmPaymentResponse, error) {
span := trace.SpanFromContext(ctx)
span.SetAttributes(
attribute.String("PaymentID", request.GetId()),
)
err := s.app.ConfirmPayment(ctx, application.ConfirmPayment{
ID: request.GetId(),
})
if err != nil {
span.RecordError(err, trace.WithAttributes(errorsotel.ErrAttrs(err)...))
span.SetStatus(codes.Error, err.Error())
}
return &paymentspb.ConfirmPaymentResponse{}, err
}
func (s server) CreateInvoice(ctx context.Context, request *paymentspb.CreateInvoiceRequest) (*paymentspb.CreateInvoiceResponse, error) {
span := trace.SpanFromContext(ctx)
id := uuid.New().String()
span.SetAttributes(
attribute.String("InvoiceID", id),
attribute.String("OrderID", request.GetOrderId()),
)
err := s.app.CreateInvoice(ctx, application.CreateInvoice{
ID: id,
OrderID: request.GetOrderId(),
Amount: request.GetAmount(),
})
if err != nil {
span.RecordError(err, trace.WithAttributes(errorsotel.ErrAttrs(err)...))
span.SetStatus(codes.Error, err.Error())
}
return &paymentspb.CreateInvoiceResponse{
Id: id,
}, err
}
func (s server) AdjustInvoice(ctx context.Context, request *paymentspb.AdjustInvoiceRequest) (*paymentspb.AdjustInvoiceResponse, error) {
span := trace.SpanFromContext(ctx)
span.SetAttributes(
attribute.String("InvoiceID", request.GetId()),
)
err := s.app.AdjustInvoice(ctx, application.AdjustInvoice{
ID: request.GetId(),
Amount: request.GetAmount(),
})
if err != nil {
span.RecordError(err, trace.WithAttributes(errorsotel.ErrAttrs(err)...))
span.SetStatus(codes.Error, err.Error())
}
return &paymentspb.AdjustInvoiceResponse{}, err
}
func (s server) PayInvoice(ctx context.Context, request *paymentspb.PayInvoiceRequest) (*paymentspb.PayInvoiceResponse, error) {
span := trace.SpanFromContext(ctx)
span.SetAttributes(
attribute.String("InvoiceID", request.GetId()),
)
err := s.app.PayInvoice(ctx, application.PayInvoice{
ID: request.GetId(),
})
if err != nil {
span.RecordError(err, trace.WithAttributes(errorsotel.ErrAttrs(err)...))
span.SetStatus(codes.Error, err.Error())
}
return &paymentspb.PayInvoiceResponse{}, err
}
func (s server) CancelInvoice(ctx context.Context, request *paymentspb.CancelInvoiceRequest) (*paymentspb.CancelInvoiceResponse, error) {
span := trace.SpanFromContext(ctx)
span.SetAttributes(
attribute.String("InvoiceID", request.GetId()),
)
err := s.app.CancelInvoice(ctx, application.CancelInvoice{
ID: request.GetId(),
})
if err != nil {
span.RecordError(err, trace.WithAttributes(errorsotel.ErrAttrs(err)...))
span.SetStatus(codes.Error, err.Error())
}
return &paymentspb.CancelInvoiceResponse{}, err
}