예제 #1
0
 public static bool HasItemImage(PostCreateApi model)
 {
     if (model.Photo != null && model.Photo.Length > 0)
     {
         return(true);
     }
     return(false);
 }
예제 #2
0
 public static bool HasItemVideo(PostCreateApi model)
 {
     if (model.Video != null && model.Video.Length > 0)
     {
         return(true);
     }
     return(false);
 }
예제 #3
0
        public JsonResult CreatePost([FromBody] PostCreateApi model)
        {
            using (var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                try
                {
                    if (model.Text == null)
                    {
                        Result.Status  = false;
                        Result.Message = "You can not add a post without writing text ! ";
                        return(BadResponse(Result));
                    }

                    #region CRUD

                    var newPost = new Post
                    {
                        Text = model.Text,
                    };
                    ResultModel postModel = _postService.Create(newPost);

                    if (!postModel.Status)
                    {
                        scope.Dispose();
                        return(BadResponse(ResultModel.Error("The upload process can not be done !")));
                    }

                    #endregion

                    scope.Complete();
                    //TODO
                    //There must be an integration that returns the last post that has just been createad.

                    return(OkResponse(new PostListDto
                    {
                        Id = newPost.Id,
                        Text = newPost.Text,
                        CreatedDate = newPost.CreatedDate,
                        Comments = null
                    }));
                }
                catch (Exception ex)
                {
                    scope.Dispose();
                    Result.Status  = false;
                    Result.Message = ex.ToString();
                    return(BadResponse(Result));
                }
            }
        }
예제 #4
0
        public JsonResult CreatePost([FromForm] PostCreateApi model)
        {
            using (var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                try
                {
                    if (string.IsNullOrEmpty(model.Text))
                    {
                        Result.Status  = false;
                        Result.Message = "You can not add a post without writing text ! ";
                        return(BadResponse(Result));
                    }
                    var appUser = _userService.FindByUserName(User.Identity.Name);
                    if (appUser == null)
                    {
                        return(BadResponse(new ResultModel
                        {
                            Status = false,
                            Message = "User not found !"
                        }));
                    }

                    bool hasImage          = CheckItemType.HasItemImage(model);
                    bool hasVideo          = CheckItemType.HasItemVideo(model);
                    var  imageUploadResult = new ImageUploadResult();
                    var  videoUploadResult = new VideoUploadResult();

                    #region CloudinaryProcess

                    #region ImageUploadingProcess
                    if (hasImage)
                    {
                        using (var stream = model.Photo.OpenReadStream())
                        {
                            var uploadParams = new ImageUploadParams
                            {
                                File = new FileDescription(model.Photo.Name, stream)
                            };

                            imageUploadResult = _cloudinary.Upload(uploadParams);
                            if (imageUploadResult.Error != null)
                            {
                                scope.Dispose();
                                return(BadResponse(ResultModel.Error("The upload process can not be done !")));
                            }
                        }
                    }
                    #endregion

                    #region VideoUploadingProcess

                    if (hasVideo)
                    {
                        using (var stream = model.Video.OpenReadStream())
                        {
                            var uploadParams = new VideoUploadParams
                            {
                                File = new FileDescription(model.Video.Name, stream)
                            };

                            videoUploadResult = _cloudinary.Upload(uploadParams);
                            if (videoUploadResult.Error != null)
                            {
                                scope.Dispose();
                                return(BadResponse(ResultModel.Error("The upload process can not be done !")));
                            }
                        }
                    }

                    #endregion

                    #endregion

                    #region CRUD

                    var newPost = new Post
                    {
                        Text     = model.Text,
                        PostType = hasImage == true ? (int)PostTypeEnum.PostImage
                        : hasVideo == true ? (int)PostTypeEnum.PostVideo
                        : (int)PostTypeEnum.PostText,
                        CreatedBy = appUser.Id
                    };
                    ResultModel postModel = _postService.Create(newPost);

                    if (!postModel.Status)
                    {
                        scope.Dispose();
                        return(BadResponse(ResultModel.Error("The upload process can not be done !")));
                    }

                    #region PostImages
                    if (imageUploadResult != null && imageUploadResult.StatusCode == HttpStatusCode.OK)
                    {
                        var postImages = new PostImage
                        {
                            PostId   = newPost.Id,
                            ImageUrl = imageUploadResult.Url.ToString()
                        };
                        ResultModel postImageModel = _postImageService.Create(postImages);

                        if (!postImageModel.Status)
                        {
                            scope.Dispose();
                            return(BadResponse(ResultModel.Error("The upload process can not be done !")));
                        }
                    }

                    #endregion

                    #region PostVideos

                    if (videoUploadResult != null && videoUploadResult.StatusCode == HttpStatusCode.OK)
                    {
                        var postVideos = new PostVideo
                        {
                            PostId   = newPost.Id,
                            VideoUrl = videoUploadResult.Url.ToString()
                        };
                        ResultModel postVideoModel = _postVideoService.Create(postVideos);

                        if (!postVideoModel.Status)
                        {
                            scope.Dispose();
                            return(BadResponse(ResultModel.Error("The upload process can not be done !")));
                        }
                    }

                    #endregion

                    #endregion

                    scope.Complete();
                    //TODO
                    //There must be an integration that returns the last post that has just been createad.

                    return(OkResponse(new PostListDto
                    {
                        Id = newPost.Id,
                        Text = newPost.Text,
                        ImageUrl = imageUploadResult.Url?.ToString(),
                        CreatedByUserName = appUser.UserName,
                        CreatedByUserPhoto = appUser.UserDetail.ProfilePhotoPath,
                        CreatedDate = newPost.CreatedDate,
                        VideoUrl = videoUploadResult.Url?.ToString(),
                        PostType = newPost.PostType,
                        Comments = null
                    }));
                }
                catch (Exception ex)
                {
                    scope.Dispose();
                    Result.Status  = false;
                    Result.Message = ex.ToString();
                    return(BadResponse(Result));
                }
            }
        }