Skip to content

Commit a67fe04

Browse files
committed
feedback:Rename SummariesResponse & move interfaces to common
1 parent e111ef9 commit a67fe04

File tree

5 files changed

+74
-71
lines changed

5 files changed

+74
-71
lines changed

OpenApi.yml

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -683,34 +683,36 @@ components:
683683
rsk:
684684
type: string
685685
type: object
686-
SummariesResponse:
687-
properties:
688-
peginSummary:
689-
$ref: '#/components/schemas/SummaryData'
690-
type: object
691-
pegoutSummary:
692-
$ref: '#/components/schemas/SummaryData'
693-
type: object
694-
type: object
695686
SummaryData:
696687
properties:
697688
confirmedQuotesCount:
698689
type: integer
699690
lpEarnings:
700-
type: string
691+
$ref: '#/components/schemas/Wei'
701692
refundedQuotesCount:
702693
type: integer
703694
totalAcceptedQuotedAmount:
704-
type: string
695+
$ref: '#/components/schemas/Wei'
705696
totalAcceptedQuotesCount:
706697
type: integer
707698
totalFeesCollected:
708-
type: string
699+
$ref: '#/components/schemas/Wei'
709700
totalPenaltyAmount:
710-
type: string
701+
$ref: '#/components/schemas/Wei'
711702
totalQuotedAmount:
712-
type: string
703+
$ref: '#/components/schemas/Wei'
704+
type: object
705+
SummaryResult:
706+
properties:
707+
peginSummary:
708+
$ref: '#/components/schemas/SummaryData'
709+
type: object
710+
pegoutSummary:
711+
$ref: '#/components/schemas/SummaryData'
712+
type: object
713713
type: object
714+
Wei: {}
715+
entities.Wei: {}
714716
pkg.AcceptQuoteRequest:
715717
properties:
716718
quoteHash:
@@ -1086,7 +1088,7 @@ paths:
10861088
content:
10871089
application/json:
10881090
schema:
1089-
$ref: '#/components/schemas/SummariesResponse'
1091+
$ref: '#/components/schemas/SummaryResult'
10901092
description: Financial data for the given period
10911093
summary: Summaries
10921094
/userQuotes:

internal/adapters/entrypoints/rest/handlers/get_report_summaries.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414
// @Description Returns financial data for a given period
1515
// @Param startDate query string true "Start date in YYYY-MM-DD format" Format(date)
1616
// @Param endDate query string true "End date in YYYY-MM-DD format" Format(date)
17-
// @Success 200 {object} liquidity_provider.SummariesResponse "Financial data for the given period"
17+
// @Success 200 {object} liquidity_provider.SummaryResult "Financial data for the given period"
1818
// @Router /report/summaries [get]
1919
func NewGetReportSummariesHandler(useCase *liquidity_provider.SummariesUseCase) http.HandlerFunc {
2020
return func(w http.ResponseWriter, req *http.Request) {

internal/adapters/entrypoints/rest/handlers/get_report_summaries_test.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@ type MockSummariesUseCase struct {
2121
mock.Mock
2222
}
2323

24-
func (m *MockSummariesUseCase) Run(ctx context.Context, startDate, endDate time.Time) (liquidity_provider.SummariesResponse, error) {
24+
func (m *MockSummariesUseCase) Run(ctx context.Context, startDate, endDate time.Time) (liquidity_provider.SummaryResult, error) {
2525
args := m.Called(ctx, startDate, endDate)
2626
if args.Get(0) == nil {
27-
return liquidity_provider.SummariesResponse{}, args.Error(1)
27+
return liquidity_provider.SummaryResult{}, args.Error(1)
2828
}
29-
response, ok := args.Get(0).(liquidity_provider.SummariesResponse)
29+
response, ok := args.Get(0).(liquidity_provider.SummaryResult)
3030
if !ok {
31-
return liquidity_provider.SummariesResponse{}, errors.New("invalid response type")
31+
return liquidity_provider.SummaryResult{}, errors.New("invalid response type")
3232
}
3333
return response, args.Error(1)
3434
}
@@ -54,14 +54,14 @@ func TestGetReportSummariesHandler(t *testing.T) { //nolint:funlen
5454
name string
5555
url string
5656
expectedStatus int
57-
mockResponse liquidity_provider.SummariesResponse
57+
mockResponse liquidity_provider.SummaryResult
5858
mockErr error
5959
}{
6060
{
6161
name: "Success with valid date range",
6262
url: "/report/summaries?startDate=2023-01-01&endDate=2023-01-31",
6363
expectedStatus: http.StatusOK,
64-
mockResponse: liquidity_provider.SummariesResponse{
64+
mockResponse: liquidity_provider.SummaryResult{
6565
PeginSummary: liquidity_provider.SummaryData{
6666
TotalAcceptedQuotesCount: 10,
6767
ConfirmedQuotesCount: 8,
@@ -89,42 +89,42 @@ func TestGetReportSummariesHandler(t *testing.T) { //nolint:funlen
8989
name: "Missing startDate parameter",
9090
url: "/report/summaries?endDate=2023-01-31",
9191
expectedStatus: http.StatusBadRequest,
92-
mockResponse: liquidity_provider.SummariesResponse{},
92+
mockResponse: liquidity_provider.SummaryResult{},
9393
mockErr: nil,
9494
},
9595
{
9696
name: "Missing endDate parameter",
9797
url: "/report/summaries?startDate=2023-01-01",
9898
expectedStatus: http.StatusBadRequest,
99-
mockResponse: liquidity_provider.SummariesResponse{},
99+
mockResponse: liquidity_provider.SummaryResult{},
100100
mockErr: nil,
101101
},
102102
{
103103
name: "Invalid startDate format",
104104
url: "/report/summaries?startDate=01/01/2023&endDate=2023-01-31",
105105
expectedStatus: http.StatusBadRequest,
106-
mockResponse: liquidity_provider.SummariesResponse{},
106+
mockResponse: liquidity_provider.SummaryResult{},
107107
mockErr: nil,
108108
},
109109
{
110110
name: "Invalid endDate format",
111111
url: "/report/summaries?startDate=2023-01-01&endDate=31/01/2023",
112112
expectedStatus: http.StatusBadRequest,
113-
mockResponse: liquidity_provider.SummariesResponse{},
113+
mockResponse: liquidity_provider.SummaryResult{},
114114
mockErr: nil,
115115
},
116116
{
117117
name: "EndDate before StartDate",
118118
url: "/report/summaries?startDate=2023-02-01&endDate=2023-01-31",
119119
expectedStatus: http.StatusBadRequest,
120-
mockResponse: liquidity_provider.SummariesResponse{},
120+
mockResponse: liquidity_provider.SummaryResult{},
121121
mockErr: nil,
122122
},
123123
{
124124
name: "Error in use case",
125125
url: "/report/summaries?startDate=2023-01-01&endDate=2023-01-31",
126126
expectedStatus: http.StatusInternalServerError,
127-
mockResponse: liquidity_provider.SummariesResponse{},
127+
mockResponse: liquidity_provider.SummaryResult{},
128128
mockErr: errors.New("test error"),
129129
},
130130
}
@@ -146,7 +146,7 @@ func TestGetReportSummariesHandler(t *testing.T) { //nolint:funlen
146146
handler.ServeHTTP(rr, req)
147147
assert.Equal(t, tt.expectedStatus, rr.Code)
148148
if tt.expectedStatus == http.StatusOK {
149-
var response liquidity_provider.SummariesResponse
149+
var response liquidity_provider.SummaryResult
150150
err = json.Unmarshal(rr.Body.Bytes(), &response)
151151
require.NoError(t, err)
152152

internal/entities/quote/common.go

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ import (
44
"encoding/hex"
55
"errors"
66
"fmt"
7+
"math/big"
8+
79
"github.com/rsksmart/liquidity-provider-server/internal/entities"
810
"github.com/rsksmart/liquidity-provider-server/internal/entities/utils"
911
log "github.com/sirupsen/logrus"
10-
"math/big"
1112
)
1213

1314
type AcceptedQuote struct {
@@ -28,6 +29,27 @@ type PegConfiguration interface {
2829
ValidateAmount(amount *entities.Wei) error
2930
}
3031

32+
type Quote interface {
33+
Total() *entities.Wei
34+
}
35+
36+
type RetainedQuote interface {
37+
GetQuoteHash() string
38+
}
39+
40+
type FeeProvider interface {
41+
GetCallFee() *entities.Wei
42+
GetGasFee() *entities.Wei
43+
GetProductFee() *entities.Wei
44+
GetPenaltyFee() *entities.Wei
45+
}
46+
47+
type QuoteResult[Q any, R RetainedQuote] interface {
48+
GetQuotes() []Q
49+
GetRetainedQuotes() []R
50+
GetQuoteHashToIndex() map[string]int
51+
}
52+
3153
// ValidateQuoteHash checks if a given string is a valid 32-byte quote hash
3254
// Returns nil if valid, error otherwise
3355
func ValidateQuoteHash(hash string) error {

internal/usecases/liquidity_provider/summaries.go

Lines changed: 20 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ const (
1414
DateFormat = time.DateOnly
1515
)
1616

17-
type SummariesResponse struct {
17+
type SummaryResult struct {
1818
PeginSummary SummaryData `json:"peginSummary"`
1919
PegoutSummary SummaryData `json:"pegoutSummary"`
2020
}
@@ -30,35 +30,14 @@ type SummaryData struct {
3030
LpEarnings *entities.Wei `json:"lpEarnings"`
3131
}
3232

33-
type Quote interface {
34-
Total() *entities.Wei
35-
}
36-
37-
type RetainedQuote interface {
38-
GetQuoteHash() string
39-
}
40-
41-
type FeeProvider interface {
42-
GetCallFee() *entities.Wei
43-
GetGasFee() *entities.Wei
44-
GetProductFee() *entities.Wei
45-
GetPenaltyFee() *entities.Wei
46-
}
47-
4833
type feeAdapter struct {
4934
callFee *entities.Wei
5035
gasFee *entities.Wei
5136
productFee *entities.Wei
5237
penaltyFee *entities.Wei
5338
}
5439

55-
type QuoteResult[Q any, R RetainedQuote] interface {
56-
GetQuotes() []Q
57-
GetRetainedQuotes() []R
58-
GetQuoteHashToIndex() map[string]int
59-
}
60-
61-
type quoteResultAdapter[Q any, R RetainedQuote] struct {
40+
type quoteResultAdapter[Q any, R quote.RetainedQuote] struct {
6241
quotes []Q
6342
retainedQuotes []R
6443
quoteHashToIndex map[string]int
@@ -92,24 +71,24 @@ func NewSummariesUseCase(
9271
}
9372
}
9473

95-
func (u *SummariesUseCase) Run(ctx context.Context, startDate, endDate time.Time) (SummariesResponse, error) {
74+
func (u *SummariesUseCase) Run(ctx context.Context, startDate, endDate time.Time) (SummaryResult, error) {
9675
peginData, err := u.aggregatePeginData(ctx, startDate, endDate)
9776
if err != nil {
9877
log.Errorf("Error aggregating pegin data: %v", err)
99-
return SummariesResponse{}, err
78+
return SummaryResult{}, err
10079
}
10180
pegoutData, err := u.aggregatePegoutData(ctx, startDate, endDate)
10281
if err != nil {
10382
log.Errorf("Error aggregating pegout data: %v", err)
104-
return SummariesResponse{}, err
83+
return SummaryResult{}, err
10584
}
106-
return SummariesResponse{
85+
return SummaryResult{
10786
PeginSummary: peginData,
10887
PegoutSummary: pegoutData,
10988
}, nil
11089
}
11190

112-
func mapPeginQuote(q *quote.PeginQuote) FeeProvider {
91+
func mapPeginQuote(q *quote.PeginQuote) quote.FeeProvider {
11392
if q == nil {
11493
return &feeAdapter{}
11594
}
@@ -121,7 +100,7 @@ func mapPeginQuote(q *quote.PeginQuote) FeeProvider {
121100
}
122101
}
123102

124-
func mapPegoutQuote(q *quote.PegoutQuote) FeeProvider {
103+
func mapPegoutQuote(q *quote.PegoutQuote) quote.FeeProvider {
125104
if q == nil {
126105
return &feeAdapter{}
127106
}
@@ -133,7 +112,7 @@ func mapPegoutQuote(q *quote.PegoutQuote) FeeProvider {
133112
}
134113
}
135114

136-
func processQuoteData[Q any, R RetainedQuote, F FeeProvider](
115+
func processQuoteData[Q any, R quote.RetainedQuote, F quote.FeeProvider](
137116
ctx context.Context,
138117
quotes []Q,
139118
retainedQuotes []R,
@@ -167,7 +146,7 @@ func processQuoteData[Q any, R RetainedQuote, F FeeProvider](
167146
fees := feeProvider(quoteObj)
168147
if isAccepted(retained) {
169148
data.ConfirmedQuotesCount++
170-
if q, ok := any(quoteObj).(Quote); ok {
149+
if q, ok := any(quoteObj).(quote.Quote); ok {
171150
acceptedTotalAmount.Add(acceptedTotalAmount, q.Total())
172151
}
173152
callFee := fees.GetCallFee()
@@ -194,7 +173,7 @@ func calculateTotalAmount[T any](quotes []T) *entities.Wei {
194173
totalAmount := entities.NewWei(0)
195174
for i := range quotes {
196175
var total *entities.Wei
197-
if q, ok := any(&quotes[i]).(Quote); ok {
176+
if q, ok := any(&quotes[i]).(quote.Quote); ok {
198177
total = q.Total()
199178
}
200179
if total != nil {
@@ -215,7 +194,7 @@ func createQuoteHashMap[T any](quotes []T, quoteHashToIndex map[string]int) map[
215194
return quotesByHash
216195
}
217196

218-
func fetchMissingQuotes[Q any, R RetainedQuote](
197+
func fetchMissingQuotes[Q any, R quote.RetainedQuote](
219198
ctx context.Context,
220199
quotesByHash map[string]*Q,
221200
retainedQuotes []R,
@@ -237,36 +216,36 @@ func fetchMissingQuotes[Q any, R RetainedQuote](
237216
continue
238217
}
239218
quotesByHash[quoteHash] = quoteObj
240-
if q, ok := any(quoteObj).(Quote); ok {
219+
if q, ok := any(quoteObj).(quote.Quote); ok {
241220
totalAmount.Add(totalAmount, q.Total())
242221
}
243222
}
244223
}
245224

246-
func adaptPeginResult(result quote.PeginQuoteResult) QuoteResult[quote.PeginQuote, quote.RetainedPeginQuote] {
225+
func adaptPeginResult(result quote.PeginQuoteResult) quote.QuoteResult[quote.PeginQuote, quote.RetainedPeginQuote] {
247226
return quoteResultAdapter[quote.PeginQuote, quote.RetainedPeginQuote]{
248227
quotes: result.Quotes,
249228
retainedQuotes: result.RetainedQuotes,
250229
quoteHashToIndex: result.QuoteHashToIndex,
251230
}
252231
}
253232

254-
func adaptPegoutResult(result quote.PegoutQuoteResult) QuoteResult[quote.PegoutQuote, quote.RetainedPegoutQuote] {
233+
func adaptPegoutResult(result quote.PegoutQuoteResult) quote.QuoteResult[quote.PegoutQuote, quote.RetainedPegoutQuote] {
255234
return quoteResultAdapter[quote.PegoutQuote, quote.RetainedPegoutQuote]{
256235
quotes: result.Quotes,
257236
retainedQuotes: result.RetainedQuotes,
258237
quoteHashToIndex: result.QuoteHashToIndex,
259238
}
260239
}
261240

262-
func aggregateData[Q any, RQ RetainedQuote](
241+
func aggregateData[Q any, RQ quote.RetainedQuote](
263242
ctx context.Context,
264243
startDate, endDate time.Time,
265-
listQuotes func(context.Context, time.Time, time.Time) (QuoteResult[Q, RQ], error),
244+
listQuotes func(context.Context, time.Time, time.Time) (quote.QuoteResult[Q, RQ], error),
266245
getQuote func(context.Context, string) (*Q, error),
267246
isAccepted func(RQ) bool,
268247
isRefunded func(RQ) bool,
269-
toFeeProvider func(*Q) FeeProvider,
248+
toFeeProvider func(*Q) quote.FeeProvider,
270249
) (SummaryData, error) {
271250
result, err := listQuotes(ctx, startDate, endDate)
272251
if err != nil {
@@ -286,7 +265,7 @@ func aggregateData[Q any, RQ RetainedQuote](
286265
}
287266

288267
func (u *SummariesUseCase) aggregatePeginData(ctx context.Context, startDate, endDate time.Time) (SummaryData, error) {
289-
listPeginQuotes := func(ctx context.Context, start, end time.Time) (QuoteResult[quote.PeginQuote, quote.RetainedPeginQuote], error) {
268+
listPeginQuotes := func(ctx context.Context, start, end time.Time) (quote.QuoteResult[quote.PeginQuote, quote.RetainedPeginQuote], error) {
290269
result, err := u.peginRepo.ListQuotesByDateRange(ctx, start, end)
291270
if err != nil {
292271
return nil, err
@@ -304,7 +283,7 @@ func (u *SummariesUseCase) aggregatePeginData(ctx context.Context, startDate, en
304283
}
305284

306285
func (u *SummariesUseCase) aggregatePegoutData(ctx context.Context, startDate, endDate time.Time) (SummaryData, error) {
307-
listPegoutQuotes := func(ctx context.Context, start, end time.Time) (QuoteResult[quote.PegoutQuote, quote.RetainedPegoutQuote], error) {
286+
listPegoutQuotes := func(ctx context.Context, start, end time.Time) (quote.QuoteResult[quote.PegoutQuote, quote.RetainedPegoutQuote], error) {
308287
result, err := u.pegoutRepo.ListQuotesByDateRange(ctx, start, end)
309288
if err != nil {
310289
return nil, err

0 commit comments

Comments
 (0)