예제 #1
1
파일: Program.cs 프로젝트: sluu99/mycouch
        static void Main(string[] args)
        {
            using (var client = new MyCouchClient("http://*****:*****@localhost:5984/foo"))
            {
                var r = client.Views.QueryAsync(new QueryViewRequest("test", "test")).Result;
                //client.Database.PutAsync().Wait();

                //var postEntity = client.Entities.PostAsync(new Doc
                //{
                //    Item = new Nested { EntityId = "Test" }
                //}).Result;

                //var getEntity = client.Entities.GetAsync<Doc>(postEntity.Id).Result;
                //var getJson = client.Documents.GetAsync(postEntity.Id).Result;

                //var all = client.Views.QueryAsync<Doc>(new QueryViewRequest("test", "all")).Result;
            }
        }
예제 #2
0
 public async Task<SiaqodbDocument> Get(string bucketName, string key, string version)
 {
     using (var client = new MyCouchClient(DbServerUrl , bucketName))
     {
         var startTime = DateTime.Now;
         var response = await client.Documents.GetAsync(key, version);
         if (response.IsSuccess)
         {
             var size = response.Content == null ? 0 : response.Content.Length;
            
             if (size == 0) return null;
             var doc = client.Serializer.Deserialize<CouchDBDocument>(response.Content);
             return Mapper.ToSiaqodbDocument(doc);
         }
         else if (response.StatusCode == System.Net.HttpStatusCode.NotFound)
         {
             if (response.Reason == "no_db_file")
                 throw new BucketNotFoundException(bucketName);
             else
                 throw new DocumentNotFoundException(key, version);
         }
         else if (response.StatusCode == System.Net.HttpStatusCode.BadRequest)
         {
             throw new InvalidVersionFormatException();
         }
         else throw new GenericCouchDBException(response.Reason, response.StatusCode);
     }
 }
 /// <summary>
 /// Function in <see cref="LocalDB"/> to transmit a single <see cref="Record"/>.
 /// </summary>
 /// <param name="client">Target <see cref="MyCouchClient"/></param>
 /// <param name="card"><see cref="Card"/> to transmit</param>
 public static async void Transmit(MyCouchClient client, Card card)
 {
     MyCouch.Requests.PostEntityRequest<Card> insert = new MyCouch.Requests.PostEntityRequest<Card>(card);
     MyCouch.Responses.EntityResponse<Card> reponse = await client.Entities.PostAsync(insert);
     Console.WriteLine("Response finished");
     Console.ReadLine();
 }
예제 #4
0
        public async Task<ActionResult> GetResult(int measurePoint, int minutesAgo)
        {
            var viewModel = new TrafficQueryViewModel();
            using (var client = new MyCouchClient("http://db-couchdb.cloudapp.net:5984", "bekk4"))
            {
                var startTime = DateTime.Now.Subtract(new TimeSpan(0, minutesAgo, 0)).ToString("O");
                var startKey = new object[] {measurePoint, startTime};
                var endKey = new object[] {measurePoint, DateTime.Now.ToString("O")};
                var carCountQuery = new QueryViewRequest("stats", "count").Configure(x => x.StartKey(startKey).EndKey(endKey));
                var carCountResult = await client.Views.QueryAsync(carCountQuery);
                var averageSpeedQuery = new QueryViewRequest("stats", "speed").Configure(x => x.StartKey(startKey).EndKey(endKey));
                var averageSpeedResult = await client.Views.QueryAsync(averageSpeedQuery);
                viewModel.MeasurePoint = measurePoint;
                var carCount = carCountResult.Rows.FirstOrDefault();
                if (carCount != null)
                    viewModel.NumberOfCars = int.Parse(carCount.Value);
                var averageSpeed = averageSpeedResult.Rows.FirstOrDefault();
                if (averageSpeed != null)
                {
                    viewModel.AverageSpeed = float.Parse(averageSpeed.Value, CultureInfo.InvariantCulture);
                }
            }

            return PartialView(viewModel);
        } 
예제 #5
0
 public Serializer()
 {
     //				serializer = new MyCouch.Serialization.DefaultSerializer(new MyCouch.Serialization.SerializationConfiguration();
     using (var cl = new MyCouch.MyCouchClient("https://127.0.0.1", "none"))
     {
         serializer = cl.Entities.Serializer;
     }
     Console.WriteLine(serializer.GetType());
 }
예제 #6
0
 // GET api/values
 public IEnumerable<object> Get()
 {
     using (var client = new MyCouchClient("http://db-couchdb.cloudapp.net:5984", "bekk4"))
     {
         var query = new QueryViewRequest("test", "all").Configure(q => q.Reduce(false));
         var result = client.Views.QueryAsync(query).Result;
         return result.Rows.Select(row => row.Value);
     }
 }
        public async Task<List<Notification>> Get()
        {
            var uriBuilder = GetCouchUrl();

            using (var client = new MyCouchClient(uriBuilder.Build()))
            {
                var notifications = await client.Views.QueryAsync<Notification>(new QueryViewRequest("notifications-doc", "all-notifications"));
                return notifications.Rows.Select(r => r.Value).ToList();
            }
        }
        public async Task<Notification> Post(Notification notification)
        {
            var uriBuilder = GetCouchUrl();

            using (var client = new MyCouchClient(uriBuilder.Build()))
            {
                var response = await client.Entities.PostAsync(notification);

                return response.Content;
            }
        }
예제 #9
0
 // GET: OverView
 public async Task<ActionResult> Index()
 {
     var viewModel = new OverviewViewModel();
     using (var client = new MyCouchClient("http://db-couchdb.cloudapp.net:5984", "bekk4"))
     {
         var query = new QueryViewRequest("test", "measurepoints").Configure(x => x.Group(true));
         var result = await client.Views.QueryAsync(query);
         viewModel.MeasurementPoints = result.Rows.Select(x => x.Key);
     }
     return View(viewModel);
 }
예제 #10
0
파일: Program.cs 프로젝트: aldass/mycouch
        private async static Task Test()
        {
            using (var client = new MyCouchClient("http://*****:*****@localhost:5984/", "foo"))
            {
                var db = await client.Database.PutAsync();

                var put = await client.Entities.PutAsync(
                    new Person { Id = "persons/1", Name = "Daniel" });

                var get = await client.Entities.GetAsync<Person>(put.Id);
            }
        }
예제 #11
0
 public static void MainHello(String[] args)
 {
     using(var client = new MyCouchClient(new MyCouchUriBuilder("http://localhost:5984/").SetDbName("hellodb").SetBasicCredentials("tpnosql", "tpnosql").Build()))
     {
         client.Entities.PutAsync(new HelloWorld()
             {
                 Id = "HelloWorldId",
                 Hello = "Hello World !",
             }).Wait();
         var hello = client.Entities.GetAsync<HelloWorld>("HelloWorldId");
         Console.WriteLine(hello.Result.Content.Hello);
         client.Entities.DeleteAsync(hello);
     }
 }
예제 #12
0
        public async Task<StoreResponse> Delete(string bucketName, string key, string version)
        {
            using (var client = new MyCouchClient(DbServerUrl, bucketName))
            {
                
                if (version == null)
                {
                    var response = await client.Documents.GetAsync(key);
                    if (response.IsSuccess)
                    {
                        if (response.Content != null)
                        {
                            CouchDBDocument doc = client.Serializer.Deserialize<CouchDBDocument>(response.Content);
                            version = doc._rev;
                        }

                    }
                    else if (response.StatusCode == System.Net.HttpStatusCode.NotFound)
                    {
                        if (response.Reason == "no_db_file")
                            throw new BucketNotFoundException(bucketName);
                        else
                            throw new DocumentNotFoundException(key, version);
                    }
                    else throw new GenericCouchDBException(response.Reason, response.StatusCode);


                }
                var deletedResponse = await client.Documents.DeleteAsync(key, version);
                if (deletedResponse.IsSuccess)
                {
                    return new StoreResponse() { Key = deletedResponse.Id, Version = deletedResponse.Rev };
                }
                else if (deletedResponse.StatusCode == System.Net.HttpStatusCode.NotFound)
                {
                    if (deletedResponse.Reason == "no_db_file")
                        throw new BucketNotFoundException(bucketName);
                    else
                        throw new DocumentNotFoundException(key, version);
                }
                else if (deletedResponse.StatusCode == System.Net.HttpStatusCode.BadRequest)
                {
                    throw new InvalidVersionFormatException();
                }
                else throw new GenericCouchDBException(deletedResponse.Reason, deletedResponse.StatusCode);


            }
        }
예제 #13
0
 public void Add(IList<TrafficMeasurement> trafficMeasurements)
 {
     foreach (var trafficMeasurement in trafficMeasurements)
     {
         try
         {
             var result = _client.Documents.PostAsync(JsonConvert.SerializeObject(trafficMeasurement)).Result;
             if(!result.IsSuccess) throw new Exception();
         }
         catch (Exception)
         {
             _client.Dispose();
             _client = new MyCouchClient("http://db-couchdb.cloudapp.net:5984", "bekk4");
         }
     }
 }
예제 #14
0
		public async Task<TShirt> Persist(TShirt tshirt)
		{
			// TODO:
			// replace stubed tshirt with actual one
			var tshirtStub = new TShirt();
			tshirtStub.Id = 5;
			tshirtStub.PrintTechnique = "special technique";
			tshirtStub.Title = "stubed tshirt";

			using (var client = new MyCouchClient("http://localhost:5984", "cshirts")) {
				var response = await client.Entities.PostAsync (tshirtStub);
				Console.WriteLine (response); // TODO: remove WriteLine
			}

			// TODO: if successfull
			return tshirtStub;
		}
예제 #15
0
        /// <summary>
        /// Will acess thes given file stream and save the comments back to the given clientDB
        /// </summary>
        /// <param name="input"></param>
        /// <param name="clientDb"></param>
        /// <param name="importLimit">Maximum number of comments to read in</param>
        public void ReadInComment(FileStream input, MyCouchClient clientDb, int importLimit)
        {
            Task<EntityResponse<RedditData1.Comment>> t = null;
            StreamReader sr = new StreamReader(input);
            int i = 0;
            string line;

            while ((line = sr.ReadLine()) != null && i < importLimit) {
                Comment obj = JsonConvert.DeserializeObject<Comment>(line);
                t = clientDb.Entities.PostAsync(obj);
                i++;
            }

            logger.Info("Task completed, there were " + i + " comments in this file");

            //Don't return until the last web request has completed
            if (t != null && !t.IsCompleted) Thread.Sleep(100);
        }
예제 #16
0
        protected async void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            using (var client = new MyCouchClient(CreateUri()))
            {
                await client.Database.PutAsync();
                await client.EnsureDesignDocsExists();

                //var mgr = new UserManager<ApplicationUser>(new MyCouchUserStore<ApplicationUser>(client));
                //var usr = new ApplicationUser { UserName = "******" };
                //await mgr.CreateAsync(usr, "1q2w3e4r");
                //await mgr.AddToRoleAsync(usr.Id, "SuperHeroes");
            }
        }
예제 #17
0
		public async Task<IEnumerable<TShirt>> GetAll()
		{
			Task<ViewQueryResponse<TShirt>> tshirtTask;
			ViewQueryResponse<TShirt> tshirtResult;
			List<TShirt> tshirts = null;

			// TODO: inject client or replace client with store
			using (var client = new MyCouchClient("http://localhost:5984", "cshirts")) {
				var query = new QueryViewRequest("getAllTshirts");
				tshirtTask = client.Views.QueryAsync<TShirt>(query);
			}

			tshirtResult = await tshirtTask;

			foreach (var row in tshirtResult.Rows) {				
				var tshirt = new TShirt ();
				tshirt = row.Value;
				tshirts.Add (tshirt);
			}
			Console.WriteLine (tshirts);
			return tshirts;
		}
예제 #18
0
        private async Task CheckTagsViews(MyCouchClient client, string bucketName, Dictionary<string, object> tags)
        {
            if (tags != null && tags.Count > 0)
            {
                HashSet<string> viewsCache = new HashSet<string>();


                QueryViewRequest query = new QueryViewRequest("_all_docs");
                query.StartKey = "_design/";
                query.EndKey = "_design0";

                var all =await client.Views.QueryAsync(query);
                if (!all.IsSuccess)
                    CheckBucketNotFound(bucketName, all);
                if (all.Rows != null)
                {
                    foreach (var row in all.Rows)
                    {
                        string viewName = row.Key.ToString().Replace("_design/", "");
                        viewsCache.Add(viewName);

                    }
                }


                foreach (string tagName in tags.Keys)
                {
                    string viewName = "tags_" + tagName;
                    if (!viewsCache.Contains(viewName) && tags[tagName] != null)
                    {

                        string viewJSON = @"{""_id"":""_design/" + viewName + @""",""language"":""javascript"",""views"":{""" + viewName + @""":{""map"":
                            ""function(doc) {if(doc.tags." + tagName + @"!=null)emit(doc.tags." + tagName + @", null);}""}}}";
                        var getJson = await client.Documents.PostAsync(viewJSON);
                        if (!getJson.IsSuccess)
                            CheckBucketNotFound(bucketName, getJson);
                        viewsCache.Add(viewName);



                    }
                }

            }


        }
예제 #19
0
 private async Task<SyncLogItem> GetSyncLogItem(string uploadAnchor)
 {
     if (!string.IsNullOrEmpty(uploadAnchor))
     {
         using (var clientLog = new MyCouchClient(DbServerUrl, SyncLogBucket))
         {
             var item = await clientLog.Documents.GetAsync(uploadAnchor);
             if (item.IsSuccess)
             {
                 return Newtonsoft.Json.JsonConvert.DeserializeObject<SyncLogItem>(item.Content);
             }
         }
     }
     return null;
 }
예제 #20
0
        public async Task<BatchSet> GetChanges(string bucketName, Filter query, int limit, string anchor,string uploadAnchor)
        {
            using (var client = new MyCouchClient(DbServerUrl, bucketName))
            {
                
                GetChangesRequest changesReq = new GetChangesRequest();
                changesReq.Since = anchor;
                changesReq.Limit = limit;
                changesReq.IncludeDocs = true;
                var response = await client.Changes.GetAsync(changesReq);
                if (response.IsSuccess)
                {
                    BatchSet changeSet = new BatchSet();
                    if (response.Results != null)
                    {
                        SyncLogItem logItem = await this.GetSyncLogItem(uploadAnchor);

                        foreach (var row in response.Results)
                        {

                            if (row.Deleted)
                            {
                                this.AddDeletedDoc(changeSet, row, logItem);
                            }
                            else
                            {
                                this.AddChangedDoc(changeSet, row, logItem, query,client.Serializer );
                            }
                        }
                        changeSet.Anchor = response.LastSeq;
                    }

                    return changeSet;
                }
                else CheckBucketNotFound(bucketName, response);
                return null;

            }
        
        }
예제 #21
0
        public async Task<string> GetSecretAccessKey(string accessKeyId)
        {
            using (var client = new MyCouchClient(DbServerUrl, AccessKeysBucket))
            {
                var response = await client.Documents.GetAsync(accessKeyId);
                if (response.IsSuccess)
                {
                    var size = response.Content == null ? 0 : response.Content.Length;

                    if (size == 0) return null;
                    var doc = client.Serializer.Deserialize<AccessKey>(response.Content);
                    return doc.secretkey;
                }
                
            }
            return null;
        }
 /// <summary>
 /// Function in <see cref="LocalDB"/> to transmit a single <see cref="Record"/>.
 /// </summary>
 /// <param name="client">Target <see cref="MyCouchClient"/></param>
 /// <param name="record"><see cref="Record"/> to transmit</param>
 public static async void Transmit(MyCouchClient client, Record record)
 {
     MyCouch.Requests.PostEntityRequest<Record> insert = new MyCouch.Requests.PostEntityRequest<Record>(record);
     MyCouch.Responses.EntityResponse<Record> reponse = await client.Entities.PostAsync(insert);
 }
        public static List<MyCouch.Responses.EntityResponse<Record>> GetRecords(MyCouchClient client,bool uselessbool)
        {
            List<MyCouch.Responses.EntityResponse<Record>> list = new List<MyCouch.Responses.EntityResponse<Record>>();
            var query = new MyCouch.Requests.QueryViewRequest("view2", "fertigeRecords");

            try
            {
                var response = client.Views.QueryAsync<Record>(query);

                for (int i = 0; i < response.Result.RowCount; i++)
                {
                    MyCouch.Responses.EntityResponse<Record> recordresponse = copyEntry(response.Result.Rows[i].Id);
                    list.Add(recordresponse);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                return null;
            }
            return list;
        }
예제 #24
0
 public CouchDBBenchmark(MyCouchClient db)
 {
     this.rng = new Random();
     this.db = db;
 }
예제 #25
0
 public TrafficCollection()
 {
     _client = new MyCouchClient("http://db-couchdb.cloudapp.net:5984", "bekk4");
 }
예제 #26
0
        private async Task StartRebuildViews(MyCouchClient client, SiaqodbDocument crObjForUpdateViews)
        {
            //force building the index at Store time avoiding to wait on Query time
            if (crObjForUpdateViews.Tags != null)
            {
                foreach (string tagName in crObjForUpdateViews.Tags.Keys)
                {
                    string viewName = "tags_" + tagName;
                    QueryViewRequest query = new QueryViewRequest(viewName, viewName);
                    query.Stale = Stale.UpdateAfter;
                    query.Limit = 1;
                    var res = await client.Views.QueryAsync(query);

                }
            }
        }
예제 #27
0
        public async Task<BatchResponse> Store(string bucketName, BatchSet batch)
        {
            using (var client = new MyCouchClient(DbServerUrl, bucketName))
            {

                var dbExists= await client.Database.HeadAsync();
                if (dbExists.IsSuccess)
                {
                    BulkRequest bulkRequest = new BulkRequest();

                    DateTime start = DateTime.Now;
                    int size = 0;
                    SiaqodbDocument crObjForUpdateViews = null;
                    if (batch.ChangedDocuments != null)
                    {
                        foreach (SiaqodbDocument obj in batch.ChangedDocuments)
                        {
                            if (obj != null)
                            {
                                if (crObjForUpdateViews == null)
                                    crObjForUpdateViews = obj;

                                await CheckTagsViews(client, bucketName, obj.Tags);
                                CouchDBDocument doc = Mapper.ToCouchDBDoc(obj);
                                var serializedObject = client.Serializer.Serialize<CouchDBDocument>(doc);
                                bulkRequest.Include(serializedObject);
                                size += serializedObject.Length;
                            }
                        }
                    }
                    if (batch.DeletedDocuments != null)
                    {
                        foreach (DeletedDocument obj in batch.DeletedDocuments)
                        {
                            if (obj != null)
                            {
                                if (obj.Version != null)//otherwise means is a non-existing object
                                {
                                    bulkRequest.Delete(obj.Key, obj.Version);
                                }
                            }

                        }
                    }
                    var response = await client.Documents.BulkAsync(bulkRequest);
                    if (response.IsSuccess)
                    {
                        var cnorResponse = new BatchResponse();
                        if (response.Rows != null)
                        {
                            cnorResponse.BatchItemResponses = new List<BatchItemResponse>();
                            SyncLogItem syncLogItem = new SyncLogItem();
                            syncLogItem.KeyVersion = new Dictionary<string, string>();
                            foreach (var row in response.Rows)
                            {
                                BatchItemResponse wresp = new BatchItemResponse();
                                if (!string.IsNullOrEmpty(row.Error))
                                {
                                    cnorResponse.ItemsWithErrors++;
                                }
                                wresp.Error = row.Error;
                                wresp.ErrorDesc = row.Reason;
                                wresp.Key = row.Id;
                                wresp.Version = row.Rev;
                                cnorResponse.BatchItemResponses.Add(wresp);
                                if (string.IsNullOrEmpty(row.Error))
                                {
                                    syncLogItem.KeyVersion.Add(row.Id, row.Rev);
                                }
                            }
                            if (syncLogItem.KeyVersion.Count > 0)
                            {
                                syncLogItem.TimeInserted = DateTime.UtcNow;
                                using (var clientLog = new MyCouchClient(DbServerUrl, SyncLogBucket))
                                {
                                    string serLogItem = Newtonsoft.Json.JsonConvert.SerializeObject(syncLogItem);
                                    var logResp = await clientLog.Documents.PostAsync(serLogItem);
                                    cnorResponse.UploadAnchor = logResp.Id;
                                }
                            }
                        }
                        if (crObjForUpdateViews != null)
                        {
                            await this.StartRebuildViews(client, crObjForUpdateViews);
                        }

                        return cnorResponse;
                    }
                    else CheckBucketNotFound(bucketName, response);
                }
                else if (dbExists.StatusCode == System.Net.HttpStatusCode.NotFound)
                {
                    throw new BucketNotFoundException(bucketName);
                }
                return null;

            }
        }
예제 #28
0
 public CouchDBFixtures(MyCouchClient db)
 {
     this.rng = new Random();
     this.db = db;
 }
예제 #29
0
        static void MainAsync(string[] args)
        {
            // Display banner
            Console.WriteLine("╔═══════════════════════════════════════╗");
            Console.WriteLine("║         taskwatcher for ADAI          ║");
            Console.WriteLine("╚═══════════════════════════════════════╝");
            Console.WriteLine();

            // Collect credentials
            Console.Write("Enter username for " + DB + ": ");
            username = Console.ReadLine();
            Console.Write("Enter password (hidden): ");
            password = GetPassword();

            // Compose connection string
            connString = "Data Source=" + DB + "; User Id=" + username + "; Password="******"http://www.zeropumpkin.iriscouch.com/taskwatcher-fmb"))
            {
                // Connection never times out, since we use a continuous change feed
                Timeout = TimeSpan.FromMilliseconds(System.Threading.Timeout.Infinite)
            };

            //MyCouchClientBootstrapper bootstrapper = new MyCouchClientBootstrapper();
            //bootstrapper.DbConnectionFn = new Func<ConnectionInfo, IDbConnection>(ProxyDbConnection);

            using (MyCouchClient couch = new MyCouchClient(connInfo))
            {
                Console.Write("Checking remote DB...");

                // Create the database if it does not exist
                couch.Database.PutAsync().Wait();

                Task<DocumentHeaderResponse> headTask = couch.Documents.HeadAsync("_design/tasks");
                headTask.Wait();

                // Create design document with tasks view
                if (!headTask.Result.IsSuccess)
                {
                    string taskDesignDoc = "{ \"language\": \"javascript\", \"views\": { \"tasks\": { \"map\": \"function(doc) { if (doc.$doctype != 'adaiTask') return; emit(doc._id, { 'rev': doc._rev }); }\" } } }";
                    couch.Documents.PutAsync("_design/tasks", taskDesignDoc).Wait();
                }

                Console.WriteLine("exists");

                //using (MyCouchStore store = new MyCouchStore(couch))
                //{
                //    while (true)
                //    {
                //        Console.Write("Enter task ID: ");
                //        string taskID = Console.ReadLine();

                //        //ADAITask t = await store.GetByIdAsync<ADAITask>(taskID);

                //        ADAITask t = new ADAITask(Int32.Parse(taskID));
                //        t.LastUpdated = DateTime.Now;

                //        Console.WriteLine("Storing doc...");
                //        Task<ADAITask> task = store.StoreAsync(t);
                //        task.Wait();
                //        Console.WriteLine("Doc stored: " + t._id);
                //    }
                //}

                //// First get the changes feed to get the last seq nr
                //GetChangesRequest getChangesRequest = new GetChangesRequest
                //{
                //    Feed = ChangesFeed.Normal
                //};

                //Task<ChangesResponse> changesTask = couch.Changes.GetAsync(getChangesRequest);
                //changesTask.Wait();
                //string lastSeqNr = changesTask.Result.LastSeq;

                // Start timer - callback is called immediately
                workTimer = new Timer(WorkTimerCallback, couch, 0, TIMER_PERIOD);

                //// Now start continuous observation using the last seq nr
                //getChangesRequest = new GetChangesRequest
                //{
                //    Feed = ChangesFeed.Continuous,
                //    Since = lastSeqNr
                //};
                //CancellationToken cancellationToken = new CancellationToken();
                //IObservable<string> changes = couch.Changes.ObserveContinuous(getChangesRequest, cancellationToken);

                //changeObserver = new ChangeObserver(workTimer, TIMER_PERIOD);
                //changes.Subscribe(changeObserver);
                //Debug.WriteLine("Started continuous observation, from seq nr " + lastSeqNr);

                while (true)
                {
                    // Do nothing
                }
            }
        }
예제 #30
0
        public async Task<StoreResponse> Store(string bucketName, SiaqodbDocument document)
        {
            using (var client = new MyCouchClient(DbServerUrl, bucketName))
            {
                
                await CheckTagsViews(client, bucketName, document.Tags);
                CouchDBDocument doc = Mapper.ToCouchDBDoc(document);
                var serializedObj = client.Serializer.Serialize<CouchDBDocument>(doc);

                var response = await client.Documents.PostAsync(serializedObj);
                if (response.IsSuccess)
                {
                    var cnorResponse = new StoreResponse();
                    cnorResponse.Version = response.Rev;
                    cnorResponse.Key = response.Id;

                    await this.StartRebuildViews(client, document);
                    
                    return cnorResponse;
                }
                else if (response.StatusCode == System.Net.HttpStatusCode.NotFound)
                {
                    throw new BucketNotFoundException(bucketName);
                }
                else if (response.StatusCode == System.Net.HttpStatusCode.Conflict)
                {
                    throw new ConflictException(response.Reason);
                }
                else throw new GenericCouchDBException(response.Reason, response.StatusCode);
            }
        }
 /// <summary>
 /// Function in <see cref="LocalDB"/> to transmit all <see cref="Record"/>s in <see cref="LocalDB.Recordqueue"/> to the <see cref="MyCouchClient"/> every 10 seconds.
 /// </summary>
 /// <param name="client"><see cref="MyCouchClient"/></param>
 public static void Transmitter(MyCouchClient client)
 {
     while (true)
     {
         while (Recordqueue.Count >= 1)
         {
             Record queueitem = Recordqueue.Dequeue();
             Record record;
             if (checkRecords(queueitem.kartenNummer, out record))
             {
                 Notification.playsound(2);
                 record.completeRecord(queueitem.readerIDKommen, queueitem.kommen);
                 Transmit(client, record);
             }
             else
             {
                 Notification.playsound(1);
                 Transmit(client, queueitem);
             }
         }
     }
 }