/// <exception cref="BusinessRuleException"></exception> /// <inheritdoc /> public async Task <Guid> QualifyAsync(Guid id) { var lead = await ReadAsync(id); if (lead == null) { throw new NotFoundException("Lead not found"); } switch (lead.Status) { case Lead.StatusEnum.Active: lead.Status = Lead.StatusEnum.Qualified; lead.Reason = "Qualified"; lead.UpdatedAt = DateTimeOffset.Now; var contact = new Contact { Name = lead.Name, OriginatingLeadId = lead.Id }; var contactId = await _contactFunctionality.CreateAsync(contact); await _adapterService.LeadWasQualified(lead.Id, contactId, lead.UpdatedAt); return(contactId); case Lead.StatusEnum.Qualified: throw new BusinessRuleException(1, "The lead has already been qualified."); case Lead.StatusEnum.Rejected: throw new BusinessRuleException(2, "The lead has already been rejected."); default: throw new ProgrammersErrorException($"Unknown lead status: {lead.Status}"); } }