Route Favorite Remove A finir (supr favorite de la liste dans Quote et User)

pull/6/head
kekentin 3 weeks ago
parent 831a65f244
commit eb0af16e6a

@ -1,4 +1,6 @@
using Entity; using Entity;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
using Shared; using Shared;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -11,41 +13,108 @@ namespace Contextlib
public class DbFavoriteManager : IFavoriteService<Quote> public class DbFavoriteManager : IFavoriteService<Quote>
{ {
private WTFContext _context; private WTFContext _context;
private GenericRepository<Quote> _repo;
public DbFavoriteManager(WTFContext context) public DbFavoriteManager(WTFContext context)
{ {
_context = context ?? throw new ArgumentNullException(nameof(context), "Database context cannot be null."); _context = context ?? throw new ArgumentNullException(nameof(context), "Database context cannot be null.");
_repo = new GenericRepository<Quote>(context);
} }
public async Task AddFavorite(int quoteid, int userId) public async Task AddFavorite(int quoteid, int userId)
{ {
throw new NotImplementedException(); var quote = await _context.quotes // collection des commentaires est chargée
.Include(q => q.Favorite)
.FirstOrDefaultAsync(q => q.Id == quoteid);
if (quote == null)
{
throw new ArgumentException("Quote not exist", nameof(quoteid));
}
var user = await _context.users // collection des commentaires est chargée
.Include(u => u.Favorite)
.FirstOrDefaultAsync(q => q.Id == userId);
if (user == null)
{
throw new ArgumentException("User not exist", nameof(userId));
}
var fav = new Favorite
{
// Lien entre le favorite et la citation
Quote = quote,
IdQuote = quoteid,
// Lien entre le favorite et le user
Users = user,
IdUsers = userId,
};
if (fav != null)
{
// Ajout favorite à la collection des favorites de la citation
quote.Favorite.Add(user);
// Ajout favorite à la collection des favorites de la citation
user.Favorite.Add(quote);
}
_context.Add(fav);
await _context.SaveChangesAsync();
} }
public async Task RemoveAllFavoriteForQuote(int quoteId) public async Task RemoveAllFavoriteForQuote(int quoteId)
{ {
throw new NotImplementedException(); var fav = await _context.quotes.Where(item => item.Id==quoteId)
.Include(q => q.Source).Include(q => q.Character).ThenInclude(c => c.Images).Include(q => q.Favorite)
.ToListAsync();
if (fav == null) throw new KeyNotFoundException();
foreach (var item in fav)
{
_repo.Delete(item);
}
await _context.SaveChangesAsync();
} }
public async Task RemoveAllFavoriteForUser(int userId) public async Task RemoveAllFavoriteForUser(int userId)
{ {
throw new NotImplementedException(); var fav = (await this.GetFavoriteByIdUser(userId,0,_repo.Count())).items;
if (fav == null) throw new KeyNotFoundException();
foreach (var item in fav)
{
_repo.Delete(item);
}
await _context.SaveChangesAsync();
} }
public async Task RemoveFavorite(int quoteid, int userId) public async Task RemoveFavorite(int quoteid, int userId)
{ {
throw new NotImplementedException(); var fav = await this.GetFavorite(userId, quoteid);
if (fav == null) throw new KeyNotFoundException();
_repo.Delete(fav);
await _context.SaveChangesAsync();
} }
public Task<Quote> GetFavorite(int userId, int idQuote) public async Task<Quote?> GetFavorite(int userId, int idQuote)
{ {
throw new NotImplementedException(); return await _context.quotes.Where( item => item.Id == idQuote && item.Favorite.Any(u => u.Id == userId) )
.Include(q => q.Source).Include(q => q.Character).ThenInclude(c => c.Images).Include(q=>q.Favorite)
.FirstOrDefaultAsync();
} }
public Task<PaginationResult<Quote>> GetFavoriteByIdUser(int userId, int index, int count) public async Task<PaginationResult<Quote>> GetFavoriteByIdUser(int userId, int index, int count)
{ {
throw new NotImplementedException(); List<Quote> fav = await _context.quotes.Where(item => item.Favorite.Any(u => u.Id == userId))
.Include(q => q.Source).Include(q => q.Character).ThenInclude(c => c.Images).Include(q => q.Favorite)
.Skip(index * count).Take(count).ToListAsync();
return new PaginationResult<Quote>(fav.Count,index,count,fav);
} }
} }
} }

@ -15,6 +15,7 @@ namespace Dto2Entities
public static CharacterDTO ToDto(this Character item) public static CharacterDTO ToDto(this Character item)
{ {
if (item == null) return null;
CharacterDTO character = new CharacterDTO(); CharacterDTO character = new CharacterDTO();
character.Id = item.Id; character.Id = item.Id;
character.Name = item.Name; character.Name = item.Name;
@ -34,6 +35,7 @@ namespace Dto2Entities
public static CommentaryDTO ToDto(this Commentary item) public static CommentaryDTO ToDto(this Commentary item)
{ {
if (item == null) return null;
CommentaryDTO commentary = new CommentaryDTO(); CommentaryDTO commentary = new CommentaryDTO();
commentary.Id = item.Id; commentary.Id = item.Id;
commentary.Date = item.DateCommentary; commentary.Date = item.DateCommentary;
@ -56,6 +58,7 @@ namespace Dto2Entities
// Surement a refaire car Faoirite Entity modifier sur branche EF // Surement a refaire car Faoirite Entity modifier sur branche EF
public static FavoriteDTO ToDto(this Favorite item) public static FavoriteDTO ToDto(this Favorite item)
{ {
if (item == null) return null;
FavoriteDTO favorite = new FavoriteDTO(); FavoriteDTO favorite = new FavoriteDTO();
favorite.IdUser = item.IdUsers; favorite.IdUser = item.IdUsers;
favorite.IdQuote = item.IdQuote; favorite.IdQuote = item.IdQuote;
@ -74,6 +77,7 @@ namespace Dto2Entities
public static ImageDTO ToDto(this Images item) public static ImageDTO ToDto(this Images item)
{ {
if (item == null) return null;
ImageDTO image = new ImageDTO(); ImageDTO image = new ImageDTO();
image.IdImage = item.Id; image.IdImage = item.Id;
image.ImagePath = item.ImgPath; image.ImagePath = item.ImgPath;
@ -92,6 +96,7 @@ namespace Dto2Entities
public static QuestionDTO ToDto(this Question item) public static QuestionDTO ToDto(this Question item)
{ {
if (item == null) return null;
QuestionDTO question = new QuestionDTO(); QuestionDTO question = new QuestionDTO();
question.Id = item.Id; question.Id = item.Id;
question.Question = item.Text; question.Question = item.Text;
@ -115,6 +120,7 @@ namespace Dto2Entities
public static QuizDTO ToDto(this Quiz item) public static QuizDTO ToDto(this Quiz item)
{ {
if (item == null) return null;
QuizDTO quiz = new QuizDTO(); QuizDTO quiz = new QuizDTO();
quiz.Id = item.Id; quiz.Id = item.Id;
quiz.NbQuestion = item.NbQuestion; quiz.NbQuestion = item.NbQuestion;
@ -136,6 +142,7 @@ namespace Dto2Entities
// Surement a refaire car QuizQuestion Entity modifier sur branche EF // Surement a refaire car QuizQuestion Entity modifier sur branche EF
public static QuizQuestionDTO ToDto(this QuizQuestion item) public static QuizQuestionDTO ToDto(this QuizQuestion item)
{ {
if (item == null) return null;
QuizQuestionDTO quizQuestion = new QuizQuestionDTO(); QuizQuestionDTO quizQuestion = new QuizQuestionDTO();
quizQuestion.IdQuiz = item.IdQuiz; quizQuestion.IdQuiz = item.IdQuiz;
quizQuestion.IdQuestion = item.IdQuestion; quizQuestion.IdQuestion = item.IdQuestion;
@ -154,6 +161,7 @@ namespace Dto2Entities
public static QuoteDTO ToDto(this Quote item) public static QuoteDTO ToDto(this Quote item)
{ {
if (item == null) return null;
QuoteDTO quote = new QuoteDTO(); QuoteDTO quote = new QuoteDTO();
quote.Id = item.Id; quote.Id = item.Id;
quote.Content = item.Content; quote.Content = item.Content;
@ -180,6 +188,7 @@ namespace Dto2Entities
public static SourceDTO ToDto(this Source item) public static SourceDTO ToDto(this Source item)
{ {
if (item == null) return null;
SourceDTO source = new SourceDTO(); SourceDTO source = new SourceDTO();
source.Id = item.Id; source.Id = item.Id;
source.Date = item.Year; source.Date = item.Year;
@ -200,6 +209,7 @@ namespace Dto2Entities
public static UserDTO ToDto(this Users item) public static UserDTO ToDto(this Users item)
{ {
if (item == null) return null;
UserDTO user = new UserDTO(); UserDTO user = new UserDTO();
user.Id = item.Id; user.Id = item.Id;
user.Pseudo = item.UserName; user.Pseudo = item.UserName;
@ -247,6 +257,7 @@ namespace Dto2Entities
public static Character ToEntity(this CharacterDTO item) public static Character ToEntity(this CharacterDTO item)
{ {
if (item == null) return null;
Character character = new Character(); Character character = new Character();
character.Id = item.Id; character.Id = item.Id;
character.Name = item.Name; character.Name = item.Name;
@ -266,6 +277,7 @@ namespace Dto2Entities
public static Commentary ToEntity(this CommentaryDTO item) public static Commentary ToEntity(this CommentaryDTO item)
{ {
if (item == null) return null;
Commentary commentary = new Commentary(); Commentary commentary = new Commentary();
commentary.Id = item.Id; commentary.Id = item.Id;
commentary.DateCommentary = item.Date; commentary.DateCommentary = item.Date;
@ -288,6 +300,7 @@ namespace Dto2Entities
// Surement a refaire car Faoirite Entity modifier sur branche EF // Surement a refaire car Faoirite Entity modifier sur branche EF
public static Favorite ToEntity(this FavoriteDTO item) public static Favorite ToEntity(this FavoriteDTO item)
{ {
if (item == null) return null;
Favorite favorite = new Favorite(); Favorite favorite = new Favorite();
favorite.IdUsers = item.IdUser; favorite.IdUsers = item.IdUser;
favorite.IdQuote = item.IdQuote; favorite.IdQuote = item.IdQuote;
@ -306,6 +319,7 @@ namespace Dto2Entities
public static Images ToEntity(this ImageDTO item) public static Images ToEntity(this ImageDTO item)
{ {
if (item == null) return null;
Images image = new Images(); Images image = new Images();
image.Id = item.IdImage; image.Id = item.IdImage;
image.ImgPath = item.ImagePath; image.ImgPath = item.ImagePath;
@ -324,6 +338,7 @@ namespace Dto2Entities
public static Question ToEntity(this QuestionDTO item) public static Question ToEntity(this QuestionDTO item)
{ {
if (item == null) return null;
Question question = new Question(); Question question = new Question();
question.Id = item.Id; question.Id = item.Id;
question.Text = item.Question; question.Text = item.Question;
@ -346,6 +361,7 @@ namespace Dto2Entities
public static Quiz ToEntity(this QuizDTO item) public static Quiz ToEntity(this QuizDTO item)
{ {
if (item == null) return null;
Quiz quiz = new Quiz(); Quiz quiz = new Quiz();
quiz.Id = item.Id; quiz.Id = item.Id;
quiz.NbQuestion = item.NbQuestion; quiz.NbQuestion = item.NbQuestion;
@ -367,6 +383,7 @@ namespace Dto2Entities
// Surement a refaire car QuizQuestion Entity modifier sur branche EF // Surement a refaire car QuizQuestion Entity modifier sur branche EF
public static QuizQuestion ToEntity(this QuizQuestionDTO item) public static QuizQuestion ToEntity(this QuizQuestionDTO item)
{ {
if (item == null) return null;
QuizQuestion quizQuestion = new QuizQuestion(); QuizQuestion quizQuestion = new QuizQuestion();
quizQuestion.IdQuiz = item.IdQuiz; quizQuestion.IdQuiz = item.IdQuiz;
quizQuestion.IdQuestion = item.IdQuestion; quizQuestion.IdQuestion = item.IdQuestion;
@ -385,6 +402,7 @@ namespace Dto2Entities
public static Quote ToEntity(this QuoteDTO item) public static Quote ToEntity(this QuoteDTO item)
{ {
if (item == null) return null;
Quote quote = new Quote(); Quote quote = new Quote();
quote.Id = item.Id; quote.Id = item.Id;
quote.Content = item.Content; quote.Content = item.Content;
@ -414,6 +432,7 @@ namespace Dto2Entities
public static Source ToEntity(this SourceDTO item) public static Source ToEntity(this SourceDTO item)
{ {
if (item == null) return null;
Source source = new Source(); Source source = new Source();
source.Id = item.Id; source.Id = item.Id;
source.Year = item.Date; source.Year = item.Date;
@ -434,6 +453,7 @@ namespace Dto2Entities
public static Users ToEntity(this UserDTO item) public static Users ToEntity(this UserDTO item)
{ {
if (item == null) return null;
Users user = new Users(); Users user = new Users();
user.Id = item.Id; user.Id = item.Id;
user.UserName = item.Pseudo; user.UserName = item.Pseudo;

@ -43,7 +43,7 @@ namespace ServicesApi
await favoriteService.RemoveFavorite(quoteid, userId); await favoriteService.RemoveFavorite(quoteid, userId);
} }
public async Task<QuoteDTO> GetFavorite(int userId, int idQuote) public async Task<QuoteDTO?> GetFavorite(int userId, int idQuote)
{ {
return (await favoriteService.GetFavorite(userId,idQuote) ).ToDto(); return (await favoriteService.GetFavorite(userId,idQuote) ).ToDto();
} }

@ -9,12 +9,12 @@ namespace WfApi.Controllers
{ {
[ApiController] [ApiController]
[Route("api/v1/favorite")] //Version API [Route("api/v1/favorite")] //Version API
public class FavoriteControleur : ControllerBase public class FavoriteController : ControllerBase
{ {
private readonly IFavoriteService<QuoteDTO> _favorite; private readonly IFavoriteService<QuoteDTO> _favorite;
private readonly ILogger<FavoriteControleur> _logger; private readonly ILogger<FavoriteController> _logger;
public FavoriteControleur(IFavoriteService<QuoteDTO> favoriteService, ILogger<FavoriteControleur> logger) public FavoriteController(IFavoriteService<QuoteDTO> favoriteService, ILogger<FavoriteController> logger)
{ {
_favorite = favoriteService; _favorite = favoriteService;
_logger = logger; _logger = logger;
@ -22,12 +22,33 @@ namespace WfApi.Controllers
[HttpGet("{id}")] // Indiquer que l'id est dans l'URL [HttpGet("{idUser}")] // Indiquer que l'id est dans l'URL
public async Task<IActionResult> GetFavoriteByIdUser(int id, int index = 0, int count = 10) public async Task<IActionResult> GetFavoriteByIdUser(int idUser, int index = 0, int count = 10)
{ {
try try
{ {
var result = await _favorite.GetFavoriteByIdUser(id, index, count); var result = await _favorite.GetFavoriteByIdUser(idUser, index, count);
if (result != null)
{
return await Task.FromResult<IActionResult>(Ok(result));
}
else
{
return NoContent();
}
}
catch (Exception)
{
return StatusCode((int)HttpStatusCode.InternalServerError, new { message = "Internal Server Error" });
}
}
[HttpGet()] // Indiquer que l'id est dans l'URL
public async Task<IActionResult> GetFavoriteByIdUser(int idUser , int idQuote)
{
try
{
var result = await _favorite.GetFavorite(idUser, idQuote);
if (result != null) if (result != null)
{ {

@ -26,6 +26,7 @@ builder.Services.AddScoped<WTFContext, StubWTFContext>();
builder.Services.AddScoped<IUserService<Users>, DbUsersManager>(); builder.Services.AddScoped<IUserService<Users>, DbUsersManager>();
builder.Services.AddScoped<IQuoteService<Quote>, DbQuoteManager>(); builder.Services.AddScoped<IQuoteService<Quote>, DbQuoteManager>();
builder.Services.AddScoped<IFavoriteService<Quote>, DbFavoriteManager>();
builder.Services.AddScoped<ICommentaryService<Commentary>, DbCommentaryManager>(); builder.Services.AddScoped<ICommentaryService<Commentary>, DbCommentaryManager>();
builder.Services.AddScoped<ICharacterService<Character>, DbCharacterManager>(); builder.Services.AddScoped<ICharacterService<Character>, DbCharacterManager>();
builder.Services.AddScoped<IImagesService<Images>, DbImagesManager>(); builder.Services.AddScoped<IImagesService<Images>, DbImagesManager>();

Loading…
Cancel
Save