Пример #1
0
        public async void Enqueue(int batchsize)
        {
            // nieuwe dbContext opvragen
            using (SendSMSHostContext db = new SendSMSHostContext())
            {
                // De lijst van sms'en met de status Queued of Pending aanvullen tot batchSize
                // aanpassen in database + clients verwittigen

                Status statusQueued  = db.Status.FirstOrDefault(x => x.Name == "Queued");
                Status statusPending = db.Status.FirstOrDefault(x => x.Name == "Pending");
                Status statusCreated = db.Status.FirstOrDefault(x => x.Name == "Created");

                int queuedCount  = statusQueued.Sms.Count();
                int createdCount = statusCreated.Sms.Count();

                int amountToChange = 0;
                if (batchsize > queuedCount)
                {
                    amountToChange = Math.Min(batchsize - queuedCount, createdCount);
                }

                if (amountToChange > 0)
                {
                    Debug.WriteLine($"[{DateTime.Now}] Enqueuing {amountToChange} sms");


                    var changeToQueuedSmsList = statusCreated.Sms
                                                .OrderBy(z => z.TimeStamp)
                                                .Take(amountToChange)
                                                .ToList();

                    var queuedSmsDTOList = new List <SmsDTO>();
                    foreach (var sms in changeToQueuedSmsList)
                    {
                        sms.Status    = statusQueued;
                        sms.TimeStamp = DateTime.Now;
                        SmsDTO smsDTO = new SmsDTO(sms);

                        try
                        {
                            await db.SaveChangesAsync();

                            await ServerSentEventsHub.NotifyChange(_signalRContext,
                                                                   smsDTO : smsDTO,
                                                                   operation : "PUT");
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.Message);
                        }
                    }
                }
            }
        }
Пример #2
0
        public async void Import()
        {
            // nieuwe context opvragen
            using (var db = new SendSMSHostContext())
            {
                int importSmsCount = db.ImportSms.Count();
                if (importSmsCount > 0)
                {
                    Debug.WriteLine($"[{DateTime.Now}] Importing {importSmsCount} sms");

                    Status statusCreated = db.Status.FirstOrDefault(x => x.Name == "Created");

                    // eerst alle bestaande contacten zonder contactgegevens updaten waar mogelijk
                    var contactUpdateList = db.ImportSms
                                            .Where(x => !((x.ContactFirstName == null || x.ContactFirstName == "") &&
                                                          (x.ContactLastName == null || x.ContactLastName == "")))
                                            .Select(x => new
                    {
                        Number    = x.ContactNumber,
                        FirstName = x.ContactFirstName ?? String.Empty,
                        LastName  = x.ContactLastName ?? String.Empty
                    })
                                            .GroupBy(k => k.Number)
                                            .Select(g => g.FirstOrDefault())
                                            .Where(x => db.Contacts
                                                   .Where(y => y.IsAnonymous)
                                                   .Select(z => z.Number)
                                                   .Contains(x.Number))
                                            .AsEnumerable()
                                            .Select(x => new Contact
                    {
                        Id          = Guid.NewGuid(),
                        Number      = x.Number,
                        IsAnonymous = false,
                        FirstName   = x.FirstName,
                        LastName    = x.LastName
                    });

                    foreach (var contact in contactUpdateList)
                    {
                        var oldContact = db.Contacts.Single(x => x.Number == contact.Number);
                        oldContact.FirstName   = contact.FirstName;
                        oldContact.LastName    = contact.LastName;
                        oldContact.IsAnonymous = contact.IsAnonymous;
                    }

                    int contactUpdateListCount = contactUpdateList.Count();

                    // dan alle nieuwe contacten met contactgegevens aanmaken
                    var contactNameList = db.ImportSms
                                          .Where(x => !((x.ContactFirstName == null || x.ContactFirstName == "") &&
                                                        (x.ContactLastName == null || x.ContactLastName == "")))
                                          .Select(x => new
                    {
                        Number    = x.ContactNumber,
                        FirstName = x.ContactFirstName ?? String.Empty,
                        LastName  = x.ContactLastName ?? String.Empty
                    })
                                          .GroupBy(k => k.Number)
                                          .Select(g => g.FirstOrDefault())
                                          .Where(x => !db.Contacts
                                                 .Select(y => y.Number)
                                                 .Contains(x.Number))
                                          .AsEnumerable()
                                          .Select(x => new Contact
                    {
                        Id          = Guid.NewGuid(),
                        Number      = x.Number,
                        IsAnonymous = false,
                        FirstName   = x.FirstName,
                        LastName    = x.LastName
                    });

                    db.Contacts.AddRange(contactNameList);
                    int contactNameListCount = contactNameList.Count();

                    // dan alle nieuwe contacten zonder contactgegevens aanmaken
                    var contactNumberList = db.ImportSms
                                            .Where(x => (x.ContactFirstName == null || x.ContactFirstName == "") &&
                                                   (x.ContactLastName == null || x.ContactLastName == ""))
                                            .Select(x => x.ContactNumber)
                                            .Distinct()
                                            .Where(x => !db.Contacts
                                                   .Select(y => y.Number)
                                                   .Contains(x))
                                            .AsEnumerable()
                                            .Select(x => new Contact
                    {
                        Id          = Guid.NewGuid(),
                        Number      = x,
                        IsAnonymous = true
                    });

                    db.Contacts.AddRange(contactNumberList);
                    int contactNumberListCount = contactNumberList.Count();

                    try
                    {
                        await db.SaveChangesAsync();

                        Debug.WriteLine($"[{DateTime.Now}] Updated {contactUpdateListCount} anonymous contacts");
                        Debug.WriteLine($"[{DateTime.Now}] Created {contactNameListCount} new contacts");
                        Debug.WriteLine($"[{DateTime.Now}] Created {contactNumberListCount} new anonymous contacts");
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine(ex.Message);
                        throw ex;
                    }

                    // dan alle sms'en aanmaken
                    var smsToImport = db.ImportSms
                                      .AsEnumerable()
                                      .Select(x => new Sms
                    {
                        Id      = Guid.NewGuid(),
                        Contact = db.Contacts
                                  .SingleOrDefault(y => y.Number == x.ContactNumber),
                        Message   = x.Message,
                        Status    = statusCreated,
                        TimeStamp = DateTime.Now,
                    })
                                      .ToList();

                    db.Sms.AddRange(smsToImport);

                    // dan ImportSms leeg maken
                    db.ImportSms.RemoveRange(db.ImportSms);

                    try
                    {
                        await db.SaveChangesAsync();

                        Debug.WriteLine($"[{DateTime.Now}] Created {importSmsCount} new sms");

                        foreach (Sms s in smsToImport)
                        {
                            SmsDTO smsDTO = new SmsDTO(s);
                            await ServerSentEventsHub.NotifyChange(_signalRContext,
                                                                   smsDTO : smsDTO,
                                                                   operation : "POST");
                        }
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine(ex.Message);
                        throw ex;
                    }
                }
            }
        }