public async Task <IDataResult <long> > CreatePostAsync(PostModel post) { var user = _userRepository.FirstOrDefault(u => u.Id == post.UserId); PointEntity point = await _pointRepository.FirstOrDefaultWhereIncludeAsync(p => p.Id == post.Marker.Id, p => p.Posts); if (point is null) { point = new PointEntity { Coordinate = new Coordinate { Latitude = post.Marker.Latitude, Longitude = post.Marker.Longitude } }; await _pointRepository.AddAsync(point); point.User = user; } var newPost = new PostEntity { Message = post.Message, Recommended = post.Recommended, PostDate = DateTime.UtcNow, Location = post.Location }; await _postRepository.AddAsync(newPost); newPost.Point = point; newPost.User = user; _tagRepository.CreateTags(post.Tags, user.Id); await _unitOfWork.SaveChangesAsync(); var postTags = _tagRepository.GetTagsByNames(post.Tags); await _postTagRepository.AddRangeAsync(postTags.Select(t => new PostTagEntity { PostId = newPost.Id, TagId = t.Id })); await _unitOfWork.SaveChangesAsync(); return(DataResult <long> .Success(newPost.Id)); }