public void UpdatePersonLists_2Changes_NonInSubscription_NothingAddedInSubscription_And_NoNotificationCreated(string municipalityCode) { var dce = new DataChangeEvent[] { new DataChangeEvent() { PersonRegistrationId = Guid.NewGuid(), DueDate = DateTime.Now, ReceivedDate = DateTime.Now, PersonUuid = Guid.NewGuid(), DataChangeEventId = Guid.NewGuid() }, new DataChangeEvent() { PersonRegistrationId = Guid.NewGuid(), DueDate = DateTime.Now, ReceivedDate = DateTime.Now, PersonUuid = Guid.NewGuid(), DataChangeEventId = Guid.NewGuid() } }; var sub = Utils.CreateCriteriaSubscription(municipalityCode); using (var dataContext = new EventBrokerDataContext()) { dataContext.DataChangeEvents.InsertAllOnSubmit(dce); dataContext.Subscriptions.InsertOnSubmit(sub); dataContext.SubmitChanges(); } using (var dataContext = new EventBrokerDataContext()) { int records = dataContext.UpdatePersonLists(DateTime.Now, (int)Data.SubscriptionType.SubscriptionTypes.DataChange); var subscriptionPerson = dataContext.SubscriptionPersons.Where(sp => sp.SubscriptionId == sub.SubscriptionId).SingleOrDefault(); Assert.Null(subscriptionPerson); var notif = dataContext.EventNotifications.Where(en => en.SubscriptionId == sub.SubscriptionId).SingleOrDefault(); Assert.Null(notif); } }
/// <summary> /// Deletes the given subscription from the database /// </summary> /// <param name="subscriptionId"></param> /// <param name="subscriptionType"></param> /// <returns></returns> private bool DeleteSubscription(Guid subscriptionId, CprBroker.EventBroker.Data.SubscriptionType.SubscriptionTypes subscriptionType) { // Find the Subscription object and delete it and its children using (EventBrokerDataContext dataContext = new EventBrokerDataContext()) { System.Data.Linq.DataLoadOptions loadOptions = new System.Data.Linq.DataLoadOptions(); Subscription.SetLoadOptionsForChildren(loadOptions); dataContext.LoadOptions = loadOptions; var subscription = (from sub in dataContext.Subscriptions where sub.SubscriptionId == subscriptionId && !sub.Deactivated.HasValue && sub.SubscriptionTypeId == (int)subscriptionType select sub ).SingleOrDefault(); if (subscription != null) { subscription.Deactivated = DateTime.Now; dataContext.SubmitChanges(); return(true); } else { return(false); } } }
/// <summary> /// Adds a new Subscription object to the <paramref name="dataContext"/> /// This method inserts rows in Subscription, Channel (and children) and SubscriptionPerson /// A later call to SubmitChanges() is required to save to the database /// </summary> /// <param name="dataContext"></param> /// <param name="subscriptionType"></param> /// <param name="applicationId"></param> /// <param name="PersonCivilRegistrationIdentifiers"></param> /// <param name="notificationChannel"></param> /// <returns></returns> private Subscription AddSubscription(EventBrokerDataContext dataContext, CprBroker.EventBroker.Data.SubscriptionType.SubscriptionTypes subscriptionType, Guid applicationId, ChannelBaseType notificationChannel, Guid[] personUuids, SoegObjektType soegObject) { List <Guid> listOfPersonsIDs = new List <Guid>(); Subscription subscription = new Subscription(); subscription.SubscriptionId = Guid.NewGuid(); subscription.SubscriptionTypeId = (int)subscriptionType; subscription.ApplicationId = applicationId; subscription.Created = DateTime.Now; if (soegObject != null) { var xml = Strings.SerializeObject(soegObject); subscription.Criteria = System.Xml.Linq.XElement.Load(new StringReader(xml)); subscription.LastCheckedUUID = Guid.Empty; } #region Set IsForAllPersons if (personUuids != null && personUuids.Length > 0) { subscription.IsForAllPersons = false; } else { subscription.IsForAllPersons = true; } #endregion #region Set the channel var dbChannel = Channel.FromXmlType(notificationChannel); subscription.Channels.Add(dbChannel); #endregion // Mark the new objects to be inserted later dataContext.Subscriptions.InsertOnSubmit(subscription); if (!subscription.IsForAllPersons && personUuids != null) { dataContext.SubscriptionPersons.InsertAllOnSubmit( from PersonUuid in personUuids select new SubscriptionPerson() { SubscriptionPersonId = Guid.NewGuid(), SubscriptionId = subscription.SubscriptionId, PersonUuid = PersonUuid, Created = subscription.Created } ); } dataContext.Channels.InsertOnSubmit(dbChannel); return(subscription); }
public static void ClearDatabase() { using (var dataContext = new EventBrokerDataContext()) { dataContext.BirthdateEventNotifications.DeleteAllOnSubmit(dataContext.BirthdateEventNotifications); dataContext.BirthdateSubscriptions.DeleteAllOnSubmit(dataContext.BirthdateSubscriptions); dataContext.DataChangeEvents.DeleteAllOnSubmit(dataContext.DataChangeEvents); dataContext.DataSubscriptions.DeleteAllOnSubmit(dataContext.DataSubscriptions); dataContext.EventNotifications.DeleteAllOnSubmit(dataContext.EventNotifications); dataContext.SubscriptionCriteriaMatches.DeleteAllOnSubmit(dataContext.SubscriptionCriteriaMatches); dataContext.SubscriptionPersons.DeleteAllOnSubmit(dataContext.SubscriptionPersons); //dataContext.Subscriptions.DeleteAllOnSubmit(dataContext.Subscriptions); dataContext.SubmitChanges(); } }
/// <summary> /// Interface implementation /// </summary> public ChangeSubscriptionType Subscribe(ChannelBaseType notificationChannel, Guid[] personUuids) { using (EventBrokerDataContext dataContext = new EventBrokerDataContext()) { Data.Subscription subscription = AddSubscription(dataContext, Data.SubscriptionType.SubscriptionTypes.DataChange, CprBroker.Engine.BrokerContext.Current.ApplicationId.Value, notificationChannel, personUuids, null); if (subscription != null) { subscription.DataSubscription = new DataSubscription(); } dataContext.SubmitChanges(); if (subscription != null) { // Now get the subscription from the database to make sure everything is OK return(GetActiveSubscriptionsList(subscription.SubscriptionId).SingleOrDefault() as ChangeSubscriptionType); } } return(null); }
/// <summary> /// Interface implementation /// </summary> public ChangeSubscriptionType SubscribeOnCriteria(ChannelBaseType notificationChannel, SoegObjektType criteria) { using (EventBrokerDataContext dataContext = new EventBrokerDataContext()) { /* * For now we assign this data type as a data change type. */ Data.Subscription subscription = AddSubscription(dataContext, Data.SubscriptionType.SubscriptionTypes.DataChange /* May be changed later */, CprBroker.Engine.BrokerContext.Current.ApplicationId.Value, notificationChannel, new Guid[0], criteria); if (subscription != null) { subscription.DataSubscription = new DataSubscription(); } dataContext.SubmitChanges(); if (subscription != null) { // Now get the subscription from the database to make sure everything is OK return(GetActiveSubscriptionsList(subscription.SubscriptionId).SingleOrDefault() as ChangeSubscriptionType); } } return(null); }
/// <summary> /// Interface implementation /// </summary> public BirthdateSubscriptionType SubscribeOnBirthdate(ChannelBaseType notificationChannel, Nullable <int> years, int priorDays, Guid[] personUuids) { using (EventBrokerDataContext dataContext = new EventBrokerDataContext()) { Data.Subscription subscription = AddSubscription(dataContext, Data.SubscriptionType.SubscriptionTypes.Birthdate, CprBroker.Engine.BrokerContext.Current.ApplicationId.Value, notificationChannel, personUuids, null); if (subscription != null) { subscription.BirthdateSubscription = new BirthdateSubscription(); subscription.BirthdateSubscription.AgeYears = years; subscription.BirthdateSubscription.PriorDays = priorDays; } dataContext.SubmitChanges(); if (subscription != null) { // Now get the subscription from the database to make sure everything is OK return(GetActiveSubscriptionsList(subscription.SubscriptionId).SingleOrDefault() as BirthdateSubscriptionType); } } return(null); }
public void UpdatePersonLists_2Changes_1MovingIn_PersonAdded(string municipalityCode) { var dce = new DataChangeEvent[] { new DataChangeEvent() { PersonRegistrationId = Guid.NewGuid(), DueDate = DateTime.Now, ReceivedDate = DateTime.Now, PersonUuid = Guid.NewGuid(), DataChangeEventId = Guid.NewGuid() }, new DataChangeEvent() { PersonRegistrationId = Guid.NewGuid(), DueDate = DateTime.Now, ReceivedDate = DateTime.Now, PersonUuid = Guid.NewGuid(), DataChangeEventId = Guid.NewGuid() } }; var sub = Utils.CreateCriteriaSubscription(municipalityCode); sub.SubscriptionCriteriaMatches.Add(new SubscriptionCriteriaMatch() { SubscriptionCriteriaMatchId = Guid.NewGuid(), DataChangeEvent = dce[0] }); using (var dataContext = new EventBrokerDataContext()) { dataContext.DataChangeEvents.InsertAllOnSubmit(dce); dataContext.Subscriptions.InsertOnSubmit(sub); dataContext.SubmitChanges(); } using (var dataContext = new EventBrokerDataContext()) { int records = dataContext.UpdatePersonLists(DateTime.Now, (int)Data.SubscriptionType.SubscriptionTypes.DataChange); var subscriptionPersons = dataContext.SubscriptionPersons.Where(sp => sp.SubscriptionId == sub.SubscriptionId && sp.Removed == null).ToArray(); Assert.AreEqual(1, subscriptionPersons.Length); Assert.Null(subscriptionPersons[0].Removed); var notif = dataContext.EventNotifications.Where(en => en.SubscriptionId == sub.SubscriptionId).SingleOrDefault(); Assert.Null(notif); } }
public void UpdatePersonLists_2Changes_1MovingOut_PersonRemovedAndNotoficationAdded(string municipalityCode) { var dce = new DataChangeEvent[] { new DataChangeEvent() { PersonRegistrationId = Guid.NewGuid(), DueDate = DateTime.Now, ReceivedDate = DateTime.Now, PersonUuid = Guid.NewGuid(), DataChangeEventId = Guid.NewGuid() }, new DataChangeEvent() { PersonRegistrationId = Guid.NewGuid(), DueDate = DateTime.Now, ReceivedDate = DateTime.Now, PersonUuid = Guid.NewGuid(), DataChangeEventId = Guid.NewGuid() } }; var sub = Utils.CreateCriteriaSubscription(municipalityCode); sub.SubscriptionPersons.Add(new SubscriptionPerson() { SubscriptionPersonId = Guid.NewGuid(), PersonUuid = dce[0].PersonUuid, Created = DateTime.Now, Removed = null }); using (var dataContext = new EventBrokerDataContext()) { dataContext.DataChangeEvents.InsertAllOnSubmit(dce); dataContext.Subscriptions.InsertOnSubmit(sub); dataContext.SubmitChanges(); } using (var dataContext = new EventBrokerDataContext()) { int records = dataContext.UpdatePersonLists(DateTime.Now, (int)Data.SubscriptionType.SubscriptionTypes.DataChange); var subscriptionPerson = dataContext.SubscriptionPersons.Where(sp => sp.SubscriptionId == sub.SubscriptionId).Single(); Assert.NotNull(subscriptionPerson.Removed); var notif = dataContext.EventNotifications.Where(en => en.SubscriptionId == sub.SubscriptionId).Single(); Assert.NotNull(notif.IsLastNotification); Assert.True(notif.IsLastNotification.Value); } }
/// <summary> /// Retrieves the subscriptions that match the supplied criteria /// </summary> /// <param name="subscriptionId"></param> /// <returns></returns> private CprBroker.Schemas.Part.SubscriptionType[] GetActiveSubscriptionsList(Nullable <Guid> subscriptionId) { List <CprBroker.Schemas.Part.SubscriptionType> listType = new List <CprBroker.Schemas.Part.SubscriptionType>(); using (EventBrokerDataContext context = new EventBrokerDataContext()) { System.Data.Linq.DataLoadOptions loadOptions = new System.Data.Linq.DataLoadOptions(); Subscription.SetLoadOptionsForChildren(loadOptions); context.LoadOptions = loadOptions; // Create basic LINQ expression System.Linq.Expressions.Expression <Func <IQueryable <Subscription> > > exp = () => from sub in context.Subscriptions where sub.ApplicationId == CprBroker.Engine.BrokerContext.Current.ApplicationId select sub; // Add filter for subscription id (if required) IQueryable <Subscription> subscriptions; if (subscriptionId.HasValue) { subscriptions = exp.Compile()().Where((Subscription sub) => sub.SubscriptionId == subscriptionId); } else { subscriptions = exp.Compile()(); } // Now create list of OIO subscriptions foreach (var sub in subscriptions) { CprBroker.Schemas.Part.SubscriptionType subscriptionType = sub.ToOioSubscription(CprBroker.Engine.BrokerContext.Current.ApplicationToken); listType.Add(subscriptionType); } return(listType.ToArray()); } }