public async Task <IActionResult> Update(Guid id, [FromBody] UpdateHostDto updateHostDto) { updateHostDto.Id = id; var result = await _unitOfWork.HostService.Update(updateHostDto); if (!result.Success) { return(result.ApiResult); } return(NoContent()); }
public async Task <Result> Update(UpdateHostDto updateHostDto) { var categories = new List <Category>(); if (updateHostDto.Categories != null && updateHostDto.Categories.Any()) { categories = await Context.Categories.AsNoTracking().Where(c => updateHostDto.Categories.Contains(c.Id)) .ToListAsync(); if (categories.Count != updateHostDto.Categories.Count) { return(Result.Failed(new NotFoundObjectResult( new ApiMessage { Message = ResponseMessage.CategoryNotFound }))); } } var host = await FirstOrDefaultAsync(c => c.Id == updateHostDto.Id, g => g.HostGalleries, g => g.HostCategories, g => g.HostAvailableDates); _mapper.Map(updateHostDto, host); Context.RemoveRange(host.HostCategories); Context.RemoveRange(host.HostGalleries); Context.RemoveRange(host.HostAvailableDates); host.HostCategories = categories.Any() ? categories.Select(c => new HostCategory { CategoryId = c.Id, Host = host, HostId = host.Id, Id = Guid.NewGuid() }).ToList() : new List <HostCategory>(); host.HostGalleries = updateHostDto.Galleries.Any() ? updateHostDto.Galleries.Select(g => new HostGallery { Image = g, Host = host, HostId = host.Id, Id = Guid.NewGuid() }) .ToList() : new List <HostGallery>(); host.HostAvailableDates = updateHostDto.HostAvailableDates.Any() ? updateHostDto.HostAvailableDates.Select(date => { var dateFromHour = date.FromHour; var dateToHour = date.ToHour; TimeSpan fromHour; TimeSpan toHour; if (TimeSpan.TryParse(dateFromHour, out fromHour)) { if (TimeSpan.TryParse(dateToHour, out toHour)) { return new HostAvailableDate { Days = date.Days, DateTime = date.DateTime, FromHour = fromHour, Host = host, HostId = host.Id, ToHour = toHour, Id = Guid.NewGuid() } } } ; return(null); }).Where(a => a != null).ToList() : new List <HostAvailableDate>(); Context.AddRange(host.HostCategories); Context.AddRange(host.HostGalleries); Context.AddRange(host.HostAvailableDates); await Context.SaveChangesAsync(); return(Result.SuccessFull()); }