in libs/newsletters-data-client/src/lib/newsletter-storage/s3-newsletter-storage.ts [36:104]
async create(
draft: DraftNewsletterDataWithMeta,
user: UserProfile,
): Promise<
| SuccessfulStorageResponse<NewsletterDataWithoutMeta>
| UnsuccessfulStorageResponse
> {
const draftReady = isNewsletterDataWithMeta(draft);
if (!draftReady) {
const error: UnsuccessfulStorageResponse = {
ok: false,
message: `draft was not ready to be live`,
reason: StorageRequestFailureReason.InvalidDataInput,
};
return Promise.resolve(error);
}
if (!draft.identityName) {
return {
ok: false,
message: `identityName is undefined`,
reason: StorageRequestFailureReason.InvalidDataInput,
};
}
const nextId = await getNextId(this);
const newIdentifier = `${draft.identityName}:${nextId}.json`;
try {
const newsletterWithSameKeyExists = await this.objectExists(
newIdentifier,
);
if (newsletterWithSameKeyExists) {
return {
ok: false,
message: `Newsletter with name ${newIdentifier} already exists`,
reason: StorageRequestFailureReason.DataInStoreNotValid,
};
}
} catch (err) {
return {
ok: false,
message: `failed to check if newsletter with name ${newIdentifier} exists`,
reason: StorageRequestFailureReason.S3Failure,
};
}
const newNewsletter: NewsletterDataWithMeta = {
...draft,
listId: nextId,
meta: this.updateMetaForLaunch(draft.meta, user),
};
try {
await this.putObject(newNewsletter, newIdentifier);
} catch (err) {
return {
ok: false,
message: `failed create newsletter ${draft.identityName}.`,
reason: StorageRequestFailureReason.S3Failure,
};
}
return {
ok: true,
data: this.stripMeta(newNewsletter),
};
}