export function registerRenderingTemplatesRoutes()

in apps/newsletters-api/src/app/routes/rendering-templates.ts [24:84]


export function registerRenderingTemplatesRoutes(app: FastifyInstance) {
	app.get('/api/rendering-templates', async (req, res) => {
		const fetchResponse = await fetch(TEMPLATES_LIST_URL);
		if (!fetchResponse.ok) {
			return res
				.status(500)
				.send(
					makeErrorResponse(
						'Failed to get list of templates from the email-rendering service.',
					),
				);
		}

		const body = (await fetchResponse.json()) as RenderingTemplate[];
		return makeSuccessResponse(body);
	});

	app.get<{ Params: { newsletterId: string } }>(
		'/api/rendering-templates/preview/:newsletterId',
		async (req, res) => {
			const { newsletterId } = req.params;
			const storageResponse = await newsletterStore.readByName(newsletterId);

			if (!storageResponse.ok) {
				return res
					.status(mapStorageFailureReasonToStatusCode(storageResponse.reason))
					.send(makeErrorResponse(storageResponse.message));
			}

			const emailRenderingResponse = await fetch(NEWSLETTER_RENDER_URL, {
				method: 'POST',
				headers: {
					'Content-Type': 'application/json',
				},
				body: JSON.stringify(storageResponse.data),
			});

			const emailRenderingJson =
				(await emailRenderingResponse.json()) as EmailRenderingOutput;
			return makeSuccessResponse(emailRenderingJson);
		},
	);

	app.post<{ Body: NewsletterData }>(
		'/api/rendering-templates/preview',
		async (req) => {
			const emailRenderingResponse = await fetch(NEWSLETTER_RENDER_URL, {
				method: 'POST',
				headers: {
					'Content-Type': 'application/json',
				},
				body: JSON.stringify(req.body),
			});

			const emailRenderingJson =
				(await emailRenderingResponse.json()) as EmailRenderingOutput;

			return makeSuccessResponse(emailRenderingJson);
		},
	);
}