コード例 #1
0
        /// <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}");
            }
        }