lifetracker/apps/web/app/api/v1/measurements/route.ts

42 lines
1.3 KiB
TypeScript

import { NextRequest } from "next/server";
import { zMeasurementInputSchema } from "@lifetracker/shared/types/metrics";
import { buildHandler } from "../utils/handler";
import spacetime from "spacetime";
export const POST = (req: NextRequest) =>
buildHandler({
req,
bodySchema: zMeasurementInputSchema,
handler: async ({ api, body }) => {
const datetime = spacetime(
body?.dateTimeQuery || new Date(),
body?.timezone || "Etc/UTC"
).goto("Etc/UTC");
// const dayId = (await api.days.get({
// dateQuery: datetime.format("iso-short")
// })).id;
const hour = await api.hours.get({
dateQuery: spacetime(datetime).startOf("hour").format("iso"),
});
const obj = {
metricName: body!.metricName,
hourId: hour.id!,
dayId: hour.dayId
};
const measurement =
body?.value
? await api.measurements.setValue({
...obj,
value: body.value!,
})
: await api.measurements.incrementCount(obj);
return { status: 201, resp: measurement };
},
});