Example #1
0
        /// <summary>
        /// Retrieves specified index.
        /// </summary>
        /// <exception cref="ArgumentException">Specified id value has invalid format.</exception>
        public async Task <AResult <IndexCreateResponse> > Get(string id)
        {
            if (!Helpers.IsID(id))
            {
                throw new ArgumentException("Specified id value (" + id + ") has invalid format.");
            }

            var request = _requestFactory.Create(HttpMethod.Get, ApiBaseUri.Index, "/" + id);

            var response = await _collection.Send(request);

            var result = new AResult <IndexCreateResponse>(response);

            switch (response.StatusCode)
            {
            case 200:
                var body = response.ParseBody <IndexCreateResponse>();

                result.Success = (body != null);
                result.Value   = body;
                break;

            case 404:
            default:
                // Arango error
                break;
            }

            return(result);
        }
Example #2
0
        /// <summary>
        /// Creates index within specified collection in current database context.
        /// </summary>
        public async Task <AResult <IndexCreateResponse> > Create()
        {
            var request = _requestFactory.Create(HttpMethod.Post, ApiBaseUri.Index, "");

            // required
            request.QueryString.Add(ParameterName.Collection, _collection.Name);

            request.SetBody(_create);

            var response = await _collection.Send(request);

            var result = new AResult <IndexCreateResponse>(response);

            switch (response.StatusCode)
            {
            case 200:
            case 201:
                var body = response.ParseBody <IndexCreateResponse>();

                result.Success = (body != null);
                result.Value   = body;
                break;

            case 400:
            case 404:
            default:
                // Arango error
                break;
            }

            return(result);
        }
Example #3
0
        /// <summary>
        /// Updates existing document identified by its handle with new document data.
        /// </summary>
        public async Task <AResult <T> > DocumentById(string id, T document)
        {
            if (!Helpers.IsID(id))
            {
                throw new ArgumentException("Specified 'id' value (" + id + ") has invalid format.");
            }

            var request = _requestFactory.Create(HttpMethod.Patch, ApiBaseUri.Document, "/" + id);

            if (_waitForSync.HasValue)
            {
                request.QueryString.Add(ParameterName.WaitForSync, _waitForSync.Value.ToString().ToLower());
            }
            if (_keepNull.HasValue)
            {
                request.QueryString.Add(ParameterName.KeepNull, _keepNull.Value.ToString().ToLower());
            }
            if (_mergeObjects.HasValue)
            {
                request.QueryString.Add(ParameterName.MergeObjects, _mergeObjects.Value.ToString().ToLower());
            }
            if (_ignoreRevs.HasValue)
            {
                request.QueryString.Add(ParameterName.IgnoreRevs, _ignoreRevs.Value.ToString().ToLower());
            }
            if (_returnNew.HasValue)
            {
                request.QueryString.Add(ParameterName.ReturnNew, _returnNew.Value.ToString().ToLower());
            }
            if (_returnOld.HasValue)
            {
                request.QueryString.Add(ParameterName.ReturnOld, _returnOld.Value.ToString().ToLower());
            }
            if (!String.IsNullOrEmpty(_ifMatch))
            {
                request.Headers.Add(ParameterName.IfMatch, _ifMatch);
            }

            request.SetBody(document);

            var response = await _collection.Send(request);

            var result = new AResult <T>(response);

            switch (response.StatusCode)
            {
            case 201:
            case 202:
                T body;
                if (_returnNew.HasValue && _returnNew.Value)
                {
                    body = response.ParseBody <DocumentCreateResponse <T> >()?.New;
                }
                else if (_returnOld.HasValue && _returnOld.Value)
                {
                    body = response.ParseBody <DocumentCreateResponse <T> >()?.Old;
                }
                else
                {
                    body = response.ParseBody <T>();
                }

                result.Success = (body != null);
                result.Value   = body;
                break;

            case 412:
                var rev = (string)response.ParseBody <Dictionary <string, object> >()["_rev"];

                throw new VersionCheckViolationException(rev);

            case 404:
                throw new CollectionNotFoundException();

            default:
                throw new ArangoException(response.Body);
            }

            return(result);
        }
Example #4
0
        /// <summary>
        /// Completely replaces existing document identified by its handle with new document data.
        /// </summary>
        /// <exception cref="ArgumentException">Specified id value has invalid format.</exception>
        public async Task <AResult <List <T> > > Documents(IEnumerable <T> document)
        {
            // TODO validate

            /*if (!ADocument.IsID(id))
             * {
             *  throw new ArgumentException("Specified 'id' value (" + id + ") has invalid format.");
             * }*/

            var request = _requestFactory.Create(HttpMethod.Put, ApiBaseUri.Document, "/" + _collection.Name);

            if (_waitForSync.HasValue)
            {
                request.QueryString.Add(ParameterName.WaitForSync, _waitForSync.Value.ToString().ToLower());
            }
            if (_ignoreRevs.HasValue)
            {
                request.QueryString.Add(ParameterName.IgnoreRevs, _ignoreRevs.Value.ToString().ToLower());
            }
            if (_returnNew.HasValue)
            {
                request.QueryString.Add(ParameterName.ReturnNew, _returnNew.Value.ToString().ToLower());
            }
            if (_returnOld.HasValue)
            {
                request.QueryString.Add(ParameterName.ReturnOld, _returnOld.Value.ToString().ToLower());
            }
            if (!String.IsNullOrEmpty(_ifMatch))
            {
                request.Headers.Add(ParameterName.IfMatch, _ifMatch);
            }

            request.SetBody(document);

            var response = await _collection.Send(request);

            var result = new AResult <List <T> >(response);

            switch (response.StatusCode)
            {
            case 201:
            case 202:
                response.Headers.TryGetValues("X-Arango-Error-Codes", out var values);
                if (values != null && values.Any())
                {
                    throw new MultipleException();
                }

                List <T> body;
                if (_returnNew.HasValue && _returnNew.Value)
                {
                    body = response.ParseBody <List <DocumentCreateResponse <T> > >().Select(e => e.New).ToList();
                }
                else if (_returnOld.HasValue && _returnOld.Value)
                {
                    body = response.ParseBody <List <DocumentCreateResponse <T> > >().Select(e => e.Old).ToList();
                }
                else
                {
                    body = response.ParseBody <List <T> >();
                }

                result.Success = (body != null);
                result.Value   = body;
                break;

            case 404:
                throw new CollectionNotFoundException();

            default:
                throw new ArangoException(response.Body);
            }

            return(result);
        }