protected override HttpResponseMessage DoPost(T item)
        {
            HttpResponseMessage response = null;

            try
            {
                long itemid  = 0;
                var  itemIns = tblData.Insert(item, out itemid);

                ApiDataResponse res = new ApiDataResponse();
                res.data = itemIns;

                res.recordsaffected = 1;

                response = Request.CreateResponse <ApiDataResponse>(HttpStatusCode.OK, res);
                string uri = Url.Link("DefaultApi", new { id = itemid });
                response.Headers.Location = new Uri(uri);
            }
            catch (Exception ex)
            {
                response = ExceptionHandler(ex);
            }

            return(response);
        }
Esempio n. 2
0
        private Task HandleExceptionAsync(HttpContext context, Exception exception)
        {
            //context.Response.ContentType = "application/json";
            var apiErrorResponce = new ApiErrorResponse();
            int code             = (int)HttpStatusCode.InternalServerError;

            if (exception is DbUpdateException)
            {
                apiErrorResponce.Message = exception.Message;
                code = (int)HttpStatusCode.BadRequest;
                context.Response.StatusCode = code;
            }
            //else if
            else
            {
                apiErrorResponce.Message = exception.Message;
                code = (int)HttpStatusCode.InternalServerError;
                context.Response.StatusCode = code;
            }

            var apiResponce = new ApiDataResponse <ApiErrorResponse>(code, apiErrorResponce);
            var json        = JsonConvert.SerializeObject(apiResponce);

            logger.LogError($"An exception occured {exception.Message}");
            return(context.Response.WriteAsync(json));
        }
Esempio n. 3
0
        private Task HandleNotSuccessValidationAsync(HttpContext context, int statusCode, ModelStateDictionary modelState)
        {
            var errorListModel = modelState
                                 .Where(x => x.Value.Errors.Count > 0)
                                 .ToDictionary(er => er.Key, er => er.Value.Errors.Select(x => x.ErrorMessage))
                                 .ToList();
            var apiErrorResponce = new ApiErrorResponse();

            foreach (var error in errorListModel)
            {
                foreach (var erValue in error.Value)
                {
                    var errorModel = new ValidationError()
                    {
                        Name    = error.Key,
                        Message = erValue
                    };
                    apiErrorResponce.ValidationErrors.Add(errorModel);
                }
            }
            var apiResponce = new ApiDataResponse <ApiErrorResponse>(statusCode, apiErrorResponce);

            context.Response.StatusCode = statusCode;
            var json = JsonConvert.SerializeObject(apiResponce);

            return(context.Response.WriteAsync(json));
        }
        /// <summary>
        /// Constroi a resposta de acordo com os resultados e processamentos
        /// Executa a ordenação no caso de não ter paginação
        /// </summary>
        /// <typeparam name="TAnyClass">Classe com o modelo de dados da resposta</typeparam>
        /// <param name="foundItens">Lista de dados encontrados e a retornar</param>
        /// <param name="hasPages"></param>
        /// <returns></returns>
        public ApiDataResponse buildTypedResponse <TAnyClass>(PagedResults <TAnyClass> foundItens, bool hasPages = false) where TAnyClass : class
        {
            ApiDataResponse returnValue = new ApiDataResponse();

            // se não tem paginação
            // A ordenação não é feita na BD
            // é faita aqui.
            if ((MatchedCommands != null) && (!HasPagingCommand))
            {
                foundItens.Records = ExecuteOrderCommand <TAnyClass>(foundItens.Records);
            }

            returnValue.data = foundItens.Records;

            if (hasPages)
            {
                returnValue.pagination      = foundItens.PageInfo;
                returnValue.recordsaffected = foundItens.PageInfo.CurrentPageSize;
            }
            else
            {
                returnValue.recordsaffected = foundItens.Records.Count();
            }

            return(returnValue);
        }
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="item"></param>
        /// <returns></returns>
        public HttpResponseMessage GenericPost <T>(T item) where T : class
        {
            HttpResponseMessage response;
            DbTable <T>         tblData = new DbTable <T>(DBContext, UserID);

            try
            {
                long itemid  = 0;
                var  itemIns = tblData.Insert(item, out itemid);

                ApiDataResponse res = new ApiDataResponse();
                res.data = itemIns;

                res.recordsaffected = 1;

                response = Controller.Request.CreateResponse <ApiDataResponse>(HttpStatusCode.OK, res);

                // Erro no parametro request
                //UrlHelper url = new UrlHelper();
                //string uri = url.Link("DefaultApi", new { id = itemid });

                //response.Headers.Location = new Uri(uri);
            }
            catch (Exception ex)
            {
                tblData  = null;
                response = DefaultControllerException(Controller.Request, ex);
            }
            return(response);
        }
        protected IActionResult ApiOk <T>(T data, HttpStatusCode code = HttpStatusCode.OK)
        {
            ApiDataResponse <T> response = new ApiDataResponse <T> {
                Data = data, HttpStatusCode = code
            };

            return(Ok(response));
        }
 private ActionResult ValidateApiResult <T>(ApiDataResponse <T> result)
 {
     if (result.IsError)
     {
         return(LocalRedirect($"~/Error/{result.ResponseException.MessageType}"));
     }
     return(null);
 }
        protected override HttpResponseMessage DoGetAll()
        {
            var             listAll = tblData.GetAll(null);
            ApiDataResponse res     = new ApiDataResponse();

            res.data            = listAll;
            res.recordsaffected = listAll.Count();
            return(Request.CreateResponse <ApiDataResponse>(HttpStatusCode.OK, res));
        }
 //protected HttpResponseMessage ErrorResponse(HttpStatusCode httpStatusCode = HttpStatusCode.InternalServerError)
 //{
 //    HttpResponseMessage response;
 //    if (listErrors.Count > 0)
 //    {
 //        response = Request.CreateResponse<List<ApiStatusResponse>>(httpStatusCode, listErrors);
 //        listErrors.Clear();
 //    }
 //    else
 //    {
 //        response = Request.CreateResponse(httpStatusCode);
 //    }
 //    return response;
 //}
 protected virtual HttpResponseMessage DoGetByQueryString()
 {
     List<string> retval = new List<string>();
     foreach (var q in QueryStringPairs)
     {
         retval.Add("Key: " + q.Key + " Value: " + q.Value);
     }
     ApiDataResponse res = new ApiDataResponse();
     res.data = retval;
     return Request.CreateResponse<ApiDataResponse>(HttpStatusCode.OK, res);
 }
Esempio n. 10
0
        public void ThrowExceptionWithErrorMessageWhenApiDataResponseHasAnError()
        {
            var mockApiReturn = new ApiDataResponse("error");

            mockDeserializer.Convert(Arg.Any <string>()).Returns(new List <ApiDataResponse> {
                mockApiReturn
            });
            var service = new NewsService(mockCaller, mockDeserializer);

            Should.Throw <Exception>(() => service.GetArticle()).Message.ShouldBe("error");
        }
        protected override HttpResponseMessage DoPut(int Id, T item)
        {
            HttpResponseMessage response = new HttpResponseMessage();

            // descobrir campo chave e saber valor
            // se o valor do parametro nao for igual ao do campo chave
            // é erro, logo nem avança
            if (GetKeyValueOf(item) != Id)
            {
                ApiStatusResponse errorResponse = new ApiStatusResponse()
                {
                    Code   = "101",
                    Detail = "Está a tentar executar a actulização de um objecto, mas tem incomsistência entre a chave do objecto e o ID do Uri",
                    Title  = "Uri Inválido",
                    Type   = "error"
                };

                response = Request.CreateResponse(HttpStatusCode.BadRequest, errorResponse);
            }
            else
            {
                var itemIns = tblData.Update(item);

                if (itemIns == null)
                {
                    // não update, mas não deu erro... portanto elemento não existe


                    ApiStatusResponse errorResponse = new ApiStatusResponse()
                    {
                        Code   = "102",
                        Detail = "Está a tentar executar a actulização de um objecto, mas o objecto não existe",
                        Title  = "Operação Inválida",
                        Type   = "error"
                    };

                    response = Request.CreateResponse(HttpStatusCode.NotFound, errorResponse);
                }
                else
                {
                    ApiDataResponse res = new ApiDataResponse();
                    res.data            = item;
                    res.recordsaffected = 1;

                    response = Request.CreateResponse <ApiDataResponse>(HttpStatusCode.OK, res);
                    string uri = Url.Link("DefaultApi", new { id = Id });
                    response.Headers.Location = new Uri(uri);
                }
            }
            return(response);
        }
Esempio n. 12
0
        public void ReturnDomainModelWithCorrectTitle()
        {
            var mockApiReturn = new ApiDataResponse {
                Title = "Bob"
            };

            mockDeserializer.Convert(Arg.Any <string>()).Returns(new List <ApiDataResponse> {
                mockApiReturn
            });
            var service = new NewsService(mockCaller, mockDeserializer);

            var result = service.GetArticle();

            result.Title.ShouldBe("Bob");
        }
Esempio n. 13
0
        public void ReturnFirstArticleIfReceivesMoreThanOneArticle()
        {
            var mockApiReturn1 = new ApiDataResponse {
                Title = "Bob"
            };
            var mockApiReturn2 = new ApiDataResponse {
                Title = "Ross"
            };

            mockDeserializer.Convert(Arg.Any <string>()).Returns(new List <ApiDataResponse> {
                mockApiReturn1, mockApiReturn2
            });
            var service = new NewsService(mockCaller, mockDeserializer);

            var result = service.GetArticle();

            result.Title.ShouldBe("Bob");
        }
        protected override HttpResponseMessage DoGet(int id)
        {
            HttpResponseMessage response = null;

            try
            {
                var             record = tblData.Get(id);
                ApiDataResponse res    = new ApiDataResponse();
                res.data            = record;
                res.recordsaffected = 1;
                response            = Request.CreateResponse <ApiDataResponse>(HttpStatusCode.OK, res);
            }
            catch (Exception ex)
            {
                response = ExceptionHandler(ex);
            }

            return(response);
        }
        /// <summary>
        /// Executa um GET (SELECT) por ID do registo
        /// </summary>
        /// <typeparam name="T">Modelo da Tabela</typeparam>
        /// <param name="id">ID do registo</param>
        /// <returns>HTTP Response com o registo</returns>
        public virtual HttpResponseMessage GenericGet <T>(int id) where T : class
        {
            DbTable <T> tblData = new DbTable <T>(DBContext, UserID);

            try
            {
                var             record = tblData.Get(id);
                ApiDataResponse res    = new ApiDataResponse();
                res.data            = record;
                res.recordsaffected = 1;
                tblData             = null;

                return(Controller.Request.CreateResponse <ApiDataResponse>(HttpStatusCode.OK, res));
            }
            catch (Exception ex)
            {
                tblData = null;
                return(DefaultControllerException(Controller.Request, ex));
            }
        }
        /// <summary>
        /// Executa um GET ALL (SELECT da tabela inteira)
        /// </summary>
        /// <typeparam name="T">Modelo da Tabela</typeparam>
        /// <returns>HTTP Response com a tabela, paginada ou não</returns>
        public HttpResponseMessage GenericGetAll <T>() where T : class
        {
            HttpResponseMessage response = ResourceNotFound();

            DbTable <T> tblData = new DbTable <T>(DBContext, UserID);

            var QueryStringValidationResponse = ValidateQryString();

            if (QueryStringValidationResponse != null)
            {
                response = Controller.Request.CreateResponse <ApiStatusResponse>(HttpStatusCode.BadRequest, QueryStringValidationResponse);
            }
            else
            {
                try
                {
                    PagedResults <T> foundItens = null;

                    IEnumerable <T> listAll = null;

                    if (HasPagingCommand)
                    {
                        foundItens = tblData.GetPagedResults(PageSize, PageNumber, GetOrderByFieldsList(), BuildWhereParams <T>());
                    }
                    else
                    {
                        listAll = tblData.GetAll(BuildWhereParams <T>());
                    }


                    if (!listAll.IsNullOrEmpty() || (foundItens != null))
                    {
                        ApiDataResponse res = new ApiDataResponse();

                        // já temos os resultados, temos de ordenar?
                        if (!HasPagingCommand && (!MatchedOrderFields.IsNullOrEmpty() && (MatchedOrderFields.Count > 0)))
                        {
                            string order = GetOrderForQuery();

                            var listOrdered = listAll.AsQueryable().OrderBy(order);

                            listAll = listOrdered;
                        }

                        if (!HasPagingCommand)
                        {
                            res.data            = listAll;
                            res.recordsaffected = listAll.Count();
                        }
                        else
                        {
                            res = buildTypedResponse <T>(foundItens, HasPagingCommand);
                        }

                        tblData = null;

                        response = Controller.Request.CreateResponse <ApiDataResponse>(HttpStatusCode.OK, res);
                    }
                }
                catch (Exception ex)
                {
                    tblData  = null;
                    response = DefaultControllerException(Controller.Request, ex);
                }
            }

            return(response);
        }
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="Id"></param>
        /// <param name="item"></param>
        /// <param name="activeTransaction"></param>
        /// <returns></returns>
        public HttpResponseMessage GenericPut <T>(int Id, T item, IDbTransaction activeTransaction = null) where T : class
        {
            HttpResponseMessage response;

            // descobrir campo chave e saber valor
            // se o valor do parametro nao for igual ao do campo chave
            // é erro, logo nem avança
            if (DatabaseHelpers.GetKeyValueOf(item) != Id)
            {
                ApiStatusResponse errorResponse = new ApiStatusResponse()
                {
                    Code   = "101",
                    Detail = "Está a tentar executar a actulização de um objecto, mas tem incomsistência entre a chave do objecto e o ID do Uri",
                    Title  = "Uri Inválido",
                    Type   = "error"
                };

                response = Controller.Request.CreateResponse(HttpStatusCode.BadRequest, errorResponse);
            }
            else
            {
                DbTable <T> tblData = new DbTable <T>(DBContext, UserID);

                try
                {
                    var itemIns = tblData.Update(item, activeTransaction);
                    tblData = null;

                    if (itemIns == null)
                    {
                        // não update, mas não deu erro... portanto elemento não existe
                        ApiStatusResponse errorResponse = new ApiStatusResponse()
                        {
                            Code   = "102",
                            Detail = "Está a tentar executar a actulização de um objecto, mas o objecto não existe",
                            Title  = "Operação Inválida",
                            Type   = "error"
                        };

                        response = Controller.Request.CreateResponse(HttpStatusCode.NotFound, errorResponse);
                    }
                    else
                    {
                        ApiDataResponse res = new ApiDataResponse();
                        res.data            = item;
                        res.recordsaffected = 1;

                        response = Controller.Request.CreateResponse <ApiDataResponse>(HttpStatusCode.OK, res);

                        // Erro no parametro request
                        //UrlHelper url = new UrlHelper();
                        //string uri = url.Link("DefaultApi", new { id = Id });

                        //response.Headers.Location = new Uri(uri);
                    }
                }
                catch (Exception ex)
                {
                    tblData  = null;
                    response = DefaultControllerException(Controller.Request, ex);
                }

                tblData = null;
            }
            return(response);
        }