public async Task <ActionResult <PetDto> > AddorEditComplexPet([ModelBinder(typeof(JsonModelBinder))] AddOrEditPetDto dto, IFormFile file) => Result(await PetManager.AddOrEditComplexPetAsync(dto, file));
public async Task <PetDto> AddOrEditPetAsync(AddOrEditPetDto addOrEditPet) { Pet pet; if (!addOrEditPet.Id.HasValue) { pet = new Pet { Name = addOrEditPet.Name, Gender = addOrEditPet.Gender, ChipNumber = addOrEditPet.ChipNumber, Color = addOrEditPet.Color, ImagePath = addOrEditPet.ImagePath, Weight = addOrEditPet.Weight, BirthDate = addOrEditPet.BirthDate, Kind = addOrEditPet.Kind }; pet.Habits = Mapper.Map <List <Habit> >(addOrEditPet.Habits ?? Enumerable.Empty <AddOrEditHabitDto>()); pet.MedicalTreatments = Mapper.Map <List <MedicalTreatment> >(addOrEditPet.MedicalTreatments ?? Enumerable.Empty <AddOrEditMedicalTreatmentDto>()); pet.OwnerId = KutyAppContext.CurrentUser.Id; DbContext.Pets.Add(pet); } else { pet = await DbContext.Pets.Include(p => p.Habits) .Include(p => p.MedicalTreatments) .FirstOrDefaultAsync(d => d.Id == addOrEditPet.Id); if (pet == null) { throw new Exception(ExceptionMessages.NotFound); } if (pet.Name != addOrEditPet.Name) { pet.Name = addOrEditPet.Name; } if (pet.Gender != addOrEditPet.Gender) { pet.Gender = addOrEditPet.Gender; } if (pet.ChipNumber != addOrEditPet.ChipNumber) { pet.ChipNumber = addOrEditPet.ChipNumber; } if (pet.Color != addOrEditPet.Color) { pet.Color = addOrEditPet.Color; } //if (pet.ImagePath != addOrEditPet.ImagePath) // pet.ImagePath = addOrEditPet.ImagePath; if (pet.Weight != addOrEditPet.Weight) { pet.Weight = addOrEditPet.Weight; } if (pet.BirthDate != addOrEditPet.BirthDate) { pet.BirthDate = addOrEditPet.BirthDate; } if (pet.Kind != addOrEditPet.Kind) { pet.Kind = addOrEditPet.Kind; } #region habits //delted habit foreach (var habit in pet.Habits.ToList().Where(h => !addOrEditPet.Habits.Any(dto => dto.Id == h.Id))) { pet.Habits.Remove(habit); } //new habit foreach (var habitDto in addOrEditPet.Habits.Where(h => !h.Id.HasValue)) { pet.Habits.Add(Mapper.Map <Habit>(habitDto)); } //edited habit foreach (var habitDto in addOrEditPet.Habits.Where(h => h.Id.HasValue)) { var originalHabit = pet.Habits.SingleOrDefault(h => h.Id == habitDto.Id); if (originalHabit == null) { throw new Exception(ExceptionMessages.NotFound); } if (originalHabit.Title != habitDto.Title) { originalHabit.Title = habitDto.Title; } if (originalHabit.Description != habitDto.Description) { originalHabit.Description = habitDto.Description; } if (originalHabit.StartTime != habitDto.StartTime) { originalHabit.StartTime = habitDto.StartTime; } if (originalHabit.EndTime != habitDto.EndTime) { originalHabit.EndTime = habitDto.EndTime; } if (originalHabit.Amount != habitDto.Amount) { originalHabit.Amount = habitDto.Amount; } if (originalHabit.Unit != habitDto.Unit) { originalHabit.Unit = habitDto.Unit; } } #endregion #region MedicalTreatments //deleted treatment foreach (var medicalTreatment in pet.MedicalTreatments.ToList().Where(m => !addOrEditPet.MedicalTreatments.Any(dto => dto.Id == m.Id))) { pet.MedicalTreatments.Remove(medicalTreatment); } //new treatment foreach (var treatmentDto in addOrEditPet.MedicalTreatments.Where(h => !h.Id.HasValue)) { pet.MedicalTreatments.Add(Mapper.Map <MedicalTreatment>(treatmentDto)); } //edited treatment foreach (var medicalTreatmentDto in addOrEditPet.MedicalTreatments.Where(m => m.Id.HasValue)) { var originalTreatment = pet.MedicalTreatments.SingleOrDefault(m => m.Id == medicalTreatmentDto.Id); if (originalTreatment == null) { throw new Exception(ExceptionMessages.NotFound); } if (originalTreatment.Name != medicalTreatmentDto.Name) { originalTreatment.Name = medicalTreatmentDto.Name; } if (originalTreatment.Type != medicalTreatmentDto.Type) { originalTreatment.Type = medicalTreatmentDto.Type; } if (originalTreatment.Description != medicalTreatmentDto.Name) { originalTreatment.Description = medicalTreatmentDto.Name; } if (originalTreatment.Date != medicalTreatmentDto.Date) { originalTreatment.Date = medicalTreatmentDto.Date; } if (originalTreatment.Place != medicalTreatmentDto.Place) { originalTreatment.Place = medicalTreatmentDto.Place; } if (originalTreatment.Tender != medicalTreatmentDto.Tender) { originalTreatment.Tender = medicalTreatmentDto.Tender; } if (originalTreatment.Price != medicalTreatmentDto.Price) { originalTreatment.Price = medicalTreatmentDto.Price; } if (originalTreatment.Currency != medicalTreatmentDto.Currency) { originalTreatment.Currency = medicalTreatmentDto.Currency; } } #endregion } await DbContext.SaveChangesAsync(); return(await GetPetAsync(pet.Id)); }
public async Task <ActionResult <PetDto> > AddOrEditPet(AddOrEditPetDto dto) => Result(await PetManager.AddOrEditPetAsync(dto));
public async Task <PetDto> AddOrEditComplexPetAsync(AddOrEditPetDto dto, IFormFile file) { Pet pet; if (!dto.Id.HasValue) { pet = new Pet { Name = dto.Name, Gender = dto.Gender, ChipNumber = dto.ChipNumber, Color = dto.Color, //ImagePath = dto.ImagePath, Weight = dto.Weight, BirthDate = dto.BirthDate, Kind = dto.Kind }; pet.Habits = Mapper.Map <List <Habit> >((object)(dto.Habits ?? Enumerable.Empty <AddOrEditHabitDto>())); pet.MedicalTreatments = Mapper.Map <List <MedicalTreatment> >((object)(dto.MedicalTreatments ?? Enumerable.Empty <AddOrEditMedicalTreatmentDto>())); pet.OwnerId = KutyAppContext.CurrentUser.Id; DbContext.Pets.Add(pet); using (IDbContextTransaction transaction = await DbContext.Database.BeginTransactionAsync()) { await DbContext.SaveChangesAsync(); if (file != null) { var path = await DataManager.SaveFileAsync(file); pet.ImagePath = path; } await DbContext.SaveChangesAsync(); transaction.Commit(); } } else { pet = await DbContext.Pets .Include(p => p.Habits) .Include(p => p.MedicalTreatments) .FirstOrDefaultAsync(d => d.Id == dto.Id); if (pet == null) { throw new Exception(ExceptionMessages.NotFound); } if (pet.Name != dto.Name) { pet.Name = dto.Name; } if (pet.Gender != dto.Gender) { pet.Gender = dto.Gender; } if (pet.ChipNumber != dto.ChipNumber) { pet.ChipNumber = dto.ChipNumber; } if (pet.Color != dto.Color) { pet.Color = dto.Color; } //if (pet.ImagePath != addOrEditPet.ImagePath) // pet.ImagePath = addOrEditPet.ImagePath; if (pet.Weight != dto.Weight) { pet.Weight = dto.Weight; } if (pet.BirthDate != dto.BirthDate) { pet.BirthDate = dto.BirthDate; } if (pet.Kind != dto.Kind) { pet.Kind = dto.Kind; } #region habits //delted habit foreach (var habit in pet.Habits.ToList().Where(h => !dto.Habits.Any(ha => ha.Id == h.Id))) { pet.Habits.Remove(habit); } //new habit foreach (var habitDto in dto.Habits.Where(h => !h.Id.HasValue)) { pet.Habits.Add(Mapper.Map <Habit>(habitDto)); } //edited habit foreach (var habitDto in dto.Habits.Where(h => h.Id.HasValue)) { var originalHabit = pet.Habits.SingleOrDefault(h => h.Id == habitDto.Id); if (originalHabit == null) { throw new Exception(ExceptionMessages.NotFound); } if (originalHabit.Title != habitDto.Title) { originalHabit.Title = habitDto.Title; } if (originalHabit.Description != habitDto.Description) { originalHabit.Description = habitDto.Description; } if (originalHabit.StartTime != habitDto.StartTime) { originalHabit.StartTime = habitDto.StartTime; } if (originalHabit.EndTime != habitDto.EndTime) { originalHabit.EndTime = habitDto.EndTime; } if (originalHabit.Amount != habitDto.Amount) { originalHabit.Amount = habitDto.Amount; } if (originalHabit.Unit != habitDto.Unit) { originalHabit.Unit = habitDto.Unit; } } #endregion #region MedicalTreatments //deleted treatment foreach (var medicalTreatment in pet.MedicalTreatments.ToList().Where(m => !dto.MedicalTreatments.Any(me => me.Id == m.Id))) { pet.MedicalTreatments.Remove(medicalTreatment); } //new treatment foreach (var treatmentDto in dto.MedicalTreatments.Where(h => !h.Id.HasValue)) { pet.MedicalTreatments.Add(Mapper.Map <MedicalTreatment>(treatmentDto)); } //edited treatment foreach (var medicalTreatmentDto in dto.MedicalTreatments.Where(m => m.Id.HasValue)) { var originalTreatment = pet.MedicalTreatments.SingleOrDefault(m => m.Id == medicalTreatmentDto.Id); if (originalTreatment == null) { throw new Exception(ExceptionMessages.NotFound); } if (originalTreatment.Name != medicalTreatmentDto.Name) { originalTreatment.Name = medicalTreatmentDto.Name; } if (originalTreatment.Type != medicalTreatmentDto.Type) { originalTreatment.Type = medicalTreatmentDto.Type; } if (originalTreatment.Description != medicalTreatmentDto.Name) { originalTreatment.Description = medicalTreatmentDto.Name; } if (originalTreatment.Date != medicalTreatmentDto.Date) { originalTreatment.Date = medicalTreatmentDto.Date; } if (originalTreatment.Place != medicalTreatmentDto.Place) { originalTreatment.Place = medicalTreatmentDto.Place; } if (originalTreatment.Tender != medicalTreatmentDto.Tender) { originalTreatment.Tender = medicalTreatmentDto.Tender; } if (originalTreatment.Price != medicalTreatmentDto.Price) { originalTreatment.Price = medicalTreatmentDto.Price; } if (originalTreatment.Currency != medicalTreatmentDto.Currency) { originalTreatment.Currency = medicalTreatmentDto.Currency; } } #endregion using (IDbContextTransaction transaction = await DbContext.Database.BeginTransactionAsync()) { await DbContext.SaveChangesAsync(); if (pet.ImagePath != dto.ImagePath) { if (!string.IsNullOrEmpty(pet.ImagePath)) { DataManager.DeleteFile(pet.ImagePath); pet.ImagePath = null; } if (file != null) { var path = await DataManager.SaveFileAsync(file); pet.ImagePath = path; } } await DbContext.SaveChangesAsync(); transaction.Commit(); } } return(await GetPetAsync(pet.Id)); }