Example #1
0
        public async Task <HttpResponseMessage> InitiatePost([FromBody] InitiatePostViewModel parameters)
        {
            try
            {
                #region Parameters validation

                // Parameters haven't been initialized.
                if (parameters == null)
                {
                    // Initiate the parameter.
                    parameters = new InitiatePostViewModel();
                    Validate(parameters);
                }

                //Request parameters are invalid
                if (!ModelState.IsValid)
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, ModelState));
                }

                #endregion

                #region Account identity search

                // Search account from request.
                var account = _identityService.FindAccount(Request.Properties);
                if (account == null)
                {
                    throw new Exception("No account has attached to request");
                }

                #endregion

                #region Category search

                // Search condition build.
                var findCategoryConditions = new SearchCategoryViewModel();
                findCategoryConditions.Id = parameters.CategoryIndex;

                // Search the first match category in the database.
                var categories = _unitOfWork.RepositoryCategories.Search();
                var category   =
                    await _unitOfWork.RepositoryCategories.Search(categories, findCategoryConditions)
                    .FirstOrDefaultAsync();

                if (category == null)
                {
                    _log.Error($"No category (Id: {parameters.CategoryIndex}) is found in database.");
                    return(Request.CreateErrorResponse(HttpStatusCode.NotFound, HttpMessages.CategoryNotFound));
                }

                #endregion

                #region Post initialization

                // Initiate new post.
                var post = new Post();
                post.OwnerIndex    = account.Id;
                post.CategoryIndex = parameters.CategoryIndex;
                post.Title         = parameters.Title;
                post.Body          = parameters.Body;
                post.Created       = _timeService.DateTimeUtcToUnix(DateTime.UtcNow);

                //Add category record
                _unitOfWork.RepositoryPosts.Insert(post);

                // Save changes into database.
                await _unitOfWork.CommitAsync();

                #endregion

                return(Request.CreateResponse(HttpStatusCode.Created, post));
            }
            catch (Exception exception)
            {
                _log.Error(exception.Message, exception);
                return(Request.CreateResponse(HttpStatusCode.InternalServerError));
            }
        }
Example #2
0
        public async Task <HttpResponseMessage> UpdatePosts([FromUri] int index,
                                                            [FromBody] InitiatePostViewModel parameters)
        {
            try
            {
                #region Parameters validation

                // Parameters haven't been initialized.
                if (parameters == null)
                {
                    parameters = new InitiatePostViewModel();
                    Validate(parameters);
                }

                //Request parameters are invalid
                if (!ModelState.IsValid)
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, ModelState));
                }

                #endregion

                #region Account identity search

                // Search account from request.
                var account = _identityService.FindAccount(Request.Properties);
                if (account == null)
                {
                    throw new Exception("No account has attached to request");
                }

                #endregion

                #region Information available check

                // Search the post by index.
                var condition = new SearchPostViewModel();
                condition.Id = index;

                // If account is not admin. It can only change its own posts.
                if (account.Role != Roles.Admin)
                {
                    condition.OwnerIndex = account.Id;
                }

                // Search all posts in database.
                var posts = _unitOfWork.RepositoryPosts.Search();
                posts = _unitOfWork.RepositoryPosts.Search(posts, condition);

                #endregion

                #region Update post

                // Search the current time on the system.
                var unixSystemTime = _timeService.DateTimeUtcToUnix(DateTime.UtcNow);

                foreach (var post in posts)
                {
                    post.CategoryIndex = parameters.CategoryIndex;
                    post.Title         = parameters.Title;
                    post.Body          = parameters.Body;
                    post.LastModified  = unixSystemTime;
                }

                // Save changes into database.
                await _unitOfWork.CommitAsync();

                #endregion

                return(Request.CreateResponse(HttpStatusCode.OK));
            }
            catch (Exception exception)
            {
                _log.Error(exception.Message, exception);
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError,
                                                   "Error occured while executing post update"));
            }
        }