Example #1
0
        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));
        }