예제 #1
0
        public virtual async Task InsertPets(IList <Pet> pets)
        {
            var petsFromSource = await _petRepository.SearchAsync(new PetFilter { PetSource = _parser.Source, PerPage = int.MaxValue });

            var petsToInsert = pets
                               .Where(p => !petsFromSource.Any(pe => p.ExternalId == pe.ExternalId));

            var petsRemovedFromSource = petsFromSource
                                        .Where(p => !pets.Any(pe => p.ExternalId == pe.ExternalId));

            foreach (var pet in petsRemovedFromSource)
            {
                await _petHandler.SetPetStatus(pet.Id, PetStatus.Adopted);
            }

            foreach (var pet in petsToInsert)
            {
                pet.PetTraits ??= new List <PetTrait>();
                pet.Source = _parser.Source;

                if (pet.Birthday != null)
                {
                    await AddAgeTrait(pet);
                }
                await AddGenderTrait(pet);
            }

            foreach (var pet in petsToInsert)
            {
                await _petHandler.AddPet(pet);
            }
            await _unitOfWork.SaveChangesAsync();

            foreach (var pet in petsToInsert)
            {
                await _petHandler.SetPetStatus(pet.Id, PetStatus.Created);

                await _petHandler.SetPetStatus(pet.Id, PetStatus.WaitingForAdoption);
            }
            await _unitOfWork.SaveChangesAsync();
        }
예제 #2
0
        public async Task <IActionResult> Post(PetDto pet)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }

                var petToInsert = new Pet
                {
                    Name         = pet.Name,
                    Gender       = pet.Gender,
                    Birthday     = pet.Birthday,
                    Description  = pet.Description,
                    Source       = pet.Source,
                    SourceLink   = pet.SourceLink,
                    AnimalTypeId = pet.AnimalTypeId,
                    UserId       = pet.UserId
                };

                petToInsert.MetaFileLinks = new List <MetaFileLink>();
                foreach (var mflId in pet.MetaFileLinkIds)
                {
                    MetaFileLink mfl = _mflRepository.GetByIdAsync(mflId).Result;
                    petToInsert.MetaFileLinks.Add(mfl);
                }

                var traitsFilter = new TraitFilter
                {
                    AnimalTypeId = pet.AnimalTypeId
                };

                //get list of all traits by AnimalTypeId
                List <Trait> traitsByAnimal = _traitRepository.SearchAsync(traitsFilter).Result.ToList();

                petToInsert.PetTraits = new List <PetTrait>();
                foreach (KeyValuePair <string, string> entry in pet.Traits)
                {
                    //Use entry.Value & entry.Key
                    var foundTrait       = traitsByAnimal.FirstOrDefault(traitItem => traitItem.Id == int.Parse(entry.Key));
                    var foundTraitOption = foundTrait.TraitOptions.FirstOrDefault(op => op.Id == int.Parse(entry.Value));

                    petToInsert.PetTraits.Add(
                        new PetTrait
                    {
                        Trait       = foundTrait,
                        TraitOption = foundTraitOption
                    });
                }

                await _petHandler.AddPet(petToInsert);

                await _unitOfWork.SaveChangesAsync();

                return(Ok(_mapper.Map <PetDto>(petToInsert)));
            }
            catch (Exception ex)
            {
                return(BadRequest());
            }
        }