43 lines
1.3 KiB
TypeScript
43 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: datetime.format("iso-short"),
|
|
time: datetime.hour(),
|
|
});
|
|
|
|
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 };
|
|
},
|
|
}); |