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); }
public void UpdateAdoptionStatus(AdoptionStatus adoptionStatus, string observation = null) { AdoptionStatus = adoptionStatus; Observation = observation; }