public async Task UpdateAsync(TopicUpdateModel model) { MultipartFormDataContent formData = new MultipartFormDataContent(); if (model.Image != null) { var stream = new MemoryStream(); await model.Image.CopyToAsync(stream); var bytes = stream.ToArray(); ByteArrayContent byteContent = new ByteArrayContent(bytes); byteContent.Headers.ContentType = new MediaTypeHeaderValue(model.Image.ContentType); formData.Add(byteContent, nameof(TopicUpdateModel.Image), model.Image.FileName); } var user = _httpContextAccessor.HttpContext.Session.GetObject <AppUserViewModel>("activeUser"); model.AppUserId = user.Id; formData.Add(new StringContent(model.Id.ToString()), nameof(TopicUpdateModel.Id)); formData.Add(new StringContent(model.AppUserId.ToString()), nameof(TopicUpdateModel.AppUserId)); formData.Add(new StringContent(model.Description.ToString()), nameof(TopicUpdateModel.Description)); formData.Add(new StringContent(model.ShortDescription.ToString()), nameof(TopicUpdateModel.ShortDescription)); formData.Add(new StringContent(model.Title.ToString()), nameof(TopicUpdateModel.Title)); _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _httpContextAccessor.HttpContext.Session.GetString("token")); await _httpClient.PutAsync($"{model.Id}", formData); }
public async Task <IActionResult> UpdateTopic(TopicUpdateModel model) { TempData["active"] = "topic"; if (ModelState.IsValid) { await _topicApiService.UpdateAsync(model); return(RedirectToAction("Index")); } return(View(model)); }
public async Task <IActionResult> Update(int id, [FromForm] TopicUpdateModel topicUpdateModel) { if (id != topicUpdateModel.Id) { return(BadRequest("Invalid Id")); } var uploadModel = await UploadFileAsync(topicUpdateModel.Image, "image/jpeg"); if (uploadModel.UploadState == UploadState.Success) { var updatedTopic = await _topicService.FindByIdAsync(topicUpdateModel.Id); updatedTopic.ShortDescription = topicUpdateModel.ShortDescription; updatedTopic.Description = topicUpdateModel.Description; updatedTopic.Title = topicUpdateModel.Title; updatedTopic.ImagePath = uploadModel.NewName; await _topicService.UpdateAsync(updatedTopic); return(NoContent()); } else if (uploadModel.UploadState == UploadState.NotExist) { var updatedTopic = await _topicService.FindByIdAsync(topicUpdateModel.Id); updatedTopic.ShortDescription = topicUpdateModel.ShortDescription; updatedTopic.Description = topicUpdateModel.Description; updatedTopic.Title = topicUpdateModel.Title; await _topicService.UpdateAsync(updatedTopic); return(NoContent()); } else { return(BadRequest(uploadModel.ErrorMessage)); } }
public Task <IResultModel> Update(TopicUpdateModel model) { return(_service.Update(model)); }
public async Task <IResultModel> Update(TopicUpdateModel model) { var entity = await _repository.GetAsync(model.Id); if (entity == null) { return(ResultModel.NotExists); } //获取原值 int originCategory = entity.CategoryId; var topicTags = await _topicTagRepository.Query(new Domain.TopicTag.Models.TopicTagQueryModel { TopicId = entity.Id }); _mapper.Map(model, entity); using var uow = _forumDbContext.NewUnitOfWork(); var result = await _repository.UpdateAsync(entity, uow); if (result && model.Tags != null && model.Tags.Count() > 0) { //删除原关系 await _topicTagRepository.DeleteByTopicId(entity.Id, uow); var tagList = model.Tags.Select(s => new TopicTagEntity { TopicId = entity.Id, TagId = s }).ToList(); await _topicTagRepository.AddAsync(tagList, uow); } uow.Commit(); #region 判断哪些标签需要重新计算 (这里需要消息队列处理) var originTags = topicTags.Select(s => s.TagId).ToArray(); //并集去重 var recalcTags = originTags.Union(model.Tags).Distinct(); //差集 var exceptR = originTags.Except(recalcTags.ToArray()); var exceptL = recalcTags.Except(originTags.ToArray()); //如果差集为0,则无需重新计算 if (exceptR.Count() > 0 || exceptL.Count() > 0) { //重新计算标签统计 await _tagRepository.RecalculationCount(recalcTags.ToArray(), uow); } #endregion #region 判断哪些分类需要重新计算 (这里需要消息队列处理) if (originCategory != entity.CategoryId) { //重新计算分类统计 await _categoryRepository.RecalculationCount(new int[] { model.CategoryId, originCategory }, uow); } #endregion return(ResultModel.Result(result)); }