Beispiel #1
0
        public async Task <BookmarkGroup?> GetBookmarkGroup(string userId, int bookmarkGroupId,
                                                            bool includeBookmarks = false)
        {
            BookmarkGroup?group = await db.BookmarkGroups
                                  .Where(bg => bg.BookmarkGroupId == bookmarkGroupId)
                                  .If(includeBookmarks, q => q.Include(bg => bg.Bookmarks))
                                  .SingleOrDefaultAsync();

            if (!BookmarkOwnershipTools.IsBookmarkGroupOwner(db, userId, bookmarkGroupId))
            {
                return(null);
            }

            return(group);
        }
Beispiel #2
0
        public async Task <bool> DeleteBookmarkGroup(string userId, int bookmarkGroupId)
        {
            BookmarkGroup?bookmarkGroup = await this.db.BookmarkGroups
                                          .SingleOrDefaultAsync(bg => bg.BookmarkGroupId == bookmarkGroupId);

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

            if (!BookmarkOwnershipTools.IsBookmarkGroupOwner(this.db, userId, bookmarkGroupId))
            {
                return(false);
            }

            this.db.BookmarkGroups.Remove(bookmarkGroup);
            await this.db.SaveChangesAsync();

            return(true);
        }
Beispiel #3
0
        public async Task <BookmarkGroup?> UpdateBookmarkGroup(string userId,
                                                               BookmarkGroup bookmarkGroup)
        {
            BookmarkGroup?existingGroup = await this.db.BookmarkGroups
                                          .SingleOrDefaultAsync(bg => bg.BookmarkGroupId == bookmarkGroup.BookmarkGroupId);

            if (existingGroup == null)
            {
                return(null);
            }

            if (!BookmarkOwnershipTools
                .IsBookmarkGroupOwner(this.db, userId, bookmarkGroup.BookmarkGroupId))
            {
                return(null);
            }

            // If it's been moved to a new container
            if (existingGroup.BookmarkContainerId != bookmarkGroup.BookmarkContainerId &&
                !BookmarkOwnershipTools
                .IsBookmarkContainerOwner(this.db, userId, bookmarkGroup.BookmarkContainerId))
            {
                return(null);
            }

            if (existingGroup.BookmarkContainerId != bookmarkGroup.BookmarkContainerId)
            {
                // It's been moved to a different container - shuffle the sort order around

                List <BookmarkGroup>?oldContainerGroups = await db.BookmarkGroups
                                                          .Where(bg => bg.BookmarkContainerId == existingGroup.BookmarkContainerId)
                                                          .Where(bg => bg.SortOrder > existingGroup.SortOrder)
                                                          .ToListAsync();

                oldContainerGroups.ForEach(bg => bg.SortOrder -= 1);

                List <BookmarkGroup>?newContainerGroups = await db.BookmarkGroups
                                                          .Where(bg => bg.BookmarkContainerId == bookmarkGroup.BookmarkContainerId)
                                                          .Where(bg => bg.SortOrder >= bookmarkGroup.SortOrder)
                                                          .ToListAsync();

                newContainerGroups.ForEach(bg => bg.SortOrder += 1);
            }
            else if (existingGroup.SortOrder != bookmarkGroup.SortOrder)
            {
                // The group was moved within the same container

                List <BookmarkGroup>?containerGroups = await db.BookmarkGroups
                                                       .Where(bg => bg.BookmarkContainerId == bookmarkGroup.BookmarkContainerId)
                                                       .Where(bg => bg.BookmarkGroupId != bookmarkGroup.BookmarkGroupId)
                                                       .ToListAsync();

                containerGroups
                .Where(bg => bg.SortOrder > existingGroup.SortOrder)
                .ToList()
                .ForEach(bg => bg.SortOrder -= 1);

                containerGroups
                .Where(bg => bg.SortOrder > bookmarkGroup.SortOrder)
                .ToList()
                .ForEach(bg => bg.SortOrder += 1);
            }

            this.db.Entry(bookmarkGroup).State = EntityState.Modified;
            await this.db.SaveChangesAsync();

            return(bookmarkGroup);
        }