async save(milestone) {
        const data = {
            id: milestone.id.toHexString(),
            type: milestone.type,
            value: milestone.value,
            currency: milestone?.currency,
            created_at: milestone?.createdAt,
            email_sent_at: milestone?.emailSentAt
        };

        const existing = await this.#MilestoneModel.findOne({id: data.id}, {require: false});

        if (!existing) {
            await this.#MilestoneModel.add(data);
        } else {
            await this.#MilestoneModel.edit(data, {
                id: data.id
            });
        }
        for (const event of milestone.events) {
            this.#DomainEvents.dispatch(event);
        }
    }
@param {Milestone} milestone
@returns {Promise<void>}