create()

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);
	}