using DBConnection.Contexts; using DBConnection.Repositories.Interfaces; using Microsoft.EntityFrameworkCore; using Treestar.Shared.Models.DBDomain; namespace DBConnection.Repositories; public class UserRepository : BaseRepository, IUserRepository { private readonly INovelRepository _novelRepository; public UserRepository(AppDbContext dbContext, INovelRepository novelRepository) : base(dbContext) { _novelRepository = novelRepository; } protected override IQueryable GetAllIncludedQueryable() { return DbContext.Users.Include(u => u.WatchedNovels); } public async Task AssignNovelsToUser(User user, List novels) { var dbUser = await GetIncluded(user); if (dbUser == null) { return user; } var dbNovels = await _novelRepository.GetWhereIncluded(novels); var newNovels = dbNovels.Except(dbUser.WatchedNovels.Select(un => un.Novel)); var newUserNovels = newNovels.Select(n => new UserNovel { Novel = n, User = dbUser }); dbUser.WatchedNovels.AddRange(newUserNovels); await DbContext.SaveChangesAsync(); return dbUser; } public async Task UpdateLastChapterRead(User user, Novel novel, int chapterRead) { var dbUser = await GetIncluded(user); var userNovel = dbUser.WatchedNovels.FirstOrDefault(i => i.NovelUrl == novel.Url); userNovel.LastChapterRead = chapterRead; await DbContext.SaveChangesAsync(); return dbUser; } }