public override void Respond(HttpListenerContext context) { switch (context.Request.HttpMethod) { case "GET": context.WriteJson(Database.GetDocuments(context.GetStart(), context.GetPageSize())); break; case "POST": var json = context.ReadJson(); var id = Database.Put(null, Guid.NewGuid(), json, context.Request.Headers.FilterHeaders(), GetRequestTransaction(context)); context.SetStatusToCreated("/docs/" + id); context.WriteJson(id); break; } }
private void Put(HttpListenerContext context, string index) { var data = context.ReadJsonObject<IndexDefinition>(); if (data.Map == null) { context.SetStatusToBadRequest(); context.Write("Expected json document with 'Map' property"); return; } context.SetStatusToCreated("/indexes/" + index); context.WriteJson(new { index = Database.PutIndex(index, data) }); }
private void OnGet(HttpListenerContext context, string index) { var definition = context.Request.QueryString["definition"]; if ("yes".Equals(definition, StringComparison.InvariantCultureIgnoreCase)) { context.WriteJson(new {index = Database.IndexDefinitionStorage.GetIndexDefinition(index)}); } else { context.WriteJson(Database.Query(index, new IndexQuery { Query = context.Request.QueryString["query"], Start = context.GetStart(), PageSize = context.GetPageSize(), FieldsToFetch = context.Request.QueryString.GetValues("fetch"), SortedFields = context.Request.QueryString.GetValues("sort") .EmptyIfNull() .Select(x => new SortedField(x)) .ToArray() })); } }
public override void Respond(HttpListenerContext context) { var match = urlMatcher.Match(context.Request.Url.LocalPath); var docId = match.Groups[1].Value; switch (context.Request.HttpMethod) { case "GET": context.Response.Headers["Content-Type"] = "application/json; charset=utf-8"; var doc = Database.Get(docId,GetRequestTransaction(context)); if (doc == null) { context.SetStatusToNotFound(); return; } if (context.MatchEtag(doc.Etag)) { context.SetStatusToNotModified(); return; } context.WriteData(doc.Data, doc.Metadata, doc.Etag); break; case "DELETE": Database.Delete(docId, context.GetEtag(), GetRequestTransaction(context)); context.SetStatusToDeleted(); break; case "PUT": Put(context, docId); break; case "PATCH": var patchDoc = context.ReadJsonArray(); var patchResult = Database.ApplyPatch(docId, context.GetEtag(), patchDoc, GetRequestTransaction(context)); switch (patchResult) { case PatchResult.DocumentDoesNotExists: context.SetStatusToNotFound(); break; case PatchResult.Patched: context.WriteJson(new {patched = true}); break; default: throw new ArgumentOutOfRangeException("Value " + patchResult + " is not understood"); } break; } }
public override void Respond(HttpListenerContext context) { var itemsToLoad = context.ReadJsonArray(); var results = new JArray(); Database.TransactionalStorage.Batch(actions => { foreach (JToken item in itemsToLoad) { var documentByKey = actions.DocumentByKey(item.Value<string>(), GetRequestTransaction(context)); if (documentByKey == null) continue; results.Add(documentByKey.ToJson()); } actions.Commit(); }); context.WriteJson(results); }
private void Batch(HttpListenerContext context) { var jsonCommandArray = context.ReadJsonArray(); var commands = new List<ICommandData>(); foreach (JObject jsonCommand in jsonCommandArray) { var key = jsonCommand["key"]; switch (jsonCommand["method"].Value<string>()) { case "PUT": commands.Add(new PutCommandData { Key = key.Value<string>(), Etag = GetEtagFromCommand(jsonCommand), Document = jsonCommand["document"] as JObject, Metadata = jsonCommand["@metadata"] as JObject, TransactionInformation = GetRequestTransaction(context) }); break; case "DELETE": commands.Add(new DeleteCommandData { Key = key.Value<string>(), Etag = GetEtagFromCommand(jsonCommand), TransactionInformation = GetRequestTransaction(context) }); continue; default: throw new ArgumentException("Batching only supports PUT and DELETE."); } } var batchResult = Database.Batch(commands); context.WriteJson(batchResult); }
public override void Respond(HttpListenerContext context) { var txId = context.Request.QueryString["tx"]; Database.Rollback(new Guid(txId)); context.WriteJson(new { rollbacked = txId }); }
public override void Respond(HttpListenerContext context) { context.WriteJson(Database.GetIndexes(context.GetStart(), context.GetPageSize())); }
public override void Respond(HttpListenerContext context) { context.WriteJson(Database.Statistics); }
private void Put(HttpListenerContext context, string docId) { var json = context.ReadJson(); context.SetStatusToCreated("/docs/" + docId); var putResult = Database.Put(docId, context.GetEtag(), json, context.Request.Headers.FilterHeaders(), GetRequestTransaction(context)); context.WriteJson(putResult); }