async launchDraft()

in libs/newsletters-data-client/src/lib/launch-service/index.ts [35:75]


	async launchDraft(
		draftId: number,
		extraValues: Partial<NewsletterData>,
	): Promise<
		SuccessfulStorageResponse<NewsletterData> | UnsuccessfulStorageResponse
	> {
		const { draftStorage, newsletterStorage } = this;
		const draftGetResponse = await draftStorage.readWithMeta(draftId);
		if (!draftGetResponse.ok) {
			return draftGetResponse;
		}

		const draftPopulatedWithDefaults: DraftNewsletterDataWithMeta = {
			...withDefaultNewsletterValuesAndDerivedFields(draftGetResponse.data),
			meta: draftGetResponse.data.meta,
		};

		const draftWithDefaultsThenExtraValues: DraftNewsletterDataWithMeta = {
			...draftPopulatedWithDefaults,
			...extraValues,
		};

		const newsletterCreateResponse = await newsletterStorage.create(
			draftWithDefaultsThenExtraValues,
			this.userProfile,
		);
		if (!newsletterCreateResponse.ok) {
			return newsletterCreateResponse;
		}

		// TO DO - should we actually delete the draft or archive it / mark as launched?
		const draftDeleteResponse = await draftStorage.deleteItem(draftId);
		if (!draftDeleteResponse.ok) {
			console.warn(
				`created newsletter: ${newsletterCreateResponse.data.identityName} with listId #${newsletterCreateResponse.data.listId}, but failed to delete the draft.`,
				draftDeleteResponse.message,
			);
		}

		return newsletterCreateResponse;
	}