diff --git a/src/datasources/order-api.ts b/src/datasources/order-api.ts index a701053..66ca2a4 100644 --- a/src/datasources/order-api.ts +++ b/src/datasources/order-api.ts @@ -102,6 +102,24 @@ export class OrderAPI extends BaseSQLDataSource { .then((row) => this.createOrderFromRow(row)); } + async getOrderByExternalId( + klarnaOrderId: string, + paypalTransactionId: string, + ): Promise { + const column = paypalTransactionId + ? 'paypal_transaction_id' + : 'klarna_order_id'; + const value = paypalTransactionId ?? klarnaOrderId; + + return this.knex + .select('*') + .from('orders') + .where(column, value) + .first() + .cache(MINUTE) + .then((row) => this.createOrderFromRow(row)); + } + async getOrderRowFieldMapping(): Promise { // const fields = await this.knex.select('*').from('order-row_fields'); doesn't work becuase of string case... const fieldsRes = await this.cachedRaw('SELECT * from "order-row_fields"') diff --git a/src/resolvers/orders-resolver.ts b/src/resolvers/orders-resolver.ts index f369232..c614d6d 100644 --- a/src/resolvers/orders-resolver.ts +++ b/src/resolvers/orders-resolver.ts @@ -57,6 +57,18 @@ async function getOrder(_, { id }, { dataSources, auth }) { return (dataSources.orderApi).getOrderById(id); } +async function orderByExternalId( + _, + { klarnaOrderId, paypalTransactionId }, + { dataSources, auth }, +) { + checkAccess(['orders.read'], auth); + return (dataSources.orderApi).getOrderByExternalId( + klarnaOrderId, + paypalTransactionId, + ); +} + export const orderTypeDefs = { ContactInformation, Order, @@ -66,4 +78,5 @@ export const orderTypeDefs = { export const orderQueryTypeDefs = { orders: getOrdersResult, order: getOrder, + orderByExternalId: orderByExternalId, }; diff --git a/src/schema.graphql b/src/schema.graphql index 3ae1a32..f1e47bf 100644 --- a/src/schema.graphql +++ b/src/schema.graphql @@ -19,6 +19,7 @@ directive @cacheControl( type Query { orders(pagination: PaginationInput!, filter: DateFilterInput!): OrdersResult order(id: ID!): Order + orderByExternalId(klarnaOrderId: ID, paypalTransactionId: ID): Order products( pagination: PaginationInput! filter: ProductsFilterInput