Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        public async Task <IActionResult> UpdateTopic(TopicUpdateModel model)
        {
            TempData["active"] = "topic";
            if (ModelState.IsValid)
            {
                await _topicApiService.UpdateAsync(model);

                return(RedirectToAction("Index"));
            }

            return(View(model));
        }
Esempio n. 3
0
        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));
            }
        }
Esempio n. 4
0
 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));
        }