Ejemplo n.º 1
0
        public static IResponse Execute(ApiCall call, IApiProvider apiProvider)
        {
            ApiMethod apimethod = null;

            var apiobject = apiProvider.Get(call.Command.ObjectType);

            if (apiobject != null)
            {
                apimethod = Methods.ApiMethodManager.Get(apiobject, call.Command.Method);
            }

            if (apimethod == null && apiProvider.GetMethod != null)
            {
                apimethod = apiProvider.GetMethod(call);
            }

            if (apimethod == null)
            {
                var result = new JsonResponse()
                {
                    Success = false
                };
                result.Messages.Add(Hardcoded.GetValue("Api method Not Found", call.Context));
                return(result);
            }

            // check permission
            if (apiProvider.CheckAccess != null)
            {
                if (!apiProvider.CheckAccess(call.Context, apimethod))
                {
                    var result = new JsonResponse()
                    {
                        Success = false
                    };
                    result.Messages.Add(Hardcoded.GetValue("Unauthorized access", call.Context));
                    return(result);
                }
            }

            if (call.IsFake)
            {
                var fakedata = Lib.Development.FakeData.GetFakeValue(apimethod.ReturnType);
                return(new JsonResponse(fakedata)
                {
                    Success = true
                });
            }
            if (apiobject != null)
            {
                if (!ValidateRequirement(call.Command, call.Context, apiProvider))
                {
                    var result = new JsonResponse()
                    {
                        Success = false
                    };
                    result.Messages.Add(Hardcoded.GetValue("User or website not valid", call.Context));
                    return(result);
                }
            }

            List <string> errors = new List <string>();

            if (!ValideAssignModel(apimethod, call, errors.Add))
            {
                var result = new JsonResponse()
                {
                    Success = false
                };
                result.Messages.AddRange(errors);
                return(result);
            }

            if (!ValideParameters(apimethod, call, errors.Add))
            {
                var result = new JsonResponse()
                {
                    Success = false
                };
                result.Messages.AddRange(errors);
                return(result);
            }
            try
            {
                return(ExecuteMethod(call, apimethod));
            }
            catch (Exception ex)
            {
                var result = new JsonResponse()
                {
                    Success = false
                };
                result.Messages.Add(ex.Message);

                Kooboo.Data.Log.Instance.Exception.WriteException(ex);

                return(result);
            }
        }