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)); } }
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")); } }