async save(tier) {
        const data = {
            id: tier.id.toHexString(),
            name: tier.name,
            slug: tier.slug,
            active: tier.status === 'active',
            welcome_page_url: tier.welcomePageURL,
            visibility: tier.visibility,
            trial_days: tier.trialDays,
            description: tier.description,
            type: tier.type,
            currency: tier.currency,
            monthly_price: tier.monthlyPrice,
            yearly_price: tier.yearlyPrice,
            created_at: tier.createdAt,
            updated_at: tier.updatedAt,
            benefits: tier.benefits.map(name => ({name}))
        };

        const toSave = await Tier.create(tier);

        if (this.#ids[tier.id.toHexString()]) {
            const existing = this.#store.findIndex((item) => {
                return item.id.equals(tier.id);
            });
            await this.#ProductModel.edit(data, {
                id: data.id
            });
            this.#store.splice(existing, 1, toSave);
        } else {
            await this.#ProductModel.add(data);
            this.#store.push(toSave);
            this.#ids[tier.id.toHexString()] = true;
        }

        for (const event of tier.events) {
            this.#DomainEvents.dispatch(event);
        }
    }
@param {import('./Tier')} tier
@returns {Promise<void>}