From 86cd326d902e973913fe92745a7ee2c035cd8106 Mon Sep 17 00:00:00 2001 From: Alan Wu Date: Mon, 10 Feb 2025 13:13:07 -0500 Subject: [PATCH 1/3] feat: store and log classic blockNumber --- lib/entities/Order.ts | 1 + lib/handlers/get-unimind/schema/index.ts | 1 + lib/models/PriorityOrder.ts | 1 + lib/repositories/quote-metadata-repository.ts | 2 ++ lib/services/analytics-service.ts | 1 + test/unit/handlers/post-order/post-order.test.ts | 1 + test/unit/repositories/quote-metadata-repository.test.ts | 1 + 7 files changed, 8 insertions(+) diff --git a/lib/entities/Order.ts b/lib/entities/Order.ts index 0f357529..c8c1087d 100644 --- a/lib/entities/Order.ts +++ b/lib/entities/Order.ts @@ -88,6 +88,7 @@ export type SharedXOrderEntity = { settledAmounts?: SettledAmount[] referencePrice?: string priceImpact?: number + blockNumber?: number route?: Route pair?: string } diff --git a/lib/handlers/get-unimind/schema/index.ts b/lib/handlers/get-unimind/schema/index.ts index da8017d4..af31b88a 100644 --- a/lib/handlers/get-unimind/schema/index.ts +++ b/lib/handlers/get-unimind/schema/index.ts @@ -20,6 +20,7 @@ export const unimindQueryParamsSchema = Joi.object({ pair: Joi.string().required(), referencePrice: Joi.string().required(), priceImpact: Joi.number().required(), + blockNumber: Joi.number().optional(), route: Joi.string() .optional() .custom((value, helpers) => { diff --git a/lib/models/PriorityOrder.ts b/lib/models/PriorityOrder.ts index f45b039d..a169e6fb 100644 --- a/lib/models/PriorityOrder.ts +++ b/lib/models/PriorityOrder.ts @@ -63,6 +63,7 @@ export class PriorityOrder extends Order { createdAt: this.createdAt, referencePrice: quoteMetadata?.referencePrice, priceImpact: quoteMetadata?.priceImpact, + blockNumber: quoteMetadata?.blockNumber, route: quoteMetadata?.route, pair: quoteMetadata?.pair, } diff --git a/lib/repositories/quote-metadata-repository.ts b/lib/repositories/quote-metadata-repository.ts index c2fc75fc..5aef7d20 100644 --- a/lib/repositories/quote-metadata-repository.ts +++ b/lib/repositories/quote-metadata-repository.ts @@ -23,6 +23,7 @@ export interface QuoteMetadata { quoteId: string referencePrice: string priceImpact: number + blockNumber: number route: Route pair: string } @@ -54,6 +55,7 @@ export class DynamoQuoteMetadataRepository implements QuoteMetadataRepository { referencePrice: { type: DYNAMODB_TYPES.STRING, required: true }, priceImpact: { type: DYNAMODB_TYPES.NUMBER, required: true }, pair: {type: DYNAMODB_TYPES.STRING, required: true}, + blockNumber: {type: DYNAMODB_TYPES.NUMBER, required: false}, route: {type: DYNAMODB_TYPES.MAP, required: false} }, table, diff --git a/lib/services/analytics-service.ts b/lib/services/analytics-service.ts index 40394864..05fe1c6b 100644 --- a/lib/services/analytics-service.ts +++ b/lib/services/analytics-service.ts @@ -35,6 +35,7 @@ export class AnalyticsService implements AnalyticsServiceInterface { tokenIn: order.input?.token, tokenOut: order.outputs[0].token, orderType: orderType, + blockNumber: order?.blockNumber, route: JSON.stringify(order?.route), } diff --git a/test/unit/handlers/post-order/post-order.test.ts b/test/unit/handlers/post-order/post-order.test.ts index 5ffe254c..dfdf24ce 100644 --- a/test/unit/handlers/post-order/post-order.test.ts +++ b/test/unit/handlers/post-order/post-order.test.ts @@ -75,6 +75,7 @@ const SAMPLE_QUOTE_METADATA = { referencePrice: '4221.21', priceImpact: 0.01, pair: 'ETH-USDC', + blockNumber: 123456, route: { quote: '1234', quote_gas_adjusted: '5678', diff --git a/test/unit/repositories/quote-metadata-repository.test.ts b/test/unit/repositories/quote-metadata-repository.test.ts index 882b4205..01d77968 100644 --- a/test/unit/repositories/quote-metadata-repository.test.ts +++ b/test/unit/repositories/quote-metadata-repository.test.ts @@ -9,6 +9,7 @@ describe('QuoteMetadataRepository', () => { quoteId: 'test-quote-id', referencePrice: "21212121", priceImpact: 0.21, + blockNumber: 123456, route: { quote: "1234", quote_gas_adjusted: "5678", From 71d5e623322ec7c8e40effc2c34a60754435c2ae Mon Sep 17 00:00:00 2001 From: Alan Wu Date: Mon, 10 Feb 2025 13:15:35 -0500 Subject: [PATCH 2/3] test: blockNumber optional --- .../handlers/get-unimind/get-unimind.test.ts | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/test/unit/handlers/get-unimind/get-unimind.test.ts b/test/unit/handlers/get-unimind/get-unimind.test.ts index 22c6b265..63feb7fd 100644 --- a/test/unit/handlers/get-unimind/get-unimind.test.ts +++ b/test/unit/handlers/get-unimind/get-unimind.test.ts @@ -417,6 +417,7 @@ describe('Testing get unimind handler', () => { referencePrice: '4221.21', priceImpact: 0.01, pair: 'ETH-USDC', + blockNumber: 1234, // missing route } @@ -432,4 +433,27 @@ describe('Testing get unimind handler', () => { expect(mockQuoteMetadataRepo.put).toHaveBeenCalledTimes(1) expect(mockUnimindParametersRepo.getByPair).toHaveBeenCalledTimes(1) }) -}) \ No newline at end of file + + it('blockNumber is optional', async () => { + const quoteMetadata = { + quoteId: 'test-quote-id', + referencePrice: '4221.21', + priceImpact: 0.01, + pair: 'ETH-USDC', + // missing blockNumber + route: STRINGIFIED_ROUTE, + } + + const response = await getUnimindHandler.handler( + { + queryStringParameters: quoteMetadata, + requestContext: { requestId: 'test-request-id' } + } as any, + EVENT_CONTEXT + ) + + expect(response.statusCode).toBe(200) + expect(mockQuoteMetadataRepo.put).toHaveBeenCalledTimes(1) + expect(mockUnimindParametersRepo.getByPair).toHaveBeenCalledTimes(1) + }) +}) From 8d42137c7153d86ab7254b8acf080eed0f1273cb Mon Sep 17 00:00:00 2001 From: Alan Wu Date: Mon, 10 Feb 2025 14:28:09 -0500 Subject: [PATCH 3/3] feat: add blockNumber to orders table --- lib/repositories/dutch-orders-repository.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/repositories/dutch-orders-repository.ts b/lib/repositories/dutch-orders-repository.ts index 00b3df74..db0a917e 100644 --- a/lib/repositories/dutch-orders-repository.ts +++ b/lib/repositories/dutch-orders-repository.ts @@ -42,6 +42,7 @@ export class DutchOrdersRepository extends GenericOrdersRepository