help meeeeeeeee

pull/6/head^2
Kevin MONDEJAR 3 weeks ago
commit 7e1805126e

@ -68,15 +68,10 @@ namespace Contextlib
/// <param name="name">The name of the character to retrieve.</param> /// <param name="name">The name of the character to retrieve.</param>
/// <returns>A task that represents the asynchronous operation, with a <see cref="Character"/> as its result.</returns> /// <returns>A task that represents the asynchronous operation, with a <see cref="Character"/> as its result.</returns>
/// <exception cref="KeyNotFoundException">Thrown when no character is found with the given name.</exception> /// <exception cref="KeyNotFoundException">Thrown when no character is found with the given name.</exception>
public async Task<Character> GetCharByName(string name) public async Task<Character?> GetCharByName(string name)
{ {
var character = _repo.GetItems(item => item.Name == name,0,1, [nameof(Character.Images)]).FirstOrDefault(); var character = _repo.GetItems(item => item.Name == name,0,1, [nameof(Character.Images)]).FirstOrDefault();
if (character == null)
{
throw new KeyNotFoundException($"Error : No character found with the name: {name}.");
}
return character; return character;
} }

@ -33,7 +33,7 @@ namespace Contextlib
return new PaginationResult<Images>(await CountImage(), 0, await CountImage(), _repository.GetItems(0, await CountImage()).ToList()); return new PaginationResult<Images>(await CountImage(), 0, await CountImage(), _repository.GetItems(0, await CountImage()).ToList());
} }
public async Task<Images> GetImageById(int id) public async Task<Images?> GetImageById(int id)
{ {
return _repository.GetById(id); return _repository.GetById(id);
} }

@ -31,24 +31,37 @@ namespace Contextlib
} }
public async Task AddQuote(Quote quote) public async Task<Quote> AddQuote(Quote quote)
{ {
if (quote == null) if (quote == null)
{ {
throw new ArgumentNullException(nameof(quote), "quote cannot be null."); throw new ArgumentNullException(nameof(quote), "quote cannot be null.");
} }
//Character
var c = await _dbC.GetCharByName(quote.Character.Name); var c = await _dbC.GetCharByName(quote.Character.Name);
if (c != null) if (c != null)
{ {
quote.IdCharacter = c.Id; quote.IdCharacter = c.Id;
quote.Character = c; quote.Character = c;
} }
//Image //Image
var i = await _dbI.GetImageByPath(quote.Character.Images.ImgPath);
if (i != null)
{
quote.Character.IdImage = i.Id;
quote.Character.Images = i;
}
//Source //Source
var s = await _dbS.GetSourceByTitle(quote.Source.Title);
if (s != null)
{
quote.IdSource = s.Id;
quote.Source = s;
}
_repo.Insert(quote); _repo.Insert(quote);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
return quote;
} }
public async Task<PaginationResult<Quote>> GetAllQuote() public async Task<PaginationResult<Quote>> GetAllQuote()
@ -197,6 +210,28 @@ namespace Contextlib
public async Task UpdateQuote(int quoteId, Quote quote) public async Task UpdateQuote(int quoteId, Quote quote)
{ {
//Character
var c = await _dbC.GetCharByName(quote.Character.Name);
if (c != null)
{
quote.IdCharacter = c.Id;
quote.Character = c;
}
//Image
var i = await _dbI.GetImageByPath(quote.Character.Images.ImgPath);
if (c != null)
{
quote.Character.IdImage = i.Id;
quote.Character.Images = i;
}
//Source
var s = await _dbS.GetSourceByTitle(quote.Source.Title);
if (c != null)
{
quote.IdSource = s.Id;
quote.Source = s;
}
Quote? q = _repo.GetById(quoteId); Quote? q = _repo.GetById(quoteId);
if (q != null) if (q != null)
{ {

@ -8,7 +8,7 @@ using Shared;
namespace Contextlib namespace Contextlib
{ {
internal class DbSourceManager : ISourceService<Source> public class DbSourceManager : ISourceService<Source>
{ {
private WTFContext _context; private WTFContext _context;
private GenericRepository<Source> _repo; private GenericRepository<Source> _repo;
@ -58,27 +58,17 @@ namespace Contextlib
return source; return source;
} }
public async Task<Source> GetSourceByTitle(string title) public async Task<Source?> GetSourceByTitle(string title)
{ {
var source = _repo.GetItems(item => item.Title == title, 0, 1, []).FirstOrDefault(); var source = _repo.GetItems(item => item.Title == title, 0, 1, []).FirstOrDefault();
if (source == null)
{
throw new KeyNotFoundException($"Error : No source found with the title: {title}.");
}
return source; return source;
} }
public async Task<Source> GetSourceByType(int type) public async Task<Source?> GetSourceByType(int type)
{ {
var source = _repo.GetItems(item => item.TypeSrc == (TypeSrcEnum)type, 0, 1, []).FirstOrDefault(); var source = _repo.GetItems(item => item.TypeSrc == (TypeSrcEnum)type, 0, 1, []).FirstOrDefault();
if (source == null)
{
throw new KeyNotFoundException($"Error : No source found with the type: {(TypeSrcEnum)type}.");
}
return source; return source;
} }

@ -20,9 +20,9 @@ namespace ServicesApi
quoteService = quote; quoteService = quote;
} }
public async Task AddQuote(QuoteDTO quote) public async Task<QuoteDTO> AddQuote(QuoteDTO quote)
{ {
await quoteService.AddQuote(quote.ToEntity()); return (await quoteService.AddQuote(quote.ToEntity())).ToDto();
} }
public async Task<PaginationResult<QuoteDTO>> GetAllQuote() public async Task<PaginationResult<QuoteDTO>> GetAllQuote()

@ -1,12 +1,13 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Reflection;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Shared namespace Shared
{ {
public interface IFavoriteService public interface IFavoriteService<TQuote>
{ {
// Adds a quote to a user's list of favorites. // Adds a quote to a user's list of favorites.
// 'quoteid' is the unique identifier of the quote to be added to favorites. // 'quoteid' is the unique identifier of the quote to be added to favorites.
@ -25,5 +26,8 @@ namespace Shared
// Removes a specific quote from the favorite lists of all users. // Removes a specific quote from the favorite lists of all users.
// 'quoteId' is the unique identifier of the quote to be removed from all users' favorites. // 'quoteId' is the unique identifier of the quote to be removed from all users' favorites.
Task RemoveAllFavoriteForQuote(int quoteId); Task RemoveAllFavoriteForQuote(int quoteId);
Task<PaginationResult<TQuote>> GetFavoriteByIdUser(int userId, int index, int count);
Task<TQuote> GetFavorite(int userId, int idQuote);
} }
} }

@ -76,7 +76,7 @@ namespace Shared
// Adds a new quote. // Adds a new quote.
// 'quote' is the quote object that will be added. // 'quote' is the quote object that will be added.
Task AddQuote(TQuote quote); Task<TQuote> AddQuote(TQuote quote);
// Updates an existing quote identified by 'quoteId' with new details. // Updates an existing quote identified by 'quoteId' with new details.
// 'quoteId' is the ID of the quote to be updated // 'quoteId' is the ID of the quote to be updated

@ -39,9 +39,10 @@ namespace StubApi
}; };
} }
public async Task AddQuote(QuoteDTO quote) public async Task<QuoteDTO> AddQuote(QuoteDTO quote)
{ {
_quotes.Add(quote); _quotes.Add(quote);
return quote;
} }
public async Task<PaginationResult<QuoteDTO>> GetAllQuote() public async Task<PaginationResult<QuoteDTO>> GetAllQuote()

@ -0,0 +1,125 @@
using System.Net;
using DTO;
using Entity;
using Microsoft.AspNetCore.Mvc;
using ServicesApi;
using Shared;
namespace WfApi.Controllers
{
[ApiController]
[Route("api/v1/favorite")] //Version API
public class FavoriteControleur : ControllerBase
{
private readonly IFavoriteService<QuoteDTO> _favorite;
private readonly ILogger<FavoriteControleur> _logger;
public FavoriteControleur(IFavoriteService<QuoteDTO> favoriteService, ILogger<FavoriteControleur> logger)
{
_favorite = favoriteService;
_logger = logger;
}
[HttpGet("{id}")] // Indiquer que l'id est dans l'URL
public async Task<IActionResult> GetFavoriteByIdUser(int id, int index = 0, int count = 10)
{
try
{
var result = await _favorite.GetFavoriteByIdUser(id, 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" });
}
}
[HttpPost]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status409Conflict)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<IActionResult> CreateFavorite(int idUser , int idQuote)
{
try
{
var existingFavorite = _favorite.GetFavorite(idUser,idQuote).Result;
if (existingFavorite != null)
{
return Conflict(new { message = "A favorite with this ID already exists." });
}
await _favorite.AddFavorite(idUser, idQuote);
var fav = new Favorite();
fav.IdQuote = idQuote;
fav.IdUsers = idUser;
return CreatedAtAction(nameof(GetFavoriteByIdUser), new { id = idUser }, fav);
}
catch (Exception)
{
return StatusCode((int)HttpStatusCode.InternalServerError, new { message = "Erreur interne du serveur." });
}
}
[HttpDelete] // /api/v1/commentary?id=51
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<IActionResult> DeleteFavorite([FromQuery] int idUser, [FromQuery] int idQuote)
{
try
{
var existingFavorite = await _favorite.GetFavorite(idUser, idQuote);
if (existingFavorite == null)
{
return NotFound(new { message = "Commentary not found." });
}
await _favorite.RemoveFavorite(idUser, idQuote);
return Ok(new { message = $"Favorite from user {idUser} and quote {idQuote} deleted successfully." });
}
catch (Exception)
{
return StatusCode((int)HttpStatusCode.InternalServerError, new { message = "Internal server error." });
}
}
[HttpDelete] // /api/v1/commentary?id=51
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<IActionResult> DeleteFavorite([FromQuery] int idUser, [FromQuery] int idQuote)
{
try
{
var existingFavorite = await _favorite.GetFavorite(idUser, idQuote);
if (existingFavorite == null)
{
return NotFound(new { message = "Commentary not found." });
}
await _favorite.RemoveFavorite(idUser, idQuote);
return Ok(new { message = $"Favorite from user {idUser} and quote {idQuote} deleted successfully." });
}
catch (Exception)
{
return StatusCode((int)HttpStatusCode.InternalServerError, new { message = "Internal server error." });
}
}
}
}

@ -268,7 +268,7 @@ namespace WfApi.Controllers
return Conflict(new { message = "Une quote avec cet ID existe déjà." }); return Conflict(new { message = "Une quote avec cet ID existe déjà." });
} }
newQuote.IsValide=false; newQuote.IsValide=false;
var quote=_quote.AddQuote(newQuote); var quote=await _quote.AddQuote(newQuote);
return CreatedAtAction(nameof(CreateQuote), new { id = newQuote.Id }, quote); return CreatedAtAction(nameof(CreateQuote), new { id = newQuote.Id }, quote);
} }

@ -3,8 +3,6 @@ using DTO;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Shared; using Shared;
// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
namespace WfApi.Controllers namespace WfApi.Controllers
{ {
[Route("api/v1/source")] [Route("api/v1/source")]
@ -45,7 +43,7 @@ namespace WfApi.Controllers
} }
} }
[HttpGet("all")] /*[HttpGet("all")]
[ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status204NoContent)] [ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)] [ProducesResponseType(StatusCodes.Status500InternalServerError)]
@ -79,6 +77,6 @@ namespace WfApi.Controllers
public async Task<IActionResult> DeleteSource([FromQuery] int idSource) public async Task<IActionResult> DeleteSource([FromQuery] int idSource)
{ {
} }*/
} }
} }

@ -15,7 +15,7 @@ builder.Services.AddScoped<IQuoteService<QuoteDTO>, QuoteService>();
builder.Services.AddScoped<ICommentaryService<CommentaryDTO>, CommentaryService>(); builder.Services.AddScoped<ICommentaryService<CommentaryDTO>, CommentaryService>();
builder.Services.AddScoped<ICharacterService<CharacterDTO>, CharacterService>(); builder.Services.AddScoped<ICharacterService<CharacterDTO>, CharacterService>();
builder.Services.AddScoped<IImagesService<ImageDTO>, ImageService>(); builder.Services.AddScoped<IImagesService<ImageDTO>, ImageService>();
//builder.Services.AddScoped<ISourceService<SourceDTO>, SourceService>(); builder.Services.AddScoped<ISourceService<SourceDTO>, SourceService>();
builder.Services.AddScoped<IQuestionService<QuestionDTO>, QuestionService>(); builder.Services.AddScoped<IQuestionService<QuestionDTO>, QuestionService>();
@ -28,7 +28,7 @@ builder.Services.AddScoped<IQuoteService<Quote>, DbQuoteManager>();
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>();
//builder.Services.AddScoped<ISourceService<Source>, DbSourceManager>(); builder.Services.AddScoped<ISourceService<Source>, DbSourceManager>();
builder.Services.AddScoped<IQuestionService<Question>, DbQuestionManager>(); builder.Services.AddScoped<IQuestionService<Question>, DbQuestionManager>();
//... //...

@ -268,7 +268,7 @@ namespace XUnitTest
_mockUserService.Setup(service => service.GetUserById(id)).ReturnsAsync(existingPlayer); _mockUserService.Setup(service => service.GetUserById(id)).ReturnsAsync(existingPlayer);
_mockUserService.Setup(service => service.RemoveUser(existingPlayer)).Verifiable(); _mockUserService.Setup(service => service.RemoveUser(existingPlayer.Id)).Verifiable();
// Act // Act
var result = await _userController.DeletePlayer(id); var result = await _userController.DeletePlayer(id);

Loading…
Cancel
Save