using System; using System.Collections.Generic; using System.Linq; using Microsoft.EntityFrameworkCore; using Start.Server.Data.Services.Interfaces; using Start.Server.Extensions; using Start.Server.Models; using Start.Shared; namespace Start.Server.Data.Services { public class BookmarkGroupService : IBookmarkGroupService { private readonly ApplicationDbContext db; public BookmarkGroupService(ApplicationDbContext dbContext) { this.db = dbContext; } public BookmarkGroup? GetBookmarkGroup(string userId, int bookmarkGroupId, bool includeBookmarks = false) { BookmarkGroup? group = db.BookmarkGroups .Where(bg => bg.BookmarkGroupId == bookmarkGroupId) .If(includeBookmarks, q => q.Include(bg => bg.Bookmarks)) .SingleOrDefault(); if (!BookmarkOwnershipTools.IsBookmarkGroupOwner(db, userId, bookmarkGroupId)) return null; return group; } public IList GetUserBookmarkGroups(string userId, bool includeBookmarkGroups = false) { return this.db.BookmarkGroups .Where(bg => bg.BookmarkContainer!.ApplicationUserId == userId) .If(includeBookmarkGroups, q => q.Include(bg => bg.Bookmarks)) .ToList(); } public BookmarkGroup? CreateBookmarkGroup(string userId, string title, string color, int bookmarkContainerId) { if (!BookmarkOwnershipTools .IsBookmarkContainerOwner(this.db, userId, bookmarkContainerId)) return null; BookmarkGroup newBookmarkGroup = new(title, color, bookmarkContainerId); this.db.BookmarkGroups.Add(newBookmarkGroup); this.db.SaveChanges(); return newBookmarkGroup; } public BookmarkGroup? UpdateBookmarkGroup(string userId, BookmarkGroup bookmarkGroup) { BookmarkGroup? existingGroup = this.db.BookmarkGroups .SingleOrDefault(bg => bg.BookmarkGroupId == bookmarkGroup.BookmarkGroupId); if (existingGroup == null) return null; if (!BookmarkOwnershipTools .IsBookmarkGroupOwner(this.db, userId, bookmarkGroup.BookmarkGroupId)) return null; if (!BookmarkOwnershipTools .IsBookmarkContainerOwner(this.db, userId, bookmarkGroup.BookmarkContainerId)) return null; this.db.Entry(bookmarkGroup).State = EntityState.Modified; this.db.SaveChanges(); return bookmarkGroup; } public bool DeleteBookmarkGroup(string userId, int bookmarkGroupId) { BookmarkGroup? bookmarkGroup = this.db.BookmarkGroups .SingleOrDefault(bg => bg.BookmarkGroupId == bookmarkGroupId); if (bookmarkGroup == null) return false; if (!BookmarkOwnershipTools.IsBookmarkGroupOwner(this.db, userId, bookmarkGroupId)) return false; this.db.BookmarkGroups.Remove(bookmarkGroup); this.db.SaveChanges(); return true; } } }