awsmatrix/server.js
2025-01-10 05:21:07 +05:30

229 lines
9.3 KiB
JavaScript

import Fastify from "fastify";
import sequelizePlugin from "./plugins/sequelize.js";
import dotenv from "dotenv";
import { executeQueryAsync, retrieveResultsAsync } from "./services/athena.js";
dotenv.config();
import * as queries from "./queries.js";
const server = Fastify({ logger: true });
server.register(sequelizePlugin);
server.get("/", async (request, reply) => {
const [results, metadata] = await server.sequelize.query('SELECT 1 + 2 AS result');
console.log(results);
console.log(metadata);
return { hello: "world" };
});
server.get("/accounts", async (request, reply) => {
const queryExecutionId = await executeQueryAsync(queries.accountsQuery);
const results = await retrieveResultsAsync(queryExecutionId);
return results;
});
server.get("/accounts/:accountId/regions", async (request, reply) => {
const query = queries.regionsQuery.replace('%accountId%', request.params.accountId);
const queryExecutionId = await executeQueryAsync(query);
const results = await retrieveResultsAsync(queryExecutionId);
return results;
});
server.get("/accounts/:accountId/regions/:regionCode/products", async (request, reply) => {
let regionCode = request.params.regionCode;
if (!regionCode || regionCode === 'global') {
regionCode = '';
}
const query = queries.productsByRegionQuery
.replace('%accountId%', request.params.accountId)
.replace('%regionCode%', regionCode);
const queryExecutionId = await executeQueryAsync(query);
const results = await retrieveResultsAsync(queryExecutionId);
return results;
});
server.get("/accounts/:accountId/regions/:regionCode/products/:productCode", async (request, reply) => {
let regionCode = request.params.regionCode;
if (!regionCode || regionCode === 'global') {
regionCode = '';
}
const query = queries.productByRegionQuery
.replace('%accountId%', request.params.accountId)
.replace('%regionCode%', regionCode)
.replace('%productCode%', request.params.productCode);
const queryExecutionId = await executeQueryAsync(query);
const results = await retrieveResultsAsync(queryExecutionId);
return results;
});
server.get("/accounts/:accountId/regions/:regionCode/products/:productCode/usage", async (request, reply) => {
let regionCode = request.params.regionCode;
if (!regionCode || regionCode === 'global') {
regionCode = '';
}
const query = queries.productUsageByRegionQuery
.replace('%accountId%', request.params.accountId)
.replace('%regionCode%', regionCode)
.replace('%productCode%', request.params.productCode);
const queryExecutionId = await executeQueryAsync(query);
const results = await retrieveResultsAsync(queryExecutionId);
return results;
});
server.get("/accounts/:accountId/regions/:regionCode/products/:productCode/usage/:year", async (request, reply) => {
let regionCode = request.params.regionCode;
if (!regionCode || regionCode === 'global') {
regionCode = '';
}
const query = queries.productUsageByRegionYearQuery
.replace('%accountId%', request.params.accountId)
.replace('%regionCode%', regionCode)
.replace('%productCode%', request.params.productCode)
.replace('%year%', request.params.year);
const queryExecutionId = await executeQueryAsync(query);
const results = await retrieveResultsAsync(queryExecutionId);
return results;
});
server.get("/accounts/:accountId/regions/:regionCode/products/:productCode/usage/:year/:month", async (request, reply) => {
let regionCode = request.params.regionCode;
if (!regionCode || regionCode === 'global') {
regionCode = '';
}
const query = queries.productUsageByRegionYearMonthQuery
.replace('%accountId%', request.params.accountId)
.replace('%regionCode%', regionCode)
.replace('%productCode%', request.params.productCode)
.replace('%year%', request.params.year)
.replace('%month%', request.params.month);
const queryExecutionId = await executeQueryAsync(query);
const results = await retrieveResultsAsync(queryExecutionId);
return results;
});
server.get("/products", async (request, reply) => {
const query = queries.productQuery;
const queryExecutionId = await executeQueryAsync(query);
const results = await retrieveResultsAsync(queryExecutionId);
return results;
});
server.get("/products/:productCode", async (request, reply) => {
const query = queries.productByCodeQuery
.replace('%productCode%', request.params.productCode);
const queryExecutionId = await executeQueryAsync(query);
const results = await retrieveResultsAsync(queryExecutionId);
return results;
});
server.get("/products/:productCode/usage", async (request, reply) => {
const query = queries.productByCodeUsageQuery
.replace('%productCode%', request.params.productCode);
const queryExecutionId = await executeQueryAsync(query);
const results = await retrieveResultsAsync(queryExecutionId);
return results;
});
server.get("/products/:productCode/usage/:year", async (request, reply) => {
const query = queries.productByCodeUsageYearQuery
.replace('%productCode%', request.params.productCode)
.replace('%year%', request.params.year);
const queryExecutionId = await executeQueryAsync(query);
const results = await retrieveResultsAsync(queryExecutionId);
return results;
});
server.get("/products/:productCode/usage/:year/:month", async (request, reply) => {
const query = queries.productByCodeUsageYearMonthQuery
.replace('%productCode%', request.params.productCode)
.replace('%year%', request.params.year)
.replace('%month%', request.params.month);
const queryExecutionId = await executeQueryAsync(query);
const results = await retrieveResultsAsync(queryExecutionId);
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) {
server.log.error(err);
process.exit(1);
}