Exemplo n.º 1
0
        [HttpGet("{subPath}/" + MetaSfx + "/{fieldId}")] //IEnumerable<AxEnum>
        public object Get(String subPath, String fieldId, [FromQuery] IntervalParameters parameters)
        {
            var errMsg = @"Resource [" + subPath + "] not found...";

            bool IfLastIs(string s, string t) => (s.Substring(s.Length - t.Length) == t);
            bool notNull(object x) => (x != null);

            RequestType RequestRoute(HttpRequest req, string fld) =>
            IfLastIs(req.Path.ToUriComponent(), "/" + MetaSfx) ?
            RequestType.MetadataTable :
            (fld != null ?
             RequestType.MetadataField :
             (req.Query.Count > 0 ? RequestType.DataFiltered : RequestType.Data)
            );


            try
            {
                switch (RequestRoute(this.Request, fieldId))
                {
                case RequestType.MetadataTable:
                    return
                        (Resp <object>
                         .Of(contextHelper.GetMetadata(context, subPath))
                         .MapIf(x => x as IMetadataBase <object, string>, notNull, e => errorBuilder.ServerError(errMsg))
                         .Map(x => mdHelper.GetMetadataByQuery(this.Request.Query, x))
                         .Value);

                case RequestType.MetadataField:
                    return
                        (Resp <object>
                         .Of(contextHelper.GetMetadataField(context, subPath, fieldId))
                         .MapIf(x => x as IMetadataBase <object, string>, notNull, e => errorBuilder.ServerError(errMsg))
                         .Map(x => mdHelper.GetMetadataByQuery(this.Request.Query, x))
                         .Value);

                case RequestType.DataFiltered:
                    return
                        (Resp <HttpRequest>
                         .Of(this.Request)
                         .Map(x => new object[] { contextHelper.ToKeyValuePairFromRequest(x) })
                         .MapIf(x => contextHelper.InvokeReaderMethod(context, subPath, "Get", x), notNull, e => errorBuilder.ServerError(errMsg))
                         .Value);

                case RequestType.Data:
                    return
                        (Resp <string>
                         .Of(subPath)
                         .MapIf(x => contextHelper.InvokeReaderMethod(context, x, "GetAll"), notNull, e => errorBuilder.ServerError(errMsg))
                         .Value);

                default:
                    return(errorBuilder.ServerError(errMsg));
                }
            }
            catch (Exception e)
            {
                return(errorBuilder.ServerError(e.Message));
            }
        }
Exemplo n.º 2
0
        [HttpGet("enum/{enumName}/{id}")]       //IEnumerable<AxEnum>
        public object Get(String enumName, long?id)
        {
            var errBse = @"Enumerable resource [" + enumName + "]";
            var errMsg = errBse + " not found...";

            bool IfLastIs(string s, string t) => (s.Substring(s.Length - t.Length) == t);
            bool notNull(object x) => (x != null);

            RequestEnumType RequestRoute(HttpRequest req, long?idv) =>
            IfLastIs(req.Path.ToUriComponent(), "/" + MetaSfx) ?
            RequestEnumType.Metadata :
            (idv != null ? RequestEnumType.Value : RequestEnumType.Data);

            // TODO context.GetEnumByName(x) не устойчив к ошибкам не обрабатывает левые енумы.....уводит в эксепшн

            try
            {
                switch (RequestRoute(this.Request, id))
                {
                case RequestEnumType.Data:
                    return(Resp <string>
                           .Of(enumName)
                           .MapIf(x => context.GetEnumByName(x), notNull, e => errorBuilder.ServerError(errMsg))
                           .MapIf(x => x.Access.Reader.GetAll(), notNull, e => errorBuilder.ServerError(errBse + " not contain data..."))
                           .Value);

                case RequestEnumType.Metadata:
                    return(Resp <string>
                           .Of(enumName)
                           .MapIf(x => context.GetEnumByName(x), notNull, e => errorBuilder.ServerError(errMsg))
                           .MapIf(x => x.Metadatas.Metadata.GetAll(), notNull, e => errorBuilder.ServerError(errBse + " not contain data..."))
                           .Value);

                case RequestEnumType.Value:
                    return(Resp <string>
                           .Of(enumName)
                           .MapIf(x => context.GetEnumByName(x), notNull, e => errorBuilder.ServerError(errMsg))
                           .MapIf(x => x.Access.Reader.Find(id), notNull, e => errorBuilder.ServerError(errBse + " not found data with key:[" + id + "]..."))
                           .Value);

                default:
                    return(errorBuilder.ServerError(errMsg));
                }
            }
            catch (Exception e)
            {
                return(errorBuilder.ServerError(e.Message));
            }
        }
Exemplo n.º 3
0
        public object Get(String subPath, long id)
        {
            var errMsg  = @"Resource [" + subPath + "] not found...";
            var errMsg2 = "Key [" + id + "] of [" + subPath + "] not found";

            bool notNull(object x) => (x != null);

            try
            {
                return(Resp <string>
                       .Of(subPath)
                       .If(x => contextHelper.ExistIDal(context, x), e => errorBuilder.ServerError(errMsg))
                       .MapIf(x => contextHelper.InvokeReaderMethod(context, x, "Find", new object[] { id }), notNull, e => errorBuilder.ServerError(errMsg2))
                       .Value);
            }
            catch (Exception e)
            {
                return(errorBuilder.ServerError(e.Message));
            }
        }