in libs/newsletters-data-client/src/lib/newsletter-storage/s3-newsletter-storage.ts [285:336]
async replace(
listId: number,
newsletter: NewsletterData,
user: UserProfile,
): Promise<
| SuccessfulStorageResponse<NewsletterDataWithoutMeta>
| UnsuccessfulStorageResponse
> {
const newsletterToUpdate = await this.fetchNewsletter(listId);
if (!newsletterToUpdate) {
return {
ok: false,
message: `failed to read newsletter with id ${listId}`,
};
}
if (
newsletter.identityName !== newsletterToUpdate.identityName ||
newsletter.listId !== newsletterToUpdate.listId
) {
console.error(
`newsletter identityName or listId mismatch for newsletter with id ${listId}`,
);
throw new Error(
`newsletter identityName or listId mismatch for newsletter with id ${listId}`,
);
}
const { identityName } = newsletterToUpdate;
const updatedNewsletter: NewsletterDataWithMeta = {
...newsletter,
identityName,
listId,
meta: this.updateMeta(newsletterToUpdate.meta ?? makeBlankMeta(), user),
};
const identifier = `${identityName}:${listId}.json`;
try {
await this.putObject(updatedNewsletter, identifier);
return {
ok: true,
data: this.stripMeta(updatedNewsletter),
};
} catch (err) {
return {
ok: false,
message: `failed to update newsletter with id ${listId}`,
reason: StorageRequestFailureReason.S3Failure,
};
}
}