public virtual IList <FavoriteProject> GetFavoriteLabeledBooks(IList <long> projectIds, BookTypeEnum?bookType, ProjectTypeEnum?projectType, int userId) { FavoriteProject favoriteItemAlias = null; FavoriteLabel favoriteLabelAlias = null; Project projectAlias = null; Snapshot latestSnapshotAlias = null; BookType bookTypeAlias = null; var restriction = Restrictions.Disjunction(); if (projectIds.Count > 0) { restriction.Add(Restrictions.InG(Projections.Property(() => projectAlias.Id), projectIds)); } if (bookType != null) { restriction.Add(() => bookTypeAlias.Type == bookType.Value); } var query = GetSession().QueryOver(() => favoriteItemAlias) .JoinAlias(() => favoriteItemAlias.FavoriteLabel, () => favoriteLabelAlias) .JoinAlias(() => favoriteItemAlias.Project, () => projectAlias) .JoinAlias(() => projectAlias.LatestPublishedSnapshot, () => latestSnapshotAlias) .JoinAlias(() => latestSnapshotAlias.BookTypes, () => bookTypeAlias) .Fetch(SelectMode.Fetch, x => x.FavoriteLabel) .Where(restriction) .And(() => favoriteLabelAlias.User.Id == userId && projectAlias.IsRemoved == false); if (projectType != null) { query.And(() => projectAlias.ProjectType == projectType.Value); } return(query.OrderBy(() => favoriteLabelAlias.Name).Asc .OrderBy(() => favoriteItemAlias.Title).Asc .TransformUsing(Transformers.DistinctRootEntity) .List()); }
protected override long ExecuteWorkImplementation() { var now = DateTime.UtcNow; var user = m_favoritesRepository.Load <User>(m_userId); var project = m_favoritesRepository.Load <Project>(m_data.ProjectId); var label = GetFavoriteLabelAndCheckAuthorization(m_data.FavoriteLabelId, user.Id); label.LastUseTime = now; var favoriteItem = new FavoriteProject { Project = project, CreateTime = now, FavoriteLabel = label, Title = m_data.Title }; var resultId = (long)m_favoritesRepository.Create(favoriteItem); return(resultId); }