using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Entity; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Internal; using Shared; namespace Contextlib { public class DbQuoteManager : IQuoteService { private WTFContext _context; private GenericRepository _repo; public DbQuoteManager(WTFContext context) { _context = context ?? throw new ArgumentNullException(nameof(context), "Database context cannot be null."); _repo = new GenericRepository(_context); } public async Task AddQuote(Quote quote) { if (quote == null) { throw new ArgumentNullException(nameof(quote), "quote cannot be null."); } _repo.Insert(quote); await _context.SaveChangesAsync(); } public async Task> GetAllQuote() { List quotes = _context.quotes.Where(item => item.IsValid) .Include(q => q.Source).Include(q => q.Character).ThenInclude(c => c.Images) .ToList(); return new PaginationResult(quotes.Count, 0, quotes.Count, quotes); } public async Task> GetAllQuoteLang(int index, int pageSize, int lang) { List quotes = _context.quotes.Where(item => item.IsValid && item.Langage == (LangEnum)lang) .Include(q => q.Source).Include(q => q.Character).ThenInclude(c => c.Images) .Skip(index * pageSize).Take(pageSize).ToList(); return new PaginationResult(quotes.Count, index, pageSize, quotes); } public async Task GetDailyQuote(DateOnly date, int lang) { List quotes = _context.quotes.Where(item => item.IsValid && item.Langage == (LangEnum)lang) .Include(q => q.Source).Include(q => q.Character).ThenInclude(c => c.Images).Include(q => q.Favorite) .ToList(); Quote quote = _repo.GetById(date.DayNumber % quotes.Count()) ?? quotes.First(); return quote; } public async Task> GetFavorites(int index, int pageSize, int UserId) { List quotes = _context.quotes.Where(item => item.IsValid && item.Favorite.Where(p => p.Id == UserId) != null) .Include(q => q.Source).Include(q => q.Character).ThenInclude(c => c.Images).Include(q => q.Favorite) .Skip(index * pageSize).Take(pageSize).ToList(); return new PaginationResult(quotes.Count, index, pageSize, quotes); } public async Task> GetInvalidQuote(int index, int pageSize, int lang) { List quotes = _context.quotes.Where(item => !item.IsValid && item.Langage == (LangEnum)lang) .Include(q => q.Source).Include(q => q.Character).ThenInclude(c => c.Images) .Skip(index * pageSize).Take(pageSize).ToList(); return new PaginationResult(quotes.Count, index, pageSize, quotes); } public async Task> GetInvalidQuote(int index, int pageSize) { List quotes = _context.quotes.Where(item => !item.IsValid) .Include(q => q.Source).Include(q => q.Character).ThenInclude(c => c.Images) .Skip(index * pageSize).Take(pageSize).ToList(); return new PaginationResult(quotes.Count, index, pageSize, quotes); } public async Task GetLastQuoteId() { PaginationResult quotes = await GetAllQuote(); int lastQuoteId = 0; foreach (Quote quote in quotes.items) { if (quote.Id >= lastQuoteId) { lastQuoteId = quote.Id + 1; } } return lastQuoteId; } public async Task GetQuoteById(int id) { Quote? quote = _context.quotes.Where(item => item.Id == id) .Include(q => q.Source).Include(q => q.Character).ThenInclude(c => c.Images) .First(); if (quote == null) { throw new KeyNotFoundException($"Error : No quotes found with the ID: {id}."); } return quote; } public async Task> GetSomeQuote(int index, int pageSize) { throw new NotImplementedException(); } public async Task> GetSuggestions(int index, int pageSize, int lang) { throw new NotImplementedException(); } public async Task> GetValidQuote(int index, int pageSize) { throw new NotImplementedException(); } public async Task RemoveQuote(int quoteId) { throw new NotImplementedException(); } public async Task> SearchByCharacter(string character, int index, int pageSize, int lang) { throw new NotImplementedException(); } public async Task> SearchByContent(string content, int index, int pageSize, int lang) { throw new NotImplementedException(); } public async Task> SearchBySource(string source, int index, int pageSize, int lang) { throw new NotImplementedException(); } public async Task UpdateQuote(int quoteId, Quote quote) { throw new NotImplementedException(); } public async Task ValidateQuote(int quoteId, bool isValidate) { throw new NotImplementedException(); } } }