export function registerReadNewsletterRoutes()

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


export function registerReadNewsletterRoutes(app: FastifyInstance) {
	// not using the makeSuccess function on this route as
	// we are emulating the response of the legacy API
	app.get('/api/legacy/newsletters', async (req, res) => {
		const storageResponse = await newsletterStore.list();
		if (!storageResponse.ok) {
			return res
				.status(mapStorageFailureReasonToStatusCode(storageResponse.reason))
				.send(makeErrorResponse(storageResponse.message));
		}

		return storageResponse.data.map(transformDataToLegacyNewsletter);
	});

	interface IQuerystring {
		signImages: boolean;
	}

	app.get<{ Querystring: IQuerystring }>(
		'/api/newsletters',
		async (req, res) => {
			const storageResponse = await newsletterStore.list();

			if (!storageResponse.ok) {
				return res
					.status(mapStorageFailureReasonToStatusCode(storageResponse.reason))
					.send(makeErrorResponse(storageResponse.message));
			}
			const { signImages } = req.query;
			if (isDynamicImageSigningEnabled() && signImages) {
				const newsletterDataWithSignedImages = await Promise.all(
					storageResponse.data.map(signTemplateImages),
				);
				return makeSuccessResponse(newsletterDataWithSignedImages);
			}
			return makeSuccessResponse(storageResponse.data);
		},
	);

	app.get<{
		Params: { newsletterId: string };
		Querystring: IQuerystring;
	}>('/api/newsletters/: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 { signImages } = req.query;
		if (isDynamicImageSigningEnabled() && signImages) {
			const newsletterDataWithSignedImages = await signTemplateImages(
				storageResponse.data,
			);
			return makeSuccessResponse(newsletterDataWithSignedImages);
		}
		return makeSuccessResponse(storageResponse.data);
	});
}