/// <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); }
/// <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); }
/// <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); }
/// <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); }