import { query } from "./lib/clickhouse.js"; import { publicProcedure, RpcType, router } from "./trpc.js"; import { Object as ObjectT, String as StringT } from "@sinclair/typebox"; export const getChartData = publicProcedure .input( RpcType( ObjectT({ underlying: StringT({ maxLength: 5 }), lookbackPeriodStart: StringT(), lookbackPeriodEnd: StringT(), }) ) ) .query(async (opts) => { const { underlying, lookbackPeriodStart, lookbackPeriodEnd } = opts.input; return await query<[number, number]>( ` SELECT toUnixTimestamp(toStartOfHour(ts)) as x, avg(price) as y FROM stock_aggregates_filled WHERE symbol = '${underlying}' AND ts >= '${lookbackPeriodStart} 00:00:00' AND ts <= '${lookbackPeriodEnd} 00:00:00' GROUP BY x ORDER BY x ASC `, "JSONEachRow" ); }); export default router({ getChartData, });