From 6323399018d47c25a24571f56a64196c8e07dd1a Mon Sep 17 00:00:00 2001 From: tonyfages Date: Sat, 9 Mar 2024 09:52:37 +0100 Subject: [PATCH] ADD pagination + Filtrage --- Verax_API_EF/Verax_API_EF/API/API.csproj | 1 + .../API/Controllers/ArticleController.cs | 9 ++- .../API/Entity_FrameWork.Article.db | Bin 4096 -> 45056 bytes .../API/Entity_FrameWork.Article.db-shm | Bin 32768 -> 0 bytes .../API/Entity_FrameWork.Article.db-wal | Bin 49472 -> 0 bytes .../API_DbDataManager/DbManagerArticle.cs | 71 +++++++++++++++--- .../API_Services/IArticleService.cs | 11 ++- .../Model/ArticleOrderCriteria.cs | 6 ++ .../Verax_API_EF/Model/FormOrderCriteria.cs | 6 ++ .../Verax_API_EF/Model/UserOrderCriteria.cs | 6 ++ 10 files changed, 92 insertions(+), 18 deletions(-) delete mode 100644 Verax_API_EF/Verax_API_EF/API/Entity_FrameWork.Article.db-shm delete mode 100644 Verax_API_EF/Verax_API_EF/API/Entity_FrameWork.Article.db-wal create mode 100644 Verax_API_EF/Verax_API_EF/Model/ArticleOrderCriteria.cs create mode 100644 Verax_API_EF/Verax_API_EF/Model/FormOrderCriteria.cs create mode 100644 Verax_API_EF/Verax_API_EF/Model/UserOrderCriteria.cs diff --git a/Verax_API_EF/Verax_API_EF/API/API.csproj b/Verax_API_EF/Verax_API_EF/API/API.csproj index 01ea7d9..e993a90 100644 --- a/Verax_API_EF/Verax_API_EF/API/API.csproj +++ b/Verax_API_EF/Verax_API_EF/API/API.csproj @@ -26,6 +26,7 @@ + diff --git a/Verax_API_EF/Verax_API_EF/API/Controllers/ArticleController.cs b/Verax_API_EF/Verax_API_EF/API/Controllers/ArticleController.cs index d83ebb8..b5b096c 100644 --- a/Verax_API_EF/Verax_API_EF/API/Controllers/ArticleController.cs +++ b/Verax_API_EF/Verax_API_EF/API/Controllers/ArticleController.cs @@ -1,3 +1,4 @@ +using API_Mapping; using API_Services; using Microsoft.AspNetCore.Mvc; using Model; @@ -18,9 +19,9 @@ namespace API.Controllers } [HttpGet] - public async Task GetAllArticles() + public async Task 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) { return NotFound(); @@ -29,9 +30,9 @@ namespace API.Controllers } [HttpGet("/article/{id}")] - public async Task GetArticleById(int id) + public async Task 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) { return null; diff --git a/Verax_API_EF/Verax_API_EF/API/Entity_FrameWork.Article.db b/Verax_API_EF/Verax_API_EF/API/Entity_FrameWork.Article.db index 9a472209435d88229f65ab7a0ca30d67df87a462..2cd90a9663b869eae1efcea320e2fc466a3588bf 100644 GIT binary patch literal 45056 zcmeI*&u`mQ00(gYNa`e2>j_jvQxAL1#Avj3X;R7r2x(dCjA%(3k`#4^sY;XA#%f}B zwnOOwp^gdu0*;&!e+MTnpj|j|K!OPggaiV?0VH_Oaems_c0pRFueHoS-Y>t;dv@aF z*{!}^&>cz+Osi9O$hvSrkR;&-A%Y;t>@~|?{Yha9q5cY+izCa^7G>eu!B2B@J3>s^ z5au7we=v79_V3&a(MIIU$gZ*xnVXgn+aUk}2tWV=&z!*7PE?6szb@X-JN5lG-P_Z0 zMg7pKJGyDuZ|SyUTBm^UyRcn=OzEmTL^6kAT`IIa9VzzRJ+}7@_^s+2lX0zLH-l3Mwc6B1xSTY}*iQm00 z3cAsx@7ed-?32M>z3Z6ndT=Rw>A=Eg&4?0zV^KU?aMR{@_j2qLMwL2yJ2tg6!_l47 zeAC+&^;GhuEp3-1rbJGV?Gj0NNf=UMG^a%JEUqZ=?UZ=-X1~O&<>-wz9Yz}~+ZP(~ z?S(JOSO&fQ@x}4)*@qWrl=$MJ_)*mDEnW@0nKIrZhSlpe7;k#k%GxchGPU&wX-3+c zWOr)Y`4Y>#sFiA7>(^SeLnj*D3)-qXwA|fq>kYRP2S+OC#!+xc*{0p585}nB52{SB z{L%iLyFJ!dCi_f+1YhN!Q6)mS#w9=+lC2j{{$$5*gqLaM;Y-t6J9eSlIJizOdi2r2PYO8j`+Z5v-}`Zk2e+shX|IC`I^+6gat|9J4XwV#I_?g534HvO_M z+m)WhpqQjTTc+;Iw!eipfp1U8TVXOdIo1$f=wsXBDR+sp{=Z!!8=i^pq^6w&{YYuw zrWy8z72$7M_b#iY}aX-)65mw({ie4&SDZXqIgPstJHuPgUxlVMOm|cg|jV93@ z7S(A{vQKS?G+JiEY_qRJ34NDZnYB!2b&dUdwU(GOF4FvjF%wS%nqq`bf=|@ijeQHB5qo=exw_Rq(o0_qP2CqzE7PN$&f9bHhFpM zs}gDu^MGi^VVl>c$pVODHtVN^{h-gQRX?OW!fPAD%1DEv-0Oe!8$tb5{hrM*K>z{} zfB*y_009U<00Izz00ba#ZUkm!c~SJng~_uLTk(d9$n&DSBo2oz$i3_T6G45bex{zB zn+jq_ApijgKmY;|fB*y_009U<00QSh;F=r}78c?!zO=+f6cp2$^;g{S1$^a7@p6aV zL~*TQc8X^6i_h6@g{HMEdGQz6FZWd*-yJBxRvfc)qaUANgJ1uL)$auLZ}kuL7xhQBhzSA^fB*y_009U<00Izz00bZa zfpaDh4$Gn_%b}1Q73HwZSER7SW)k~Pjz(jwK4JA+e*OQu`m_22Tf_tb2tWV=5P$## zAOHafKmY;|fWSEtP(mWV_7Bg5M0W8Xa#tl;?#(4B6pBWpz48A?g8H@ksd{vdDu-Q# z00bZa0SG_<0uX=z1Rwwb2t1ntYwY2KbLrKK?v43mos2yBztwV%Ur(hD*x$%m=L7%w zt@~tMUSp3M9Hw9o{Tu$RfRPlLL5hr&Vowg_DWYx;=_x7FgB0oB@Bfbk^&j;w^*1&G z;L)>*hrNOT1Rwwb2tWV=5P$##AOHafK;Q`i?mYnBodA59{r1mp2MEdD_0(|^GuK%aVxv8fp_le*(}X$v0A3{rcK`qY diff --git a/Verax_API_EF/Verax_API_EF/API/Entity_FrameWork.Article.db-shm b/Verax_API_EF/Verax_API_EF/API/Entity_FrameWork.Article.db-shm deleted file mode 100644 index 5e1d0731e4700e9719d024cff0e22a037ec27e19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 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 diff --git a/Verax_API_EF/Verax_API_EF/API_DbDataManager/DbManagerArticle.cs b/Verax_API_EF/Verax_API_EF/API_DbDataManager/DbManagerArticle.cs index adf65c2..b37ea0f 100644 --- a/Verax_API_EF/Verax_API_EF/API_DbDataManager/DbManagerArticle.cs +++ b/Verax_API_EF/Verax_API_EF/API_DbDataManager/DbManagerArticle.cs @@ -14,8 +14,68 @@ public class DbManagerArticle : IArticleService { _context = context; } + public async Task> GetAllArticles(int index, int count, ArticleOrderCriteria orderCriterium) + { + List
articles = new List
(); + + 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 GetArticleById(int id, int index, int count, ArticleOrderCriteria orderCriterium) + { + List
articles = new List
(); + 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 CreateArticle(long id, string title, string description, string author, string date, int lectureTime) { var entity = new Entities.ArticleEntity() @@ -56,14 +116,5 @@ public class DbManagerArticle : IArticleService return true; } - public Task GetArticleById(int id) - { - var entity = _context.ArticleSet.FirstOrDefault(a => a.Id == id); - return Task.FromResult(entity.ToModel()); - } - - public async Task> GetAllArticles() - { - return await Task.FromResult(_context.ArticleSet.Select(a => a.ToModel()).AsEnumerable()); - } + } \ No newline at end of file diff --git a/Verax_API_EF/Verax_API_EF/API_Services/IArticleService.cs b/Verax_API_EF/Verax_API_EF/API_Services/IArticleService.cs index 2bbeac2..28a2851 100644 --- a/Verax_API_EF/Verax_API_EF/API_Services/IArticleService.cs +++ b/Verax_API_EF/Verax_API_EF/API_Services/IArticleService.cs @@ -4,6 +4,12 @@ namespace API_Services { public interface IArticleService { + + Task> GetAllArticles(int index, int count, ArticleOrderCriteria orderCriterium); + + Task GetArticleById(int id, int index, int count, ArticleOrderCriteria orderCriterium); + + Task CreateArticle(long id, string title, string description, string author, string date, int lectureTime); @@ -11,9 +17,6 @@ namespace API_Services Task UpdateArticle(long id, Article? a); - Task GetArticleById(int id); - - Task> GetAllArticles(); - + } } diff --git a/Verax_API_EF/Verax_API_EF/Model/ArticleOrderCriteria.cs b/Verax_API_EF/Verax_API_EF/Model/ArticleOrderCriteria.cs new file mode 100644 index 0000000..bf34437 --- /dev/null +++ b/Verax_API_EF/Verax_API_EF/Model/ArticleOrderCriteria.cs @@ -0,0 +1,6 @@ +namespace Model; + +public enum ArticleOrderCriteria +{ + None, ByTitle, ByAuthor, ByLectureTime, ByDatePublished, ByDescription +} \ No newline at end of file diff --git a/Verax_API_EF/Verax_API_EF/Model/FormOrderCriteria.cs b/Verax_API_EF/Verax_API_EF/Model/FormOrderCriteria.cs new file mode 100644 index 0000000..f36ca89 --- /dev/null +++ b/Verax_API_EF/Verax_API_EF/Model/FormOrderCriteria.cs @@ -0,0 +1,6 @@ +namespace Model; + +public enum FormOrderCriteria +{ + None, ByTheme, ByDate, ByPseudo, ByLien +} \ No newline at end of file diff --git a/Verax_API_EF/Verax_API_EF/Model/UserOrderCriteria.cs b/Verax_API_EF/Verax_API_EF/Model/UserOrderCriteria.cs new file mode 100644 index 0000000..a7966db --- /dev/null +++ b/Verax_API_EF/Verax_API_EF/Model/UserOrderCriteria.cs @@ -0,0 +1,6 @@ +namespace Model; + +public enum UserOrderCriteria +{ + None, ByFirstName, ByLastName +} \ No newline at end of file