From 4fff09443d5641313db95ea4b6ece12d713ff836 Mon Sep 17 00:00:00 2001 From: Benoy Bose Date: Fri, 10 Jan 2025 05:21:07 +0530 Subject: [PATCH] Added more queries --- queries.js | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++- server.js | 78 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 185 insertions(+), 1 deletion(-) diff --git a/queries.js b/queries.js index 0885bf2..a826c00 100644 --- a/queries.js +++ b/queries.js @@ -182,4 +182,110 @@ export const productByCodeUsageYearMonthQuery = `SELECT DISTINCT FROM ${process.env.ATHENA_CU_TABLE} WHERE LOWER(line_item_product_code) = LOWER('%productCode%') AND year = '%year%' - AND month = '%month%';`; \ No newline at end of file + AND month = '%month%';`; + +export const invoices = `select DISTINCT + bill_invoice_id as invoiceId, + year, month +FROM ${process.env.ATHENA_CU_TABLE}`; + +export const invoiceById = `select DISTINCT + bill_invoice_id as invoiceId, + year, month, + line_item_product_code as productCode, + line_item_usage_account_id as accountId, + line_item_resource_id as resourceId +FROM ${process.env.ATHENA_CU_TABLE} +WHERE bill_invoice_id = '%invoiceId%';`; + +export const invoiceByIdProducts = `select DISTINCT + bill_invoice_id as invoiceId, + year, month, + line_item_product_code as productCode, + line_item_usage_account_id as accountId, + line_item_resource_id as resourceId +FROM ${process.env.ATHENA_CU_TABLE} +WHERE bill_invoice_id = '%invoiceId%';`; + +export const invoiceByProductCode = `select DISTINCT + bill_invoice_id as invoiceId, + year, month, + line_item_product_code as productCode, + line_item_usage_account_id as accountId, + line_item_resource_id as resourceId +FROM ${process.env.ATHENA_CU_TABLE} +WHERE bill_invoice_id = '%invoiceId%' + AND LOWER(line_item_product_code) = LOWER('%productCode%');`; + +export const invoiceByProductCodeUsage = `select DISTINCT + bill_invoice_id as invoiceId, + year, month, + line_item_product_code as productCode, + line_item_usage_account_id as accountId, + line_item_resource_id as resourceId, + line_item_usage_type AS usageType, + line_item_usage_amount AS usageAmount, + line_item_unblended_rate AS unblendedRate, + line_item_unblended_cost AS unblendedCost, + line_item_blended_rate AS blendedRate, + line_item_blended_cost AS blendedCost, + pricing_term AS pricingTerm, + pricing_unit AS pricingUnit, + pricing_rate_code AS pricingRateCode, + pricing_currency AS pricingCurrency, + line_item_usage_start_date AS startDate, + line_item_usage_end_date AS endDate +FROM ${process.env.ATHENA_CU_TABLE} +WHERE bill_invoice_id = '%invoiceId%' + AND LOWER(line_item_product_code) = LOWER('%productCode%');`; + +export const invoiceByIdAccounts = `select DISTINCT + bill_invoice_id as invoiceId, + year, month, + line_item_usage_account_id as accountId +FROM ${process.env.ATHENA_CU_TABLE} +WHERE bill_invoice_id = '%invoiceId%';`; + +export const invoiceByIdAccount = `select DISTINCT + bill_invoice_id as invoiceId, + year, month, + line_item_product_code as productCode, + line_item_usage_account_id as accountId, + line_item_resource_id as resourceId +FROM ${process.env.ATHENA_CU_TABLE} +WHERE bill_invoice_id = '%invoiceId%' + AND line_item_usage_account_id = '%accountId%';`; + +export const invoiceByIdAccountProducts = `select DISTINCT + bill_invoice_id as invoiceId, + year, month, + line_item_product_code as productCode, + line_item_usage_account_id as accountId, + line_item_resource_id as resourceId +FROM ${process.env.ATHENA_CU_TABLE} +WHERE bill_invoice_id = '%invoiceId%' + AND line_item_usage_account_id = '%accountId%' + AND LOWER(line_item_product_code) = LOWER('%productCode%');`; + +export const invoiceByIdAccountProductsUsage = `select DISTINCT + bill_invoice_id as invoiceId, + year, month, + line_item_product_code as productCode, + line_item_usage_account_id as accountId, + line_item_resource_id as resourceId, + line_item_usage_type AS usageType, + line_item_usage_amount AS usageAmount, + line_item_unblended_rate AS unblendedRate, + line_item_unblended_cost AS unblendedCost, + line_item_blended_rate AS blendedRate, + line_item_blended_cost AS blendedCost, + pricing_term AS pricingTerm, + pricing_unit AS pricingUnit, + pricing_rate_code AS pricingRateCode, + pricing_currency AS pricingCurrency, + line_item_usage_start_date AS startDate, + line_item_usage_end_date AS endDate +FROM ${process.env.ATHENA_CU_TABLE} +WHERE bill_invoice_id = '%invoiceId%' + AND line_item_usage_account_id = '%accountId%' + AND LOWER(line_item_product_code) = LOWER('%productCode%');`; \ No newline at end of file diff --git a/server.js b/server.js index 2057852..22c0191 100644 --- a/server.js +++ b/server.js @@ -142,6 +142,84 @@ server.get("/products/:productCode/usage/:year/:month", async (request, reply) = return results; }); +server.get("/invoices", async (request, reply) => { + const query = queries.invoices; + const queryExecutionId = await executeQueryAsync(query); + const results = await retrieveResultsAsync(queryExecutionId); + return results; +}); + +server.get("/invoices/:invoiceId", async (request, reply) => { + const query = queries.invoiceById + .replace('%invoiceId%', request.params.invoiceId); + const queryExecutionId = await executeQueryAsync(query); + const results = await retrieveResultsAsync(queryExecutionId); + return results; +}); + +server.get("/invoices/:invoiceId/products", async (request, reply) => { + const query = queries.invoiceByIdProducts + .replace('%invoiceId%', request.params.invoiceId); + const queryExecutionId = await executeQueryAsync(query); + const results = await retrieveResultsAsync(queryExecutionId); + return results; +}); + +server.get("/invoices/:invoiceId/products/:productCode", async (request, reply) => { + const query = queries.invoiceByProductCode + .replace('%invoiceId%', request.params.invoiceId) + .replace('%productCode%', request.params.productCode); + const queryExecutionId = await executeQueryAsync(query); + const results = await retrieveResultsAsync(queryExecutionId); + return results; +}); + +server.get("/invoices/:invoiceId/products/:productCode/usage", async (request, reply) => { + const query = queries.invoiceByProductCodeUsage + .replace('%invoiceId%', request.params.invoiceId) + .replace('%productCode%', request.params.productCode); + const queryExecutionId = await executeQueryAsync(query); + const results = await retrieveResultsAsync(queryExecutionId); + return results; +}); + +server.get("/invoices/:invoiceId/accounts", async (request, reply) => { + const query = queries.invoiceByIdAccounts + .replace('%invoiceId%', request.params.invoiceId); + const queryExecutionId = await executeQueryAsync(query); + const results = await retrieveResultsAsync(queryExecutionId); + return results; +}); + +server.get("/invoices/:invoiceId/accounts/:accountId", async (request, reply) => { + const query = queries.invoiceByIdAccount + .replace('%invoiceId%', request.params.invoiceId) + .replace('%accountId%', request.params.accountId); + const queryExecutionId = await executeQueryAsync(query); + const results = await retrieveResultsAsync(queryExecutionId); + return results; +}); + +server.get("/invoices/:invoiceId/accounts/:accountId/products/:productCode", async (request, reply) => { + const query = queries.invoiceByIdAccountProducts + .replace('%invoiceId%', request.params.invoiceId) + .replace('%accountId%', request.params.accountId) + .replace('%productCode%', request.params.productCode); + const queryExecutionId = await executeQueryAsync(query); + const results = await retrieveResultsAsync(queryExecutionId); + return results; +}); + +server.get("/invoices/:invoiceId/accounts/:accountId/products/:productCode/usage", async (request, reply) => { + const query = queries.invoiceByIdAccountProductsUsage + .replace('%invoiceId%', request.params.invoiceId) + .replace('%accountId%', request.params.accountId) + .replace('%productCode%', request.params.productCode); + const queryExecutionId = await executeQueryAsync(query); + const results = await retrieveResultsAsync(queryExecutionId); + return results; +}); + try { await server.listen({ port: 3000 }) } catch (err) {