public static void CleanCoupons(CancellationToken ct)
        {
            using (var ds = DocumentStoreLocator.ResolveOrRoot(CommonConfiguration.CoreDatabaseRoute))
            {
                var expired = (from c in ds.Query <Coupon>() where c.Expiration < DateTime.UtcNow select c).Take(512);

                if (ct.IsCancellationRequested)
                {
                    return;
                }

                expired.ForEach(ex => ds.Delete(ex));


                if (ct.IsCancellationRequested)
                {
                    return;
                }

                var expiredAC =
                    (from a in ds.Query <AuthorizationCode>() where a.ExpirationTime < DateTime.UtcNow select a).Take(512);

                if (ct.IsCancellationRequested)
                {
                    return;
                }

                expiredAC.ForEach(ex => ds.Delete(ex));


                ds.SaveChanges();
            }
        }
Exemple #2
0
        public void Reschedule(ScheduledItem item)
        {
            try
            {
                using (var ds = DocumentStoreLocator.ResolveOrRoot(CommonConfiguration.CoreDatabaseRoute))
                {
                    var loadedItem = ds.Load <ScheduledItem>(DataDocument.GetDocumentId(item));

                    if (!string.IsNullOrWhiteSpace(loadedItem.Recurrence))
                    {
                        Recurrence r             = JsonConvert.DeserializeObject <Recurrence>(loadedItem.Recurrence);
                        DateTime   nextOccurence = r.GetNextRecurrence();


                        ds.Store(
                            new ScheduledItem(loadedItem.UniqueName, loadedItem.Message, loadedItem.Type, loadedItem.Route,
                                              nextOccurence, r));
                    }

                    ds.Delete(loadedItem);

                    ds.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                var aa = Catalog.Factory.Resolve <IApplicationAlert>();
                aa.RaiseAlert(ApplicationAlertKind.System, ex.TraceInformation());
            }
        }
Exemple #3
0
 /// <summary>
 /// Get all registered items for the current tenant
 /// </summary>
 /// <returns></returns>
 public IEnumerable <Lok.Unik.ModelCommon.ItemRegistration.ItemRegistration> GetAll()
 {
     using (var session = DocumentStoreLocator.ResolveOrRoot(CommonConfiguration.CoreDatabaseRoute))
     {
         return(GetAll(session));
     }
 }
 public User GetById(Guid userId)
 {
     using (var session = DocumentStoreLocator.ResolveOrRoot(CommonConfiguration.CoreDatabaseRoute))
     {
         return(GetById(userId, session));
     }
 }
        public void ChangeRoleUser(Guid userId, string newRoleToChange, string userEmail, ApplicationUser changingUser)
        {
            var aUser = GetCompleteUserQuery(userId);

            using (var session = DocumentStoreLocator.ResolveOrRoot(CommonConfiguration.CoreDatabaseRoute))
            {
                var newRole = session.Load <ApplicationRole>(newRoleToChange);

                if (changingUser.Tenancy.Equals(DefaultRoles.SuperAdmin, StringComparison.OrdinalIgnoreCase))
                {
                    //    //no send invitation..
                    var invitation = new InvitationManager().GetInvitationByEmail(userEmail);

                    if (invitation != null)
                    {
                        var current = session.Load <Invitation>(invitation.Id);
                        current.Role = newRole.Name;
                        session.SaveChanges();
                    }
                }
                else
                {
                    //tenant
                    var invitation = new InvitationManager().GetInvitationByEmail(aUser.AppUser.ContactEmail);

                    if (invitation != null)
                    {
                        using (var nctxs = ContextRegistry.NamedContextsFor(this.GetType()))
                        {
                            using (var sessionInv = DocumentStoreLocator.ContextualResolve())
                            {
                                var current = sessionInv.Load <Invitation>(invitation.Id);
                                current.Role = newRole.Name;
                                sessionInv.SaveChanges();
                            }
                        }
                    }
                }

                if (aUser.AppUser == null)
                {
                    return;
                }
                if (aUser.AppUser.AccountRoles == null)
                {
                    return;
                }


                var currentUser = session.Load <ApplicationUser>(aUser.AppUser.Id);

                if (newRole != null && !currentUser.AccountRoles.Contains(newRole.Id))
                {
                    //Changing current role by the new one
                    currentUser.AccountRoles.Clear();
                    currentUser.AccountRoles.Add(newRole.Id);
                }
                session.SaveChanges();
            }
        }
        public void DeleteLibrary(string id)
        {
            using (var cntx = ContextRegistry.NamedContextsFor(this.GetType()))
            {
                using (var session = DocumentStoreLocator.ContextualResolve())
                {
                    var libs = from q in session.Query <Lok.Unik.ModelCommon.Client.ContentLibrary>() select q;

                    var lib = libs.ToArray().FirstOrDefault(x => x.Id.ToString() == id);

                    if (lib != null)
                    {
                        foreach (var item in lib.Files)
                        {
                            var relativePath = Path.Combine(lib.BasePath, string.Format("{0}.zip", item.Id));
                            if (File.Exists(relativePath))
                            {
                                File.Delete(relativePath);
                            }
                            _log.InfoFormat("Deleting {0} stored at {1}", lib.Title, lib.BasePath);
                        }
                    }

                    session.Delete(lib);
                    if (lib != null)
                    {
                        _log.InfoFormat("{0} Library has been deleted successfully", lib.Title);
                    }
                    session.SaveChanges();
                }
            }
        }
        public void DeleteUserRole(string id)
        {
            using (var cntx = ContextRegistry.NamedContextsFor(this.GetType()))
            {
                using (var session = DocumentStoreLocator.ContextualResolve())
                {
                    var query =
                        (from libs in session.Query <Lok.Unik.ModelCommon.Client.ContentLibrary>() select libs)
                        .ToArray();

                    var temp = query;

                    for (var i = 0; i < temp.Length; i++)
                    {
                        for (var j = 0; j < temp[i].InvitedUsers.Count; j++)
                        {
                            var users = new UserManager().GetAll();

                            foreach (var user in users)
                            {
                                if (user.Id.ToString().Equals(id))
                                {
                                    query[i].InvitedUsers.RemoveAt(j);
                                }
                            }
                        }
                    }

                    session.SaveChanges();
                }
            }
        }
        public bool SendInvitationEmail(string sendTo, Uri currentUrl, ApplicationUser currentUser, string tenancy)
        {
            using (ContextRegistry.NamedContextsFor(GetType()))
            {
                using (var session = DocumentStoreLocator.ContextualResolve())
                {
                    var invitation =
                        session.Query <Invitation>().FirstOrDefault(
                            i => i.SentTo == sendTo && i.Status != InvitationStatus.Deleted);

                    if (invitation == null)
                    {
                        return(false);
                    }

                    if (currentUrl != null)
                    {
                        var emailSender = this.CreateEmailSender(
                            invitation.SentTo, invitation.Tenancy, invitation.AuthorizationCode.UrlEncodedCode, currentUrl);
                        emailSender.Send();
                    }

                    invitation.DateSent = DateTime.UtcNow;
                    invitation.Status   = invitation.ResentTimes > 0 ? InvitationStatus.ReSent : InvitationStatus.Sent;
                    invitation.ResentTimes++;
                    invitation.InvitingUserId = currentUser.PrincipalId;
                    session.SaveChanges();

                    new UserManager().SetStatusUserByPrincipalId(invitation.AcceptingAppUserId);
                    return(true);
                }
            }
        }
        public bool DeleteById(Guid id)
        {
            using (var mainSession = DocumentStoreLocator.ResolveOrRoot(CommonConfiguration.CoreDatabaseRoute))
            {
                using (var session = ReturnContext())
                {
                    var invitation =
                        session.Query <Invitation>().SingleOrDefault(i => i.Id == id && i.Status != InvitationStatus.Deleted);

                    if (invitation != null)
                    {
                        invitation.Status = InvitationStatus.Deleted;

                        var user    = mainSession.Load <User>(invitation.AcceptingUserId);
                        var appUser = mainSession.Load <ApplicationUser>(user.AppUserId);

                        appUser.Status = UserStatus.Deleted;
                        mainSession.SaveChanges();

                        session.SaveChanges();
                        return(true);
                    }
                }
            }
            return(false);
        }
        public IEnumerable <Tag> GetTagsFromContentPackage()
        {
            var tags = new List <Tag>();

            using (var ntx = ContextRegistry.NamedContextsFor(this.GetType()))
            {
                using (var session = DocumentStoreLocator.ContextualResolve())
                {
                    var query =
                        (from packages in session.Query <Lok.Unik.ModelCommon.Client.ContentPackage>() select packages).
                        ToArray();

                    //foreach (var contentPackage in query)
                    //{
                    //    tags.AddRange(contentPackage.Tags.Select(tag => new Models.Tag
                    //    {
                    //        Id = tag.Id,
                    //        Name = tag.Attribute,
                    //        Type = tag.Type.ToString(),
                    //        Category = tag.Category.Name,
                    //        CreateDate = tag.CreateDate,
                    //        Color = tag.Category.Color.ToString()
                    //    }));
                    //}

                    return(tags);
                }
            }
        }
Exemple #11
0
        public static void AuthorizeForRole(string role)
        {
            var pctx = ContextRegistry.ContextsOf("Principal").FirstOrDefault();

            if (null == pctx)
            {
                throw new AuthenticationException("No authenticated identity");
            }

            var id = pctx.Segments.First();

            ApplicationPrincipal pr;

            if (!_cachedPrincipals.MaybeGetItem(id, out pr))
            {
                using (
                    var dc =
                        DocumentStoreLocator.ResolveOrRoot(
                            ContextualAuthorizationConfiguration.PrincipalsStore))
                {
                    pr = dc.Load <ApplicationPrincipal>(id);
                    _cachedPrincipals.Add(id, pr);
                }
            }

            if (!pr.IsInRole(role))
            {
                throw new SecurityException(string.Format("principal {0} is not in role {1}", id, role));
            }
        }
        public void DeletePackage(string id)
        {
            using (var cntx = ContextRegistry.NamedContextsFor(this.GetType()))
            {
                using (var session = DocumentStoreLocator.ContextualResolve())
                {
                    var query =
                        (from packs in session.Query <Lok.Unik.ModelCommon.Client.ContentPackage>() select packs)
                        .ToArray()
                        .FirstOrDefault(x => x.Id.ToString() == id);

                    session.Delete(query);
                    session.SaveChanges();

                    if (query != null)
                    {
                        var objPath = Path.Combine(query.ConfigurationRelativePath, string.Format("{0}.zip", query.Id));
                        if (File.Exists(objPath))
                        {
                            File.Delete(objPath);
                            _log.InfoFormat("{0} has been deleted and removed from '{1}'", query.Name, objPath);
                        }
                    }
                }
            }
        }
        public DatabaseInfo GetDataBaseConfiguration(string id)
        {
            using (var session = DocumentStoreLocator.Resolve(DocumentStoreLocator.RootLocation))
            {
                var dataBaseInfo = session.Load <DatabaseInfo>(id);

                if (dataBaseInfo == null)
                {
                    var cf = GetGlobalConfig();

                    var url = ErrorLoadingConfigValue;
                    if (cf.ContainsKey(GlobalConfigItemEnum.DefaultDataConnection.EnumName()))
                    {
                        url = cf[GlobalConfigItemEnum.DefaultDataConnection.EnumName()].Value;
                    }

                    return(new DatabaseInfo
                    {
                        Url = url
                    });
                }

                return(dataBaseInfo);
            }
        }
        public void SaveDatabaseConfiguration(string id, DatabaseInfo data)
        {
            using (var session = DocumentStoreLocator.Resolve(DocumentStoreLocator.RootLocation))
            {
                var database = session.Load <DatabaseInfo>(id);

                if (database == null)
                {
                    database = new DatabaseInfo
                    {
                        Application           = "Control Aware",
                        DatabaseSchemaVersion = "1.0.0.0",
                        InstallDate           = DateTime.UtcNow,
                        Url = data.Url,
                    };

                    session.Store(database);
                }

                database.Url = data.Url;
                session.SaveChanges();
            }

            SaveGlobalConfigItem(new GlobalConfigItem
            {
                Name  = GlobalConfigItemEnum.DefaultDataConnection.EnumName(),
                Value = data.Url
            }, GlobalConfigItemEnum.DefaultDataConnection.EnumName());
        }
Exemple #15
0
        public static void CreateIndexes()
        {
            using (var nctxs = ContextRegistry.NamedContextsFor(typeof(DeviceManager)))
            {
                using (var session = DocumentStoreLocator.ContextualResolve())
                {
                    var config = Catalog.Factory.Resolve <IConfig>();
                    var dbName = config[CommonConfiguration.DefaultDataDatabase];

                    var tenancyUris = ContextRegistry.ContextsOf("Tenancy");
                    if (tenancyUris.Any())
                    {
                        var tenancyUri = tenancyUris.First();
                        var tenancy    = tenancyUri.Segments.Count() > 1 ? tenancyUri.Segments[1] : string.Empty;

                        if (!string.IsNullOrEmpty(tenancy)
                            &&
                            !tenancy.Equals(Tenants.SystemOwner, StringComparison.InvariantCultureIgnoreCase))
                        {
                            dbName = tenancy;
                        }
                    }

                    var store = session.Advanced.DocumentStore;
                    IndexesManager.CreateIndexes(store, dbName, typeof(AllDeviceIndex));
                }
            }
        }
        public Invitation GetInvitationByAuthCode(string code)
        {
            var invitingTenant = InvitationAuthCode.GetInvitingTenancyFromCode(code);

            if (!string.IsNullOrEmpty(invitingTenant))
            {
                Invitation invitation;

                using (
                    var session = invitingTenant.Equals(
                        DefaultRoles.SuperAdmin, StringComparison.InvariantCultureIgnoreCase)
                                      ? DocumentStoreLocator.ResolveOrRoot(CommonConfiguration.CoreDatabaseRoute)
                                      : DocumentStoreLocator.Resolve(
                        string.Format(
                            "{0}{1}/{2}",
                            DocumentStoreLocator.SchemeRavenRoute,
                            UnikContextTypes.UnikTenantContextResourceKind,
                            invitingTenant)))
                {
                    invitation = SearchInvitationByCode(code, session);
                }

                return(invitation);
            }

            return(null);
        }
Exemple #17
0
        private static void DeviceHealthStatusInitialize(Kiosk dev)
        {
            using (
                var ctx =
                    ContextRegistry.NamedContextsFor(ContextRegistry.CreateNamed(ContextRegistry.Kind,
                                                                                 UnikContextTypes.
                                                                                 UnikWarehouseContextResourceKind)))
            {
                using (var dc = DocumentStoreLocator.ContextualResolve())
                {
                    var deviceHealthChangeEvt = new DeviceHealthStatusEvent
                    {
                        DeviceId    = dev.Id,
                        DeviceName  = dev.Name,
                        From        = HealthStatus.Unknown,
                        To          = HealthStatus.Green,
                        DeviceTags  = dev.Tags,
                        TimeChanged = DateTime.UtcNow
                    };

                    dc.Store(deviceHealthChangeEvt);
                    dc.SaveChanges();
                }
            }
        }
        public bool UserHasInvitation(string contactEmail, string tenancy, out string code)
        {
            bool existInvitation;

            using (var session = DocumentStoreLocator.ResolveOrRoot(CommonConfiguration.CoreDatabaseRoute))
            {
                existInvitation = ExistValidInvitation(contactEmail, tenancy, session, out code);
            }

            if (!existInvitation)
            {
                if (!DefaultRoles.SuperAdmin.Equals(tenancy, StringComparison.InvariantCultureIgnoreCase))
                {
                    using (ContextRegistry.NamedContextsFor(GetType()))
                    {
                        using (var session1 = DocumentStoreLocator.ContextualResolve())
                        {
                            existInvitation = ExistValidInvitation(contactEmail, tenancy, session1, out code);
                        }
                    }
                }
            }

            return(existInvitation);
        }
        public void DeleteItemPackage(string id)
        {
            using (var cntx = ContextRegistry.NamedContextsFor(this.GetType()))
            {
                using (var session = DocumentStoreLocator.ContextualResolve())
                {
                    var libTarget =
                        (from libs in session.Query <Lok.Unik.ModelCommon.Client.ContentLibrary>()
                         where libs.Files.Any(file => file.Id == Guid.Parse(id))
                         select libs)
                        .FirstOrDefault();

                    if (libTarget != null)
                    {
                        var tempItem = libTarget.Files.FirstOrDefault(file => file.Id == Guid.Parse(id));

                        if (tempItem != null)
                        {
                            var objPath = Path.Combine(libTarget.BasePath, string.Format("{0}.zip", tempItem.Id));
                            if (File.Exists(objPath))
                            {
                                File.Delete(objPath);
                                _log.InfoFormat("'{0}' LibraryItem has been removed from '{1}'", tempItem.Title, objPath);
                            }

                            libTarget.Files.Remove(tempItem);
                        }
                    }

                    session.SaveChanges();
                }
            }
        }
        public string GetRoleInvitationForUser(string relationshipAppUserId)
        {
            string roleInvitation;

            using (var session = DocumentStoreLocator.ResolveOrRoot(CommonConfiguration.CoreDatabaseRoute))
            {
                roleInvitation = GetRoleInvitationFromUserId(relationshipAppUserId, session);
            }

            if (roleInvitation == null
                &&
                !TenantManager.CurrentTenancy.Equals(
                    DefaultRoles.SuperAdmin,
                    StringComparison.OrdinalIgnoreCase))
            {
                using (ContextRegistry.NamedContextsFor(GetType()))
                {
                    using (var session = DocumentStoreLocator.ContextualResolve())
                    {
                        roleInvitation = GetRoleInvitationFromUserId(relationshipAppUserId, session);
                    }
                }
            }

            return(roleInvitation);
        }
        public void SaveUser(User user, ApplicationUser creatorPrincipal)
        {
            using (var session = DocumentStoreLocator.ResolveOrRoot(CommonConfiguration.CoreDatabaseRoute))
            {
                //check if two documents with a reference are stored.
                if (user.AppUser != null)
                {
                    session.Store(user.AppUser);
                    user.AppUserId = user.AppUser.PrincipalId;
                }

                //Add a default Tag at Create Action
                if (user.AppUser != null)
                {
                    user.Tags.Add(new TagManager().AddDefault <User>(user.AppUser.UserName, user.Id.ToString(),
                                                                     creatorPrincipal.Id));
                }

                //it should create an Id if it is empty
                session.Store(user);

                if (user.AppUser != null)
                {
                    user.AppUser.ContainerId = string.Format("Users/{0}", user.Id);
                }
                session.SaveChanges();
            }
        }
Exemple #22
0
        public void CreateDefaultCategories()
        {
            using (var session = DocumentStoreLocator.ResolveOrRoot(CommonConfiguration.CoreDatabaseRoute))
            {
                if (session.Query <TagCategory>().ToList().Any())
                {
                    return;
                }

                var newCategories = new List <TagCategory>
                {
                    new TagCategory {
                        Color = KnownColor.Red, Name = "Style"
                    },
                    new TagCategory {
                        Color = KnownColor.Blue, Name = "LocationType"
                    },
                    new TagCategory {
                        Color = KnownColor.Green, Name = "Site"
                    },
                    new TagCategory {
                        Color = KnownColor.Cyan, Name = "Model"
                    },
                    new TagCategory {
                        Color = KnownColor.Magenta, Name = "Location"
                    }
                };

                AddTagCategories(newCategories, session);
            }
        }
        private static User GetCompleteUserQuery(Guid userId)
        {
            User aUser;

            using (var session = DocumentStoreLocator.ResolveOrRoot(CommonConfiguration.CoreDatabaseRoute))
            {
                //aUser =
                //    session.Query<User>().Customize(x => x.Include<User>(u => u.AppUserId)).FirstOrDefault(
                //        x => x.Id == userId);
                aUser = session.Include("AppUserId").Load <User>(userId);

                // aUser = session.Load<User>(userId).Customize(x => x.Include<User>(u => u.AppUserId));
                if (aUser == null)
                {
                    throw new ApplicationException("User not found " + userId);
                }

                var appUser = session.Load <ApplicationUser>(aUser.AppUserId);
                //aUser.AppUser = session.Load<ApplicationUser>(aUser.AppUserId);

                if (appUser == null)
                {
                    throw new ApplicationException("Application User not found " + aUser.AppUserId);
                }

                aUser.AppUser = appUser;
            }
            return(aUser);
        }
Exemple #24
0
 public IEnumerable <TagCategory> GetAll()
 {
     using (var session = DocumentStoreLocator.ResolveOrRoot(CommonConfiguration.CoreDatabaseRoute))
     {
         return(session.Query <TagCategory>().ToArray());
     }
 }
        public void ListTagMapping(Guid id, List <string> select)
        {
            var aUser = GetById(id);

            using (var session = DocumentStoreLocator.ResolveOrRoot(CommonConfiguration.CoreDatabaseRoute))
            {
                var tags       = GetTagsFromUser();
                var defaultTag = aUser.Tags.FirstOrDefault(t => t.Category.Color == KnownColor.Transparent);
                aUser.Tags.Clear();
                aUser.Tags.Add(defaultTag);
                if (select.Count != 0)
                {
                    foreach (var name in select)
                    {
                        if (!string.IsNullOrEmpty(name))
                        {
                            aUser.Tags.Add(tags.FirstOrDefault(x => x.Value.Equals(name)));
                        }
                    }
                }

                var        current = session.Load <User>(aUser.Id);
                List <Tag> userTag = aUser.Tags.Distinct().ToList();
                current.Tags = userTag;
                session.SaveChanges();
            }
        }
Exemple #26
0
 public void AddTagCategories(IEnumerable <TagCategory> newCategories)
 {
     using (var session = DocumentStoreLocator.ResolveOrRoot(CommonConfiguration.CoreDatabaseRoute))
     {
         AddTagCategories(newCategories, session);
     }
 }
Exemple #27
0
        public void ScheduleJobOnlyOnce <T>(string uniqueName, T jobInfo, DateTime schedule, Recurrence r = null,
                                            string jobRoute = null) where T : class
        {
            Debug.Assert(null != jobInfo);

            bool exists;

            using (var ds = DocumentStoreLocator.ResolveOrRoot(CommonConfiguration.CoreDatabaseRoute))
            {
                exists = ds.Query <ScheduledItem>().Any(i => i.UniqueName == uniqueName);
            }

            if (!exists)
            {
                var log = ClassLogger.Create(typeof(JobDocumentsScheduler));


                log.InfoFormat("Scheduling job: {0} at time {1}, recurring: {2}, route = {3}", jobInfo, schedule,
                               r == null ? string.Empty : r.ToString(), jobRoute);

                using (var ds = DocumentStoreLocator.ResolveOrRoot(CommonConfiguration.CoreDatabaseRoute))
                {
                    ds.Store(new ScheduledItem(uniqueName, JsonConvert.SerializeObject(jobInfo, _settings),
                                               typeof(T), jobRoute, schedule, r));
                    ds.SaveChanges();
                }
            }
        }
Exemple #28
0
        public IDevice SaveNewDevice(IDevice deviceDb)
        {
            using (var nctxs = ContextRegistry.NamedContextsFor(this.GetType()))
            {
                using (var session = DocumentStoreLocator.ContextualResolve())
                {
                    var objId = Guid.NewGuid();
                    deviceDb.Id = objId;

                    deviceDb.Tags.Add(new Tag
                    {
                        Id         = Guid.NewGuid(),
                        Type       = TagType.Device,
                        Attribute  = deviceDb.Name,
                        Value      = deviceDb.Name,
                        CreateDate = DateTime.UtcNow,
                        Category   = new TagCategory
                        {
                            Name  = objId.ToString(),
                            Color = CategoryColor.Default
                        }
                    });

                    session.Store(deviceDb);
                    session.SaveChanges();

                    return(deviceDb);
                }
            }
        }
Exemple #29
0
 /// <summary>
 /// Gets a registration item by id
 /// </summary>
 /// <param name="itemId"></param>
 /// <returns></returns>
 public Lok.Unik.ModelCommon.ItemRegistration.ItemRegistration GetById(Guid itemId)
 {
     using (var session = DocumentStoreLocator.ResolveOrRoot(CommonConfiguration.CoreDatabaseRoute))
     {
         return(session.Load <Lok.Unik.ModelCommon.ItemRegistration.ItemRegistration>(itemId));
     }
 }
Exemple #30
0
        public IEnumerable <Tag> GetTagsByCategoryName(EntityType entity, string categoryName)
        {
            var tags = new List <Tag>();

            using (ContextRegistry.NamedContextsFor(this.GetType()))
            {
                using (var session = DocumentStoreLocator.ResolveOrRoot(CommonConfiguration.CoreDatabaseRoute))
                {
                    switch (entity)
                    {
                    case EntityType.User:
                    {
                        var query = session.Query <User>().ToList();
                        tags.AddRange(query.SelectMany(z => z.Tags.Where(t => t.Category.Name == categoryName)).Distinct().ToList());
                    }

                    break;

                    case EntityType.ItemRegistration:
                    {
                        var query = session.Query <ItemRegistration>().ToList();
                        tags.AddRange(query.SelectMany(z => z.Tags.Where(t => t.Category.Name == categoryName)).Distinct().ToList());
                    }

                    break;
                    }
                }
            }

            return(tags);
        }