ADD pagination + Filtrage

testTony
Tony Fages 1 year ago
parent fc31bb46f0
commit 6323399018

@ -26,6 +26,7 @@
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\API_DbDataManager\API_DbDataManager.csproj" /> <ProjectReference Include="..\API_DbDataManager\API_DbDataManager.csproj" />
<ProjectReference Include="..\API_Mapping\API_Mapping.csproj" />
<ProjectReference Include="..\API_Services\API_Services.csproj" /> <ProjectReference Include="..\API_Services\API_Services.csproj" />
<ProjectReference Include="..\StubbedContextLib\StubbedContextLib.csproj" /> <ProjectReference Include="..\StubbedContextLib\StubbedContextLib.csproj" />
</ItemGroup> </ItemGroup>

@ -1,3 +1,4 @@
using API_Mapping;
using API_Services; using API_Services;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Model; using Model;
@ -18,9 +19,9 @@ namespace API.Controllers
} }
[HttpGet] [HttpGet]
public async Task<IActionResult> GetAllArticles() public async Task<IActionResult> GetAllArticles([FromQuery] int index = 0, [FromQuery] int count = 10, [FromQuery] ArticleOrderCriteria orderCriterium = ArticleOrderCriteria.None)
{ {
var result = await _articleService.GetAllArticles(); var result = (await _articleService.GetAllArticles(index, count, orderCriterium)).Select(a => a.ToDTO());
if (result == null) if (result == null)
{ {
return NotFound(); return NotFound();
@ -29,9 +30,9 @@ namespace API.Controllers
} }
[HttpGet("/article/{id}")] [HttpGet("/article/{id}")]
public async Task<Article?> GetArticleById(int id) public async Task<Article?> GetArticleById(int id, [FromQuery] int index = 0, [FromQuery] int count = 10, [FromQuery] ArticleOrderCriteria orderCriterium = ArticleOrderCriteria.None)
{ {
var result = await _articleService.GetArticleById(id); var result = await _articleService.GetArticleById(id, index, count, orderCriterium);
if (result == null) if (result == null)
{ {
return null; return null;

@ -14,6 +14,66 @@ public class DbManagerArticle : IArticleService
{ {
_context = context; _context = context;
} }
public async Task<IEnumerable<Article?>> GetAllArticles(int index, int count, ArticleOrderCriteria orderCriterium)
{
List<Article> articles = new List<Article>();
switch (orderCriterium)
{
case ArticleOrderCriteria.None:
articles = _context.ArticleSet.Select(a => a.ToModel()).ToList();
break;
case ArticleOrderCriteria.ByLectureTime:
articles = _context.ArticleSet.OrderBy(a => a.LectureTime).Select(a => a.ToModel()).ToList();
break;
case ArticleOrderCriteria.ByTitle:
articles = _context.ArticleSet.OrderBy(a => a.Title).Select(a => a.ToModel()).ToList();
break;
case ArticleOrderCriteria.ByAuthor:
articles = _context.ArticleSet.OrderBy(a => a.Author).Select(a => a.ToModel()).ToList();
break;
case ArticleOrderCriteria.ByDatePublished:
articles = _context.ArticleSet.OrderBy(a => a.DatePublished).Select(a => a.ToModel()).ToList();
break;
case ArticleOrderCriteria.ByDescription:
articles = _context.ArticleSet.OrderBy(a => a.Description).Select(a => a.ToModel()).ToList();
break;
default:
articles = _context.ArticleSet.Select(a => a.ToModel()).ToList();
break;
}
return await Task.FromResult(articles.AsEnumerable());
}
public Task<Article?> GetArticleById(int id, int index, int count, ArticleOrderCriteria orderCriterium)
{
List<Article> articles = new List<Article>();
switch (orderCriterium)
{
case ArticleOrderCriteria.None:
articles = _context.ArticleSet.Where(a => a.Id == id).Select(a => a.ToModel()).ToList();
break;
case ArticleOrderCriteria.ByLectureTime:
articles = _context.ArticleSet.Where(a => a.Id == id).OrderBy(a => a.LectureTime).Select(a => a.ToModel()).ToList();
break;
case ArticleOrderCriteria.ByTitle:
articles = _context.ArticleSet.Where(a => a.Id == id).OrderBy(a => a.Title).Select(a => a.ToModel()).ToList();
break;
case ArticleOrderCriteria.ByAuthor:
articles = _context.ArticleSet.Where(a => a.Id == id).OrderBy(a => a.Author).Select(a => a.ToModel()).ToList();
break;
case ArticleOrderCriteria.ByDatePublished:
articles = _context.ArticleSet.Where(a => a.Id == id).OrderBy(a => a.DatePublished).Select(a => a.ToModel()).ToList();
break;
case ArticleOrderCriteria.ByDescription:
articles = _context.ArticleSet.Where(a => a.Id == id).OrderBy(a => a.Description).Select(a => a.ToModel()).ToList();
break;
default:
articles = _context.ArticleSet.Where(a => a.Id == id).Select(a => a.ToModel()).ToList();
break;
}
return Task.FromResult(articles.FirstOrDefault());
}
public async Task<Article?> CreateArticle(long id, string title, string description, string author, string date, int lectureTime) public async Task<Article?> CreateArticle(long id, string title, string description, string author, string date, int lectureTime)
@ -56,14 +116,5 @@ public class DbManagerArticle : IArticleService
return true; return true;
} }
public Task<Article?> GetArticleById(int id)
{
var entity = _context.ArticleSet.FirstOrDefault(a => a.Id == id);
return Task.FromResult(entity.ToModel());
}
public async Task<IEnumerable<Article?>> GetAllArticles()
{
return await Task.FromResult(_context.ArticleSet.Select(a => a.ToModel()).AsEnumerable());
}
} }

@ -4,6 +4,12 @@ namespace API_Services
{ {
public interface IArticleService public interface IArticleService
{ {
Task<IEnumerable<Article?>> GetAllArticles(int index, int count, ArticleOrderCriteria orderCriterium);
Task<Article?> GetArticleById(int id, int index, int count, ArticleOrderCriteria orderCriterium);
Task<Article?> CreateArticle(long id, string title, string description, string author, string date, Task<Article?> CreateArticle(long id, string title, string description, string author, string date,
int lectureTime); int lectureTime);
@ -11,9 +17,6 @@ namespace API_Services
Task<bool> UpdateArticle(long id, Article? a); Task<bool> UpdateArticle(long id, Article? a);
Task<Article?> GetArticleById(int id);
Task<IEnumerable<Article?>> GetAllArticles();
} }
} }

@ -0,0 +1,6 @@
namespace Model;
public enum ArticleOrderCriteria
{
None, ByTitle, ByAuthor, ByLectureTime, ByDatePublished, ByDescription
}

@ -0,0 +1,6 @@
namespace Model;
public enum FormOrderCriteria
{
None, ByTheme, ByDate, ByPseudo, ByLien
}

@ -0,0 +1,6 @@
namespace Model;
public enum UserOrderCriteria
{
None, ByFirstName, ByLastName
}
Loading…
Cancel
Save