import validateInactivityNotice from "./validate.js"; function jsonResponse(body: string, status = 200): Response { return new Response(body, { headers: { "content-type": "application/json", }, status, }); } export async function onRequestDelete(context: RequestContext) { const kvResult = await context.env.DATA.get( `inactivity_${context.params.id}`, ); if (!kvResult) return jsonResponse('{"error":"No inactivity notice with that ID"}', 404); if ( JSON.parse(kvResult).user.id !== context.data.current_user.id && !(context.data.current_user.permissions & (1 << 0)) ) return jsonResponse( '{"error":"You do not have permission to delete this inactivity notice"}', 403, ); await context.env.DATA.delete(`inactivity_${context.params.id}`); await context.env.D1.prepare("DELETE FROM inactivity_notices WHERE id = ?;") .bind(context.params.id) .run(); return new Response(null, { status: 204, }); } export async function onRequestPut(context: RequestContext) { const kvResult: InactivityNoticeProps | null = await context.env.DATA.get( `inactivity_${context.params.id}`, { type: "json" }, ); if (!kvResult) return jsonResponse('{"error":"No inactivity notice with that ID"}', 404); if (kvResult.user.id !== context.data.current_user.id) return jsonResponse( '{"error":"You do not have permission to modify this inactivity notice"}', 403, ); const d1entry = await context.env.D1.prepare( "SELECT open FROM inactivity_notices WHERE id = ?;", ) .bind(context.params.id) .run(); if (!Boolean(d1entry.results.at(0)?.open)) return jsonResponse("Cannot modify a closed inactivity notice", 403); const { departments, end, reason, start } = context.data.body; const validationFailureResponse = validateInactivityNotice( departments, end, reason, start, context.data.departments, ); if (validationFailureResponse) return validationFailureResponse; kvResult.departments = departments; kvResult.end = end; kvResult.reason = reason; kvResult.start = start; await context.env.DATA.put( `inactivity_${context.params.id}`, JSON.stringify(kvResult), { expirationTtl: 63072000, }, ); }