//import { ingestOptions, ingestStocks, } from './ingest'; import { sql } from './db.js'; /* const sourceDataDir = '/home/avraham/programming/calendar-optimizer-csv'; //await ingestStocks(sourceDataDir); await ingestOptions(sourceDataDir); */ import fastify from 'fastify' import cors from '@fastify/cors' const server = fastify() await server.register(cors, {origin:true}); server.get('/ping', async (request, reply) => { return 'pong\n' }) server.get('/option_quotes/underlyings', async (request, reply) => { const underlyings = (await sql`SELECT * FROM "underlyings";`).map(x=>x.underlying); reply.status(200).send(underlyings); }) server.get<{ Params: {underlying:string}, }>('/option_quotes/:underlying/quote_dates', async (request, reply) => { const options_quotes = (await sql` SELECT DISTINCT "quote_date" FROM "option_quote" WHERE "underlying" = ${request.params.underlying} ORDER BY "quote_date";` ).map(x=>x.quote_date); reply.status(200).send(options_quotes); }) server.get<{ Params: {underlying:string, quote_date:string}, }>('/option_quotes/:underlying/:quote_date', async (request, reply) => { const options_quotes = await sql` SELECT * FROM "option_quote" WHERE "underlying" = ${request.params.underlying} AND "quote_date" = ${request.params.quote_date} ORDER BY "strike";`; reply.status(200).send(options_quotes); }) server.get<{ Params: {underlying:string, quote_date:string}, }>('/option_quotes/:underlying/:quote_date/strikes', async (request, reply) => { const strikes = (await sql` SELECT DISTINCT "strike" FROM "option_quote" WHERE "underlying" = ${request.params.underlying} AND "quote_date" = ${request.params.quote_date} ORDER BY "strike";` ).map(x=>x.strike); reply.status(200).send(strikes); }) server.get<{ Params: {underlying:string, quote_date:string, strike:string}, }>('/option_quotes/:underlying/:quote_date/:strike', async (request, reply) => { const strikes = await sql` SELECT * FROM "option_quote" WHERE "underlying" = ${request.params.underlying} AND "quote_date" = ${request.params.quote_date} AND "strike" = ${request.params.strike} ORDER BY "strike";`; reply.status(200).send(strikes); }) server.get<{ Params: {underlying:string, quote_date:string}, }>('/option_quotes/:underlying/:quote_date/expirations', async (request, reply) => { const expirations = (await sql` SELECT DISTINCT "expiration" FROM "option_quote" WHERE "underlying" = ${request.params.underlying} AND "quote_date" = ${request.params.quote_date} ORDER BY "expiration";` ).map(x=>x.expiration); reply.status(200).send(expirations); }) server.listen({ port: 8234, host: '127.0.0.1' }, (err, address) => { if (err) { console.error(err) process.exit(1) } console.log(`Server listening at ${address}`) }) //await sql.end({timeout:60});