27 lines
868 B
TypeScript
27 lines
868 B
TypeScript
import { createError, defineEventHandler, setResponseStatus } from "h3";
|
|
import { requireAuth } from "../../utils/auth";
|
|
import { dropStore } from "../../utils/drop-store";
|
|
import { readJson } from "../../utils/http";
|
|
import { validateReservation } from "../../../shared/utils/drop-contract";
|
|
export default defineEventHandler(async (event) => {
|
|
requireAuth(event);
|
|
const body = readJson(event, 4096);
|
|
let request;
|
|
try {
|
|
request = validateReservation(await body);
|
|
} catch (error) {
|
|
throw createError({
|
|
statusCode: 400,
|
|
statusMessage:
|
|
error instanceof Error ? error.message : "Invalid reservation.",
|
|
});
|
|
}
|
|
const result = await dropStore.reserve(request);
|
|
setResponseStatus(event, 201);
|
|
return {
|
|
id: result.id,
|
|
uploadExpiresAt: new Date(result.uploadExpiresAt).toISOString(),
|
|
access: result.access,
|
|
};
|
|
});
|