in apps/newsletters-api/src/app/routes/layouts.ts [50:92]
export function registerWriteLayoutRoutes(app: FastifyInstance) {
app.post<{
Body: unknown;
Params: { editionId: string };
}>('/api/layouts/:editionId', async (req, res) => {
const { editionId } = req.params;
const layout: unknown = req.body;
const user = getUserProfile(req);
const permissions = await permissionService.get(user.profile);
if (!permissions.editLayouts) {
return res
.status(403)
.send(makeErrorResponse(`You don't have permission to edit layouts.`));
}
const idParseResult = editionIdSchema.safeParse(editionId.toUpperCase());
if (!idParseResult.success) {
return res
.status(400)
.send(makeErrorResponse(`No such edition ${editionId}`));
}
const layoutParseResult = layoutSchema.safeParse(layout);
if (!layoutParseResult.success) {
return res.status(400).send(makeErrorResponse(`invalid layout data`));
}
// TO DO - need a separate route or param for 'create' requests
// that will fail if the layout exists already rather than replacing with blanks
const storageResponse = await layoutStore.update(
idParseResult.data,
layoutParseResult.data,
);
if (!storageResponse.ok) {
return res
.status(mapStorageFailureReasonToStatusCode(storageResponse.reason))
.send(makeErrorResponse(storageResponse.message));
}
return makeSuccessResponse(storageResponse.data);
});
}