public IActionResult PublishPost([FromBody] PublishPostParameters model) { PublishPostReturnModel ret = new PublishPostReturnModel(); if (!ModelState.IsValid) { ret.IsActionSucceed = false; ret.Errors = new Dictionary <string, string>(); foreach (var modelState in ModelState.Values) { foreach (var error in modelState.Errors) { ret.Errors.Add(error.Exception.HResult.ToString(), error.ErrorMessage); } } return(Ok(Json(ret))); } Claim idClaim = User.FindFirst("sub"); ret = _postActionService.PublishPost(model, idClaim.Value); if (ret.IsActionSucceed) { _bus.Publish <UserPublishedPostAction>(new UserPublishedPostAction() { DateUtcAction = DateTime.UtcNow, PostId = ret.PublishedPostId, UserId = idClaim.Value }); } return(Ok(Json(ret))); }
public PublishPostReturnModel PublishPost(PublishPostParameters model, string currUserId) { PublishPostReturnModel ret = new PublishPostReturnModel() { IsActionSucceed = false, Errors = new Dictionary <string, string>() }; Post post = _postSet.Include(p => p.PostParts).Include(p => p.UserInfo).FirstOrDefault(p => p.Id == model.Id && p.UserInfoId == currUserId); if (post == null) { return(ret); } post.Title = TagHelpers.RemoveUnwantedTags(model.Title); post.DateUtcPublished = DateTime.UtcNow; post.Description = model.Description; post.IsPublished = true; post.Content = TagHelpers.RemoveUnwantedTags(model.Content); post.DateUtcModified = DateTime.UtcNow; post.Groups = new List <GroupPost>(); post.ReputationGains = new List <ReputationGain>() { new ReputationGain() { GainedReputationValue = _reputationSettings.InitialPostReputationValue, UserInfoId = currUserId, } }; if (post.PostParts.Count < 1) { ret.Errors.Add("custom", "Please add your pictures"); return(ret); } if (model.SelectedCollectionId.HasValue) { if (model.SelectedCollectionId > 0) { PostCollection pcol = _postCollectionDbSet.FirstOrDefault(p => p.Id == model.SelectedCollectionId && p.UserInfoId == currUserId); if (pcol != null) { if (pcol.UserInfoId != currUserId) { ret.Errors.Add("custom", "That does not belongs to you buddy"); return(ret); } } post.Collection = pcol; post.CollectionId = model.SelectedCollectionId; } } if (model.SelectedInterestIds.Length < 1) { ret.Errors.Add("custom", "Please add at least one interest"); } List <Group> groups = _groupDbSet.Where(p => model.SelectedInterestIds.Contains(p.Id)).ToList(); int[] groupIds = groups.Select(p => p.Id).ToArray(); int[] alreadyFollowIds = _userGroupDbSet .Where(p => p.GroupFollowState == GroupFollowState.Followed && p.UserId == currUserId && groupIds.Contains(p.GroupId)).Select(p => p.GroupId).ToArray(); foreach (var item in groupIds) { post.Groups.Add(new GroupPost() { GroupId = item, DateUtcAdded = DateTime.UtcNow, PostPopularityLevel = 0 }); } IEnumerable <Group> unFolloweds = groups.Where(p => !alreadyFollowIds.Contains(p.Id)); foreach (var unfollowedGroup in unFolloweds) { UserGroup ug = _userGroupDbSet.FirstOrDefault(p => p.GroupId == unfollowedGroup.Id && p.UserId == currUserId); if (ug == null) { ug = new UserGroup() { DateUtcFollowed = DateTime.UtcNow, Group = unfollowedGroup, UserInfo = post.UserInfo, GroupFollowState = GroupFollowState.Followed, UserReputationInGroup = 0 }; _userGroupDbSet.Add(ug); } else { ug.GroupFollowState = GroupFollowState.Followed; _userGroupDbSet.Update(ug); } } _postSet.Update(post); if (_context.SaveChanges() < 1) { // if ef-sql exception ret.IsActionSucceed = false; ret.Errors.Add("custom", "Oops.. Something bad happened. Try again later"); } else { // reset group-post caches foreach (var item in groupIds) { var postIdRels = _groupCacheService.GetPostRelationships(item); if (postIdRels != null) { if (postIdRels.Count() > 0) { postIdRels = postIdRels.Append(new GroupPost() { DateUtcAdded = DateTime.UtcNow, GroupId = item, PostId = post.Id }).ToArray(); _groupCacheService.SetPostRelationships(item, postIdRels, 30); } } } // set return to succeed ret.IsActionSucceed = true; ret.PublishedPostId = post.Id; } return(ret); }