public ActionResult <List <CategoryRowApiO> > Get()
 {
     try
     {
         return(this.CategoryService.FetchAll());
     }
     catch (Exception e)
     {
         Response.AddBody(e.Message);
         // application error internal server error
         return(new StatusCodeResult(500));
     }
 }
 /// <summary>
 /// Get all the records from the database.
 /// </summary>
 /// <returns></returns>
 public ActionResult <List <TApiRowModel> > BaseGet()
 {
     try
     {
         return(this.WorkerService.FetchAll());
     }
     catch (Exception e)
     {
         Response.AddBody(e.Message);
         // application error internal server error
         return(new StatusCodeResult(StatusCodes.Status500InternalServerError));
     }
 }
        public ActionResult <CategoryRowApiO> Put([FromBody] CategoryRowApiO category)
        {
            try
            {
                if (ModelState.IsValid == true)
                {
                    CategoryRowApiO result = default(CategoryRowApiO);

                    result = this.CategoryService.Create(category);

                    this.CategoryService.Commit(); // Save the record to get the new id

                    result = this.CategoryService.Fetch(category);

                    Response.StatusCode = StatusCodes.Status201Created; // created

                    return(result);
                }
                else
                {
                    throw new ModelStateException(string.Format("Validation Failed, the {0} contains invalid data.", category.GetType().ToString()), ModelState);
                }
            }
            catch (ArgumentNullException e)
            {
                // expectation failed - field is missing
                Response.AddBody(e.Message);
                return(new StatusCodeResult(417));
            }
            catch (ModelStateException e)
            {
                // not acceptable
                Response.AddBody(e.Message);
                return(new StatusCodeResult(406));
            }
            catch (RecordFoundException e)
            {
                // bad request
                Response.AddBody(e.Message);
                return(new StatusCodeResult(400));
            }
            catch (Exception e)
            {
                // application error internal server error
                Response.AddBody(e.Message);
                return(new StatusCodeResult(500));
            }
        }
        /// <summary>
        /// Create a new record.
        /// </summary>
        /// <param name="apiRowModel">The model you want to create.</param>
        /// <param name="fetchWithoutKey">The selector for getting the record without the key.</param>
        /// <returns></returns>
        /// <remarks>You will get the record back with any defaults and its Key column value set. The selector does this for you. Make sure you don't use the key as part of the selector.</remarks>
        public ActionResult <TApiRowModel> BasePut(TApiRowModel apiRowModel, [FromServices] Func <TDbModel, bool> fetchWithoutKey)
        {
            try
            {
                if (ModelState.IsValid == true)
                {
                    TApiRowModel result = default(TApiRowModel);

                    result = this.WorkerService.Create(apiRowModel);

                    this.WorkerService.Commit();

                    result = this.WorkerService.Fetch(apiRowModel, fetchWithoutKey);

                    Response.StatusCode = StatusCodes.Status201Created; // created

                    return(result);
                }
                else
                {
                    throw new ModelStateException(string.Format("Validation Failed, the {0} contains invalid data.", apiRowModel.GetType().ToString()), ModelState);
                }
            }
            catch (ArgumentNullException e)
            {
                // expectation failed - field is missing
                Response.AddBody(e.Message);
                return(new StatusCodeResult(StatusCodes.Status417ExpectationFailed));
            }
            catch (ModelStateException e)
            {
                // not acceptable
                Response.AddBody(e.Message);
                return(new StatusCodeResult(StatusCodes.Status406NotAcceptable));
            }
            catch (RecordFoundException e)
            {
                // bad request
                Response.AddBody(e.Message);
                return(new StatusCodeResult(StatusCodes.Status400BadRequest));
            }
            catch (Exception e)
            {
                // application error internal server error
                Response.AddBody(e.Message);
                return(new StatusCodeResult(StatusCodes.Status500InternalServerError));
            }
        }
 public ActionResult <CategoryRowApiO> Post([FromRoute] int categoryId)
 {
     try
     {
         return(this.CategoryService.Fetch(categoryId));
     }
     catch (RecordNotFoundException e)
     {
         Response.AddBody(e.Message);
         return(new StatusCodeResult(204)); // no content
     }
     catch (Exception e)
     {
         Response.AddBody(e.Message);
         // application error internal server error
         return(new StatusCodeResult(500));
     }
 }
 /// <summary>
 /// Get one record from the database
 /// </summary>
 /// <param name="key"></param>
 /// <returns></returns>
 public ActionResult <TApiRowModel> BasePost(TDbModelKey key)
 {
     try
     {
         return(this.WorkerService.Fetch(key));
     }
     catch (RecordNotFoundException e)
     {
         Response.AddBody(e.Message);
         return(new StatusCodeResult(StatusCodes.Status204NoContent)); // no content
     }
     catch (Exception e)
     {
         Response.AddBody(e.Message);
         // application error internal server error
         return(new StatusCodeResult(StatusCodes.Status500InternalServerError));
     }
 }
 [ProducesResponseType(301)] // page moved permanaently
 public ActionResult Delete([FromRoute] int categoryId)
 {
     try
     {
         this.CategoryService.Delete(categoryId);
         this.CategoryService.Commit();
         return(new StatusCodeResult(301));
     }
     catch (RecordNotFoundException e)
     {
         Response.AddBody(e.Message);
         return(new StatusCodeResult(204)); // no content
     }
     catch (Exception e)
     {
         // application error internal server error
         Response.AddBody(e.Message);
         return(new StatusCodeResult(500));
     }
 }
 /// <summary>
 /// Remove a record.
 /// </summary>
 /// <param name="key"></param>
 /// <returns></returns>
 public ActionResult BaseDelete(TDbModelKey key)
 {
     try
     {
         this.WorkerService.Delete(key);
         this.WorkerService.Commit();
         return(new StatusCodeResult(301));
     }
     catch (RecordNotFoundException e)
     {
         Response.AddBody(e.Message);
         return(new StatusCodeResult(204)); // no content
     }
     catch (Exception e)
     {
         // application error internal server error
         Response.AddBody(e.Message);
         return(new StatusCodeResult(500));
     }
 }
        public ActionResult <CategoryRowApiO> Patch([FromBody] CategoryRowApiO category)
        {
            try
            {
                if (category == default(CategoryRowApiO))
                {
                    // See if a partial has been sent.
                    using (StreamReader sr = new StreamReader(Request.Body))
                    {
                        string requestBody = sr.ReadToEnd();

                        if (requestBody != null)
                        {
                            if (requestBody.Length > 0)
                            {
                                using (JSONSerialiser serialiser = new JSONSerialiser())
                                {
                                    // The request may contain a partial so work around this.
                                    category = serialiser.Deserialize <CategoryRowApiO>(requestBody);
                                }
                            }
                        }
                    }
                }

                if (category != default(CategoryRowApiO))
                {
                    if (ModelState.IsValid)
                    {
                        CategoryRowApiO result = this.CategoryService.Update(category);
                        this.CategoryService.Commit();

                        // Updated
                        Response.StatusCode = 200; // OK
                        return(result);
                    }
                    else
                    {
                        throw new ModelStateException(string.Format("Validation Failed, the {0} contains invalid data.", category.GetType().ToString()), ModelState);
                    }
                }
                else
                {
                    throw new ArgumentException("No json body could be found.");
                }
            }
            catch (ArgumentNullException e)
            {
                // expectation failed - field is missing
                Response.AddBody(e.Message);
                return(new StatusCodeResult(417));
            }
            catch (ModelStateException e)
            {
                // not acceptable
                Response.AddBody(e.Message);
                return(new StatusCodeResult(406));
            }
            catch (RecordNotFoundException e)
            {
                Response.AddBody(e.Message);
                return(new StatusCodeResult(204)); // no content
            }
            catch (Exception e)
            {
                // application error internal server error
                Response.AddBody(e.Message);
                return(new StatusCodeResult(500));
            }
        }
Example #10
0
        public static void ValidateRequest_AppendResponse(this Request request, Response response)
        {
            request.LowerRequestMethod();

            switch (request.Method)
            {
            case CREATE:

                if (!request.IsReourceGiven() || !request.IsDateGiven() || !request.IsBodyGiven())
                {
                    response.AddReasonPhrase(BADREQUEST_STATUS);
                }

                if (!request.IsReourceGiven())
                {
                    response.AddReasonPhrase(MISSING_RESOURCE);
                }

                if (!request.IsDateGiven())
                {
                    response.AddReasonPhrase(MISSING_DATE);
                }

                if (!request.IsBodyGiven())
                {
                    response.AddReasonPhrase(MISSING_BODY);
                }

                try
                {
                    if (request.Path.ToLower() == "/api/categories")
                    {
                        var categoryForCreation = request.Body.FromJson <Category>();
                        CreateCategory(categoryForCreation);

                        var categories = GetCategories();
                        var match      = categories.FirstOrDefault(c => c.Name.ToLower() == categoryForCreation.Name.ToLower());

                        response.Body = match.ToJson();
                        response.AddReasonPhrase(CREATED_STATUS);
                        break;
                    }
                    else
                    {
                        response.AddReasonPhrase(BADREQUEST_STATUS);
                    }
                }
                catch (Exception)
                {
                    response.AddReasonPhrase(BADREQUEST_STATUS);
                }

                break;

            case READ:

                if (!request.IsReourceGiven() || !request.IsDateGiven())
                {
                    response.AddReasonPhrase(BADREQUEST_STATUS);
                }

                if (!request.IsReourceGiven())
                {
                    response.AddReasonPhrase(MISSING_RESOURCE);
                }

                if (!request.IsDateGiven())
                {
                    response.AddReasonPhrase(MISSING_DATE);
                }

                try
                {
                    if (request.Path.ToLower() == "/api/categories")
                    {
                        var categories = GetCategories();
                        response.AddBody(categories.ToJson());
                        response.AddReasonPhrase(OK_STATUS);
                        break;
                    }

                    if (!request.Path.GetCategoryIdFromPathIfExist(out Id))
                    {
                        response.AddReasonPhrase(BADREQUEST_STATUS);
                    }
                    else if (Id != 0)
                    {
                        var categories        = GetCategories();
                        var requestedCategory = categories.FirstOrDefault(c => c.Id == Id);
                        if (requestedCategory != null)
                        {
                            response.AddReasonPhrase(OK_STATUS);
                            response.AddBody(requestedCategory.ToJson());
                        }
                        else
                        {
                            response.AddReasonPhrase(NOTFOUND_STATUS);
                        }
                    }
                }
                catch (Exception)
                {
                    response.AddReasonPhrase(BADREQUEST_STATUS);
                }

                break;

            case UPDATE:

                if (!request.IsReourceGiven() || !request.IsDateGiven() || !request.IsBodyGiven() || !request.IsDateUnix() || !request.IsBodyJson())
                {
                    response.AddReasonPhrase(BADREQUEST_STATUS);
                }

                if (!request.IsReourceGiven())
                {
                    response.AddReasonPhrase(MISSING_RESOURCE);
                }

                if (!request.IsDateGiven())
                {
                    response.AddReasonPhrase(MISSING_DATE);
                }

                if (!request.IsBodyGiven())
                {
                    response.AddReasonPhrase(MISSING_BODY);
                }

                if (!request.IsDateUnix())
                {
                    response.AddReasonPhrase(ILLEGAL_DATE);
                }

                if (!request.IsBodyJson())
                {
                    response.AddReasonPhrase(ILLEGAL_BODY);
                }

                try
                {
                    if (!request.Path.GetCategoryIdFromPathIfExist(out Id))
                    {
                        response.AddReasonPhrase(BADREQUEST_STATUS);
                    }
                    else if (Id != 0)
                    {
                        var categories        = GetCategories();
                        var requestedCategory = categories.FirstOrDefault(c => c.Id == Id);
                        if (requestedCategory != null)
                        {
                            requestedCategory.Name = request.Body.FromJson <Category>().Name;
                            response.AddReasonPhrase(UPDATED_STATUS);
                        }
                        else
                        {
                            response.AddReasonPhrase(NOTFOUND_STATUS);
                        }
                    }
                }
                catch (Exception)
                {
                    response.AddReasonPhrase(BADREQUEST_STATUS);
                }

                break;

            case DELETE:

                if (!request.IsReourceGiven() || !request.IsDateGiven())
                {
                    response.AddReasonPhrase(BADREQUEST_STATUS);
                }

                if (!request.IsReourceGiven())
                {
                    response.AddReasonPhrase(MISSING_RESOURCE);
                }

                if (!request.IsDateGiven())
                {
                    response.AddReasonPhrase(MISSING_DATE);
                }

                try
                {
                    if (!request.Path.GetCategoryIdFromPathIfExist(out Id))
                    {
                        response.AddReasonPhrase(BADREQUEST_STATUS);
                    }
                    else if (Id != 0)
                    {
                        var categories        = GetCategories();
                        var requestedCategory = categories.FirstOrDefault(c => c.Id == Id);
                        if (requestedCategory != null)
                        {
                            if (DeleteCategory(requestedCategory.Id))
                            {
                                response.AddReasonPhrase(OK_STATUS);
                            }

                            response.AddReasonPhrase(NOTFOUND_STATUS);
                        }
                        else
                        {
                            response.AddReasonPhrase(NOTFOUND_STATUS);
                        }
                    }
                }
                catch (Exception)
                {
                    response.AddReasonPhrase(BADREQUEST_STATUS);
                }

                break;

            case ECHO:

                if (!request.IsBodyGiven() || !request.IsDateGiven())
                {
                    response.AddReasonPhrase(BADREQUEST_STATUS);
                }

                if (!request.IsBodyGiven())
                {
                    response.AddReasonPhrase(MISSING_BODY);
                }
                else
                {
                    response.Body = request.Body;
                }

                if (!request.IsDateGiven())
                {
                    response.AddReasonPhrase(MISSING_DATE);
                }
                break;

            case null:

                response.AddReasonPhrase(BADREQUEST_STATUS, MISSING_METHOD, MISSING_DATE);
                break;

            default:
                response.AddReasonPhrase(BADREQUEST_STATUS, ILLEGAL_METHOD);
                break;
            }
        }