private void CreateAdoption(Guid animalId, Guid adopterId, AdoptionStatus adoptionStatus, string observation)
        {
            if (!_context.Adoptions.Any(adoption => adoption.AnimalId.Equals(animalId) && adoption.AdopterId.Equals(adopterId) && adoption.AdoptionStatus.Equals(adoptionStatus)))
            {
                var adoption = new Adoption(animalId, adopterId);
                _context.Adoptions.Add(adoption);
                _context.SaveChanges();

                adoption.UpdateAdoptionStatus(adoptionStatus, observation);
                _context.SaveChanges();

                if (adoption.AdoptionStatus == AdoptionStatus.Accepted)
                {
                    var animal = _context.Animals.FirstOrDefault(a => a.Id == animalId);

                    if (animal != null)
                    {
                        animal.Adopt(adopterId);
                        _context.SaveChanges();
                    }
                }

                if (adoption.AdoptionStatus != AdoptionStatus.Rejected && adoption.AdoptionStatus != AdoptionStatus.Accepted)
                {
                    var animal = _context.Animals.FirstOrDefault(a => a.Id == animalId);

                    if (animal != null)
                    {
                        animal.InAdoptionProccess();
                        _context.SaveChanges();
                    }
                }
            }
        }
        public async Task <bool> ChangeAdoptionStatus(Guid id, AdoptionStatus targetStatus, string remarks = "")
        {
            var adoptioninfo = await _adoptionRespository.FindAsync(id);

            if (adoptioninfo == null)
            {
                throw new BusinessException(AdoptionDomainErrorCodes.AdoptionNotFound).WithData("id", id);
            }
            switch (targetStatus)
            {
            case AdoptionStatus.Audited:
                adoptioninfo.AuditedAdoption(remarks);
                break;

            case AdoptionStatus.Rejected:
                adoptioninfo.RejectAdoption(remarks);
                break;

            case AdoptionStatus.Canceled:
                adoptioninfo.CancelAdoption(remarks);
                break;

            case AdoptionStatus.Completed:
                adoptioninfo.CompleteAdoption();
                break;

            default:
                throw new BusinessException(AdoptionDomainErrorCodes.TargetStatusNotSupport).WithData("status", targetStatus);
            }
            await _adoptionRespository.UpdateAsync(adoptioninfo);

            return(true);
        }
Beispiel #3
0
 public void UpdateAdoptionStatus(AdoptionStatus adoptionStatus, string observation = null)
 {
     AdoptionStatus = adoptionStatus;
     Observation    = observation;
 }