in libs/newsletters-data-client/src/lib/newsletter-storage/InMemoryNewsletterStorage.ts [31:69]
create(draft: DraftNewsletterDataWithMeta, user: UserProfile) {
// TODO - use the schema.safeParse and if the test fails,
// use the list of issues to generate a message with the
// wrong/missing fields listed.
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);
}
const newsletterWithTheSameIdentityName = this.memory.find(
(item) => item.identityName === draft.identityName,
);
if (newsletterWithTheSameIdentityName) {
const error: UnsuccessfulStorageResponse = {
ok: false,
message: `draft has the same identityName (${newsletterWithTheSameIdentityName.identityName}) as newsletter #${newsletterWithTheSameIdentityName.listId}`,
reason: StorageRequestFailureReason.InvalidDataInput,
};
return Promise.resolve(error);
}
const newNewsletterWithNewId: NewsletterDataWithMeta = {
...draft,
listId: this.getNextId(),
meta: this.updateMetaForLaunch(draft.meta, user),
};
this.memory.push(newNewsletterWithNewId);
const response: SuccessfulStorageResponse<NewsletterDataWithoutMeta> = {
ok: true,
data: this.stripMeta(newNewsletterWithNewId),
};
return Promise.resolve(response);
}