From b3109d15412653c29dbb15f51945a9fdd4eb6432 Mon Sep 17 00:00:00 2001 From: Nestisse Date: Sat, 9 Mar 2024 09:12:01 +0100 Subject: [PATCH 01/14] Ajout du stub pour une enquete --- API_SQLuedo/EntityFramework/InquiryEntity.cs | 65 +++++++++---------- API_SQLuedo/EntityFramework/SolutionEntity.cs | 9 +++ .../StubbedContextLib/StubbedContext.cs | 21 +++++- 3 files changed, 60 insertions(+), 35 deletions(-) diff --git a/API_SQLuedo/EntityFramework/InquiryEntity.cs b/API_SQLuedo/EntityFramework/InquiryEntity.cs index f930acf..c77e521 100644 --- a/API_SQLuedo/EntityFramework/InquiryEntity.cs +++ b/API_SQLuedo/EntityFramework/InquiryEntity.cs @@ -1,39 +1,36 @@ -using System.ComponentModel.DataAnnotations; +namespace Entities; -namespace Entities +public class InquiryEntity { - public class InquiryEntity - { - public int Id { get; } - public string Title { get; set; } - public string Description { get; set; } - public bool IsUser { get; set; } - public InquiryTableEntity Database { get; set; } - public SolutionEntity InquiryTable { get; set; } - public InquiryEntity() { } + public int Id { get; } + public string Title { get; set; } + public string Description { get; set; } + public bool IsUser { get; set; } + public InquiryTableEntity Database { get; set; } + public SolutionEntity InquiryTable { get; set; } + public InquiryEntity() { } - public InquiryEntity(int id) - { - Id = id; - } - public InquiryEntity(int id, string title, string description, bool isUser, InquiryTableEntity database, SolutionEntity inquiryTable) - { - Id = id; - Title = title; - Description = description; - IsUser = isUser; - Database = database; - InquiryTable = inquiryTable; - } + public InquiryEntity(int id) + { + Id = id; + } + public InquiryEntity(int id, string title, string description, bool isUser, InquiryTableEntity database, SolutionEntity inquiryTable) + { + Id = id; + Title = title; + Description = description; + IsUser = isUser; + Database = database; + InquiryTable = inquiryTable; + } - public InquiryEntity(string title, string description, bool isUser, InquiryTableEntity database, SolutionEntity inquiryTable) - { - Id = 0; - Title = title; - Description = description; - IsUser = isUser; - Database = database; - InquiryTable = inquiryTable; - } + public InquiryEntity(string title, string description, bool isUser, InquiryTableEntity database, SolutionEntity inquiryTable) + { + Id = 0; + Title = title; + Description = description; + IsUser = isUser; + Database = database; + InquiryTable = inquiryTable; } -} +} \ No newline at end of file diff --git a/API_SQLuedo/EntityFramework/SolutionEntity.cs b/API_SQLuedo/EntityFramework/SolutionEntity.cs index 6c8dbdf..c2aa1ee 100644 --- a/API_SQLuedo/EntityFramework/SolutionEntity.cs +++ b/API_SQLuedo/EntityFramework/SolutionEntity.cs @@ -41,4 +41,13 @@ public class SolutionEntity MurderWeapon = murderWeapon; Explanation = explanation; } + public SolutionEntity(int ownerId, string murdererFirstName, string murdererLastName, string murderPlace, string murderWeapon, string explanation) + { + OwnerId = ownerId; + MurdererFirstName = murdererFirstName; + MurdererLastName = murdererLastName; + MurderPlace = murderPlace; + MurderWeapon = murderWeapon; + Explanation = explanation; + } } \ No newline at end of file diff --git a/API_SQLuedo/StubbedContextLib/StubbedContext.cs b/API_SQLuedo/StubbedContextLib/StubbedContext.cs index a833821..6745ede 100644 --- a/API_SQLuedo/StubbedContextLib/StubbedContext.cs +++ b/API_SQLuedo/StubbedContextLib/StubbedContext.cs @@ -1,4 +1,5 @@ -using System.Security.Cryptography; +using System.Runtime.CompilerServices; +using System.Security.Cryptography; using DbContextLib; using Entities; using Microsoft.AspNetCore.Cryptography.KeyDerivation; @@ -46,5 +47,23 @@ public class StubbedContext : UserDbContext prf: KeyDerivationPrf.HMACSHA256, iterationCount: 100000, numBytesRequested: 256 / 8)), "Victor.GABORIT@etu.uca.fr", true)); + + modelBuilder.Entity().HasData( + new InquiryEntity(1, "L'enquête de la carotte", "La description de l'inquiry1", true, null, null), + new InquiryEntity(2, "L'enquête sur les orang outan", "The new description", false, null, null), + new InquiryEntity(3, "L'enquête sur les parapluies", "Il pleuvait", false, null, null)); + + modelBuilder.Entity().HasData( + new InquiryTableEntity(1, "Inquiry1", + "Server=localhost;Database=Inquiry1;Trusted_Connection=True;MultipleActiveResultSets=true"), + new InquiryTableEntity(2, "Inquiry2", + "Server=localhost;Database=Inquiry2;Trusted_Connection=True;MultipleActiveResultSets=true"), + new InquiryTableEntity(3, "Inquiry3", + "Server=localhost;Database=Inquiry3;Trusted_Connection=True;MultipleActiveResultSets=true")); + + modelBuilder.Entity().HasData( + new SolutionEntity(1, "Maxime", "Sapountzis", "La cuisine", "Le couteau", "Parce que c'est Maxime"), + new SolutionEntity(2, "Johnny", "Ratton", "La cuisine", "Le couteau", "Parce que il est ra****"), + new SolutionEntity(3, "Erwan", "Menager", "La salle de bain", "L'arachide", "Parce que c'est Erwan")); } } \ No newline at end of file From 3e4e96c7c94e1419ddccbe746f253a9dd4ff52e7 Mon Sep 17 00:00:00 2001 From: Nestisse Date: Sat, 9 Mar 2024 09:47:37 +0100 Subject: [PATCH 02/14] =?UTF-8?q?Ajout=20d'id=20pour=20r=C3=A9f=C3=A9rence?= =?UTF-8?q?r=20la=20solution=20et=20la=20base=20de=20donn=C3=A9es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API_SQLuedo/EntityFramework/InquiryEntity.cs | 25 +++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/API_SQLuedo/EntityFramework/InquiryEntity.cs b/API_SQLuedo/EntityFramework/InquiryEntity.cs index c77e521..3c43ee4 100644 --- a/API_SQLuedo/EntityFramework/InquiryEntity.cs +++ b/API_SQLuedo/EntityFramework/InquiryEntity.cs @@ -6,15 +6,22 @@ public class InquiryEntity public string Title { get; set; } public string Description { get; set; } public bool IsUser { get; set; } + public int IdDatabase { get; set; } public InquiryTableEntity Database { get; set; } + public int IdInquiryTable { get; set; } public SolutionEntity InquiryTable { get; set; } - public InquiryEntity() { } + + public InquiryEntity() + { + } public InquiryEntity(int id) { Id = id; } - public InquiryEntity(int id, string title, string description, bool isUser, InquiryTableEntity database, SolutionEntity inquiryTable) + + public InquiryEntity(int id, string title, string description, bool isUser, InquiryTableEntity database, + SolutionEntity inquiryTable) { Id = id; Title = title; @@ -24,7 +31,8 @@ public class InquiryEntity InquiryTable = inquiryTable; } - public InquiryEntity(string title, string description, bool isUser, InquiryTableEntity database, SolutionEntity inquiryTable) + public InquiryEntity(string title, string description, bool isUser, InquiryTableEntity database, + SolutionEntity inquiryTable) { Id = 0; Title = title; @@ -33,4 +41,15 @@ public class InquiryEntity Database = database; InquiryTable = inquiryTable; } + + public InquiryEntity(int id, string title, string description, bool isUser, int database, + int inquiryTable) + { + Id = id; + Title = title; + Description = description; + IsUser = isUser; + IdDatabase = database; + IdInquiryTable = inquiryTable; + } } \ No newline at end of file From 7c88ef1b846ef2d457a850681e384f3f8b1d8de2 Mon Sep 17 00:00:00 2001 From: Nestisse Date: Sat, 9 Mar 2024 09:48:05 +0100 Subject: [PATCH 03/14] =?UTF-8?q?Modification=20du=20stub=20pour=20r=C3=A9?= =?UTF-8?q?f=C3=A9rencer=20explicitement=20les=20id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API_SQLuedo/StubbedContextLib/StubbedContext.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/API_SQLuedo/StubbedContextLib/StubbedContext.cs b/API_SQLuedo/StubbedContextLib/StubbedContext.cs index 6745ede..e87f12f 100644 --- a/API_SQLuedo/StubbedContextLib/StubbedContext.cs +++ b/API_SQLuedo/StubbedContextLib/StubbedContext.cs @@ -49,9 +49,9 @@ public class StubbedContext : UserDbContext numBytesRequested: 256 / 8)), "Victor.GABORIT@etu.uca.fr", true)); modelBuilder.Entity().HasData( - new InquiryEntity(1, "L'enquête de la carotte", "La description de l'inquiry1", true, null, null), - new InquiryEntity(2, "L'enquête sur les orang outan", "The new description", false, null, null), - new InquiryEntity(3, "L'enquête sur les parapluies", "Il pleuvait", false, null, null)); + new InquiryEntity(1, "L'enquête de la carotte", "La description de l'inquiry1", true, 1, 1), + new InquiryEntity(2, "L'enquête sur les orang outan", "The new description", false, 2, 2), + new InquiryEntity(3, "L'enquête sur les parapluies", "Il pleuvait", false, 3, 3)); modelBuilder.Entity().HasData( new InquiryTableEntity(1, "Inquiry1", From 8b7a9d896543f7d83f5e7141c4d8322cd0d0b422 Mon Sep 17 00:00:00 2001 From: Nestisse Date: Sat, 9 Mar 2024 09:48:21 +0100 Subject: [PATCH 04/14] Ajout des tests sur les enquetes --- API_SQLuedo/TestConsoleEf/Program.cs | 143 +++++++++++++++++++++++++-- 1 file changed, 136 insertions(+), 7 deletions(-) diff --git a/API_SQLuedo/TestConsoleEf/Program.cs b/API_SQLuedo/TestConsoleEf/Program.cs index 380fe1e..33b60fa 100644 --- a/API_SQLuedo/TestConsoleEf/Program.cs +++ b/API_SQLuedo/TestConsoleEf/Program.cs @@ -4,7 +4,6 @@ using Entities; using Microsoft.AspNetCore.Cryptography.KeyDerivation; using Microsoft.Data.Sqlite; using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Logging; using StubbedContextLib; var connection = new SqliteConnection("DataSource=:memory:"); @@ -13,23 +12,23 @@ var options = new DbContextOptionsBuilder() .UseSqlite(connection) .Options; -using ILoggerFactory factory = new LoggerFactory(); +// Partie sur les utilisateurs using (var db = new StubbedContext(options)) { await db.Database.EnsureCreatedAsync(); - // Test sur les users + // Test sur les utilisateurs var users = db.Users; - // Affichage de tous les users + // Affichage de tous les utilisateurs Console.WriteLine("Affichage des noms des utilisateurs"); foreach (var user in users) { Console.WriteLine(user.Username); } - // Affichage des users filtrés + // Affichage des utilisateurs filtrés Console.WriteLine("\nAffichage des utilisateurs contenant e"); var filteredUsers = users.Where(u => u.Username.Contains("e")); foreach (var user in filteredUsers) @@ -37,7 +36,7 @@ using (var db = new StubbedContext(options)) Console.WriteLine(user.Username); } - // Affichage des users triés + // Affichage des utilisateurs triés Console.WriteLine("\nAffichage des utilisateurs triés selon leur nom"); var orderedUsers = users.OrderBy(u => u.Username); foreach (var user in orderedUsers) @@ -62,11 +61,13 @@ using (var db = new StubbedContext(options)) using (var db = new StubbedContext(options)) { + await db.Database.EnsureCreatedAsync(); + var users = db.Users; // Affichage du nouvel utilisateur Console.WriteLine("\nAffichage du nouvel utilisateur"); var u = await users.FirstOrDefaultAsync(u => u.Username == "le nouveau du groupe"); - foreach (var pptt in typeof(UserEntity).GetProperties().Where((p => p.CanWrite && p.Name != nameof(UserEntity.Id)))) + foreach (var pptt in typeof(UserEntity).GetProperties().Where(p => p.CanWrite && p.Name != nameof(UserEntity.Id))) { Console.WriteLine(pptt.GetValue(u)); } @@ -82,6 +83,8 @@ using (var db = new StubbedContext(options)) using (var db = new StubbedContext(options)) { + await db.Database.EnsureCreatedAsync(); + var users = db.Users; // Affichage des utilisateurs après suppression Console.WriteLine("\nAffichage des utilisateurs après suppression"); @@ -102,6 +105,8 @@ using (var db = new StubbedContext(options)) using (var db = new StubbedContext(options)) { + await db.Database.EnsureCreatedAsync(); + var users = db.Users; // Affichage des utilisateurs après modification var userToModify = await users.FirstOrDefaultAsync(u => u.Username == "clement modifié"); @@ -117,4 +122,128 @@ using (var db = new StubbedContext(options)) await db.SaveChangesAsync(); } } +} + +// Partie sur les enquetes +using (var db = new StubbedContext(options)) +{ + await db.Database.EnsureCreatedAsync(); + + // Test sur les enquetes + var inquiries = db.Inquiry; + + // Affichage de toutes les enquetes + Console.WriteLine("\nAffichage des noms des enquetes"); + foreach (var inquiry in inquiries) + { + Console.WriteLine(inquiry.Title); + } + + // Affichage des enquetes filtrées + Console.WriteLine("\nAffichage des enquetes contenant o"); + var filteredInquiries = inquiries.Where(i => i.Title.Contains("o")); + foreach (var inquiry in filteredInquiries) + { + Console.WriteLine(inquiry.Title); + } + + // Affichage des enquetes triées + Console.WriteLine("\nAffichage des enquetes triées selon leur nom"); + var orderedInquiries = inquiries.OrderBy(i => i.Title); + foreach (var inquiry in orderedInquiries) + { + Console.WriteLine(inquiry.Title); + } + + var fkoaf = db.Solutions; + + // Affichage de la solution de l'enquete sur les orang outan + Console.WriteLine("\nAffichage de la solution de l'enquete sur les orang outan"); + var inquirySolution = await inquiries.FirstOrDefaultAsync(i => i.Title == "L'enquête sur les orang outan"); + var i = inquirySolution.InquiryTable; + foreach (var pptt in typeof(SolutionEntity).GetProperties() + .Where(p => p.CanWrite && p.Name != nameof(SolutionEntity.Owner))) + { + Console.WriteLine(pptt.GetValue(i)); + } + + // Ajout d'une enquete + Console.WriteLine("\nAjout de la nouvelle enquete"); + var newInquiry = new InquiryEntity( + "La nouvelle enquete", + "La description de la nouvelle enquete", + true, + null, + null); + if (!inquiries.Any(inquiry => inquiry.Title == newInquiry.Title)) + { + inquiries.Add(newInquiry); + await db.SaveChangesAsync(); + } +} + +using (var db = new StubbedContext(options)) +{ + await db.Database.EnsureCreatedAsync(); + + var inquiries = db.Inquiry; + // Affichage de la nouvelle enquete + Console.WriteLine("\nAffichage de la nouvelle enquete"); + var i = await inquiries.FirstOrDefaultAsync(i => i.Title == "La nouvelle enquete"); + foreach (var pptt in typeof(InquiryEntity).GetProperties() + .Where(p => p.CanWrite && p.Name != nameof(InquiryEntity.Id))) + { + Console.WriteLine(pptt.GetValue(i)); + } + + if (i != null) + { + // Suppression de la nouvelle enquete + Console.WriteLine("\nSuppression de la nouvelle enquete"); + db.Inquiry.Remove(i); + await db.SaveChangesAsync(); + } +} + +using (var db = new StubbedContext(options)) +{ + await db.Database.EnsureCreatedAsync(); + + var inquiries = db.Inquiry; + // Affichage des utilisateurs après suppression + Console.WriteLine("\nAffichage des utilisateurs après suppression"); + foreach (var inquiry in inquiries) + { + Console.WriteLine(inquiry.Title); + } + + // Modification d'une enquete + Console.WriteLine("\nModification de l'enquete L'enquête de la carotte"); + var inquiryToModify = await inquiries.FirstOrDefaultAsync(i => i.Title == "L'enquête de la carotte"); + if (inquiryToModify != null) + { + inquiryToModify.Title = "L'enquête de la carotte modifiée"; + await db.SaveChangesAsync(); + } +} + +using (var db = new StubbedContext(options)) +{ + await db.Database.EnsureCreatedAsync(); + + var inquiries = db.Inquiry; + // Affichage des enquetes après modification + var inquiryToModify = await inquiries.FirstOrDefaultAsync(i => i.Title == "L'enquête de la carotte modifiée"); + if (inquiryToModify != null) + { + Console.WriteLine("\nAffichage de l'enquete après modification"); + Console.WriteLine(inquiryToModify.Title); + // Rollback + inquiryToModify = await inquiries.FirstOrDefaultAsync(i => i.Title == "L'enquête de la carotte modifiée"); + if (inquiryToModify != null) + { + inquiryToModify.Title = "L'enquête de la carotte"; + await db.SaveChangesAsync(); + } + } } \ No newline at end of file From 8576c5515b67024a81c4d83912210024f7912ad0 Mon Sep 17 00:00:00 2001 From: Nestisse Date: Sun, 10 Mar 2024 11:08:53 +0100 Subject: [PATCH 05/14] Ajout de la partie solution --- API_SQLuedo/TestConsoleEf/Program.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/API_SQLuedo/TestConsoleEf/Program.cs b/API_SQLuedo/TestConsoleEf/Program.cs index 33b60fa..52c6063 100644 --- a/API_SQLuedo/TestConsoleEf/Program.cs +++ b/API_SQLuedo/TestConsoleEf/Program.cs @@ -155,10 +155,14 @@ using (var db = new StubbedContext(options)) Console.WriteLine(inquiry.Title); } - var fkoaf = db.Solutions; + var solutions = db.Solutions; // Affichage de la solution de l'enquete sur les orang outan Console.WriteLine("\nAffichage de la solution de l'enquete sur les orang outan"); + + var sol = await solutions.FirstOrDefaultAsync(s => s.Owner.Title == "L'enquête sur les orang outan"); + Console.WriteLine(sol.MurdererFirstName); + var inquirySolution = await inquiries.FirstOrDefaultAsync(i => i.Title == "L'enquête sur les orang outan"); var i = inquirySolution.InquiryTable; foreach (var pptt in typeof(SolutionEntity).GetProperties() From a1876b108cb9a5da47ce6a97b4623dc90a452c0f Mon Sep 17 00:00:00 2001 From: Nestisse Date: Mon, 11 Mar 2024 09:50:07 +0100 Subject: [PATCH 06/14] =?UTF-8?q?Modification=20des=20classes=20Lesson,=20?= =?UTF-8?q?ContentLesson,=20Paragraph=20et=20ajout=20des=20namespaces=20sa?= =?UTF-8?q?ns=20la=20port=C3=A9e=20via=20les=20crochets?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API_SQLuedo/DbContextLib/UserDbContext.cs | 1 - API_SQLuedo/Dto/BlackListDTO.cs | 21 ++++--- API_SQLuedo/Dto/ContentLessonDTO.cs | 23 ++++---- API_SQLuedo/Dto/InquiryDTO.cs | 37 ++++++------ API_SQLuedo/Dto/InquiryTableDTO.cs | 27 +++++---- API_SQLuedo/Dto/LessonDTO.cs | 44 +++++++------- API_SQLuedo/Dto/NotepadDTO.cs | 43 +++++++------- API_SQLuedo/Dto/ParagraphDTO.cs | 43 +++++--------- API_SQLuedo/Dto/SolutionDTO.cs | 53 +++++++++-------- API_SQLuedo/Dto/SuccessDTO.cs | 27 +++++---- API_SQLuedo/Dto/UserDTO.cs | 57 +++++++++---------- .../EntityFramework/ContentLessonEntity.cs | 39 +++++++++---- API_SQLuedo/EntityFramework/LessonEntity.cs | 7 +-- .../EntityFramework/ParagraphEntity.cs | 27 ++++----- API_SQLuedo/Model/BlackList.cs | 21 ++++--- API_SQLuedo/Model/ContentLesson.cs | 32 +++++++---- API_SQLuedo/Model/Inquiry.cs | 39 +++++++------ API_SQLuedo/Model/InquiryTable.cs | 29 +++++----- API_SQLuedo/Model/Lesson.cs | 48 +++++++--------- API_SQLuedo/Model/Notepad.cs | 43 +++++++------- API_SQLuedo/Model/Paragraph.cs | 53 +++++++---------- API_SQLuedo/Model/Solution.cs | 53 +++++++++-------- API_SQLuedo/Model/Success.cs | 27 +++++---- API_SQLuedo/Model/User.cs | 35 ++++++------ API_SQLuedo/Shared/Mapper/BlackListMapper.cs | 2 +- .../Shared/Mapper/ContentLessonMapper.cs | 34 ----------- API_SQLuedo/Shared/Mapper/InquiryMapper.cs | 2 +- .../Shared/Mapper/InquiryTableMapper.cs | 2 +- API_SQLuedo/Shared/Mapper/LessonMapper.cs | 2 +- API_SQLuedo/Shared/Mapper/NotepadMapper.cs | 2 +- API_SQLuedo/Shared/Mapper/ParagraphMapper.cs | 20 ++++--- API_SQLuedo/Shared/Mapper/SolutionMapper.cs | 2 +- API_SQLuedo/Shared/Mapper/SuccessMapper.cs | 2 +- API_SQLuedo/Shared/Mapper/UserMapper.cs | 2 +- 34 files changed, 419 insertions(+), 480 deletions(-) delete mode 100644 API_SQLuedo/Shared/Mapper/ContentLessonMapper.cs diff --git a/API_SQLuedo/DbContextLib/UserDbContext.cs b/API_SQLuedo/DbContextLib/UserDbContext.cs index 8be1c6f..6352ab8 100644 --- a/API_SQLuedo/DbContextLib/UserDbContext.cs +++ b/API_SQLuedo/DbContextLib/UserDbContext.cs @@ -30,7 +30,6 @@ namespace DbContextLib protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity().HasKey(c => c.LessonId); - modelBuilder.Entity().HasKey(c => c.LessonPartId); modelBuilder.Entity().HasKey(s => s.UserId); modelBuilder.Entity().HasKey(s => s.InquiryId); modelBuilder.Entity().HasKey(s => s.Id); diff --git a/API_SQLuedo/Dto/BlackListDTO.cs b/API_SQLuedo/Dto/BlackListDTO.cs index e614e70..913aaa0 100644 --- a/API_SQLuedo/Dto/BlackListDTO.cs +++ b/API_SQLuedo/Dto/BlackListDTO.cs @@ -1,14 +1,13 @@ -namespace Dto +namespace Dto; + +public class BlackListDTO { - public class BlackListDTO - { - public string Email { get; set; } - public DateOnly ExpirationDate { get; set; } + public string Email { get; set; } + public DateOnly ExpirationDate { get; set; } - public BlackListDTO(string email, DateOnly expirationDate) - { - Email = email; - ExpirationDate = expirationDate; - } + public BlackListDTO(string email, DateOnly expirationDate) + { + Email = email; + ExpirationDate = expirationDate; } -} +} \ No newline at end of file diff --git a/API_SQLuedo/Dto/ContentLessonDTO.cs b/API_SQLuedo/Dto/ContentLessonDTO.cs index ef844e7..778e428 100644 --- a/API_SQLuedo/Dto/ContentLessonDTO.cs +++ b/API_SQLuedo/Dto/ContentLessonDTO.cs @@ -1,14 +1,17 @@ -namespace Dto +namespace Dto; + +public abstract class ContentLessonDTO { - public class ContentLessonDTO - { - public int LessonId { get; set; } - public int LessonPartId { get; set; } + public int Id { get; set; } + public string ContentContent { get; set; } + public string ContentTitle { get; set; } + public int LessonId { get; set; } - public ContentLessonDTO(int lessonId, int lessonPartId) - { - LessonId = lessonId; - LessonPartId = lessonPartId; - } + protected ContentLessonDTO(int id, string contentContent, string contentTitle, int lessonId) + { + Id = id; + ContentContent = contentContent; + ContentTitle = contentTitle; + LessonId = lessonId; } } \ No newline at end of file diff --git a/API_SQLuedo/Dto/InquiryDTO.cs b/API_SQLuedo/Dto/InquiryDTO.cs index a1e438f..5b2ad10 100644 --- a/API_SQLuedo/Dto/InquiryDTO.cs +++ b/API_SQLuedo/Dto/InquiryDTO.cs @@ -1,26 +1,25 @@ -namespace Dto +namespace Dto; + +public class InquiryDTO { - public class InquiryDTO - { - public int Id { get;} + public int Id { get;} - public string Title { get; set; } + public string Title { get; set; } - public string Description { get; set; } + public string Description { get; set; } - public bool IsUser { get; set; } + public bool IsUser { get; set; } - public int Database { get; set; } - public int InquiryTable { get; set; } + public int Database { get; set; } + public int InquiryTable { get; set; } - public InquiryDTO(int id, string title, string description, bool isUser, int database, int inquiryTable) - { - Id = id; - Title = title; - Description = description; - IsUser = isUser; - Database = database; - InquiryTable = inquiryTable; - } + public InquiryDTO(int id, string title, string description, bool isUser, int database, int inquiryTable) + { + Id = id; + Title = title; + Description = description; + IsUser = isUser; + Database = database; + InquiryTable = inquiryTable; } -} +} \ No newline at end of file diff --git a/API_SQLuedo/Dto/InquiryTableDTO.cs b/API_SQLuedo/Dto/InquiryTableDTO.cs index ce28216..a636053 100644 --- a/API_SQLuedo/Dto/InquiryTableDTO.cs +++ b/API_SQLuedo/Dto/InquiryTableDTO.cs @@ -1,19 +1,18 @@ -namespace Dto +namespace Dto; + +public class InquiryTableDTO { - public class InquiryTableDTO - { - public int OwnerId { get; set; } - public string DatabaseName { get; set; } - public string ConnectionInfo { get; set; } + public int OwnerId { get; set; } + public string DatabaseName { get; set; } + public string ConnectionInfo { get; set; } - public InquiryTableDTO() { } + public InquiryTableDTO() { } - public InquiryTableDTO(int ownerId, string databaseName, string connectionInfo) - { - OwnerId = ownerId; - DatabaseName = databaseName; - ConnectionInfo = connectionInfo; - } + public InquiryTableDTO(int ownerId, string databaseName, string connectionInfo) + { + OwnerId = ownerId; + DatabaseName = databaseName; + ConnectionInfo = connectionInfo; } -} +} \ No newline at end of file diff --git a/API_SQLuedo/Dto/LessonDTO.cs b/API_SQLuedo/Dto/LessonDTO.cs index 70983ff..8e70b4f 100644 --- a/API_SQLuedo/Dto/LessonDTO.cs +++ b/API_SQLuedo/Dto/LessonDTO.cs @@ -1,26 +1,26 @@ -namespace Dto +namespace Dto; + +public class LessonDTO { - public class LessonDTO - { - public int Id { get; } - public string? Title { get; set; } - public string? LastPublisher { get; set; } - public DateOnly? LastEdit { get; set; } + public int Id { get; } + public string? Title { get; set; } + public string? LastPublisher { get; set; } + public DateOnly? LastEdit { get; set; } + public ICollection Content { get; set; } = new List(); - public LessonDTO() { } - public LessonDTO(int id, string title, string lastPublisher, DateOnly? lastEdit) - { - Id = id; - Title = title; - LastPublisher = lastPublisher; - LastEdit = lastEdit; - } + public LessonDTO() { } + public LessonDTO(int id, string title, string lastPublisher, DateOnly? lastEdit) + { + Id = id; + Title = title; + LastPublisher = lastPublisher; + LastEdit = lastEdit; + } - public LessonDTO(string title, string lastPublisher, DateOnly? lastEdit) - { - Title = title; - LastPublisher = lastPublisher; - LastEdit = lastEdit; - } + public LessonDTO(string title, string lastPublisher, DateOnly? lastEdit) + { + Title = title; + LastPublisher = lastPublisher; + LastEdit = lastEdit; } -} +} \ No newline at end of file diff --git a/API_SQLuedo/Dto/NotepadDTO.cs b/API_SQLuedo/Dto/NotepadDTO.cs index 3e86998..c49e155 100644 --- a/API_SQLuedo/Dto/NotepadDTO.cs +++ b/API_SQLuedo/Dto/NotepadDTO.cs @@ -1,26 +1,25 @@ -namespace Dto +namespace Dto; + +public class NotepadDTO { - public class NotepadDTO - { - public int Id { get; set; } - public int UserId { get; set; } - public int InquiryId { get; set; } - public string Notes { get; set; } + public int Id { get; set; } + public int UserId { get; set; } + public int InquiryId { get; set; } + public string Notes { get; set; } - public NotepadDTO() { } + public NotepadDTO() { } - public NotepadDTO(int id, int userId, int inquiryId, string notes) - { - Id = id; - UserId = userId; - InquiryId = inquiryId; - Notes = notes; - } - public NotepadDTO(int userId, int inquiryId, string notes) - { - UserId = userId; - InquiryId = inquiryId; - Notes = notes; - } + public NotepadDTO(int id, int userId, int inquiryId, string notes) + { + Id = id; + UserId = userId; + InquiryId = inquiryId; + Notes = notes; + } + public NotepadDTO(int userId, int inquiryId, string notes) + { + UserId = userId; + InquiryId = inquiryId; + Notes = notes; } -} +} \ No newline at end of file diff --git a/API_SQLuedo/Dto/ParagraphDTO.cs b/API_SQLuedo/Dto/ParagraphDTO.cs index c203c9c..1bb2016 100644 --- a/API_SQLuedo/Dto/ParagraphDTO.cs +++ b/API_SQLuedo/Dto/ParagraphDTO.cs @@ -1,32 +1,17 @@ -namespace Dto -{ - public class ParagraphDTO - { - public int Id { get; } - public string Title { get; set; } - public string Content { get; set; } - public string Info { get; set; } - public string Query { get; set; } - public string Comment { get; set; } +namespace Dto; - public ParagraphDTO() { } +public class ParagraphDTO : ContentLessonDTO +{ + public string Info { get; set; } + public string Query { get; set; } + public string Comment { get; set; } - public ParagraphDTO(int id, string title, string content, string info, string query, string comment) - { - Id = id; - Title = title; - Content = content; - Info = info; - Query = query; - Comment = comment; - } - public ParagraphDTO(string title, string content, string info, string query, string comment) - { - Title = title; - Content = content; - Info = info; - Query = query; - Comment = comment; - } + public ParagraphDTO(int id, string title, string content, string info, string query, string comment, int lessonId) : + base(id, content, + title, lessonId) + { + Info = info; + Query = query; + Comment = comment; } -} +} \ No newline at end of file diff --git a/API_SQLuedo/Dto/SolutionDTO.cs b/API_SQLuedo/Dto/SolutionDTO.cs index a775fd6..b13daf6 100644 --- a/API_SQLuedo/Dto/SolutionDTO.cs +++ b/API_SQLuedo/Dto/SolutionDTO.cs @@ -1,30 +1,29 @@ -namespace Dto +namespace Dto; + +public class SolutionDTO { - public class SolutionDTO + public int OwnerId { get; set; } + public string MurdererFirstName { get; set; } + public string MurdererLastName { get; set; } + public string MurderPlace { get; set; } + public string MurderWeapon { get; set; } + public string Explanation { get; set; } + public SolutionDTO() { } + public SolutionDTO(int ownerId, string murdererFirstName, string murdererLastName, string murderPlace, string murderWeapon, string explanation) { - public int OwnerId { get; set; } - public string MurdererFirstName { get; set; } - public string MurdererLastName { get; set; } - public string MurderPlace { get; set; } - public string MurderWeapon { get; set; } - public string Explanation { get; set; } - public SolutionDTO() { } - public SolutionDTO(int ownerId, string murdererFirstName, string murdererLastName, string murderPlace, string murderWeapon, string explanation) - { - OwnerId = ownerId; - MurdererFirstName = murdererFirstName; - MurdererLastName = murdererLastName; - MurderPlace = murderPlace; - MurderWeapon = murderWeapon; - Explanation = explanation; - } - public SolutionDTO(string murdererFirstName, string murdererLastName, string murderPlace, string murderWeapon, string explanation) - { - MurdererFirstName = murdererFirstName; - MurdererLastName = murdererLastName; - MurderPlace = murderPlace; - MurderWeapon = murderWeapon; - Explanation = explanation; - } + OwnerId = ownerId; + MurdererFirstName = murdererFirstName; + MurdererLastName = murdererLastName; + MurderPlace = murderPlace; + MurderWeapon = murderWeapon; + Explanation = explanation; } -} + public SolutionDTO(string murdererFirstName, string murdererLastName, string murderPlace, string murderWeapon, string explanation) + { + MurdererFirstName = murdererFirstName; + MurdererLastName = murdererLastName; + MurderPlace = murderPlace; + MurderWeapon = murderWeapon; + Explanation = explanation; + } +} \ No newline at end of file diff --git a/API_SQLuedo/Dto/SuccessDTO.cs b/API_SQLuedo/Dto/SuccessDTO.cs index ad3fcb3..87c26a3 100644 --- a/API_SQLuedo/Dto/SuccessDTO.cs +++ b/API_SQLuedo/Dto/SuccessDTO.cs @@ -1,18 +1,17 @@ -namespace Dto +namespace Dto; + +public class SuccessDTO { - public class SuccessDTO - { - public int UserId { get; set; } - public int InquiryId { get; set; } - public bool IsFinished { get; set; } + public int UserId { get; set; } + public int InquiryId { get; set; } + public bool IsFinished { get; set; } - public SuccessDTO() { } + public SuccessDTO() { } - public SuccessDTO(int userId, int inquiryId, bool isFinished) - { - UserId = userId; - InquiryId = inquiryId; - IsFinished = isFinished; - } + public SuccessDTO(int userId, int inquiryId, bool isFinished) + { + UserId = userId; + InquiryId = inquiryId; + IsFinished = isFinished; } -} +} \ No newline at end of file diff --git a/API_SQLuedo/Dto/UserDTO.cs b/API_SQLuedo/Dto/UserDTO.cs index 9a96905..b2553f5 100644 --- a/API_SQLuedo/Dto/UserDTO.cs +++ b/API_SQLuedo/Dto/UserDTO.cs @@ -1,34 +1,33 @@ -namespace Dto +namespace Dto; + +public class UserDTO { - public class UserDTO - { - public int Id { get; set; } - public string Username { get; set; } - public string Password { get; set; } - public string Email { get; set; } - public bool IsAdmin { get; set; } + public int Id { get; set; } + public string Username { get; set; } + public string Password { get; set; } + public string Email { get; set; } + public bool IsAdmin { get; set; } - public UserDTO() { } - public UserDTO(int id, string username, string password, string email, bool isAdmin) - { - Id = id; - Username = username; - Password = password; - Email = email; - IsAdmin = isAdmin; - } + public UserDTO() { } + public UserDTO(int id, string username, string password, string email, bool isAdmin) + { + Id = id; + Username = username; + Password = password; + Email = email; + IsAdmin = isAdmin; + } - public UserDTO(string username, string password, string email, bool isAdmin) - { - Username = username; - Password = password; - Email = email; - IsAdmin = isAdmin; - } + public UserDTO(string username, string password, string email, bool isAdmin) + { + Username = username; + Password = password; + Email = email; + IsAdmin = isAdmin; + } - public override string ToString() - { - return $"{Id}\t{Username}\t{Email}\t{IsAdmin}"; - } + public override string ToString() + { + return $"{Id}\t{Username}\t{Email}\t{IsAdmin}"; } -} +} \ No newline at end of file diff --git a/API_SQLuedo/EntityFramework/ContentLessonEntity.cs b/API_SQLuedo/EntityFramework/ContentLessonEntity.cs index 067cc39..ee81947 100644 --- a/API_SQLuedo/EntityFramework/ContentLessonEntity.cs +++ b/API_SQLuedo/EntityFramework/ContentLessonEntity.cs @@ -3,22 +3,37 @@ namespace Entities; [Table("ContentLesson")] -public class ContentLessonEntity +public abstract class ContentLessonEntity { - [ForeignKey(nameof(Lesson))] - public int LessonId { get; set; } - public LessonEntity Lesson { get; set; } + public int Id { get; set; } + public string ContentContent { get; set; } + public string ContentTitle { get; set; } + [ForeignKey(nameof(Lesson))] public int LessonId { get; set; } + public LessonEntity Lesson { get; set; } = null!; - [ForeignKey(nameof(Paragraph))] - public int LessonPartId { get; set; } - public ParagraphEntity Paragraph { get; set; } + protected ContentLessonEntity() + { + } - public ContentLessonEntity(){} - public ContentLessonEntity(int lessonId, LessonEntity lesson, int lessonPartId, ParagraphEntity paragraph) + protected ContentLessonEntity(int id, string contentContent, string contentTitle) { + Id = id; + ContentContent = contentContent; + ContentTitle = contentTitle; + } + + + protected ContentLessonEntity(int id, int lessonId, string contentContent, string contentTitle) + { + Id = id; LessonId = lessonId; - Lesson = lesson; - LessonPartId = lessonPartId; - Paragraph = paragraph; + ContentContent = contentContent; + ContentTitle = contentTitle; + } + + protected ContentLessonEntity(string contentContent, string contentTitle) + { + ContentContent = contentContent; + ContentTitle = contentTitle; } } \ No newline at end of file diff --git a/API_SQLuedo/EntityFramework/LessonEntity.cs b/API_SQLuedo/EntityFramework/LessonEntity.cs index 2c345d3..b06f611 100644 --- a/API_SQLuedo/EntityFramework/LessonEntity.cs +++ b/API_SQLuedo/EntityFramework/LessonEntity.cs @@ -9,13 +9,8 @@ public class LessonEntity public string? Title { get; set; } public string? LastPublisher { get; set; } public DateOnly? LastEdit { get; set; } + public ICollection Content { get; set; } = new List(); - public LessonEntity() { } - - public LessonEntity(int id) - { - Id = id; - } public LessonEntity(int id, string title, string lastPublisher, DateOnly? lastEdit) { Id = id; diff --git a/API_SQLuedo/EntityFramework/ParagraphEntity.cs b/API_SQLuedo/EntityFramework/ParagraphEntity.cs index 4dc2277..ff1adc7 100644 --- a/API_SQLuedo/EntityFramework/ParagraphEntity.cs +++ b/API_SQLuedo/EntityFramework/ParagraphEntity.cs @@ -3,36 +3,31 @@ namespace Entities; [Table("Paragraph")] -public class ParagraphEntity +public class ParagraphEntity : ContentLessonEntity { - public int Id { get; set; } - public string Title { get; set; } - public string Content { get; set; } + // ID + // ContentContent + // ContentTitle + // LessonId public string Info { get; set; } public string Query { get; set; } public string Comment { get; set; } - public ParagraphEntity() { } - - - public ParagraphEntity(int id) + public ParagraphEntity() { - Id = id; } - public ParagraphEntity(int id, string title, string content, string info, string query, string comment) + public ParagraphEntity(int id, string title, string content, string info, string query, + string comment, int idLesson) : base(id, idLesson, content, title) { - Id = id; - Title = title; - Content = content; Info = info; Query = query; Comment = comment; } - public ParagraphEntity(string title, string content, string info, string query, string comment) + + public ParagraphEntity(string title, string content, string info, string query, string comment) : base(content, + title) { - Title = title; - Content = content; Info = info; Query = query; Comment = comment; diff --git a/API_SQLuedo/Model/BlackList.cs b/API_SQLuedo/Model/BlackList.cs index a53f1e9..002b5ba 100644 --- a/API_SQLuedo/Model/BlackList.cs +++ b/API_SQLuedo/Model/BlackList.cs @@ -1,14 +1,13 @@ -namespace ModelToEntities.Business +namespace Model; + +public class BlackList { - public class BlackList - { - public string Email { get; set; } - public DateOnly ExpirationDate { get; set; } + public string Email { get; set; } + public DateOnly ExpirationDate { get; set; } - public BlackList(string email, DateOnly expirationDate) - { - Email = email; - ExpirationDate = expirationDate; - } + public BlackList(string email, DateOnly expirationDate) + { + Email = email; + ExpirationDate = expirationDate; } -} +} \ No newline at end of file diff --git a/API_SQLuedo/Model/ContentLesson.cs b/API_SQLuedo/Model/ContentLesson.cs index 9ad8e3c..764d377 100644 --- a/API_SQLuedo/Model/ContentLesson.cs +++ b/API_SQLuedo/Model/ContentLesson.cs @@ -1,14 +1,24 @@ -namespace ModelToEntities.Business +namespace Model; + +public abstract class ContentLesson { - public class ContentLesson + public int Id { get; set; } + public string ContentContent { get; set; } + public string ContentTitle { get; set; } + + public int LessonId { get; set; } + + protected ContentLesson(string contentContent, string contentTitle) + { + ContentContent = contentContent; + ContentTitle = contentTitle; + } + + protected ContentLesson(int id, string contentContent, string contentTitle, int lessonId) { - public ContentLesson(int lessonId, int lessonPartId) - { - LessonId = lessonId; - LessonPartId = lessonPartId; - } - - public int LessonId { get; set; } - public int LessonPartId { get; set; } + Id = id; + ContentContent = contentContent; + ContentTitle = contentTitle; + LessonId = lessonId; } -} +} \ No newline at end of file diff --git a/API_SQLuedo/Model/Inquiry.cs b/API_SQLuedo/Model/Inquiry.cs index 05a23c2..8aab55a 100644 --- a/API_SQLuedo/Model/Inquiry.cs +++ b/API_SQLuedo/Model/Inquiry.cs @@ -1,24 +1,23 @@ -namespace ModelToEntities.Business +namespace Model; + +public class Inquiry { - public class Inquiry - { - public int Id { get; set; } - public string Title { get; set; } - public string Description { get; set; } - public bool IsUser { get; set; } - public int Database { get; set; } - public int InquiryTable { get; set; } + public int Id { get; set; } + public string Title { get; set; } + public string Description { get; set; } + public bool IsUser { get; set; } + public int Database { get; set; } + public int InquiryTable { get; set; } - public Inquiry() { } + public Inquiry() { } - public Inquiry(int id, string title, string description, bool isUser, int database, int inquiryTable) - { - Id = id; - Title = title; - Description = description; - IsUser = isUser; - Database = database; - InquiryTable = inquiryTable; - } + public Inquiry(int id, string title, string description, bool isUser, int database, int inquiryTable) + { + Id = id; + Title = title; + Description = description; + IsUser = isUser; + Database = database; + InquiryTable = inquiryTable; } -} +} \ No newline at end of file diff --git a/API_SQLuedo/Model/InquiryTable.cs b/API_SQLuedo/Model/InquiryTable.cs index e75b4fe..060702a 100644 --- a/API_SQLuedo/Model/InquiryTable.cs +++ b/API_SQLuedo/Model/InquiryTable.cs @@ -1,18 +1,17 @@ -namespace ModelToEntities.Business -{ - public class InquiryTable - { - public int OwnerId { get; set; } - public string DatabaseName { get; set; } - public string ConnectionInfo { get; set; } +namespace Model; - public InquiryTable() { } - public InquiryTable(int inquiryId, string databaseName, string connectionInfo) - { - OwnerId = inquiryId; - DatabaseName = databaseName; - ConnectionInfo = connectionInfo; - } +public class InquiryTable +{ + public int OwnerId { get; set; } + public string DatabaseName { get; set; } + public string ConnectionInfo { get; set; } + public InquiryTable() { } + public InquiryTable(int inquiryId, string databaseName, string connectionInfo) + { + OwnerId = inquiryId; + DatabaseName = databaseName; + ConnectionInfo = connectionInfo; } -} + +} \ No newline at end of file diff --git a/API_SQLuedo/Model/Lesson.cs b/API_SQLuedo/Model/Lesson.cs index 40f16aa..b9222d6 100644 --- a/API_SQLuedo/Model/Lesson.cs +++ b/API_SQLuedo/Model/Lesson.cs @@ -1,31 +1,25 @@ -namespace ModelToEntities.Business -{ - public class Lesson - { - public int Id { get; } - public string? Title { get; set; } - public string? LastPublisher { get; set; } - public DateOnly? LastEdit { get; set; } +namespace Model; - public Lesson() { } +public class Lesson +{ + public int Id { get; } + public string? Title { get; set; } + public string? LastPublisher { get; set; } + public DateOnly? LastEdit { get; set; } + public ICollection Content { get; set; } = new List(); - public Lesson(int id) - { - Id = id; - } - public Lesson(int id, string title, string lastPublisher, DateOnly? lastEdit) - { - Id = id; - Title = title; - LastPublisher = lastPublisher; - LastEdit = lastEdit; - } + public Lesson(int id, string title, string lastPublisher, DateOnly? lastEdit) + { + Id = id; + Title = title; + LastPublisher = lastPublisher; + LastEdit = lastEdit; + } - public Lesson(string title, string lastPublisher, DateOnly? lastEdit) - { - Title = title; - LastPublisher = lastPublisher; - LastEdit = lastEdit; - } + public Lesson(string title, string lastPublisher, DateOnly? lastEdit) + { + Title = title; + LastPublisher = lastPublisher; + LastEdit = lastEdit; } -} +} \ No newline at end of file diff --git a/API_SQLuedo/Model/Notepad.cs b/API_SQLuedo/Model/Notepad.cs index 7a36862..ce91168 100644 --- a/API_SQLuedo/Model/Notepad.cs +++ b/API_SQLuedo/Model/Notepad.cs @@ -1,26 +1,25 @@ -namespace ModelToEntities.Business +namespace Model; + +public class Notepad { - public class Notepad - { - public int Id { get; set; } - public int UserId { get; set; } - public int InquiryId { get; set; } - public string Notes { get; set; } + public int Id { get; set; } + public int UserId { get; set; } + public int InquiryId { get; set; } + public string Notes { get; set; } - public Notepad() { } + public Notepad() { } - public Notepad(int id, int userId, int inquiryId, string notes) - { - Id = id; - UserId = userId; - InquiryId = inquiryId; - Notes = notes; - } - public Notepad(int userId, int inquiryId, string notes) - { - UserId = userId; - InquiryId = inquiryId; - Notes = notes; - } + public Notepad(int id, int userId, int inquiryId, string notes) + { + Id = id; + UserId = userId; + InquiryId = inquiryId; + Notes = notes; + } + public Notepad(int userId, int inquiryId, string notes) + { + UserId = userId; + InquiryId = inquiryId; + Notes = notes; } -} +} \ No newline at end of file diff --git a/API_SQLuedo/Model/Paragraph.cs b/API_SQLuedo/Model/Paragraph.cs index 62585d8..583b37f 100644 --- a/API_SQLuedo/Model/Paragraph.cs +++ b/API_SQLuedo/Model/Paragraph.cs @@ -1,37 +1,24 @@ -namespace ModelToEntities.Business -{ - public class Paragraph - { - public int Id { get; } - public string? Title { get; set; } - public string? Content { get; set; } - public string? Info { get; set; } - public string? Query { get; set; } - public string? Comment { get; set; } +namespace Model; - public Paragraph() { } +public class Paragraph : ContentLesson +{ + public string Info { get; set; } + public string Query { get; set; } + public string Comment { get; set; } - public Paragraph(int id) - { - Id = id; - } + public Paragraph(string title, string content, string info, string query, string comment) : base(content, + title) + { + Info = info; + Query = query; + Comment = comment; + } - public Paragraph(int id, string title, string content, string info, string query, string comment) - { - Id = id; - Title = title; - Content = content; - Info = info; - Query = query; - Comment = comment; - } - public Paragraph(string title, string content, string info, string query, string comment) - { - Title = title; - Content = content; - Info = info; - Query = query; - Comment = comment; - } + public Paragraph(int id, string title, string content, string info, string query, string comment, int lessonId) : + base(id, content, title, lessonId) + { + Info = info; + Query = query; + Comment = comment; } -} +} \ No newline at end of file diff --git a/API_SQLuedo/Model/Solution.cs b/API_SQLuedo/Model/Solution.cs index fb17dca..bee801b 100644 --- a/API_SQLuedo/Model/Solution.cs +++ b/API_SQLuedo/Model/Solution.cs @@ -1,30 +1,29 @@ -namespace ModelToEntities.Business +namespace Model; + +public class Solution { - public class Solution + public int OwnerId { get; set; } + public string MurdererFirstName { get; set; } + public string MurdererLastName { get; set; } + public string MurderPlace { get; set; } + public string MurderWeapon { get; set; } + public string Explanation { get; set; } + public Solution() { } + public Solution(int ownerId, string murdererFirstName, string murdererLastName, string murderPlace, string murderWeapon, string explanation) { - public int OwnerId { get; set; } - public string MurdererFirstName { get; set; } - public string MurdererLastName { get; set; } - public string MurderPlace { get; set; } - public string MurderWeapon { get; set; } - public string Explanation { get; set; } - public Solution() { } - public Solution(int ownerId, string murdererFirstName, string murdererLastName, string murderPlace, string murderWeapon, string explanation) - { - OwnerId = ownerId; - MurdererFirstName = murdererFirstName; - MurdererLastName = murdererLastName; - MurderPlace = murderPlace; - MurderWeapon = murderWeapon; - Explanation = explanation; - } - public Solution(string murdererFirstName, string murdererLastName, string murderPlace, string murderWeapon, string explanation) - { - MurdererFirstName = murdererFirstName; - MurdererLastName = murdererLastName; - MurderPlace = murderPlace; - MurderWeapon = murderWeapon; - Explanation = explanation; - } + OwnerId = ownerId; + MurdererFirstName = murdererFirstName; + MurdererLastName = murdererLastName; + MurderPlace = murderPlace; + MurderWeapon = murderWeapon; + Explanation = explanation; } -} + public Solution(string murdererFirstName, string murdererLastName, string murderPlace, string murderWeapon, string explanation) + { + MurdererFirstName = murdererFirstName; + MurdererLastName = murdererLastName; + MurderPlace = murderPlace; + MurderWeapon = murderWeapon; + Explanation = explanation; + } +} \ No newline at end of file diff --git a/API_SQLuedo/Model/Success.cs b/API_SQLuedo/Model/Success.cs index 1fe54cf..1301b0f 100644 --- a/API_SQLuedo/Model/Success.cs +++ b/API_SQLuedo/Model/Success.cs @@ -1,18 +1,17 @@ -namespace ModelToEntities.Business +namespace Model; + +public class Success { - public class Success - { - public int UserId { get; set; } - public int InquiryId { get; set; } - public bool IsFinished { get; set; } + public int UserId { get; set; } + public int InquiryId { get; set; } + public bool IsFinished { get; set; } - public Success() { } + public Success() { } - public Success(int userId, int inquiryId, bool isFinished) - { - UserId = userId; - InquiryId = inquiryId; - IsFinished = isFinished; - } + public Success(int userId, int inquiryId, bool isFinished) + { + UserId = userId; + InquiryId = inquiryId; + IsFinished = isFinished; } -} +} \ No newline at end of file diff --git a/API_SQLuedo/Model/User.cs b/API_SQLuedo/Model/User.cs index 2ee4ce3..8031378 100644 --- a/API_SQLuedo/Model/User.cs +++ b/API_SQLuedo/Model/User.cs @@ -1,21 +1,20 @@ -namespace ModelToEntities.Business +namespace Model; + +public class User { - public class User - { - public int Id { get; set; } - public string Username { get; set; } - public string Password { get; set; } - public string Email { get; set; } - public bool IsAdmin { get; set; } + public int Id { get; set; } + public string Username { get; set; } + public string Password { get; set; } + public string Email { get; set; } + public bool IsAdmin { get; set; } - public User() { } - public User(int id, string username, string password, string email, bool isAdmin) - { - Id = id; - Username = username; - Password = password; - Email = email; - IsAdmin = isAdmin; - } + public User() { } + public User(int id, string username, string password, string email, bool isAdmin) + { + Id = id; + Username = username; + Password = password; + Email = email; + IsAdmin = isAdmin; } -} +} \ No newline at end of file diff --git a/API_SQLuedo/Shared/Mapper/BlackListMapper.cs b/API_SQLuedo/Shared/Mapper/BlackListMapper.cs index 945d823..18d99c3 100644 --- a/API_SQLuedo/Shared/Mapper/BlackListMapper.cs +++ b/API_SQLuedo/Shared/Mapper/BlackListMapper.cs @@ -1,6 +1,6 @@ using Dto; using Entities; -using ModelToEntities.Business; +using Model; namespace Shared.Mapper; diff --git a/API_SQLuedo/Shared/Mapper/ContentLessonMapper.cs b/API_SQLuedo/Shared/Mapper/ContentLessonMapper.cs deleted file mode 100644 index 1feb9a1..0000000 --- a/API_SQLuedo/Shared/Mapper/ContentLessonMapper.cs +++ /dev/null @@ -1,34 +0,0 @@ -using Dto; -using Entities; -using ModelToEntities.Business; - -namespace Shared.Mapper; - -public static class ContentLessonMapper -{ - public static ContentLesson FromDTOToModel(this ContentLessonDTO dto) - { - return new ContentLesson(dto.LessonId, dto.LessonPartId); - } - - public static ContentLesson FromEntityToModel(this ContentLessonEntity ent) - { - return new ContentLesson(ent.LessonId, ent.LessonPartId); - } - - public static ContentLessonDTO FromModelToDTO(this ContentLesson les) - { - return new ContentLessonDTO(les.LessonId, les.LessonPartId); - } - - public static ContentLessonDTO FromEntityToDTO(this ContentLessonEntity ent) - { - return new ContentLessonDTO(ent.LessonId, ent.LessonPartId); - } - - public static ContentLessonEntity FromModelToEntity(this ContentLesson les) - { - return new ContentLessonEntity(les.LessonId, new LessonEntity(les.LessonId), les.LessonPartId, - new ParagraphEntity(les.LessonPartId)); - } -} \ No newline at end of file diff --git a/API_SQLuedo/Shared/Mapper/InquiryMapper.cs b/API_SQLuedo/Shared/Mapper/InquiryMapper.cs index 7ade449..ace6105 100644 --- a/API_SQLuedo/Shared/Mapper/InquiryMapper.cs +++ b/API_SQLuedo/Shared/Mapper/InquiryMapper.cs @@ -1,6 +1,6 @@ using Dto; using Entities; -using ModelToEntities.Business; +using Model; namespace Shared.Mapper; diff --git a/API_SQLuedo/Shared/Mapper/InquiryTableMapper.cs b/API_SQLuedo/Shared/Mapper/InquiryTableMapper.cs index d5048a9..f11c4b8 100644 --- a/API_SQLuedo/Shared/Mapper/InquiryTableMapper.cs +++ b/API_SQLuedo/Shared/Mapper/InquiryTableMapper.cs @@ -1,6 +1,6 @@ using Dto; using Entities; -using ModelToEntities.Business; +using Model; namespace Shared.Mapper; diff --git a/API_SQLuedo/Shared/Mapper/LessonMapper.cs b/API_SQLuedo/Shared/Mapper/LessonMapper.cs index 9edf99f..824c592 100644 --- a/API_SQLuedo/Shared/Mapper/LessonMapper.cs +++ b/API_SQLuedo/Shared/Mapper/LessonMapper.cs @@ -1,6 +1,6 @@ using Dto; using Entities; -using ModelToEntities.Business; +using Model; namespace Shared.Mapper; diff --git a/API_SQLuedo/Shared/Mapper/NotepadMapper.cs b/API_SQLuedo/Shared/Mapper/NotepadMapper.cs index ba8aa08..5de18a8 100644 --- a/API_SQLuedo/Shared/Mapper/NotepadMapper.cs +++ b/API_SQLuedo/Shared/Mapper/NotepadMapper.cs @@ -1,6 +1,6 @@ using Dto; using Entities; -using ModelToEntities.Business; +using Model; namespace Shared.Mapper; diff --git a/API_SQLuedo/Shared/Mapper/ParagraphMapper.cs b/API_SQLuedo/Shared/Mapper/ParagraphMapper.cs index 0afa24d..8cdc29e 100644 --- a/API_SQLuedo/Shared/Mapper/ParagraphMapper.cs +++ b/API_SQLuedo/Shared/Mapper/ParagraphMapper.cs @@ -1,6 +1,6 @@ using Dto; using Entities; -using ModelToEntities.Business; +using Model; namespace Shared.Mapper; @@ -8,31 +8,35 @@ public static class ParagraphMapper { public static Paragraph FromDTOToModel(ParagraphDTO dto) { - return new Paragraph(dto.Id, dto.Title, dto.Content, dto.Info, dto.Query, dto.Comment); + return new Paragraph(dto.ContentTitle, dto.ContentContent, dto.Info, dto.Query, dto.Comment); } public static Paragraph FromEntityToModel(ParagraphEntity model) { - return new Paragraph(model.Id, model.Title, model.Content, model.Info, model.Query, model.Comment); + return new Paragraph(model.ContentTitle, model.ContentContent, model.Info, model.Query, model.Comment); } public static ParagraphDTO FromEntityToDTO(ParagraphEntity model) { - return new ParagraphDTO(model.Id, model.Title, model.Content, model.Info, model.Query, model.Comment); + return new ParagraphDTO(model.Id, model.ContentTitle, model.ContentContent, model.Info, model.Query, + model.Comment, model.LessonId); } public static ParagraphDTO FromModelToDTO(Paragraph model) { - return new ParagraphDTO(model.Id, model.Title, model.Content, model.Info, model.Query, model.Comment); + return new ParagraphDTO(model.Id, model.ContentTitle, model.ContentContent, model.Info, model.Query, + model.Comment, model.LessonId); } public static ParagraphEntity FromDTOToEntity(ParagraphDTO dto) { - return new ParagraphEntity(dto.Id, dto.Title, dto.Content, dto.Info, dto.Query, dto.Comment); + return new ParagraphEntity(dto.Id, dto.ContentTitle, dto.ContentContent, dto.Info, dto.Query, dto.Comment, + dto.LessonId); } - public static Paragraph FromModelToEntity(Paragraph model) + public static ParagraphEntity FromModelToEntity(Paragraph model) { - return new Paragraph(model.Id, model.Title, model.Content, model.Info, model.Query, model.Comment); + return new ParagraphEntity(model.Id, model.ContentTitle, model.ContentContent, model.Info, model.Query, + model.Comment, model.LessonId); } } \ No newline at end of file diff --git a/API_SQLuedo/Shared/Mapper/SolutionMapper.cs b/API_SQLuedo/Shared/Mapper/SolutionMapper.cs index 4d99120..098c56a 100644 --- a/API_SQLuedo/Shared/Mapper/SolutionMapper.cs +++ b/API_SQLuedo/Shared/Mapper/SolutionMapper.cs @@ -1,6 +1,6 @@ using Dto; using Entities; -using ModelToEntities.Business; +using Model; namespace Shared.Mapper; diff --git a/API_SQLuedo/Shared/Mapper/SuccessMapper.cs b/API_SQLuedo/Shared/Mapper/SuccessMapper.cs index a6d0261..ea5ef02 100644 --- a/API_SQLuedo/Shared/Mapper/SuccessMapper.cs +++ b/API_SQLuedo/Shared/Mapper/SuccessMapper.cs @@ -1,6 +1,6 @@ using Dto; using Entities; -using ModelToEntities.Business; +using Model; namespace Shared.Mapper; diff --git a/API_SQLuedo/Shared/Mapper/UserMapper.cs b/API_SQLuedo/Shared/Mapper/UserMapper.cs index a9d4350..f915699 100644 --- a/API_SQLuedo/Shared/Mapper/UserMapper.cs +++ b/API_SQLuedo/Shared/Mapper/UserMapper.cs @@ -1,6 +1,6 @@ using Dto; using Entities; -using ModelToEntities.Business; +using Model; namespace Shared.Mapper; From 01d6dd0e8c5507f342aa57a2042eb3a247c48edf Mon Sep 17 00:00:00 2001 From: Erwan MENAGER Date: Mon, 11 Mar 2024 15:15:19 +0100 Subject: [PATCH 07/14] Merge en cours de la branche filtrage sur master --- .../API/Controllers/InquiriesController.cs | 202 +++++++++++------- .../API/Controllers/LessonsController.cs | 132 ++++++++++++ .../API/Controllers/ParagraphsController.cs | 130 +++++++++++ .../API/Controllers/SuccessesController.cs | 130 +++++++++++ API_SQLuedo/API/Controllers/UserController.cs | 2 +- API_SQLuedo/API/Program.cs | 6 +- .../API/Service/InquiryDataServiceAPI.cs | 31 ++- .../API/Service/LessonDataServiceAPI.cs | 31 +++ API_SQLuedo/API/Service/UserDataServiceAPI.cs | 22 +- API_SQLuedo/DbContextLib/UserDbContext.cs | 14 +- .../Service/InquiryDataService.cs | 22 +- .../Service/LessonDataService.cs | 37 ++++ API_SQLuedo/Dto/ContentLessonDTO.cs | 11 + API_SQLuedo/Dto/InquiryDTO.cs | 9 + API_SQLuedo/Dto/ParagraphDTO.cs | 24 ++- .../EntityFramework/ParagraphEntity.cs | 13 +- .../OrderCriteria/InquiryOrderCriteria.cs | 6 + .../OrderCriteria/LessonOrderCriteria.cs | 6 + .../OrderCriteria/ParagraphOrderCriteria.cs | 6 + .../OrderCriteria/SuccessOrderCriteria.cs | 6 + .../Model/OrderCriteria/UserOrderCriteria.cs | 6 + API_SQLuedo/Shared/IDataService.cs | 10 + API_SQLuedo/Shared/IInquiryDataService.cs | 14 ++ API_SQLuedo/Shared/IInquiryService.cs | 3 + API_SQLuedo/Shared/ILessonDataService.cs | 14 ++ API_SQLuedo/Shared/ILessonService.cs | 11 + API_SQLuedo/Shared/IParagraphDataService.cs | 14 ++ API_SQLuedo/Shared/ISuccessDataService.cs | 14 ++ API_SQLuedo/Shared/IUserDataService.cs | 14 ++ API_SQLuedo/Shared/InquiryDataService.cs | 100 +++++++++ API_SQLuedo/Shared/LessonDataService.cs | 105 +++++++++ API_SQLuedo/Shared/Mapper/BlackListMapper.cs | 12 +- API_SQLuedo/Shared/Mapper/LessonMapper.cs | 12 +- API_SQLuedo/Shared/Mapper/ParagraphMapper.cs | 12 +- API_SQLuedo/Shared/ParagraphDataService.cs | 117 ++++++++++ API_SQLuedo/Shared/Shared.csproj | 1 + API_SQLuedo/Shared/SuccessDataService.cs | 105 +++++++++ API_SQLuedo/Shared/UserDataService.cs | 123 +++++++++++ 38 files changed, 1397 insertions(+), 130 deletions(-) create mode 100644 API_SQLuedo/API/Controllers/LessonsController.cs create mode 100644 API_SQLuedo/API/Controllers/ParagraphsController.cs create mode 100644 API_SQLuedo/API/Controllers/SuccessesController.cs create mode 100644 API_SQLuedo/API/Service/LessonDataServiceAPI.cs create mode 100644 API_SQLuedo/DbDataManager/Service/LessonDataService.cs create mode 100644 API_SQLuedo/Model/OrderCriteria/InquiryOrderCriteria.cs create mode 100644 API_SQLuedo/Model/OrderCriteria/LessonOrderCriteria.cs create mode 100644 API_SQLuedo/Model/OrderCriteria/ParagraphOrderCriteria.cs create mode 100644 API_SQLuedo/Model/OrderCriteria/SuccessOrderCriteria.cs create mode 100644 API_SQLuedo/Model/OrderCriteria/UserOrderCriteria.cs create mode 100644 API_SQLuedo/Shared/IDataService.cs create mode 100644 API_SQLuedo/Shared/IInquiryDataService.cs create mode 100644 API_SQLuedo/Shared/ILessonDataService.cs create mode 100644 API_SQLuedo/Shared/ILessonService.cs create mode 100644 API_SQLuedo/Shared/IParagraphDataService.cs create mode 100644 API_SQLuedo/Shared/ISuccessDataService.cs create mode 100644 API_SQLuedo/Shared/IUserDataService.cs create mode 100644 API_SQLuedo/Shared/InquiryDataService.cs create mode 100644 API_SQLuedo/Shared/LessonDataService.cs create mode 100644 API_SQLuedo/Shared/ParagraphDataService.cs create mode 100644 API_SQLuedo/Shared/SuccessDataService.cs create mode 100644 API_SQLuedo/Shared/UserDataService.cs diff --git a/API_SQLuedo/API/Controllers/InquiriesController.cs b/API_SQLuedo/API/Controllers/InquiriesController.cs index 9e4eacd..f78a8e6 100644 --- a/API_SQLuedo/API/Controllers/InquiriesController.cs +++ b/API_SQLuedo/API/Controllers/InquiriesController.cs @@ -1,73 +1,131 @@ -using Dto; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using Shared; - -namespace API.Controllers -{ - [Route("api/[controller]")] - [Authorize] - [ApiController] - public class InquiriesController() - : ControllerBase - { - private readonly IInquiryService _inquiryService; - private readonly ILogger _logger; - - public InquiriesController(IInquiryService inquiryService, ILogger logger) : this() - { - _inquiryService = inquiryService; - _logger = logger; - } - - [HttpGet("inquiries/{page}/{number}")] - [ProducesResponseType(typeof(InquiryDTO), 200)] - [ProducesResponseType(typeof(string), 204)] - public IActionResult GetInquiries(int page, int number) - { - var nbInquiry = _inquiryService.GetInquiries(page, number).Count(); - if (nbInquiry == 0) - { - _logger.LogError("[ERREUR] Aucune enquête trouvé."); - return StatusCode(204); - } - - _logger.LogInformation("[INFORMATION] {nb} Enquête(s) trouvée(s)", nbInquiry); - return Ok(_inquiryService.GetInquiries(page, number)); - } - - [HttpGet("inquiry/id/{id}")] - [ProducesResponseType(typeof(InquiryDTO), 200)] - [ProducesResponseType(typeof(string), 404)] - public IActionResult GetInquiryById(int id) - { - try - { - _logger.LogInformation("[INFORMATION] Enquête avec l'id {id} a été trouvé.", id); - return Ok(_inquiryService.GetInquiryById(id)); - } - catch (ArgumentException) - { - _logger.LogError("[ERREUR] Aucune enquête trouvée avec l'id {id}.", id); - return NotFound(); - } - } - - [HttpGet("inquiry/title/{title}")] - [ProducesResponseType(typeof(InquiryDTO), 200)] - [ProducesResponseType(typeof(string), 404)] - public IActionResult GetInquiryByTitle(string title) - { - try - { - _logger.LogInformation("[INFORMATION] Enquête avec le titre {title} a été trouvé.", title); - return Ok(_inquiryService.GetInquiryByTitle(title)); - } - catch (ArgumentException) - { - _logger.LogError("[ERREUR] Aucune enquête trouvée avec le titre {title}.", title); - return NotFound(); - } - } - } +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Dto; +using Model.OrderCriteria; +using Services; +using Asp.Versioning; + +namespace API.Controllers +{ + [Route("api/v{version:apiVersion}/[controller]")] + [Authorize] + [ApiVersion("1.0")] + [ApiController] + public class InquiriesController : Controller + { + private IInquiryDataService _inquiryDataService; + + private readonly ILogger _logger; + public InquiriesController(IInquiryDataService inquiryDataService, ILogger logger) + { + _inquiryDataService = inquiryDataService; + _logger = logger; + } + + [HttpGet("inquiries/{page}/{number}/{orderCriteria}")] + [ProducesResponseType(typeof(InquiryDTO), 200)] + [ProducesResponseType(typeof(string), 204)] + public IActionResult GetInquiries(int page, int number, InquiryOrderCriteria orderCriteria) + { + var nbInquiry = _inquiryDataService.GetInquiries(page, number, orderCriteria).Count(); + if (nbInquiry == 0) + { + _logger.LogError("[ERREUR] Aucune enquête trouvée."); + return StatusCode(204); + } + _logger.LogInformation("[INFORMATION] {nb} Enquête(s) trouvée(s)", nbInquiry); + return Ok(_inquiryDataService.GetInquiries(page, number, orderCriteria)); + } + + [HttpGet("inquiry/id/{id}")] + [ProducesResponseType(typeof(InquiryDTO), 200)] + [ProducesResponseType(typeof(string), 404)] + public IActionResult GetInquiryById(int id) + { + try + { + _logger.LogInformation("[INFORMATION] L'enquête avec l'id {id} a été trouvé.", id); + return Ok(_inquiryDataService.GetInquiryById(id)); + } + catch (ArgumentException) + { + _logger.LogError("[ERREUR] Aucune enquête trouvée avec l'id {id}.", id); + return NotFound(); + } + } + + [HttpGet("inquiry/title/{title}")] + [ProducesResponseType(typeof(InquiryDTO), 200)] + [ProducesResponseType(typeof(string), 404)] + public IActionResult GetInquiryByTitle(string title) + { + try + { + _logger.LogInformation("[INFORMATION] L'enquête avec le titre {title} a été trouvé.", title); + return Ok(_inquiryDataService.GetInquiryByTitle(title)); + } + catch (ArgumentException) + { + _logger.LogError("[ERREUR] Aucune enquête trouvée avec le titre {title}.", title); + return NotFound(); + } + } + + [HttpDelete("inquiry/{id}")] + [ProducesResponseType(typeof(InquiryDTO), 200)] + [ProducesResponseType(typeof(string), 404)] + public IActionResult DeleteInquiry(int id) + { + var success = _inquiryDataService.DeleteInquiry(id); + if (success) + { + _logger.LogInformation("[INFORMATION] L'enquête avec l'id {id} a été supprimé.", id); + return Ok(_inquiryDataService.DeleteInquiry(id)); + } + else + { + _logger.LogError("[ERREUR] Aucune enquête trouvée avec l'id {id}.", id); + return NotFound(); + } + + } + + [HttpPost] + [ProducesResponseType(typeof(InquiryDTO), 201)] + [ProducesResponseType(typeof(string), 400)] + public IActionResult CreateInquiry([FromBody] InquiryDTO dto) + { + if (dto.Title == null || dto.Description == null || dto.Database == null || dto.InquiryTable == null) + { + return BadRequest(); + } + _logger.LogInformation("[INFORMATION] Une enquête a été créé : title - {title}, description - {description}, isUser - {isUser}, database - {database}, inquiryTable - {inquiryTable}", dto.Title, dto.Description, dto.IsUser, dto.Database, dto.InquiryTable); + return Created(nameof(GetInquiries), _inquiryDataService.CreateInquiry(dto.Title, dto.Description, dto.IsUser, dto.Database, dto.InquiryTable)); + } + + [HttpPut] + [ProducesResponseType(typeof(InquiryDTO), 200)] + [ProducesResponseType(typeof(string), 400)] + [ProducesResponseType(typeof(string), 404)] + public IActionResult UpdateInquiry(int id, [FromBody] InquiryDTO inquiryDTO) + { + if (id != inquiryDTO.Id) + { + _logger.LogError("[ERREUR] Problème ID - La mise à jour de l'enquête avec l'id {id} a échouée.", id); + return BadRequest(); + } + if (!ModelState.IsValid) + { + _logger.LogError("[ERREUR] Problème controlleur - La mise à jour de l'enquête avec l'id {id} a échouée.", id); + return BadRequest(); + } + if (inquiryDTO != null) + { + _logger.LogInformation("[INFORMATION] La mise à jour de l'enquête avec l'id {id} a été effectuée", id); + return Ok(_inquiryDataService.UpdateInquiry(id, inquiryDTO)); + } + _logger.LogError("[ERREUR] Aucune enquête trouvée avec l'id {id}.", id); + return NotFound(); + } + } } \ No newline at end of file diff --git a/API_SQLuedo/API/Controllers/LessonsController.cs b/API_SQLuedo/API/Controllers/LessonsController.cs new file mode 100644 index 0000000..9c0d74e --- /dev/null +++ b/API_SQLuedo/API/Controllers/LessonsController.cs @@ -0,0 +1,132 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Dto; +using Model.OrderCriteria; +using Shared; +using Asp.Versioning; + +namespace API.Controllers +{ + [Route("api/v{version:apiVersion}/[controller]")] + [Authorize] + [ApiVersion("1.0")] + [ApiController] + public class LessonsController : Controller + { + private ILessonDataService _lessonDataService; + + private readonly ILogger _logger; + + public LessonsController(ILessonDataService lessonDataService, ILogger logger) + { + _lessonDataService = lessonDataService; + _logger = logger; + } + + [HttpGet("lessons/{page}/{number}/{orderCriteria}")] + [ProducesResponseType(typeof(LessonDTO), 200)] + [ProducesResponseType(typeof(string), 204)] + public IActionResult GetLessons(int page, int number, LessonOrderCriteria orderCriteria) + { + var nbLesson = _lessonDataService.GetLessons(page, number, orderCriteria).Count(); + if (nbLesson == 0) + { + _logger.LogError("[ERREUR] Aucune leçon trouvée."); + return StatusCode(204); + } + _logger.LogInformation("[INFORMATION] {nb} Leçon(s) trouvée(s)", nbLesson); + return Ok(_lessonDataService.GetLessons(page, number, orderCriteria)); + } + + [HttpGet("lesson/id/{id}")] + [ProducesResponseType(typeof(LessonDTO), 200)] + [ProducesResponseType(typeof(string), 404)] + public IActionResult GetLessonById(int id) + { + try + { + _logger.LogInformation("[INFORMATION] La leçon avec l'id {id} a été trouvé.", id); + return Ok(_lessonDataService.GetLessonById(id)); + } + catch (ArgumentException) + { + _logger.LogError("[ERREUR] Aucune leçon trouvée avec l'id {id}.", id); + return NotFound(); + } + } + + [HttpGet("lesson/title/{title}")] + [ProducesResponseType(typeof(LessonDTO), 200)] + [ProducesResponseType(typeof(string), 404)] + public IActionResult GetLessonByTitle(string title) + { + try + { + _logger.LogInformation("[INFORMATION] La leçon avec le titre {title} a été trouvé.", title); + return Ok(_lessonDataService.GetLessonByTitle(title)); + } + catch (ArgumentException) + { + _logger.LogError("[ERREUR] Aucune leçon trouvée avec le titre {title}.", title); + return NotFound(); + } + } + + [HttpDelete("lesson/{id}")] + [ProducesResponseType(typeof(LessonDTO), 200)] + [ProducesResponseType(typeof(string), 404)] + public IActionResult DeleteLesson(int id) + { + var success = _lessonDataService.DeleteLesson(id); + if (success) + { + _logger.LogInformation("[INFORMATION] La leçon avec l'id {id} a été supprimé.", id); + return Ok(_lessonDataService.DeleteLesson(id)); + } + else + { + _logger.LogError("[ERREUR] Aucune leçon trouvée avec l'id {id}.", id); + return NotFound(); + } + + } + + [HttpPost] + [ProducesResponseType(typeof(LessonDTO), 201)] + [ProducesResponseType(typeof(string), 400)] + public IActionResult CreateLesson([FromBody] LessonDTO dto) + { + if (dto.Title == null || dto.LastPublisher == null) + { + return BadRequest(); + } + _logger.LogInformation("[INFORMATION] Une leçon a été créé : title - {title}, lastPublisher - {publisher}, lastEdit - {lastEdit}", dto.Title, dto.LastPublisher, dto.LastEdit); + return Created(nameof(GetLessons), _lessonDataService.CreateLesson(dto.Title, dto.LastPublisher, dto.LastEdit)); + } + + [HttpPut] + [ProducesResponseType(typeof(LessonDTO), 200)] + [ProducesResponseType(typeof(string), 400)] + [ProducesResponseType(typeof(string), 404)] + public IActionResult UpdateLesson(int id, [FromBody] LessonDTO lessonDTO) + { + if (id != lessonDTO.Id) + { + _logger.LogError("[ERREUR] Problème ID - La mise à jour de la leçon avec l'id {id} a échouée.", id); + return BadRequest(); + } + if (!ModelState.IsValid) + { + _logger.LogError("[ERREUR] Problème controlleur - La mise à jour de la leçon avec l'id {id} a échouée.", id); + return BadRequest(); + } + if (lessonDTO != null) + { + _logger.LogInformation("[INFORMATION] La mise à jour de la leçon avec l'id {id} a été effectuée", id); + return Ok(_lessonDataService.UpdateLesson(id, lessonDTO)); + } + _logger.LogError("[ERREUR] Aucune leçon trouvée avec l'id {id}.", id); + return NotFound(); + } + } +} \ No newline at end of file diff --git a/API_SQLuedo/API/Controllers/ParagraphsController.cs b/API_SQLuedo/API/Controllers/ParagraphsController.cs new file mode 100644 index 0000000..f94e3f3 --- /dev/null +++ b/API_SQLuedo/API/Controllers/ParagraphsController.cs @@ -0,0 +1,130 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Dto; +using Model.OrderCriteria; +using Shared; +using Asp.Versioning; + +namespace API.Controllers +{ + [Route("api/v{version:apiVersion}/[controller]")] + [Authorize] + [ApiVersion("1.0")] + [ApiController] + public class ParagraphsController : Controller + { + private IParagraphDataService _paragraphDataService; + + private readonly ILogger _logger; + + public ParagraphsController(IParagraphDataService paragraphDataService, ILogger logger) + { + _paragraphDataService = paragraphDataService; + _logger = logger; + } + + [HttpGet("paragraphs/{page}/{number}/{orderCriteria}")] + [ProducesResponseType(typeof(ParagraphDTO), 200)] + [ProducesResponseType(typeof(string), 204)] + public IActionResult GetParagraphs(int page, int number, ParagraphOrderCriteria orderCriteria) + { + var nbParagraph = ( _paragraphDataService.GetParagraphs(page, number, orderCriteria)).ToList().Count(); + if(nbParagraph == 0) + { + _logger.LogError("[ERREUR] Aucun paragraphe trouvé."); + return StatusCode(204); + } + _logger.LogInformation("[INFORMATION] {nb} Paragraphe(s) trouvé(s)", nbParagraph); + return Ok(_paragraphDataService.GetParagraphs(page, number, orderCriteria)); + } + + [HttpGet("paragraph/id/{id}")] + [ProducesResponseType(typeof(ParagraphDTO), 200)] + [ProducesResponseType(typeof(string), 404)] + public IActionResult GetParagraphById(int id) + { + try + { + _logger.LogInformation("[INFORMATION] Le paragraphe avec l'id {id} a été trouvé.", id); + return Ok(_paragraphDataService.GetParagraphById(id)); + } catch (ArgumentException) + { + _logger.LogError("[ERREUR] Aucun paragraphe trouvé avec l'id {id}.", id); + return NotFound(); + } + } + + [HttpGet("paragraph/title/{title}")] + [ProducesResponseType(typeof(ParagraphDTO), 200)] + [ProducesResponseType(typeof(string), 404)] + public IActionResult GetParagraphByTitle(string title) + { + try + { + _logger.LogInformation("[INFORMATION] Le paragraphe avec le titre {title} a été trouvé.", title); + return Ok(_paragraphDataService.GetParagraphByTitle(title)); + }catch (ArgumentException) + { + _logger.LogError("[ERREUR] Aucun paragraphe trouvé avec le titre {title}.", title); + return NotFound(); + } + + } + + [HttpDelete("paragraph/{id}")] + [ProducesResponseType(typeof(ParagraphDTO), 200)] + [ProducesResponseType(typeof(string), 404)] + public IActionResult DeleteParagraph(int id) + { + var success = _paragraphDataService.DeleteParagraph(id); + if(success) + { + _logger.LogInformation("[INFORMATION] Le paragraphe avec l'id {id} a été supprimé.", id); + return Ok(_paragraphDataService.DeleteParagraph(id)); + } else + { + _logger.LogError("[ERREUR] Aucun paragraphe trouvé avec l'id {id}.", id); + return NotFound(); + } + + } + + [HttpPost] + [ProducesResponseType(typeof(ParagraphDTO), 201)] + [ProducesResponseType(typeof(string), 400)] + public IActionResult CreateParagraph([FromBody] ParagraphDTO dto) + { + if (dto.Title == null || dto.Content == null || dto.Info == null || dto.Query == null || dto.Comment == null) + { + return BadRequest(); + } + _logger.LogInformation("[INFORMATION] Un paragraphe a été créé : title - {title}, content - {content}, info - {info}, query - {query}, comment - {comment}", dto.Title, dto.Content, dto.Info, dto.Query, dto.Comment); + return Created(nameof(GetParagraphs), _paragraphDataService.CreateParagraph(dto.Title, dto.Content, dto.Info, dto.Query, dto.Comment, dto.LessonId)); + } + + [HttpPut] + [ProducesResponseType(typeof(ParagraphDTO), 200)] + [ProducesResponseType(typeof(string), 400)] + [ProducesResponseType(typeof(string), 404)] + public IActionResult UpdateParagraph(int id, [FromBody] ParagraphDTO paragraphDTO) + { + if(id != paragraphDTO.Id) + { + _logger.LogError("[ERREUR] Problème ID - La mise à jour du paragraphe avec l'id {id} a échouée.", id); + return BadRequest(); + } + if(!ModelState.IsValid) + { + _logger.LogError("[ERREUR] Problème controlleur - La mise à jour du paragraphe avec l'id {id} a échouée.", id); + return BadRequest(); + } + if(paragraphDTO != null) + { + _logger.LogInformation("[INFORMATION] La mise à jour du paragraphe avec l'id {id} a été effectuée", id); + return Ok(_paragraphDataService.UpdateParagraph(id, paragraphDTO)); + } + _logger.LogError("[ERREUR] Aucun paragraphe trouvé avec l'id {id}.", id); + return NotFound(); + } + } +} diff --git a/API_SQLuedo/API/Controllers/SuccessesController.cs b/API_SQLuedo/API/Controllers/SuccessesController.cs new file mode 100644 index 0000000..f7c6c07 --- /dev/null +++ b/API_SQLuedo/API/Controllers/SuccessesController.cs @@ -0,0 +1,130 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Dto; +using Model.OrderCriteria; +using Shared; +using Asp.Versioning; + +namespace API.Controllers +{ + [Route("api/v{version:apiVersion}/[controller]")] + [Authorize] + [ApiVersion("1.0")] + [ApiController] + public class SuccessesController : Controller + { + private ISuccessDataService _successDataService; + + private readonly ILogger _logger; + + public SuccessesController(ISuccessDataService successDataService, ILogger logger) + { + _successDataService = successDataService; + _logger = logger; + } + + [HttpGet("successes/{page}/{number}/{orderCriteria}")] + [ProducesResponseType(typeof(SuccessDTO), 200)] + [ProducesResponseType(typeof(string), 204)] + public IActionResult GetSuccesses(int page, int number, SuccessOrderCriteria orderCriteria) + { + var nbUser = (_successDataService.GetSuccesses(page, number, orderCriteria)).ToList().Count(); + if(nbUser == 0) + { + _logger.LogError("[ERREUR] Aucun utilisateur trouvé."); + return StatusCode(204); + } + _logger.LogInformation("[INFORMATION] {nb} Utilisateur(s) trouvé(s)", nbUser); + return Ok(_successDataService.GetSuccesses(page, number, orderCriteria)); + } + + [HttpGet("success/user/{id}")] + [ProducesResponseType(typeof(SuccessDTO), 200)] + [ProducesResponseType(typeof(string), 404)] + public IActionResult GetSuccessByUserId(int userId) + { + try + { + _logger.LogInformation("[INFORMATION] Le succès avec l'id de l'utilisateur {id} a été trouvé.", userId); + return Ok(_successDataService.GetSuccessByUserId(userId)); + } catch (ArgumentException) + { + _logger.LogError("[ERREUR] Aucun utilisateur trouvé avec l'id de l'utilisateur {id}.", userId); + return NotFound(); + } + } + + [HttpGet("success/inquiry/{inquiryId}")] + [ProducesResponseType(typeof(SuccessDTO), 200)] + [ProducesResponseType(typeof(string), 404)] + public IActionResult GetSuccessByInquiryId(int inquiryId) + { + try + { + _logger.LogInformation("[INFORMATION] Utilisateur avec l'id de l'enquête {inquiryId} a été trouvé.", inquiryId); + return Ok(_successDataService.GetSuccessByInquiryId(inquiryId)); + }catch (ArgumentException) + { + _logger.LogError("[ERREUR] Aucun utilisateur trouvé avec l'id de l'enquête {inquiryId}.", inquiryId); + return NotFound(); + } + + } + + [HttpDelete("success/{id}")] + [ProducesResponseType(typeof(SuccessDTO), 200)] + [ProducesResponseType(typeof(string), 404)] + public IActionResult DeleteSuccess(int id) + { + var success = _successDataService.DeleteSuccess(id); + if(success) + { + _logger.LogInformation("[INFORMATION] Le succès avec l'id {id} a été supprimé.", id); + return Ok(_successDataService.DeleteSuccess(id)); + } else + { + _logger.LogError("[ERREUR] Aucun succès trouvé avec l'id {id}.", id); + return NotFound(); + } + + } + + [HttpPost] + [ProducesResponseType(typeof(SuccessDTO), 201)] + [ProducesResponseType(typeof(string), 400)] + public IActionResult CreateSuccess([FromBody] SuccessDTO dto) + { + /*if (dto.UserId == null || dto.InquiryId == null) + { + return BadRequest(); + }*/ + _logger.LogInformation("[INFORMATION] Un succès a été créé : userId - {userId}, inquiryId - {inquiryId}, isFinished - {isFinished}", dto.UserId, dto.InquiryId, dto.IsFinished); + return Created(nameof(GetSuccesses), _successDataService.CreateSuccess(dto.UserId, dto.InquiryId, dto.IsFinished)); + } + + [HttpPut] + [ProducesResponseType(typeof(SuccessDTO), 200)] + [ProducesResponseType(typeof(string), 400)] + [ProducesResponseType(typeof(string), 404)] + public IActionResult UpdateSuccess(int id, [FromBody] SuccessDTO successDTO) + { + if(id != successDTO.UserId) + { + _logger.LogError("[ERREUR] Problème ID - La mise à jour du succès avec l'id de l'utilisateur {id} a échouée.", id); + return BadRequest(); + } + if(!ModelState.IsValid) + { + _logger.LogError("[ERREUR] Problème controlleur - La mise à jour du succès avec l'id de l'utilisateur {id} a échouée.", id); + return BadRequest(); + } + if(successDTO != null) + { + _logger.LogInformation("[INFORMATION] La mise à jour du succès avec l'id de l'utilisateur {id} a été effectuée", id); + return Ok(_successDataService.UpdateSuccess(id, successDTO)); + } + _logger.LogError("[ERREUR] Aucun succès trouvé avec l'id de l'utilisateur {id}.", id); + return NotFound(); + } + } +} diff --git a/API_SQLuedo/API/Controllers/UserController.cs b/API_SQLuedo/API/Controllers/UserController.cs index 5809f53..e990ded 100644 --- a/API_SQLuedo/API/Controllers/UserController.cs +++ b/API_SQLuedo/API/Controllers/UserController.cs @@ -62,7 +62,7 @@ namespace API.Controllers } } - [HttpDelete] + [HttpDelete("user/id/{id}")] [ProducesResponseType(typeof(UserDTO), 200)] [ProducesResponseType(typeof(string), 404)] public IActionResult DeleteUser(int id) diff --git a/API_SQLuedo/API/Program.cs b/API_SQLuedo/API/Program.cs index 3c71775..ae25480 100644 --- a/API_SQLuedo/API/Program.cs +++ b/API_SQLuedo/API/Program.cs @@ -20,10 +20,8 @@ builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); -builder.Services.AddScoped, UserDataService>(); -builder.Services.AddScoped, UserDataServiceApi>(); -builder.Services.AddScoped, InquiryDataService>(); -builder.Services.AddScoped, InquiryDataServiceApi>(); +builder.Services.AddScoped, DbDataManager.Service.UserDataService>(); +builder.Services.AddScoped, DbDataManager.Service.InquiryDataService>(); builder.Services.AddDbContext(); builder.Services.AddDbContext(options => options.UseInMemoryDatabase("appDb")); builder.Services.AddIdentityApiEndpoints().AddEntityFrameworkStores(); diff --git a/API_SQLuedo/API/Service/InquiryDataServiceAPI.cs b/API_SQLuedo/API/Service/InquiryDataServiceAPI.cs index 68a2c1a..d62e818 100644 --- a/API_SQLuedo/API/Service/InquiryDataServiceAPI.cs +++ b/API_SQLuedo/API/Service/InquiryDataServiceAPI.cs @@ -1,19 +1,32 @@ -using Dto; -using Entities; +using Entities; using Shared; -using Shared.Mapper; namespace API.Service; -public class InquiryDataServiceApi(IInquiryService inquiryService) : IInquiryService -{ - public IEnumerable GetInquiries(int page, int number) +public class InquiryDataServiceApi(IInquiryService inquiryService) : IInquiryService +{ + public InquiryEntity CreateInquiry(string title, string description, bool isUser, int tableId, int solutionId) + { + return inquiryService.CreateInquiry(title, description, isUser, tableId, solutionId); + } + + public bool DeleteInquiry(int id) + { + return inquiryService.DeleteInquiry(id); + } + + public IEnumerable GetInquiries(int page, int number) { var inquiries = inquiryService.GetInquiries(page, number); - return inquiries.Select(i => i.FromEntityToDTO()).ToList(); + return inquiries.Select(i => i).ToList(); } - public InquiryDTO GetInquiryById(int id) => inquiryService.GetInquiryById(id).FromEntityToDTO(); + public InquiryEntity GetInquiryById(int id) => inquiryService.GetInquiryById(id); - public InquiryDTO GetInquiryByTitle(string title) => inquiryService.GetInquiryByTitle(title).FromEntityToDTO(); + public InquiryEntity GetInquiryByTitle(string title) => inquiryService.GetInquiryByTitle(title); + + public InquiryEntity UpdateInquiry(int id, InquiryEntity inquiry) + { + return inquiryService.UpdateInquiry(id, inquiry); + } } \ No newline at end of file diff --git a/API_SQLuedo/API/Service/LessonDataServiceAPI.cs b/API_SQLuedo/API/Service/LessonDataServiceAPI.cs new file mode 100644 index 0000000..50d864b --- /dev/null +++ b/API_SQLuedo/API/Service/LessonDataServiceAPI.cs @@ -0,0 +1,31 @@ +using Entities; +using Model.OrderCriteria; +using Shared; + +namespace API.Service; + +public class LessonDataServiceApi(ILessonService lessonService) : ILessonDataService +{ + public IEnumerable GetLessons(int page, int number) + { + var lessonsEntities = lessonService.GetLessons(page, number); + return lessonsEntities.Select(e => e).ToList(); + } + + public LessonEntity GetLessonById(int id) => lessonService.GetLessonById(id); + + public LessonEntity GetLessonByTitle(string title) => lessonService.GetLessonByTitle(title); + + public bool DeleteLesson(int id) => lessonService.DeleteLesson(id); + + public LessonEntity UpdateLesson(int id, LessonEntity lesson) => + lessonService.UpdateLesson(id, lesson); + + public LessonEntity CreateLesson(string title, string lastPublisher, DateOnly? lastEdit) => + lessonService.CreateLesson(title, lastPublisher, lastEdit); + + public IEnumerable GetLessons(int page, int number, LessonOrderCriteria orderCriteria) + { + throw new NotImplementedException(); + } +} \ No newline at end of file diff --git a/API_SQLuedo/API/Service/UserDataServiceAPI.cs b/API_SQLuedo/API/Service/UserDataServiceAPI.cs index a4a6dca..45e080c 100644 --- a/API_SQLuedo/API/Service/UserDataServiceAPI.cs +++ b/API_SQLuedo/API/Service/UserDataServiceAPI.cs @@ -1,27 +1,25 @@ -using Dto; -using Entities; +using Entities; using Shared; -using Shared.Mapper; namespace API.Service; -public class UserDataServiceApi(IUserService userService) : IUserService +public class UserDataServiceApi(IUserService userService) : IUserService { - public IEnumerable GetUsers(int page, int number) + public IEnumerable GetUsers(int page, int number) { var usersEntities = userService.GetUsers(page, number); - return usersEntities.Select(e => e.FromEntityToDTO()).ToList(); + return usersEntities.Select(e => e).ToList(); } - public UserDTO GetUserById(int id) => userService.GetUserById(id).FromEntityToDTO(); + public UserEntity GetUserById(int id) => userService.GetUserById(id); - public UserDTO GetUserByUsername(string username) => userService.GetUserByUsername(username).FromEntityToDTO(); + public UserEntity GetUserByUsername(string username) => userService.GetUserByUsername(username); public bool DeleteUser(int id) => userService.DeleteUser(id); - public UserDTO UpdateUser(int id, UserDTO user) => - userService.UpdateUser(id, user.FromDTOToEntity()).FromEntityToDTO(); + public UserEntity UpdateUser(int id, UserEntity user) => + userService.UpdateUser(id, user); - public UserDTO CreateUser(string username, string password, string email, bool isAdmin) => - userService.CreateUser(username, password, email, isAdmin).FromEntityToDTO(); + public UserEntity CreateUser(string username, string password, string email, bool isAdmin) => + userService.CreateUser(username, password, email, isAdmin); } \ No newline at end of file diff --git a/API_SQLuedo/DbContextLib/UserDbContext.cs b/API_SQLuedo/DbContextLib/UserDbContext.cs index 6352ab8..0bcf02a 100644 --- a/API_SQLuedo/DbContextLib/UserDbContext.cs +++ b/API_SQLuedo/DbContextLib/UserDbContext.cs @@ -8,15 +8,15 @@ namespace DbContextLib public class UserDbContext : IdentityDbContext { public DbSet Users { get; set; } - public DbSet BlackList { get; set; } - public DbSet Inquiry { get; set; } - public DbSet InquiryTable { get; set; } - public DbSet Lesson { get; set; } + public DbSet BlackLists { get; set; } + public DbSet Inquiries { get; set; } + public DbSet InquiryTables { get; set; } + public DbSet Lessons { get; set; } public DbSet ContentLessons { get; set; } - public DbSet Paragraph { get; set; } + public DbSet Paragraphs { get; set; } public DbSet Solutions { get; set; } - public DbSet Success { get; set; } - public DbSet Notepad { get; set; } + public DbSet Successes { get; set; } + public DbSet Notepads { get; set; } public UserDbContext(DbContextOptions options) : base(options) { } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { diff --git a/API_SQLuedo/DbDataManager/Service/InquiryDataService.cs b/API_SQLuedo/DbDataManager/Service/InquiryDataService.cs index e57ca27..42535a3 100644 --- a/API_SQLuedo/DbDataManager/Service/InquiryDataService.cs +++ b/API_SQLuedo/DbDataManager/Service/InquiryDataService.cs @@ -1,11 +1,20 @@ -using Dto; -using Entities; +using Entities; using Shared; namespace DbDataManager.Service; public class InquiryDataService : IInquiryService -{ +{ + public InquiryEntity CreateInquiry(string title, string description, bool isUser, int tableId, int solutionId) + { + throw new NotImplementedException(); + } + + public bool DeleteInquiry(int id) + { + throw new NotImplementedException(); + } + public IEnumerable GetInquiries(int page, int number) { throw new NotImplementedException(); @@ -19,5 +28,10 @@ public class InquiryDataService : IInquiryService public InquiryEntity GetInquiryByTitle(string title) { throw new NotImplementedException(); - } + } + + public InquiryEntity UpdateInquiry(int id, InquiryEntity inquiry) + { + throw new NotImplementedException(); + } } \ No newline at end of file diff --git a/API_SQLuedo/DbDataManager/Service/LessonDataService.cs b/API_SQLuedo/DbDataManager/Service/LessonDataService.cs new file mode 100644 index 0000000..8c7bbfc --- /dev/null +++ b/API_SQLuedo/DbDataManager/Service/LessonDataService.cs @@ -0,0 +1,37 @@ +using Entities; +using Shared; + +namespace DbDataManager.Service; + +public class LessonDataService : ILessonService +{ + public LessonEntity CreateLesson(string title, string lastPublisher, DateOnly? lastEdit) + { + throw new NotImplementedException(); + } + + public bool DeleteLesson(int id) + { + throw new NotImplementedException(); + } + + public LessonEntity GetLessonById(int id) + { + throw new NotImplementedException(); + } + + public LessonEntity GetLessonByTitle(string title) + { + throw new NotImplementedException(); + } + + public IEnumerable GetLessons(int page, int number) + { + throw new NotImplementedException(); + } + + public LessonEntity UpdateLesson(int id, LessonEntity lesson) + { + throw new NotImplementedException(); + } +} \ No newline at end of file diff --git a/API_SQLuedo/Dto/ContentLessonDTO.cs b/API_SQLuedo/Dto/ContentLessonDTO.cs index 778e428..357d634 100644 --- a/API_SQLuedo/Dto/ContentLessonDTO.cs +++ b/API_SQLuedo/Dto/ContentLessonDTO.cs @@ -14,4 +14,15 @@ public abstract class ContentLessonDTO ContentTitle = contentTitle; LessonId = lessonId; } + + protected ContentLessonDTO(string contentContent, string contentTitle, int lessonId) + { + ContentContent = contentContent; + ContentTitle = contentTitle; + LessonId = lessonId; + } + + protected ContentLessonDTO() + { + } } \ No newline at end of file diff --git a/API_SQLuedo/Dto/InquiryDTO.cs b/API_SQLuedo/Dto/InquiryDTO.cs index 5b2ad10..258aaab 100644 --- a/API_SQLuedo/Dto/InquiryDTO.cs +++ b/API_SQLuedo/Dto/InquiryDTO.cs @@ -22,4 +22,13 @@ public class InquiryDTO Database = database; InquiryTable = inquiryTable; } + + public InquiryDTO(string title, string description, bool isUser, int database, int inquiryTable) + { + Title = title; + Description = description; + IsUser = isUser; + Database = database; + InquiryTable = inquiryTable; + } } \ No newline at end of file diff --git a/API_SQLuedo/Dto/ParagraphDTO.cs b/API_SQLuedo/Dto/ParagraphDTO.cs index 1bb2016..f6925dd 100644 --- a/API_SQLuedo/Dto/ParagraphDTO.cs +++ b/API_SQLuedo/Dto/ParagraphDTO.cs @@ -2,16 +2,36 @@ public class ParagraphDTO : ContentLessonDTO { + public string Title { get; set; } + public string Content { get; set; } public string Info { get; set; } public string Query { get; set; } public string Comment { get; set; } - public ParagraphDTO(int id, string title, string content, string info, string query, string comment, int lessonId) : - base(id, content, + public ParagraphDTO(string title, string content, string info, string query, string comment, int lessonId) : + base(content, title, lessonId) { + Title = title; + Content = content; Info = info; Query = query; Comment = comment; } + + public ParagraphDTO(int id, string title, string content, string info, string query, string comment, int lessonId) : + base(id, content, + title, lessonId) + { + Id = id; + Title = title; + Content = content; + Info = info; + Query = query; + Comment = comment; + } + + public ParagraphDTO() : base() + { + } } \ No newline at end of file diff --git a/API_SQLuedo/EntityFramework/ParagraphEntity.cs b/API_SQLuedo/EntityFramework/ParagraphEntity.cs index ff1adc7..6785189 100644 --- a/API_SQLuedo/EntityFramework/ParagraphEntity.cs +++ b/API_SQLuedo/EntityFramework/ParagraphEntity.cs @@ -9,6 +9,8 @@ public class ParagraphEntity : ContentLessonEntity // ContentContent // ContentTitle // LessonId + public string Title { get; set; } + public string Content { get; set; } public string Info { get; set; } public string Query { get; set; } public string Comment { get; set; } @@ -20,6 +22,8 @@ public class ParagraphEntity : ContentLessonEntity public ParagraphEntity(int id, string title, string content, string info, string query, string comment, int idLesson) : base(id, idLesson, content, title) { + Title = title; + Content = content; Info = info; Query = query; Comment = comment; @@ -28,8 +32,15 @@ public class ParagraphEntity : ContentLessonEntity public ParagraphEntity(string title, string content, string info, string query, string comment) : base(content, title) { + Title = title; + Content = content; Info = info; Query = query; Comment = comment; - } + } + + public object FromEntityToModel() + { + throw new NotImplementedException(); + } } \ No newline at end of file diff --git a/API_SQLuedo/Model/OrderCriteria/InquiryOrderCriteria.cs b/API_SQLuedo/Model/OrderCriteria/InquiryOrderCriteria.cs new file mode 100644 index 0000000..bc40b5d --- /dev/null +++ b/API_SQLuedo/Model/OrderCriteria/InquiryOrderCriteria.cs @@ -0,0 +1,6 @@ +namespace Model.OrderCriteria; + +public enum InquiryOrderCriteria +{ + None, ByTitle, ByDescription, ByIsUser +} \ No newline at end of file diff --git a/API_SQLuedo/Model/OrderCriteria/LessonOrderCriteria.cs b/API_SQLuedo/Model/OrderCriteria/LessonOrderCriteria.cs new file mode 100644 index 0000000..004879c --- /dev/null +++ b/API_SQLuedo/Model/OrderCriteria/LessonOrderCriteria.cs @@ -0,0 +1,6 @@ +namespace Model.OrderCriteria; + +public enum LessonOrderCriteria +{ + None, ByTitle, ByLastPublisher, ByLastEdit +} \ No newline at end of file diff --git a/API_SQLuedo/Model/OrderCriteria/ParagraphOrderCriteria.cs b/API_SQLuedo/Model/OrderCriteria/ParagraphOrderCriteria.cs new file mode 100644 index 0000000..bd9cc93 --- /dev/null +++ b/API_SQLuedo/Model/OrderCriteria/ParagraphOrderCriteria.cs @@ -0,0 +1,6 @@ +namespace Model.OrderCriteria; + +public enum ParagraphOrderCriteria +{ + None, ByTitle, ByContent, ByInfo, ByQuery, ByComment +} \ No newline at end of file diff --git a/API_SQLuedo/Model/OrderCriteria/SuccessOrderCriteria.cs b/API_SQLuedo/Model/OrderCriteria/SuccessOrderCriteria.cs new file mode 100644 index 0000000..a2c8d76 --- /dev/null +++ b/API_SQLuedo/Model/OrderCriteria/SuccessOrderCriteria.cs @@ -0,0 +1,6 @@ +namespace Model.OrderCriteria; + +public enum SuccessOrderCriteria +{ + None, ByUserId, ByInquiryId, ByIsFinished +} \ No newline at end of file diff --git a/API_SQLuedo/Model/OrderCriteria/UserOrderCriteria.cs b/API_SQLuedo/Model/OrderCriteria/UserOrderCriteria.cs new file mode 100644 index 0000000..42ab10c --- /dev/null +++ b/API_SQLuedo/Model/OrderCriteria/UserOrderCriteria.cs @@ -0,0 +1,6 @@ +namespace Model.OrderCriteria; + +public enum UserOrderCriteria +{ + None, ById, ByUsername, ByEmail, ByIsAdmin +} \ No newline at end of file diff --git a/API_SQLuedo/Shared/IDataService.cs b/API_SQLuedo/Shared/IDataService.cs new file mode 100644 index 0000000..e63a041 --- /dev/null +++ b/API_SQLuedo/Shared/IDataService.cs @@ -0,0 +1,10 @@ +using Entities; +using Model; +using Dto; + +namespace Shared +{ + public interface IDataService + { + } +} diff --git a/API_SQLuedo/Shared/IInquiryDataService.cs b/API_SQLuedo/Shared/IInquiryDataService.cs new file mode 100644 index 0000000..1d0bf4b --- /dev/null +++ b/API_SQLuedo/Shared/IInquiryDataService.cs @@ -0,0 +1,14 @@ +using Dto; +using Model.OrderCriteria; + +namespace Shared; + +public interface IInquiryDataService : IDataService +{ + public IEnumerable GetInquiries(int page, int number, InquiryOrderCriteria orderCriteria); + public InquiryDTO GetInquiryById(int id); + public InquiryDTO GetInquiryByTitle(string title); + public bool DeleteInquiry(int id); + public InquiryDTO UpdateInquiry(int id, InquiryDTO inquiry); + public InquiryDTO CreateInquiry(string title, string description, bool isUser, int tableId, int solutionId); +} \ No newline at end of file diff --git a/API_SQLuedo/Shared/IInquiryService.cs b/API_SQLuedo/Shared/IInquiryService.cs index 7d03786..3cb2daa 100644 --- a/API_SQLuedo/Shared/IInquiryService.cs +++ b/API_SQLuedo/Shared/IInquiryService.cs @@ -5,4 +5,7 @@ public interface IInquiryService public IEnumerable GetInquiries(int page, int number); public TInquiry GetInquiryById(int id); public TInquiry GetInquiryByTitle(string title); + public bool DeleteInquiry(int id); + public TInquiry UpdateInquiry(int id, TInquiry inquiry); + public TInquiry CreateInquiry(string title, string description, bool isUser, int tableId, int solutionId); } \ No newline at end of file diff --git a/API_SQLuedo/Shared/ILessonDataService.cs b/API_SQLuedo/Shared/ILessonDataService.cs new file mode 100644 index 0000000..b3bdb83 --- /dev/null +++ b/API_SQLuedo/Shared/ILessonDataService.cs @@ -0,0 +1,14 @@ +using Model.OrderCriteria; + +namespace Shared; + +public interface ILessonDataService +{ + public IEnumerable GetLessons(int page, int number, LessonOrderCriteria orderCriteria); + public TLesson GetLessonById(int id); + public TLesson GetLessonByTitle(string title); + public bool DeleteLesson(int id); + public TLesson UpdateLesson(int id, TLesson lesson); + public TLesson CreateLesson(string title, string lastPublisher, DateOnly? lastEdit); + +} \ No newline at end of file diff --git a/API_SQLuedo/Shared/ILessonService.cs b/API_SQLuedo/Shared/ILessonService.cs new file mode 100644 index 0000000..dd66837 --- /dev/null +++ b/API_SQLuedo/Shared/ILessonService.cs @@ -0,0 +1,11 @@ +namespace Shared; + +public interface ILessonService +{ + public IEnumerable GetLessons(int page, int number); + public TLesson GetLessonById(int id); + public TLesson GetLessonByTitle(string title); + public bool DeleteLesson(int id); + public TLesson UpdateLesson(int id, TLesson lesson); + public TLesson CreateLesson(string title, string lastPublisher, DateOnly? lastEdit); +} \ No newline at end of file diff --git a/API_SQLuedo/Shared/IParagraphDataService.cs b/API_SQLuedo/Shared/IParagraphDataService.cs new file mode 100644 index 0000000..24e3b4f --- /dev/null +++ b/API_SQLuedo/Shared/IParagraphDataService.cs @@ -0,0 +1,14 @@ +using Dto; +using Model.OrderCriteria; + +namespace Shared; + +public interface IParagraphDataService : IDataService +{ + public IEnumerable GetParagraphs(int page, int number, ParagraphOrderCriteria orderCriteria); + public ParagraphDTO GetParagraphById(int id); + public ParagraphDTO GetParagraphByTitle(string title); + public bool DeleteParagraph(int id); + public ParagraphDTO UpdateParagraph(int id, ParagraphDTO paragraph); + public ParagraphDTO CreateParagraph(string title, string content, string info, string query, string comment, int lessonId); +} \ No newline at end of file diff --git a/API_SQLuedo/Shared/ISuccessDataService.cs b/API_SQLuedo/Shared/ISuccessDataService.cs new file mode 100644 index 0000000..fc7ed91 --- /dev/null +++ b/API_SQLuedo/Shared/ISuccessDataService.cs @@ -0,0 +1,14 @@ +using Dto; +using Model.OrderCriteria; + +namespace Shared; + +public interface ISuccessDataService +{ + public IEnumerable GetSuccesses(int page, int number, SuccessOrderCriteria orderCriteria); + public SuccessDTO GetSuccessByUserId(int id); + public SuccessDTO GetSuccessByInquiryId(int id); + public bool DeleteSuccess(int id); + public SuccessDTO UpdateSuccess(int id, SuccessDTO success); + public SuccessDTO CreateSuccess(int userId, int inquiryId, bool isFinished); +} \ No newline at end of file diff --git a/API_SQLuedo/Shared/IUserDataService.cs b/API_SQLuedo/Shared/IUserDataService.cs new file mode 100644 index 0000000..88b33d3 --- /dev/null +++ b/API_SQLuedo/Shared/IUserDataService.cs @@ -0,0 +1,14 @@ +using Dto; +using Model.OrderCriteria; + +namespace Shared; + +public interface IUserDataService : IDataService +{ + public IEnumerable GetUsers(int page, int number, UserOrderCriteria orderCriteria); + public UserDTO GetUserById(int id); + public UserDTO GetUserByUsername(string username); + public bool DeleteUser(int id); + public UserDTO UpdateUser(int id, UserDTO user); + public UserDTO CreateUser(string username, string password, string email, bool isAdmin); +} \ No newline at end of file diff --git a/API_SQLuedo/Shared/InquiryDataService.cs b/API_SQLuedo/Shared/InquiryDataService.cs new file mode 100644 index 0000000..e7b01d6 --- /dev/null +++ b/API_SQLuedo/Shared/InquiryDataService.cs @@ -0,0 +1,100 @@ +using Entities; +using Microsoft.EntityFrameworkCore; +using Dto; +using Model.OrderCriteria; +using DbContextLib; +using Shared.Mapper; + +namespace Shared; + +public class InquiryDataService : IInquiryDataService +{ + private UserDbContext DbContext { get; set; } + + public InquiryDataService(UserDbContext context) + { + DbContext = context; + context.Database.EnsureCreated(); + } + + public IEnumerable GetInquiries(int page, int number, InquiryOrderCriteria orderCriteria) + { + IQueryable query = DbContext.Inquiries.Skip((page - 1) * number).Take(number); + switch (orderCriteria) + { + case InquiryOrderCriteria.None: + break; + case InquiryOrderCriteria.ByTitle: + query = query.OrderBy(s => s.Title); + break; + case InquiryOrderCriteria.ByDescription: + query = query.OrderBy(s => s.Description); + break; + case InquiryOrderCriteria.ByIsUser: + query = query.OrderBy(s => s.IsUser); + break; + default: + break; + } + var inquiries = query.ToList(); + return inquiries.Select(s => s.FromEntityToDTO()); + } + + public InquiryDTO GetInquiryById(int id) + { + var inquiryEntity = DbContext.Inquiries.FirstOrDefault(i => i.Id == id); + if (inquiryEntity == null) + { + throw new ArgumentException("Impossible de trouver l'enquête", nameof(id)); + } + return inquiryEntity.FromEntityToDTO(); + } + + public InquiryDTO GetInquiryByTitle(string title) + { + var inquiryEntity = DbContext.Inquiries.FirstOrDefault(i => i.Title == title); + if (inquiryEntity == null) + { + throw new ArgumentException("Impossible de trouver l'enquête", nameof(title)); + } + return inquiryEntity.FromEntityToDTO(); + } + + public InquiryDTO CreateInquiry(string title, string description, bool isUser, int tableId, int solutionId) + { + var newInquiryEntity = new InquiryDTO(title, description, isUser, tableId, solutionId); + DbContext.Inquiries.Add(newInquiryEntity.FromDTOToEntity()); + DbContext.SaveChangesAsync(); + return newInquiryEntity; + } + + public bool DeleteInquiry(int id) + { + var inquiryEntity = DbContext.Inquiries.FirstOrDefault(u => u.Id == id); + if (inquiryEntity == null) + { + return false; + } + DbContext.Inquiries.Remove(inquiryEntity); + DbContext.SaveChangesAsync(); + return true; + } + public InquiryDTO UpdateInquiry(int id, InquiryDTO inquiry) + { + var updatingInquiry = DbContext.Inquiries.FirstOrDefault(u => u.Id == id); + if (updatingInquiry == null) + { + throw new ArgumentException("Impossible de trouver l'enquête", nameof(id)); + } + + updatingInquiry.Title = inquiry.Title; + updatingInquiry.Description = inquiry.Description; + updatingInquiry.IsUser = inquiry.IsUser; + //updatingInquiry.Database = inquiry.Database.FromDTOToEntity(); + //updatingInquiry.InquiryTable = inquiry.InquiryTable.FromDTOToEntity(); + // Permet d'indiquer en Db que l'entité a été modifiée. + DbContext.Entry(updatingInquiry).State = EntityState.Modified; + DbContext.SaveChangesAsync(); + return updatingInquiry.FromEntityToModel().FromModelToDTO(); + } +} diff --git a/API_SQLuedo/Shared/LessonDataService.cs b/API_SQLuedo/Shared/LessonDataService.cs new file mode 100644 index 0000000..3b80dc6 --- /dev/null +++ b/API_SQLuedo/Shared/LessonDataService.cs @@ -0,0 +1,105 @@ +using DbContextLib; +using Entities; +using Microsoft.EntityFrameworkCore; +using Dto; +using Model.OrderCriteria; +using Shared.Mapper; + +namespace Shared; + +public class LessonDataService : ILessonDataService +{ + private UserDbContext DbContext { get; set; } + public LessonDataService(UserDbContext context) + { + DbContext = context; + context.Database.EnsureCreated(); + } + public IEnumerable GetLessons(int page, int number, LessonOrderCriteria orderCriteria) + { + IQueryable query = DbContext.Lessons.Skip((page - 1) * number).Take(number); + switch (orderCriteria) + { + case LessonOrderCriteria.None: + break; + case LessonOrderCriteria.ByTitle: + query = query.OrderBy(s => s.Title); + break; + case LessonOrderCriteria.ByLastPublisher: + query = query.OrderBy(s => s.LastPublisher); + break; + case LessonOrderCriteria.ByLastEdit: + query = query.OrderBy(s => s.LastEdit); + break; + default: + break; + } + var lessons = query.ToList(); + return lessons.Select(s => s.FromEntityToDTO()); + } + + public LessonDTO GetLessonById(int id) + { + var lessonEntity = DbContext.Lessons.FirstOrDefault(u => u.Id == id); + if (lessonEntity == null) + { + throw new ArgumentException("Impossible de trouver la leçon", nameof(id)); + } + + return lessonEntity.FromEntityToDTO(); + } + + public LessonDTO GetLessonByTitle(string title) + { + var lessonEntity = DbContext.Lessons.FirstOrDefault(u => u.Title == title); + if (lessonEntity == null) + { + throw new ArgumentException("Impossible de trouver la leçon", nameof(title)); + } + + return lessonEntity.FromEntityToModel().FromModelToDTO(); + } + + public bool DeleteLesson(int id) + { + var lessonEntity = DbContext.Lessons.FirstOrDefault(l => l.Id == id); + if (lessonEntity == null) + { + return false; + } + + DbContext.Lessons.Remove(lessonEntity); + DbContext.SaveChangesAsync(); + return true; + } + + public LessonDTO UpdateLesson(int id, LessonDTO lesson) + { + var updatingLesson = DbContext.Lessons.FirstOrDefault(l => l.Id == id); + if (updatingLesson == null) + { + throw new ArgumentException("Impossible de trouver la leçon", nameof(id)); + } + + updatingLesson.Title = lesson.Title; + updatingLesson.LastPublisher = lesson.LastPublisher; + updatingLesson.LastEdit = lesson.LastEdit; + // Permet d'indiquer en Db que l'entité a été modifiée. + DbContext.Entry(updatingLesson).State = EntityState.Modified; + DbContext.SaveChangesAsync(); + return updatingLesson.FromEntityToModel().FromModelToDTO(); + } + + public LessonDTO CreateLesson(string title, string lastPublisher, DateOnly? lastEdit) + { + var newLessonEntity = new LessonDTO() + { + Title = title, + LastPublisher = lastPublisher, + LastEdit = lastEdit, + }; + DbContext.Lessons.Add(newLessonEntity.FromDTOToModel().FromModelToEntity()); + DbContext.SaveChangesAsync(); + return newLessonEntity; + } +} \ No newline at end of file diff --git a/API_SQLuedo/Shared/Mapper/BlackListMapper.cs b/API_SQLuedo/Shared/Mapper/BlackListMapper.cs index 18d99c3..77427c4 100644 --- a/API_SQLuedo/Shared/Mapper/BlackListMapper.cs +++ b/API_SQLuedo/Shared/Mapper/BlackListMapper.cs @@ -6,32 +6,32 @@ namespace Shared.Mapper; public static class BlackListMapper { - public static BlackListDTO FromModelToDTO(BlackList model) + public static BlackListDTO FromModelToDTO(this BlackList model) { return new BlackListDTO(model.Email, model.ExpirationDate); } - public static BlackListDTO FromEntityToDTO(BlackListEntity ent) + public static BlackListDTO FromEntityToDTO(this BlackListEntity ent) { return new BlackListDTO(ent.Email, ent.ExpirationDate); } - public static BlackList FromDTOToModel(BlackListDTO dto) + public static BlackList FromDTOToModel(this BlackListDTO dto) { return new BlackList(dto.Email, dto.ExpirationDate); } - public static BlackList FromEntityToModel(BlackListEntity ent) + public static BlackList FromEntityToModel(this BlackListEntity ent) { return new BlackList(ent.Email, ent.ExpirationDate); } - public static BlackListEntity FromDTOToEntity(BlackListDTO dto) + public static BlackListEntity FromDTOToEntity(this BlackListDTO dto) { return new BlackListEntity(dto.Email, dto.ExpirationDate); } - public static BlackListEntity FromModelToEntity(BlackList model) + public static BlackListEntity FromModelToEntity(this BlackList model) { return new BlackListEntity(model.Email, model.ExpirationDate); } diff --git a/API_SQLuedo/Shared/Mapper/LessonMapper.cs b/API_SQLuedo/Shared/Mapper/LessonMapper.cs index 824c592..80fdcb7 100644 --- a/API_SQLuedo/Shared/Mapper/LessonMapper.cs +++ b/API_SQLuedo/Shared/Mapper/LessonMapper.cs @@ -6,32 +6,32 @@ namespace Shared.Mapper; public static class LessonMapper { - public static LessonDTO FromModelToDTO(Lesson model) + public static LessonDTO FromModelToDTO(this Lesson model) { return new LessonDTO(model.Id, model.Title, model.LastPublisher, model.LastEdit); } - public static LessonDTO FromEntityToDTO(LessonEntity model) + public static LessonDTO FromEntityToDTO(this LessonEntity model) { return new LessonDTO(model.Id, model.Title, model.LastPublisher, model.LastEdit); } - public static LessonEntity FromModelToEntity(Lesson model) + public static LessonEntity FromModelToEntity(this Lesson model) { return new LessonEntity(model.Id, model.Title, model.LastPublisher, model.LastEdit); } - public static LessonEntity FromDTOToEntity(LessonDTO dto) + public static LessonEntity FromDTOToEntity(this LessonDTO dto) { return new LessonEntity(dto.Id, dto.Title, dto.LastPublisher, dto.LastEdit); } - public static Lesson FromDTOToModel(LessonDTO dto) + public static Lesson FromDTOToModel(this LessonDTO dto) { return new Lesson(dto.Id, dto.Title, dto.LastPublisher, dto.LastEdit); } - public static Lesson FromEntityToModel(LessonEntity entity) + public static Lesson FromEntityToModel(this LessonEntity entity) { return new Lesson(entity.Id, entity.Title, entity.LastPublisher, entity.LastEdit); } diff --git a/API_SQLuedo/Shared/Mapper/ParagraphMapper.cs b/API_SQLuedo/Shared/Mapper/ParagraphMapper.cs index 8cdc29e..3d029e5 100644 --- a/API_SQLuedo/Shared/Mapper/ParagraphMapper.cs +++ b/API_SQLuedo/Shared/Mapper/ParagraphMapper.cs @@ -6,35 +6,35 @@ namespace Shared.Mapper; public static class ParagraphMapper { - public static Paragraph FromDTOToModel(ParagraphDTO dto) + public static Paragraph FromDTOToModel(this ParagraphDTO dto) { return new Paragraph(dto.ContentTitle, dto.ContentContent, dto.Info, dto.Query, dto.Comment); } - public static Paragraph FromEntityToModel(ParagraphEntity model) + public static Paragraph FromEntityToModel(this ParagraphEntity model) { return new Paragraph(model.ContentTitle, model.ContentContent, model.Info, model.Query, model.Comment); } - public static ParagraphDTO FromEntityToDTO(ParagraphEntity model) + public static ParagraphDTO FromEntityToDTO(this ParagraphEntity model) { return new ParagraphDTO(model.Id, model.ContentTitle, model.ContentContent, model.Info, model.Query, model.Comment, model.LessonId); } - public static ParagraphDTO FromModelToDTO(Paragraph model) + public static ParagraphDTO FromModelToDTO(this Paragraph model) { return new ParagraphDTO(model.Id, model.ContentTitle, model.ContentContent, model.Info, model.Query, model.Comment, model.LessonId); } - public static ParagraphEntity FromDTOToEntity(ParagraphDTO dto) + public static ParagraphEntity FromDTOToEntity(this ParagraphDTO dto) { return new ParagraphEntity(dto.Id, dto.ContentTitle, dto.ContentContent, dto.Info, dto.Query, dto.Comment, dto.LessonId); } - public static ParagraphEntity FromModelToEntity(Paragraph model) + public static ParagraphEntity FromModelToEntity(this Paragraph model) { return new ParagraphEntity(model.Id, model.ContentTitle, model.ContentContent, model.Info, model.Query, model.Comment, model.LessonId); diff --git a/API_SQLuedo/Shared/ParagraphDataService.cs b/API_SQLuedo/Shared/ParagraphDataService.cs new file mode 100644 index 0000000..7d4f3ae --- /dev/null +++ b/API_SQLuedo/Shared/ParagraphDataService.cs @@ -0,0 +1,117 @@ +using Entities; +using Microsoft.EntityFrameworkCore; +using Dto; +using DbContextLib; +using Model.OrderCriteria; +using Shared.Mapper; + +namespace Services; + +public class ParagraphDataService : IParagraphDataService +{ + private UserDbContext DbContext { get; set; } + public ParagraphDataService(UserDbContext context) + { + DbContext = context; + context.Database.EnsureCreated(); + } + + public IEnumerable GetParagraphs(int page, int number, ParagraphOrderCriteria orderCriteria) + { + IQueryable query = DbContext.Paragraphs.Skip((page - 1) * number).Take(number); + switch (orderCriteria) + { + case ParagraphOrderCriteria.None: + break; + case ParagraphOrderCriteria.ByTitle: + query = query.OrderBy(s => s.Title); + break; + case ParagraphOrderCriteria.ByContent: + query = query.OrderBy(s => s.Content); + break; + case ParagraphOrderCriteria.ByInfo: + query = query.OrderBy(s => s.Info); + break; + case ParagraphOrderCriteria.ByQuery: + query = query.OrderBy(s => s.Query); + break; + case ParagraphOrderCriteria.ByComment: + query = query.OrderBy(s => s.Comment); + break; + default: + break; + } + var paragraphs = query.ToList(); + return paragraphs.Select(s => s.FromEntityToDTO()); + } + + public ParagraphDTO GetParagraphById(int id) + { + var paragraphEntity = DbContext.Paragraphs.FirstOrDefault(u => u.Id == id); + if (paragraphEntity == null) + { + throw new ArgumentException("Impossible de trouver le paragraphe", nameof(id)); + } + + return paragraphEntity.FromEntityToDTO(); + } + + public ParagraphDTO GetParagraphByTitle(string title) + { + var paragraphEntity = DbContext.Paragraphs.FirstOrDefault(u => u.Title == title); + if (paragraphEntity == null) + { + throw new ArgumentException("Impossible de trouver le paragraphe", nameof(title)); + } + + return paragraphEntity.FromEntityToDTO(); + } + + public bool DeleteParagraph(int id) + { + var paragraphEntity = DbContext.Paragraphs.FirstOrDefault(p => p.Id == id); + if (paragraphEntity == null) + { + return false; + } + + DbContext.Paragraphs.Remove(paragraphEntity); + DbContext.SaveChangesAsync(); + return true; + } + + public ParagraphDTO UpdateParagraph(int id, ParagraphDTO paragraphDTO) + { + var updatingParagraph = DbContext.Paragraphs.FirstOrDefault(p => p.Id == id); + if (updatingParagraph == null) + { + throw new ArgumentException("Impossible de trouver le paragraphe", nameof(id)); + } + + updatingParagraph.Title = paragraphDTO.Title; + updatingParagraph.Content = paragraphDTO.Content; + updatingParagraph.Info = paragraphDTO.Info; + updatingParagraph.Query = paragraphDTO.Query; + updatingParagraph.Comment = paragraphDTO.Comment; + // Permet d'indiquer en Db que l'entité a été modifiée. + DbContext.Entry(updatingParagraph).State = EntityState.Modified; + DbContext.SaveChangesAsync(); + return updatingParagraph.FromEntityToDTO(); + } + + public ParagraphDTO CreateParagraph(string title, string content, string info, string query, string comment, int lessonId) + { + var newParagraphEntity = new ParagraphDTO() + { + Title = title, + Content = content, + Info = info, + Query = query, + Comment = comment, + LessonId = lessonId + }; + DbContext.Paragraphs.Add(newParagraphEntity.FromDTOToEntity()); + DbContext.SaveChangesAsync(); + return newParagraphEntity; + } +} \ No newline at end of file diff --git a/API_SQLuedo/Shared/Shared.csproj b/API_SQLuedo/Shared/Shared.csproj index 7db1a18..0c8aa10 100644 --- a/API_SQLuedo/Shared/Shared.csproj +++ b/API_SQLuedo/Shared/Shared.csproj @@ -7,6 +7,7 @@ + diff --git a/API_SQLuedo/Shared/SuccessDataService.cs b/API_SQLuedo/Shared/SuccessDataService.cs new file mode 100644 index 0000000..aa57de2 --- /dev/null +++ b/API_SQLuedo/Shared/SuccessDataService.cs @@ -0,0 +1,105 @@ +using Entities; +using Microsoft.EntityFrameworkCore; +using Dto; +using DbContextLib; +using Model.OrderCriteria; +using Shared.Mapper; + +namespace Shared; + +public class SuccessDataService : ISuccessDataService +{ + private UserDbContext DbContext { get; set; } + public SuccessDataService(UserDbContext context) + { + DbContext = context; + context.Database.EnsureCreated(); + } + public IEnumerable GetSuccesses(int page, int number, SuccessOrderCriteria orderCriteria) + { + IQueryable query = DbContext.Successes.Skip((page - 1) * number).Take(number); + switch (orderCriteria) + { + case SuccessOrderCriteria.None: + break; + case SuccessOrderCriteria.ByUserId: + query = query.OrderBy(s => s.UserId); + break; + case SuccessOrderCriteria.ByInquiryId: + query = query.OrderBy(s => s.InquiryId); + break; + case SuccessOrderCriteria.ByIsFinished: + query = query.OrderBy(s => s.IsFinished); + break; + default: + break; + } + var successes = query.ToList(); + return successes.Select(s => s.FromEntityToDTO()); + } + + public SuccessDTO GetSuccessByUserId(int id) + { + var userEntity = DbContext.Successes.FirstOrDefault(u => u.UserId == id); + if (userEntity == null) + { + throw new ArgumentException("Impossible de trouver le succès", nameof(id)); + } + + return userEntity.FromEntityToDTO(); + } + + public SuccessDTO GetSuccessByInquiryId(int id) + { + var userEntity = DbContext.Successes.FirstOrDefault(u => u.InquiryId == id); + if (userEntity == null) + { + throw new ArgumentException("Impossible de trouver le succès", nameof(id)); + } + + return userEntity.FromEntityToDTO(); + } + + public bool DeleteSuccess(int id) + { + var successEntity = DbContext.Successes.FirstOrDefault(u => u.UserId == id); + if (successEntity == null) + { + return false; + } + + DbContext.Successes.Remove(successEntity); + DbContext.SaveChangesAsync(); + return true; + } + + public SuccessDTO UpdateSuccess(int id, SuccessDTO success) + { + var updatingSuccess = DbContext.Successes.FirstOrDefault(u => u.UserId == id); + if (updatingSuccess == null) + { + throw new ArgumentException("Impossible de trouver le succès", nameof(id)); + } + + updatingSuccess.UserId = success.UserId; + updatingSuccess.InquiryId = success.InquiryId; + updatingSuccess.IsFinished = success.IsFinished; + // Permet d'indiquer en Db que l'entité a été modifiée. + DbContext.Entry(updatingSuccess).State = EntityState.Modified; + DbContext.SaveChangesAsync(); + return updatingSuccess.FromEntityToDTO(); + } + + public SuccessDTO CreateSuccess(int userId, int inquiryId, bool isFinished) + { + var newSuccessEntity = new SuccessDTO() + { + UserId = userId, + InquiryId = inquiryId, + IsFinished = isFinished, + }; + DbContext.Successes.Add(newSuccessEntity.FromDTOToEntity()); + DbContext.SaveChangesAsync(); + return newSuccessEntity; + } +} \ No newline at end of file diff --git a/API_SQLuedo/Shared/UserDataService.cs b/API_SQLuedo/Shared/UserDataService.cs new file mode 100644 index 0000000..b7098a9 --- /dev/null +++ b/API_SQLuedo/Shared/UserDataService.cs @@ -0,0 +1,123 @@ +using Dto; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Entities; +using Shared.Mapper; +using DbContextLib; +using Model.OrderCriteria; + +namespace Shared +{ + public class UserDataService : IUserDataService + { + private UserDbContext DbContext { get; set; } + + public UserDataService(UserDbContext context) + { + DbContext = context; + context.Database.EnsureCreated(); + } + + public UserDTO GetUserById(int id) + { + var userEntity = DbContext.Users.FirstOrDefault(u => u.Id == id); + if (userEntity == null) + { + throw new ArgumentException("Impossible de trouver l'utilisateur", nameof(id)); + } + + return userEntity.FromEntityToModel().FromModelToDTO(); + + } + + public UserDTO GetUserByUsername(string username) + { + var userEntity = DbContext.Users.FirstOrDefault(u => u.Username == username); + if (userEntity == null) + { + throw new ArgumentException("Impossible de trouver l'utilisateur", nameof(username)); + } + + return userEntity.FromEntityToModel().FromModelToDTO(); + + } + + public IEnumerable GetUsers(int page, int number, UserOrderCriteria orderCriteria) + { + IQueryable query = DbContext.Users.Skip((page - 1) * number).Take(number); + switch (orderCriteria) + { + case UserOrderCriteria.None: + break; + case UserOrderCriteria.ById: + query = query.OrderBy(s => s.Id); + break; + case UserOrderCriteria.ByUsername: + query = query.OrderBy(s => s.Username); + break; + case UserOrderCriteria.ByEmail: + query = query.OrderBy(s => s.Email); + break; + case UserOrderCriteria.ByIsAdmin: + query = query.OrderBy(s => s.IsAdmin); + break; + default: + break; + } + var users = query.ToList(); + return users.Select(s => s.FromEntityToModel().FromModelToDTO()); + } + + public bool DeleteUser(int id) + { + var userEntity = DbContext.Users.FirstOrDefault(u => u.Id == id); + if (userEntity == null) + { + return false; + } + + DbContext.Users.Remove(userEntity); + DbContext.SaveChangesAsync(); + return true; + + } + + public UserDTO UpdateUser(int id, UserDTO user) + { + var updatingUser = DbContext.Users.FirstOrDefault(u => u.Id == id); + if (updatingUser == null) + { + throw new ArgumentException("Impossible de trouver l'utilisateur", nameof(id)); + } + + updatingUser.Username = user.Username; + updatingUser.Password = user.Password; + updatingUser.Email = user.Email; + updatingUser.IsAdmin = user.IsAdmin; + // Permet d'indiquer en Db que l'entité a été modifiée. + DbContext.Entry(updatingUser).State = EntityState.Modified; + DbContext.SaveChangesAsync(); + return updatingUser.FromEntityToModel().FromModelToDTO(); + + } + + public UserDTO CreateUser(string username, string password, string email, bool isAdmin) + { + var newUserEntity = new UserDTO + { + Username = username, + Password = password, + Email = email, + IsAdmin = isAdmin + }; + DbContext.Users.Add(newUserEntity.FromDTOToModel().FromModelToEntity()); + DbContext.SaveChangesAsync(); + return newUserEntity; + + } + } +} From 1ec49061a91a684671ca2a71f23c538d476abfef Mon Sep 17 00:00:00 2001 From: Erwan MENAGER Date: Mon, 11 Mar 2024 23:59:41 +0100 Subject: [PATCH 08/14] =?UTF-8?q?Fix=20du=20merge=20!=20(Impl=C3=A9mentati?= =?UTF-8?q?on=20en=20cours=20des=20derniers=20services=20et=20adaptation?= =?UTF-8?q?=20des=20m=C3=A9thodes=20CRUD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../API/Controllers/InquiriesController.cs | 2 +- API_SQLuedo/API/Service/LessonDataServiceAPI.cs | 7 +------ API_SQLuedo/Shared/ILessonDataService.cs | 13 +++++++------ API_SQLuedo/Shared/ILessonService.cs | 16 ++++++++-------- API_SQLuedo/Shared/ParagraphDataService.cs | 1 + 5 files changed, 18 insertions(+), 21 deletions(-) diff --git a/API_SQLuedo/API/Controllers/InquiriesController.cs b/API_SQLuedo/API/Controllers/InquiriesController.cs index f78a8e6..7bb0955 100644 --- a/API_SQLuedo/API/Controllers/InquiriesController.cs +++ b/API_SQLuedo/API/Controllers/InquiriesController.cs @@ -2,7 +2,7 @@ using Microsoft.AspNetCore.Mvc; using Dto; using Model.OrderCriteria; -using Services; +using Shared; using Asp.Versioning; namespace API.Controllers diff --git a/API_SQLuedo/API/Service/LessonDataServiceAPI.cs b/API_SQLuedo/API/Service/LessonDataServiceAPI.cs index 50d864b..6707cf1 100644 --- a/API_SQLuedo/API/Service/LessonDataServiceAPI.cs +++ b/API_SQLuedo/API/Service/LessonDataServiceAPI.cs @@ -4,7 +4,7 @@ using Shared; namespace API.Service; -public class LessonDataServiceApi(ILessonService lessonService) : ILessonDataService +public class LessonDataServiceApi(ILessonService lessonService) : ILessonService { public IEnumerable GetLessons(int page, int number) { @@ -23,9 +23,4 @@ public class LessonDataServiceApi(ILessonService lessonService) : public LessonEntity CreateLesson(string title, string lastPublisher, DateOnly? lastEdit) => lessonService.CreateLesson(title, lastPublisher, lastEdit); - - public IEnumerable GetLessons(int page, int number, LessonOrderCriteria orderCriteria) - { - throw new NotImplementedException(); - } } \ No newline at end of file diff --git a/API_SQLuedo/Shared/ILessonDataService.cs b/API_SQLuedo/Shared/ILessonDataService.cs index b3bdb83..3a9fad4 100644 --- a/API_SQLuedo/Shared/ILessonDataService.cs +++ b/API_SQLuedo/Shared/ILessonDataService.cs @@ -1,14 +1,15 @@ +using Dto; using Model.OrderCriteria; namespace Shared; -public interface ILessonDataService +public interface ILessonDataService : IDataService { - public IEnumerable GetLessons(int page, int number, LessonOrderCriteria orderCriteria); - public TLesson GetLessonById(int id); - public TLesson GetLessonByTitle(string title); + public IEnumerable GetLessons(int page, int number, LessonOrderCriteria orderCriteria); + public LessonDTO GetLessonById(int id); + public LessonDTO GetLessonByTitle(string title); public bool DeleteLesson(int id); - public TLesson UpdateLesson(int id, TLesson lesson); - public TLesson CreateLesson(string title, string lastPublisher, DateOnly? lastEdit); + public LessonDTO UpdateLesson(int id, LessonDTO lesson); + public LessonDTO CreateLesson(string title, string lastPublisher, DateOnly? lastEdit); } \ No newline at end of file diff --git a/API_SQLuedo/Shared/ILessonService.cs b/API_SQLuedo/Shared/ILessonService.cs index dd66837..9474430 100644 --- a/API_SQLuedo/Shared/ILessonService.cs +++ b/API_SQLuedo/Shared/ILessonService.cs @@ -1,11 +1,11 @@ -namespace Shared; - -public interface ILessonService -{ - public IEnumerable GetLessons(int page, int number); - public TLesson GetLessonById(int id); - public TLesson GetLessonByTitle(string title); +namespace Shared; + +public interface ILessonService +{ + public IEnumerable GetLessons(int page, int number); + public TLesson GetLessonById(int id); + public TLesson GetLessonByTitle(string title); public bool DeleteLesson(int id); public TLesson UpdateLesson(int id, TLesson lesson); - public TLesson CreateLesson(string title, string lastPublisher, DateOnly? lastEdit); + public TLesson CreateLesson(string title, string lastPublisher, DateOnly? lastEdit); } \ No newline at end of file diff --git a/API_SQLuedo/Shared/ParagraphDataService.cs b/API_SQLuedo/Shared/ParagraphDataService.cs index 7d4f3ae..4757dad 100644 --- a/API_SQLuedo/Shared/ParagraphDataService.cs +++ b/API_SQLuedo/Shared/ParagraphDataService.cs @@ -3,6 +3,7 @@ using Microsoft.EntityFrameworkCore; using Dto; using DbContextLib; using Model.OrderCriteria; +using Shared; using Shared.Mapper; namespace Services; From e0cefa8264ded4041639ffcb058bd6285322d4da Mon Sep 17 00:00:00 2001 From: Erwan MENAGER Date: Tue, 12 Mar 2024 01:18:05 +0100 Subject: [PATCH 09/14] =?UTF-8?q?Merge=20termin=C3=A9=20entre=20la=20branc?= =?UTF-8?q?he=20master=20et=20filtrage=20!=20(CRUD=20pour=205=20entit?= =?UTF-8?q?=C3=A9s,=20flitrage,=20servicesAPI=20et=20servicesEF,=20injecti?= =?UTF-8?q?on=20de=20d=C3=A9pendances,=20ProducesResponseType,=20Fix=20des?= =?UTF-8?q?=20routes=20o=C3=B9=20il=20manquait=20des=20param=C3=A8tres,=20?= =?UTF-8?q?Supression=20du=20IDataService=20inutile=20actuellement...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../API/Controllers/InquiriesController.cs | 6 +- .../API/Controllers/LessonsController.cs | 6 +- .../API/Controllers/ParagraphsController.cs | 6 +- .../API/Controllers/SuccessesController.cs | 6 +- API_SQLuedo/API/Controllers/UserController.cs | 15 +-- API_SQLuedo/API/Program.cs | 14 +++ .../API/Service/InquiryDataServiceAPI.cs | 5 +- .../API/Service/LessonDataServiceAPI.cs | 4 +- .../API/Service/ParagraphDataServiceAPI.cs | 26 +++++ .../API/Service/SuccessDataServiceAPI.cs | 26 +++++ API_SQLuedo/API/Service/UserDataServiceAPI.cs | 5 +- .../Service/InquiryDataService.cs | 96 +++++++++++++++---- .../Service/LessonDataService.cs | 78 ++++++++++++--- .../Service/ParagraphDataService.cs | 95 ++++++++++++++++++ .../Service/SuccessDataService.cs | 89 +++++++++++++++++ .../DbDataManager/Service/UserDataService.cs | 3 +- API_SQLuedo/EntityFramework/LessonEntity.cs | 2 + API_SQLuedo/Shared/IDataService.cs | 10 -- API_SQLuedo/Shared/IInquiryDataService.cs | 2 +- API_SQLuedo/Shared/IInquiryService.cs | 6 +- API_SQLuedo/Shared/ILessonDataService.cs | 2 +- API_SQLuedo/Shared/ILessonService.cs | 6 +- API_SQLuedo/Shared/IParagraphDataService.cs | 2 +- API_SQLuedo/Shared/IParagraphService.cs | 14 +++ API_SQLuedo/Shared/ISuccessDataService.cs | 2 +- API_SQLuedo/Shared/ISuccessService.cs | 14 +++ API_SQLuedo/Shared/IUserDataService.cs | 2 +- API_SQLuedo/Shared/IUserService.cs | 6 +- API_SQLuedo/Shared/ParagraphDataService.cs | 2 +- 29 files changed, 469 insertions(+), 81 deletions(-) create mode 100644 API_SQLuedo/API/Service/ParagraphDataServiceAPI.cs create mode 100644 API_SQLuedo/API/Service/SuccessDataServiceAPI.cs create mode 100644 API_SQLuedo/DbDataManager/Service/ParagraphDataService.cs create mode 100644 API_SQLuedo/DbDataManager/Service/SuccessDataService.cs delete mode 100644 API_SQLuedo/Shared/IDataService.cs create mode 100644 API_SQLuedo/Shared/IParagraphService.cs create mode 100644 API_SQLuedo/Shared/ISuccessService.cs diff --git a/API_SQLuedo/API/Controllers/InquiriesController.cs b/API_SQLuedo/API/Controllers/InquiriesController.cs index 7bb0955..fd5b2d3 100644 --- a/API_SQLuedo/API/Controllers/InquiriesController.cs +++ b/API_SQLuedo/API/Controllers/InquiriesController.cs @@ -37,7 +37,7 @@ namespace API.Controllers return Ok(_inquiryDataService.GetInquiries(page, number, orderCriteria)); } - [HttpGet("inquiry/id/{id}")] + [HttpGet("inquiry/{id}")] [ProducesResponseType(typeof(InquiryDTO), 200)] [ProducesResponseType(typeof(string), 404)] public IActionResult GetInquiryById(int id) @@ -54,7 +54,7 @@ namespace API.Controllers } } - [HttpGet("inquiry/title/{title}")] + [HttpGet("inquiry/{title}")] [ProducesResponseType(typeof(InquiryDTO), 200)] [ProducesResponseType(typeof(string), 404)] public IActionResult GetInquiryByTitle(string title) @@ -103,7 +103,7 @@ namespace API.Controllers return Created(nameof(GetInquiries), _inquiryDataService.CreateInquiry(dto.Title, dto.Description, dto.IsUser, dto.Database, dto.InquiryTable)); } - [HttpPut] + [HttpPut("inquiry/{id}")] [ProducesResponseType(typeof(InquiryDTO), 200)] [ProducesResponseType(typeof(string), 400)] [ProducesResponseType(typeof(string), 404)] diff --git a/API_SQLuedo/API/Controllers/LessonsController.cs b/API_SQLuedo/API/Controllers/LessonsController.cs index 9c0d74e..2401a6c 100644 --- a/API_SQLuedo/API/Controllers/LessonsController.cs +++ b/API_SQLuedo/API/Controllers/LessonsController.cs @@ -38,7 +38,7 @@ namespace API.Controllers return Ok(_lessonDataService.GetLessons(page, number, orderCriteria)); } - [HttpGet("lesson/id/{id}")] + [HttpGet("lesson/{id}")] [ProducesResponseType(typeof(LessonDTO), 200)] [ProducesResponseType(typeof(string), 404)] public IActionResult GetLessonById(int id) @@ -55,7 +55,7 @@ namespace API.Controllers } } - [HttpGet("lesson/title/{title}")] + [HttpGet("lesson/{title}")] [ProducesResponseType(typeof(LessonDTO), 200)] [ProducesResponseType(typeof(string), 404)] public IActionResult GetLessonByTitle(string title) @@ -104,7 +104,7 @@ namespace API.Controllers return Created(nameof(GetLessons), _lessonDataService.CreateLesson(dto.Title, dto.LastPublisher, dto.LastEdit)); } - [HttpPut] + [HttpPut("lesson/{id}")] [ProducesResponseType(typeof(LessonDTO), 200)] [ProducesResponseType(typeof(string), 400)] [ProducesResponseType(typeof(string), 404)] diff --git a/API_SQLuedo/API/Controllers/ParagraphsController.cs b/API_SQLuedo/API/Controllers/ParagraphsController.cs index f94e3f3..8cde6f1 100644 --- a/API_SQLuedo/API/Controllers/ParagraphsController.cs +++ b/API_SQLuedo/API/Controllers/ParagraphsController.cs @@ -38,7 +38,7 @@ namespace API.Controllers return Ok(_paragraphDataService.GetParagraphs(page, number, orderCriteria)); } - [HttpGet("paragraph/id/{id}")] + [HttpGet("paragraph/{id}")] [ProducesResponseType(typeof(ParagraphDTO), 200)] [ProducesResponseType(typeof(string), 404)] public IActionResult GetParagraphById(int id) @@ -54,7 +54,7 @@ namespace API.Controllers } } - [HttpGet("paragraph/title/{title}")] + [HttpGet("paragraph/{title}")] [ProducesResponseType(typeof(ParagraphDTO), 200)] [ProducesResponseType(typeof(string), 404)] public IActionResult GetParagraphByTitle(string title) @@ -102,7 +102,7 @@ namespace API.Controllers return Created(nameof(GetParagraphs), _paragraphDataService.CreateParagraph(dto.Title, dto.Content, dto.Info, dto.Query, dto.Comment, dto.LessonId)); } - [HttpPut] + [HttpPut("paragraph/{id}")] [ProducesResponseType(typeof(ParagraphDTO), 200)] [ProducesResponseType(typeof(string), 400)] [ProducesResponseType(typeof(string), 404)] diff --git a/API_SQLuedo/API/Controllers/SuccessesController.cs b/API_SQLuedo/API/Controllers/SuccessesController.cs index f7c6c07..a335f0f 100644 --- a/API_SQLuedo/API/Controllers/SuccessesController.cs +++ b/API_SQLuedo/API/Controllers/SuccessesController.cs @@ -38,7 +38,7 @@ namespace API.Controllers return Ok(_successDataService.GetSuccesses(page, number, orderCriteria)); } - [HttpGet("success/user/{id}")] + [HttpGet("success/{id}")] [ProducesResponseType(typeof(SuccessDTO), 200)] [ProducesResponseType(typeof(string), 404)] public IActionResult GetSuccessByUserId(int userId) @@ -54,7 +54,7 @@ namespace API.Controllers } } - [HttpGet("success/inquiry/{inquiryId}")] + [HttpGet("success/{inquiryId}")] [ProducesResponseType(typeof(SuccessDTO), 200)] [ProducesResponseType(typeof(string), 404)] public IActionResult GetSuccessByInquiryId(int inquiryId) @@ -102,7 +102,7 @@ namespace API.Controllers return Created(nameof(GetSuccesses), _successDataService.CreateSuccess(dto.UserId, dto.InquiryId, dto.IsFinished)); } - [HttpPut] + [HttpPut("success/{id}")] [ProducesResponseType(typeof(SuccessDTO), 200)] [ProducesResponseType(typeof(string), 400)] [ProducesResponseType(typeof(string), 404)] diff --git a/API_SQLuedo/API/Controllers/UserController.cs b/API_SQLuedo/API/Controllers/UserController.cs index e990ded..7792529 100644 --- a/API_SQLuedo/API/Controllers/UserController.cs +++ b/API_SQLuedo/API/Controllers/UserController.cs @@ -3,11 +3,12 @@ using Asp.Versioning; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Shared; +using Model.OrderCriteria; namespace API.Controllers { [Route("api/v{version:apiVersion}/[controller]")] - [Authorize] + //[Authorize] [ApiVersion("1.0")] [ApiController] public class UserController(ILogger logger, IUserService userService) : ControllerBase @@ -15,9 +16,9 @@ namespace API.Controllers [HttpGet("users/{page}/{number}")] [ProducesResponseType(typeof(UserDTO), 200)] [ProducesResponseType(typeof(string), 204)] - public IActionResult GetUsers(int page, int number) + public IActionResult GetUsers(int page, int number, UserOrderCriteria orderCriteria) { - var users = userService.GetUsers(page, number).ToList(); + var users = userService.GetUsers(page, number, orderCriteria).ToList(); if (users.Count == 0) { logger.LogError("[ERREUR] Aucun utilisateur trouvé."); @@ -28,7 +29,7 @@ namespace API.Controllers return Ok(users); } - [HttpGet("user/id/{id}")] + [HttpGet("user/{id}")] [ProducesResponseType(typeof(UserDTO), 200)] [ProducesResponseType(typeof(string), 404)] public IActionResult GetUserById(int id) @@ -45,7 +46,7 @@ namespace API.Controllers } } - [HttpGet("user/username/{username}")] + [HttpGet("user/{username}")] [ProducesResponseType(typeof(UserDTO), 200)] [ProducesResponseType(typeof(string), 404)] public IActionResult GetUserByUsername(string username) @@ -62,7 +63,7 @@ namespace API.Controllers } } - [HttpDelete("user/id/{id}")] + [HttpDelete("user/{id}")] [ProducesResponseType(typeof(UserDTO), 200)] [ProducesResponseType(typeof(string), 404)] public IActionResult DeleteUser(int id) @@ -98,7 +99,7 @@ namespace API.Controllers userService.CreateUser(dto.Username, dto.Password, dto.Email, dto.IsAdmin)); } - [HttpPut] + [HttpPut("user/{id}")] [ProducesResponseType(typeof(UserDTO), 200)] [ProducesResponseType(typeof(string), 400)] [ProducesResponseType(typeof(string), 404)] diff --git a/API_SQLuedo/API/Program.cs b/API_SQLuedo/API/Program.cs index ae25480..338e26c 100644 --- a/API_SQLuedo/API/Program.cs +++ b/API_SQLuedo/API/Program.cs @@ -20,8 +20,22 @@ builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); + builder.Services.AddScoped, DbDataManager.Service.UserDataService>(); +builder.Services.AddScoped, Shared.UserDataService>(); + builder.Services.AddScoped, DbDataManager.Service.InquiryDataService>(); +builder.Services.AddScoped, Shared.InquiryDataService>(); + +builder.Services.AddScoped, DbDataManager.Service.ParagraphDataService>(); +builder.Services.AddScoped, Shared.ParagraphDataService>(); + +builder.Services.AddScoped, DbDataManager.Service.SuccessDataService>(); +builder.Services.AddScoped, Shared.SuccessDataService>(); + +builder.Services.AddScoped, DbDataManager.Service.LessonDataService>(); +builder.Services.AddScoped, Shared.LessonDataService>(); + builder.Services.AddDbContext(); builder.Services.AddDbContext(options => options.UseInMemoryDatabase("appDb")); builder.Services.AddIdentityApiEndpoints().AddEntityFrameworkStores(); diff --git a/API_SQLuedo/API/Service/InquiryDataServiceAPI.cs b/API_SQLuedo/API/Service/InquiryDataServiceAPI.cs index d62e818..fc260f6 100644 --- a/API_SQLuedo/API/Service/InquiryDataServiceAPI.cs +++ b/API_SQLuedo/API/Service/InquiryDataServiceAPI.cs @@ -1,4 +1,5 @@ using Entities; +using Model.OrderCriteria; using Shared; namespace API.Service; @@ -15,9 +16,9 @@ public class InquiryDataServiceApi(IInquiryService inquiryService return inquiryService.DeleteInquiry(id); } - public IEnumerable GetInquiries(int page, int number) + public IEnumerable GetInquiries(int page, int number, InquiryOrderCriteria orderCriteria) { - var inquiries = inquiryService.GetInquiries(page, number); + var inquiries = inquiryService.GetInquiries(page, number, orderCriteria); return inquiries.Select(i => i).ToList(); } diff --git a/API_SQLuedo/API/Service/LessonDataServiceAPI.cs b/API_SQLuedo/API/Service/LessonDataServiceAPI.cs index 6707cf1..7b26363 100644 --- a/API_SQLuedo/API/Service/LessonDataServiceAPI.cs +++ b/API_SQLuedo/API/Service/LessonDataServiceAPI.cs @@ -6,9 +6,9 @@ namespace API.Service; public class LessonDataServiceApi(ILessonService lessonService) : ILessonService { - public IEnumerable GetLessons(int page, int number) + public IEnumerable GetLessons(int page, int number, LessonOrderCriteria orderCriteria) { - var lessonsEntities = lessonService.GetLessons(page, number); + var lessonsEntities = lessonService.GetLessons(page, number, orderCriteria); return lessonsEntities.Select(e => e).ToList(); } diff --git a/API_SQLuedo/API/Service/ParagraphDataServiceAPI.cs b/API_SQLuedo/API/Service/ParagraphDataServiceAPI.cs new file mode 100644 index 0000000..c29f89d --- /dev/null +++ b/API_SQLuedo/API/Service/ParagraphDataServiceAPI.cs @@ -0,0 +1,26 @@ +using Entities; +using Model.OrderCriteria; +using Shared; + +namespace API.Service; + +public class ParagraphDataServiceApi(IParagraphService paragraphService) : IParagraphService +{ + public IEnumerable GetParagraphs(int page, int number, ParagraphOrderCriteria orderCriteria) + { + var paragraphsEntities = paragraphService.GetParagraphs(page, number, orderCriteria); + return paragraphsEntities.Select(e => e).ToList(); + } + + public ParagraphEntity GetParagraphById(int id) => paragraphService.GetParagraphById(id); + + public ParagraphEntity GetParagraphByTitle(string title) => paragraphService.GetParagraphByTitle(title); + + public bool DeleteParagraph(int id) => paragraphService.DeleteParagraph(id); + + public ParagraphEntity UpdateParagraph(int id, ParagraphEntity paragraph) => + paragraphService.UpdateParagraph(id, paragraph); + + public ParagraphEntity CreateParagraph(string title, string content, string info, string query, string comment, int lessonId) => + paragraphService.CreateParagraph(title, content, info, query, comment, lessonId); +} \ No newline at end of file diff --git a/API_SQLuedo/API/Service/SuccessDataServiceAPI.cs b/API_SQLuedo/API/Service/SuccessDataServiceAPI.cs new file mode 100644 index 0000000..7433a91 --- /dev/null +++ b/API_SQLuedo/API/Service/SuccessDataServiceAPI.cs @@ -0,0 +1,26 @@ +using Entities; +using Model.OrderCriteria; +using Shared; + +namespace API.Service; + +public class SuccessDataServiceApi(ISuccessService sucessService) : ISuccessService +{ + public IEnumerable GetSuccesses(int page, int number, SuccessOrderCriteria orderCriteria) + { + var successesEntities = sucessService.GetSuccesses(page, number, orderCriteria); + return successesEntities.Select(e => e).ToList(); + } + + public SuccessEntity GetSuccessByUserId(int id) => sucessService.GetSuccessByUserId(id); + + public SuccessEntity GetSuccessByInquiryId(int id) => sucessService.GetSuccessByInquiryId(id); + + public bool DeleteSuccess(int id) => sucessService.DeleteSuccess(id); + + public SuccessEntity UpdateSuccess(int id, SuccessEntity success) => + sucessService.UpdateSuccess(id, success); + + public SuccessEntity CreateSuccess(int userId, int inquiryId, bool isFinished) => + sucessService.CreateSuccess(userId, inquiryId, isFinished); +} \ No newline at end of file diff --git a/API_SQLuedo/API/Service/UserDataServiceAPI.cs b/API_SQLuedo/API/Service/UserDataServiceAPI.cs index 45e080c..c1d4997 100644 --- a/API_SQLuedo/API/Service/UserDataServiceAPI.cs +++ b/API_SQLuedo/API/Service/UserDataServiceAPI.cs @@ -1,13 +1,14 @@ using Entities; +using Model.OrderCriteria; using Shared; namespace API.Service; public class UserDataServiceApi(IUserService userService) : IUserService { - public IEnumerable GetUsers(int page, int number) + public IEnumerable GetUsers(int page, int number, UserOrderCriteria orderCriteria) { - var usersEntities = userService.GetUsers(page, number); + var usersEntities = userService.GetUsers(page, number, orderCriteria); return usersEntities.Select(e => e).ToList(); } diff --git a/API_SQLuedo/DbDataManager/Service/InquiryDataService.cs b/API_SQLuedo/DbDataManager/Service/InquiryDataService.cs index 42535a3..da662b2 100644 --- a/API_SQLuedo/DbDataManager/Service/InquiryDataService.cs +++ b/API_SQLuedo/DbDataManager/Service/InquiryDataService.cs @@ -1,37 +1,93 @@ -using Entities; +using DbContextLib; +using Entities; +using Microsoft.EntityFrameworkCore; +using Model.OrderCriteria; using Shared; namespace DbDataManager.Service; -public class InquiryDataService : IInquiryService +public class InquiryDataService : IInquiryService { - public InquiryEntity CreateInquiry(string title, string description, bool isUser, int tableId, int solutionId) + private UserDbContext DbContext { get; set; } + + public InquiryDataService(UserDbContext context) { - throw new NotImplementedException(); + DbContext = context; + context.Database.EnsureCreated(); } - public bool DeleteInquiry(int id) + public InquiryEntity GetInquiryById(int id) { - throw new NotImplementedException(); + var inquiryEntity = DbContext.Inquiries.FirstOrDefault(u => u.Id == id); + if (inquiryEntity == null) + { + throw new ArgumentException("Impossible de trouver l'enquête", nameof(id)); + } + + return inquiryEntity; } - public IEnumerable GetInquiries(int page, int number) - { - throw new NotImplementedException(); - } - - public InquiryEntity GetInquiryById(int id) - { - throw new NotImplementedException(); - } - - public InquiryEntity GetInquiryByTitle(string title) - { - throw new NotImplementedException(); + public InquiryEntity GetInquiryByTitle(string title) + { + var inquiryEntity = DbContext.Inquiries.FirstOrDefault(u => u.Title == title); + if (inquiryEntity == null) + { + throw new ArgumentException("Impossible de trouver l'enquête", nameof(title)); + } + + return inquiryEntity; + } + + public IEnumerable GetInquiries(int page, int number, InquiryOrderCriteria orderCriteria) + { + return DbContext.Inquiries.Skip((page - 1) * number).Take(number).ToList() + .Select(u => u); + } + + public bool DeleteInquiry(int id) + { + var inquiryEntity = DbContext.Inquiries.FirstOrDefault(u => u.Id == id); + if (inquiryEntity == null) + { + return false; + } + + DbContext.Inquiries.Remove(inquiryEntity); + DbContext.SaveChangesAsync(); + return true; } public InquiryEntity UpdateInquiry(int id, InquiryEntity inquiry) { - throw new NotImplementedException(); + var updatingInquiry = DbContext.Inquiries.FirstOrDefault(u => u.Id == id); + if (updatingInquiry == null) + { + throw new ArgumentException("Impossible de trouver l'enquête", nameof(id)); + } + + updatingInquiry.Title = inquiry.Title; + updatingInquiry.Description = inquiry.Description; + updatingInquiry.IsUser = inquiry.IsUser; + updatingInquiry.IdInquiryTable = inquiry.IdInquiryTable; + updatingInquiry.IdDatabase = inquiry.IdDatabase; + // Permet d'indiquer en Db que l'entité a été modifiée. + DbContext.Entry(updatingInquiry).State = EntityState.Modified; + DbContext.SaveChangesAsync(); + return updatingInquiry; + } + + public InquiryEntity CreateInquiry(string title, string description, bool isUser, int tableId, int solutionId) + { + var newInquiryEntity = new InquiryEntity() + { + Title = title, + Description = description, + IsUser = isUser, + IdDatabase = tableId, + IdInquiryTable = solutionId, + }; + DbContext.Inquiries.Add(newInquiryEntity); + DbContext.SaveChangesAsync(); + return newInquiryEntity; } } \ No newline at end of file diff --git a/API_SQLuedo/DbDataManager/Service/LessonDataService.cs b/API_SQLuedo/DbDataManager/Service/LessonDataService.cs index 8c7bbfc..65ed957 100644 --- a/API_SQLuedo/DbDataManager/Service/LessonDataService.cs +++ b/API_SQLuedo/DbDataManager/Service/LessonDataService.cs @@ -1,37 +1,89 @@ -using Entities; +using DbContextLib; +using Entities; +using Microsoft.EntityFrameworkCore; +using Model.OrderCriteria; using Shared; namespace DbDataManager.Service; -public class LessonDataService : ILessonService +public class LessonDataService : ILessonService { - public LessonEntity CreateLesson(string title, string lastPublisher, DateOnly? lastEdit) - { - throw new NotImplementedException(); - } + private UserDbContext DbContext { get; set; } - public bool DeleteLesson(int id) + public LessonDataService(UserDbContext context) { - throw new NotImplementedException(); + DbContext = context; + context.Database.EnsureCreated(); } public LessonEntity GetLessonById(int id) { - throw new NotImplementedException(); + var lessonEntity = DbContext.Lessons.FirstOrDefault(u => u.Id == id); + if (lessonEntity == null) + { + throw new ArgumentException("Impossible de trouver la leçon", nameof(id)); + } + + return lessonEntity; } public LessonEntity GetLessonByTitle(string title) { - throw new NotImplementedException(); + var lessonEntity = DbContext.Lessons.FirstOrDefault(u => u.Title == title); + if (lessonEntity == null) + { + throw new ArgumentException("Impossible de trouver la leçon", nameof(title)); + } + + return lessonEntity; + } + + public IEnumerable GetLessons(int page, int number, LessonOrderCriteria orderCriteria) + { + return DbContext.Lessons.Skip((page - 1) * number).Take(number).ToList() + .Select(u => u); } - public IEnumerable GetLessons(int page, int number) + public bool DeleteLesson(int id) { - throw new NotImplementedException(); + var lessonEntity = DbContext.Lessons.FirstOrDefault(u => u.Id == id); + if (lessonEntity == null) + { + return false; + } + + DbContext.Lessons.Remove(lessonEntity); + DbContext.SaveChangesAsync(); + return true; } public LessonEntity UpdateLesson(int id, LessonEntity lesson) { - throw new NotImplementedException(); + var updatingLesson = DbContext.Lessons.FirstOrDefault(u => u.Id == id); + if (updatingLesson == null) + { + throw new ArgumentException("Impossible de trouver la leçon", nameof(id)); + } + + updatingLesson.Title = lesson.Title; + updatingLesson.LastPublisher = lesson.LastPublisher; + updatingLesson.LastEdit = lesson.LastEdit; + // Permet d'indiquer en Db que l'entité a été modifiée. + DbContext.Entry(updatingLesson).State = EntityState.Modified; + DbContext.SaveChangesAsync(); + return updatingLesson; + } + + public LessonEntity CreateLesson(string title, string lastPublisher, DateOnly? lastEdit) + { + var newLessonEntity = new LessonEntity() + { + Title = title, + LastPublisher = lastPublisher, + LastEdit = lastEdit, + }; + DbContext.Lessons.Add(newLessonEntity); + DbContext.SaveChangesAsync(); + return newLessonEntity; } } \ No newline at end of file diff --git a/API_SQLuedo/DbDataManager/Service/ParagraphDataService.cs b/API_SQLuedo/DbDataManager/Service/ParagraphDataService.cs new file mode 100644 index 0000000..d561261 --- /dev/null +++ b/API_SQLuedo/DbDataManager/Service/ParagraphDataService.cs @@ -0,0 +1,95 @@ +using DbContextLib; +using Entities; +using Microsoft.EntityFrameworkCore; +using Model.OrderCriteria; +using Shared; + +namespace DbDataManager.Service; + +public class ParagraphDataService : IParagraphService +{ + private UserDbContext DbContext { get; set; } + + public ParagraphDataService(UserDbContext context) + { + DbContext = context; + context.Database.EnsureCreated(); + } + + public ParagraphEntity GetParagraphById(int id) + { + var paragraphEntity = DbContext.Paragraphs.FirstOrDefault(u => u.Id == id); + if (paragraphEntity == null) + { + throw new ArgumentException("Impossible de trouver le paragraphe", nameof(id)); + } + + return paragraphEntity; + } + + public ParagraphEntity GetParagraphByTitle(string title) + { + var paragraphEntity = DbContext.Paragraphs.FirstOrDefault(u => u.Title == title); + if (paragraphEntity == null) + { + throw new ArgumentException("Impossible de trouver le paragraphe", nameof(title)); + } + + return paragraphEntity; + } + + public IEnumerable GetParagraphs(int page, int number, ParagraphOrderCriteria orderCriteria) + { + return DbContext.Paragraphs.Skip((page - 1) * number).Take(number).ToList() + .Select(u => u); + } + + public bool DeleteParagraph(int id) + { + var paragraphEntity = DbContext.Paragraphs.FirstOrDefault(u => u.Id == id); + if (paragraphEntity == null) + { + return false; + } + + DbContext.Paragraphs.Remove(paragraphEntity); + DbContext.SaveChangesAsync(); + return true; + } + + public ParagraphEntity UpdateParagraph(int id, ParagraphEntity paragraph) + { + var updatingParagraph = DbContext.Paragraphs.FirstOrDefault(u => u.Id == id); + if (updatingParagraph == null) + { + throw new ArgumentException("Impossible de trouver le paragraphe", nameof(id)); + } + + updatingParagraph.Title = paragraph.Title; + updatingParagraph.Content = paragraph.Content; + updatingParagraph.Info = paragraph.Info; + updatingParagraph.Query = paragraph.Query; + updatingParagraph.Comment = paragraph.Comment; + updatingParagraph.LessonId = paragraph.LessonId; + // Permet d'indiquer en Db que l'entité a été modifiée. + DbContext.Entry(updatingParagraph).State = EntityState.Modified; + DbContext.SaveChangesAsync(); + return updatingParagraph; + } + + public ParagraphEntity CreateParagraph(string title, string content, string info, string query, string comment, int lessonId) + { + var newParagraphEntity = new ParagraphEntity() + { + Title = title, + Content = content, + Info = info, + Query = query, + Comment = comment, + LessonId = lessonId + }; + DbContext.Paragraphs.Add(newParagraphEntity); + DbContext.SaveChangesAsync(); + return newParagraphEntity; + } +} \ No newline at end of file diff --git a/API_SQLuedo/DbDataManager/Service/SuccessDataService.cs b/API_SQLuedo/DbDataManager/Service/SuccessDataService.cs new file mode 100644 index 0000000..4a079fa --- /dev/null +++ b/API_SQLuedo/DbDataManager/Service/SuccessDataService.cs @@ -0,0 +1,89 @@ +using DbContextLib; +using Entities; +using Microsoft.EntityFrameworkCore; +using Model.OrderCriteria; +using Shared; + +namespace DbDataManager.Service; + +public class SuccessDataService : ISuccessService +{ + private UserDbContext DbContext { get; set; } + + public SuccessDataService(UserDbContext context) + { + DbContext = context; + context.Database.EnsureCreated(); + } + + public SuccessEntity GetSuccessByUserId(int id) + { + var successEntity = DbContext.Successes.FirstOrDefault(u => u.UserId == id); + if (successEntity == null) + { + throw new ArgumentException("Impossible de trouver le succès avec l'user id", nameof(id)); + } + + return successEntity; + } + + public SuccessEntity GetSuccessByInquiryId(int id) + { + var successEntity = DbContext.Successes.FirstOrDefault(u => u.InquiryId == id); + if (successEntity == null) + { + throw new ArgumentException("Impossible de trouver le succès avec l'inquiry id", nameof(id)); + } + + return successEntity; + } + + public IEnumerable GetSuccesses(int page, int number, SuccessOrderCriteria orderCriteria) + { + return DbContext.Successes.Skip((page - 1) * number).Take(number).ToList() + .Select(u => u); + } + + public bool DeleteSuccess(int id) + { + var userEntity = DbContext.Successes.FirstOrDefault(u => u.UserId == id); + if (userEntity == null) + { + return false; + } + + DbContext.Successes.Remove(userEntity); + DbContext.SaveChangesAsync(); + return true; + } + + public SuccessEntity UpdateSuccess(int id, SuccessEntity success) + { + var updatingSuccess = DbContext.Successes.FirstOrDefault(u => u.UserId == id); + if (updatingSuccess == null) + { + throw new ArgumentException("Impossible de trouver le succès avec l'user id", nameof(id)); + } + + updatingSuccess.UserId = success.UserId; + updatingSuccess.InquiryId = success.InquiryId; + updatingSuccess.IsFinished = success.IsFinished; + // Permet d'indiquer en Db que l'entité a été modifiée. + DbContext.Entry(updatingSuccess).State = EntityState.Modified; + DbContext.SaveChangesAsync(); + return updatingSuccess; + } + + public SuccessEntity CreateSuccess(int userId, int inquiryId, bool isFinished) + { + var newSuccessEntity = new SuccessEntity() + { + UserId = userId, + InquiryId = inquiryId, + IsFinished = isFinished, + }; + DbContext.Successes.Add(newSuccessEntity); + DbContext.SaveChangesAsync(); + return newSuccessEntity; + } +} \ No newline at end of file diff --git a/API_SQLuedo/DbDataManager/Service/UserDataService.cs b/API_SQLuedo/DbDataManager/Service/UserDataService.cs index e9d32ce..496b825 100644 --- a/API_SQLuedo/DbDataManager/Service/UserDataService.cs +++ b/API_SQLuedo/DbDataManager/Service/UserDataService.cs @@ -1,6 +1,7 @@ using DbContextLib; using Entities; using Microsoft.EntityFrameworkCore; +using Model.OrderCriteria; using Shared; namespace DbDataManager.Service; @@ -37,7 +38,7 @@ public class UserDataService : IUserService return userEntity; } - public IEnumerable GetUsers(int page, int number) + public IEnumerable GetUsers(int page, int number, UserOrderCriteria orderCriteria) { return DbContext.Users.Skip((page - 1) * number).Take(number).ToList() .Select(u => u); diff --git a/API_SQLuedo/EntityFramework/LessonEntity.cs b/API_SQLuedo/EntityFramework/LessonEntity.cs index b06f611..902465e 100644 --- a/API_SQLuedo/EntityFramework/LessonEntity.cs +++ b/API_SQLuedo/EntityFramework/LessonEntity.cs @@ -11,6 +11,8 @@ public class LessonEntity public DateOnly? LastEdit { get; set; } public ICollection Content { get; set; } = new List(); + public LessonEntity() { } + public LessonEntity(int id, string title, string lastPublisher, DateOnly? lastEdit) { Id = id; diff --git a/API_SQLuedo/Shared/IDataService.cs b/API_SQLuedo/Shared/IDataService.cs deleted file mode 100644 index e63a041..0000000 --- a/API_SQLuedo/Shared/IDataService.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Entities; -using Model; -using Dto; - -namespace Shared -{ - public interface IDataService - { - } -} diff --git a/API_SQLuedo/Shared/IInquiryDataService.cs b/API_SQLuedo/Shared/IInquiryDataService.cs index 1d0bf4b..682e4c6 100644 --- a/API_SQLuedo/Shared/IInquiryDataService.cs +++ b/API_SQLuedo/Shared/IInquiryDataService.cs @@ -3,7 +3,7 @@ using Model.OrderCriteria; namespace Shared; -public interface IInquiryDataService : IDataService +public interface IInquiryDataService : IInquiryService { public IEnumerable GetInquiries(int page, int number, InquiryOrderCriteria orderCriteria); public InquiryDTO GetInquiryById(int id); diff --git a/API_SQLuedo/Shared/IInquiryService.cs b/API_SQLuedo/Shared/IInquiryService.cs index 3cb2daa..5b5f28b 100644 --- a/API_SQLuedo/Shared/IInquiryService.cs +++ b/API_SQLuedo/Shared/IInquiryService.cs @@ -1,8 +1,10 @@ -namespace Shared; +using Model.OrderCriteria; + +namespace Shared; public interface IInquiryService { - public IEnumerable GetInquiries(int page, int number); + public IEnumerable GetInquiries(int page, int number, InquiryOrderCriteria orderCriteria); public TInquiry GetInquiryById(int id); public TInquiry GetInquiryByTitle(string title); public bool DeleteInquiry(int id); diff --git a/API_SQLuedo/Shared/ILessonDataService.cs b/API_SQLuedo/Shared/ILessonDataService.cs index 3a9fad4..eb16c98 100644 --- a/API_SQLuedo/Shared/ILessonDataService.cs +++ b/API_SQLuedo/Shared/ILessonDataService.cs @@ -3,7 +3,7 @@ using Model.OrderCriteria; namespace Shared; -public interface ILessonDataService : IDataService +public interface ILessonDataService : ILessonService { public IEnumerable GetLessons(int page, int number, LessonOrderCriteria orderCriteria); public LessonDTO GetLessonById(int id); diff --git a/API_SQLuedo/Shared/ILessonService.cs b/API_SQLuedo/Shared/ILessonService.cs index 9474430..b0a1666 100644 --- a/API_SQLuedo/Shared/ILessonService.cs +++ b/API_SQLuedo/Shared/ILessonService.cs @@ -1,8 +1,10 @@ -namespace Shared; +using Model.OrderCriteria; + +namespace Shared; public interface ILessonService { - public IEnumerable GetLessons(int page, int number); + public IEnumerable GetLessons(int page, int number, LessonOrderCriteria orderCriteria); public TLesson GetLessonById(int id); public TLesson GetLessonByTitle(string title); public bool DeleteLesson(int id); diff --git a/API_SQLuedo/Shared/IParagraphDataService.cs b/API_SQLuedo/Shared/IParagraphDataService.cs index 24e3b4f..1919860 100644 --- a/API_SQLuedo/Shared/IParagraphDataService.cs +++ b/API_SQLuedo/Shared/IParagraphDataService.cs @@ -3,7 +3,7 @@ using Model.OrderCriteria; namespace Shared; -public interface IParagraphDataService : IDataService +public interface IParagraphDataService : IParagraphService { public IEnumerable GetParagraphs(int page, int number, ParagraphOrderCriteria orderCriteria); public ParagraphDTO GetParagraphById(int id); diff --git a/API_SQLuedo/Shared/IParagraphService.cs b/API_SQLuedo/Shared/IParagraphService.cs new file mode 100644 index 0000000..7b59ede --- /dev/null +++ b/API_SQLuedo/Shared/IParagraphService.cs @@ -0,0 +1,14 @@ +using Model.OrderCriteria; + +namespace Shared +{ + public interface IParagraphService + { + public IEnumerable GetParagraphs(int page, int number, ParagraphOrderCriteria orderCriteria); + public TParagraph GetParagraphById(int id); + public TParagraph GetParagraphByTitle(string title); + public bool DeleteParagraph(int id); + public TParagraph UpdateParagraph(int id, TParagraph paragraph); + public TParagraph CreateParagraph(string title, string content, string info, string query, string comment, int lessonId); + } +} \ No newline at end of file diff --git a/API_SQLuedo/Shared/ISuccessDataService.cs b/API_SQLuedo/Shared/ISuccessDataService.cs index fc7ed91..701024d 100644 --- a/API_SQLuedo/Shared/ISuccessDataService.cs +++ b/API_SQLuedo/Shared/ISuccessDataService.cs @@ -3,7 +3,7 @@ using Model.OrderCriteria; namespace Shared; -public interface ISuccessDataService +public interface ISuccessDataService : ISuccessService { public IEnumerable GetSuccesses(int page, int number, SuccessOrderCriteria orderCriteria); public SuccessDTO GetSuccessByUserId(int id); diff --git a/API_SQLuedo/Shared/ISuccessService.cs b/API_SQLuedo/Shared/ISuccessService.cs new file mode 100644 index 0000000..07e5f9c --- /dev/null +++ b/API_SQLuedo/Shared/ISuccessService.cs @@ -0,0 +1,14 @@ +using Model.OrderCriteria; + +namespace Shared +{ + public interface ISuccessService + { + public IEnumerable GetSuccesses(int page, int number, SuccessOrderCriteria orderCriteria); + public TSuccess GetSuccessByUserId(int id); + public TSuccess GetSuccessByInquiryId(int id); + public bool DeleteSuccess(int id); + public TSuccess UpdateSuccess(int id, TSuccess success); + public TSuccess CreateSuccess(int userId, int inquiryId, bool isFinished); + } +} \ No newline at end of file diff --git a/API_SQLuedo/Shared/IUserDataService.cs b/API_SQLuedo/Shared/IUserDataService.cs index 88b33d3..1e615a6 100644 --- a/API_SQLuedo/Shared/IUserDataService.cs +++ b/API_SQLuedo/Shared/IUserDataService.cs @@ -3,7 +3,7 @@ using Model.OrderCriteria; namespace Shared; -public interface IUserDataService : IDataService +public interface IUserDataService : IUserService { public IEnumerable GetUsers(int page, int number, UserOrderCriteria orderCriteria); public UserDTO GetUserById(int id); diff --git a/API_SQLuedo/Shared/IUserService.cs b/API_SQLuedo/Shared/IUserService.cs index 2d17fd3..d1d458a 100644 --- a/API_SQLuedo/Shared/IUserService.cs +++ b/API_SQLuedo/Shared/IUserService.cs @@ -1,8 +1,10 @@ -namespace Shared +using Model.OrderCriteria; + +namespace Shared { public interface IUserService { - public IEnumerable GetUsers(int page, int number); + public IEnumerable GetUsers(int page, int number, UserOrderCriteria orderCriteria); public TUser GetUserById(int id); public TUser GetUserByUsername(string username); public bool DeleteUser(int id); diff --git a/API_SQLuedo/Shared/ParagraphDataService.cs b/API_SQLuedo/Shared/ParagraphDataService.cs index 4757dad..40a410d 100644 --- a/API_SQLuedo/Shared/ParagraphDataService.cs +++ b/API_SQLuedo/Shared/ParagraphDataService.cs @@ -6,7 +6,7 @@ using Model.OrderCriteria; using Shared; using Shared.Mapper; -namespace Services; +namespace Shared; public class ParagraphDataService : IParagraphDataService { From 18ca72d256e12faa09105a33124e18293e0b795d Mon Sep 17 00:00:00 2001 From: Erwan MENAGER Date: Tue, 12 Mar 2024 01:25:24 +0100 Subject: [PATCH 10/14] =?UTF-8?q?Oubli=C3=A9=20de=20remettre=20l'authentif?= =?UTF-8?q?ication=20sur=20le=20contr=C3=B4leur=20user=20:poop:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API_SQLuedo/API/Controllers/UserController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API_SQLuedo/API/Controllers/UserController.cs b/API_SQLuedo/API/Controllers/UserController.cs index 7792529..8771652 100644 --- a/API_SQLuedo/API/Controllers/UserController.cs +++ b/API_SQLuedo/API/Controllers/UserController.cs @@ -8,7 +8,7 @@ using Model.OrderCriteria; namespace API.Controllers { [Route("api/v{version:apiVersion}/[controller]")] - //[Authorize] + [Authorize] [ApiVersion("1.0")] [ApiController] public class UserController(ILogger logger, IUserService userService) : ControllerBase From bcc63c56e189a91dc2edb1b1a079346a04038d42 Mon Sep 17 00:00:00 2001 From: Erwan MENAGER Date: Tue, 12 Mar 2024 01:32:32 +0100 Subject: [PATCH 11/14] Fix db.Inquiry -> db.Inquiries --- API_SQLuedo/TestConsoleEf/Program.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/API_SQLuedo/TestConsoleEf/Program.cs b/API_SQLuedo/TestConsoleEf/Program.cs index 52c6063..c32e2fa 100644 --- a/API_SQLuedo/TestConsoleEf/Program.cs +++ b/API_SQLuedo/TestConsoleEf/Program.cs @@ -130,7 +130,7 @@ using (var db = new StubbedContext(options)) await db.Database.EnsureCreatedAsync(); // Test sur les enquetes - var inquiries = db.Inquiry; + var inquiries = db.Inquiries; // Affichage de toutes les enquetes Console.WriteLine("\nAffichage des noms des enquetes"); @@ -190,7 +190,7 @@ using (var db = new StubbedContext(options)) { await db.Database.EnsureCreatedAsync(); - var inquiries = db.Inquiry; + var inquiries = db.Inquiries; // Affichage de la nouvelle enquete Console.WriteLine("\nAffichage de la nouvelle enquete"); var i = await inquiries.FirstOrDefaultAsync(i => i.Title == "La nouvelle enquete"); @@ -204,7 +204,7 @@ using (var db = new StubbedContext(options)) { // Suppression de la nouvelle enquete Console.WriteLine("\nSuppression de la nouvelle enquete"); - db.Inquiry.Remove(i); + db.Inquiries.Remove(i); await db.SaveChangesAsync(); } } @@ -213,7 +213,7 @@ using (var db = new StubbedContext(options)) { await db.Database.EnsureCreatedAsync(); - var inquiries = db.Inquiry; + var inquiries = db.Inquiries; // Affichage des utilisateurs après suppression Console.WriteLine("\nAffichage des utilisateurs après suppression"); foreach (var inquiry in inquiries) @@ -235,7 +235,7 @@ using (var db = new StubbedContext(options)) { await db.Database.EnsureCreatedAsync(); - var inquiries = db.Inquiry; + var inquiries = db.Inquiries; // Affichage des enquetes après modification var inquiryToModify = await inquiries.FirstOrDefaultAsync(i => i.Title == "L'enquête de la carotte modifiée"); if (inquiryToModify != null) From f671e4272c4c64de514ea755abebbc43394e22e3 Mon Sep 17 00:00:00 2001 From: Erwan MENAGER Date: Tue, 12 Mar 2024 01:47:17 +0100 Subject: [PATCH 12/14] Fix des tests consoles pour l'API --- API_SQLuedo/DbDataManager/Service/UserDataService.cs | 1 + API_SQLuedo/TestConsoleAPI/Program.cs | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/API_SQLuedo/DbDataManager/Service/UserDataService.cs b/API_SQLuedo/DbDataManager/Service/UserDataService.cs index 496b825..b4de650 100644 --- a/API_SQLuedo/DbDataManager/Service/UserDataService.cs +++ b/API_SQLuedo/DbDataManager/Service/UserDataService.cs @@ -8,6 +8,7 @@ namespace DbDataManager.Service; public class UserDataService : IUserService { + private UserDbContext DbContext { get; set; } public UserDataService(UserDbContext context) diff --git a/API_SQLuedo/TestConsoleAPI/Program.cs b/API_SQLuedo/TestConsoleAPI/Program.cs index cbe8925..16d162e 100644 --- a/API_SQLuedo/TestConsoleAPI/Program.cs +++ b/API_SQLuedo/TestConsoleAPI/Program.cs @@ -5,10 +5,12 @@ using API.Service; using DbContextLib; using DbDataManager.Service; using Dto; +using Entities; using Microsoft.AspNetCore.Mvc; using Microsoft.Data.Sqlite; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; +using Shared; var connection = new SqliteConnection("DataSource=:memory:"); connection.Open(); @@ -20,12 +22,13 @@ ILogger logger = factory.CreateLogger(); using (var context = new UserDbContext(options)) { - var controller = new UserController(logger, new UserDataServiceApi(new UserDataService(context))); + IUserService service; + var controller = new UserController(logger, null); void PrintUsers() { Console.WriteLine(); - var users = controller.GetUsers(1, 10) as OkObjectResult; + var users = controller.GetUsers(1, 10, Model.OrderCriteria.UserOrderCriteria.None) as OkObjectResult; foreach(var item in users.Value as IEnumerable) { Console.WriteLine(item); @@ -184,7 +187,7 @@ using (var context = new UserDbContext(options)) // Affichage des utilisateurs Console.WriteLine("\n##########################################################\n"); Console.WriteLine("Affichages des utilisateurs stubbés dans le contexte :\n"); - var res = controller.GetUsers(1, 10) as OkObjectResult; + var res = controller.GetUsers(1, 10, Model.OrderCriteria.UserOrderCriteria.None) as OkObjectResult; if(res == null) { Console.WriteLine("\nErreur lors de l'acquisition de la liste des utilisateurs"); From c8d4c6a6be4d80dd14dbf336f32988545c99f92f Mon Sep 17 00:00:00 2001 From: Erwan MENAGER Date: Tue, 12 Mar 2024 15:51:32 +0100 Subject: [PATCH 13/14] =?UTF-8?q?Suppressions=20de=20certaines=20lignes=20?= =?UTF-8?q?inutiles=20(state),=20modification=20de=20certaines=20utilisati?= =?UTF-8?q?ons=20des=20m=C3=A9thodes=20d'extensions,=20correction=20d'un?= =?UTF-8?q?=20bug=20li=C3=A9=20=C3=A0=20l'update=20d'un=20objet=20inquiry?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../API/Service/InquiryDataServiceAPI.cs | 30 +++++++++---------- .../Service/InquiryDataService.cs | 16 +++++----- API_SQLuedo/Shared/InquiryDataService.cs | 8 ++--- API_SQLuedo/Shared/LessonDataService.cs | 8 ++--- API_SQLuedo/Shared/ParagraphDataService.cs | 2 -- API_SQLuedo/Shared/SuccessDataService.cs | 2 -- API_SQLuedo/Shared/UserDataService.cs | 12 ++++---- 7 files changed, 34 insertions(+), 44 deletions(-) diff --git a/API_SQLuedo/API/Service/InquiryDataServiceAPI.cs b/API_SQLuedo/API/Service/InquiryDataServiceAPI.cs index fc260f6..6248d48 100644 --- a/API_SQLuedo/API/Service/InquiryDataServiceAPI.cs +++ b/API_SQLuedo/API/Service/InquiryDataServiceAPI.cs @@ -1,10 +1,10 @@ -using Entities; -using Model.OrderCriteria; -using Shared; - -namespace API.Service; - -public class InquiryDataServiceApi(IInquiryService inquiryService) : IInquiryService +using Entities; +using Model.OrderCriteria; +using Shared; + +namespace API.Service; + +public class InquiryDataServiceApi(IInquiryService inquiryService) : IInquiryService { public InquiryEntity CreateInquiry(string title, string description, bool isUser, int tableId, int solutionId) { @@ -16,14 +16,14 @@ public class InquiryDataServiceApi(IInquiryService inquiryService return inquiryService.DeleteInquiry(id); } - public IEnumerable GetInquiries(int page, int number, InquiryOrderCriteria orderCriteria) - { - var inquiries = inquiryService.GetInquiries(page, number, orderCriteria); - return inquiries.Select(i => i).ToList(); - } - - public InquiryEntity GetInquiryById(int id) => inquiryService.GetInquiryById(id); - + public IEnumerable GetInquiries(int page, int number, InquiryOrderCriteria orderCriteria) + { + var inquiries = inquiryService.GetInquiries(page, number, orderCriteria); + return inquiries.Select(i => i).ToList(); + } + + public InquiryEntity GetInquiryById(int id) => inquiryService.GetInquiryById(id); + public InquiryEntity GetInquiryByTitle(string title) => inquiryService.GetInquiryByTitle(title); public InquiryEntity UpdateInquiry(int id, InquiryEntity inquiry) diff --git a/API_SQLuedo/DbDataManager/Service/InquiryDataService.cs b/API_SQLuedo/DbDataManager/Service/InquiryDataService.cs index da662b2..922e3c9 100644 --- a/API_SQLuedo/DbDataManager/Service/InquiryDataService.cs +++ b/API_SQLuedo/DbDataManager/Service/InquiryDataService.cs @@ -1,11 +1,11 @@ -using DbContextLib; -using Entities; -using Microsoft.EntityFrameworkCore; -using Model.OrderCriteria; -using Shared; - -namespace DbDataManager.Service; - +using DbContextLib; +using Entities; +using Microsoft.EntityFrameworkCore; +using Model.OrderCriteria; +using Shared; + +namespace DbDataManager.Service; + public class InquiryDataService : IInquiryService { private UserDbContext DbContext { get; set; } diff --git a/API_SQLuedo/Shared/InquiryDataService.cs b/API_SQLuedo/Shared/InquiryDataService.cs index e7b01d6..012eb4e 100644 --- a/API_SQLuedo/Shared/InquiryDataService.cs +++ b/API_SQLuedo/Shared/InquiryDataService.cs @@ -90,11 +90,9 @@ public class InquiryDataService : IInquiryDataService updatingInquiry.Title = inquiry.Title; updatingInquiry.Description = inquiry.Description; updatingInquiry.IsUser = inquiry.IsUser; - //updatingInquiry.Database = inquiry.Database.FromDTOToEntity(); - //updatingInquiry.InquiryTable = inquiry.InquiryTable.FromDTOToEntity(); - // Permet d'indiquer en Db que l'entité a été modifiée. - DbContext.Entry(updatingInquiry).State = EntityState.Modified; + updatingInquiry.IdDatabase = inquiry.Database; + updatingInquiry.IdInquiryTable = inquiry.InquiryTable; DbContext.SaveChangesAsync(); - return updatingInquiry.FromEntityToModel().FromModelToDTO(); + return updatingInquiry.FromEntityToDTO(); } } diff --git a/API_SQLuedo/Shared/LessonDataService.cs b/API_SQLuedo/Shared/LessonDataService.cs index 3b80dc6..e37b67e 100644 --- a/API_SQLuedo/Shared/LessonDataService.cs +++ b/API_SQLuedo/Shared/LessonDataService.cs @@ -57,7 +57,7 @@ public class LessonDataService : ILessonDataService throw new ArgumentException("Impossible de trouver la leçon", nameof(title)); } - return lessonEntity.FromEntityToModel().FromModelToDTO(); + return lessonEntity.FromEntityToDTO(); } public bool DeleteLesson(int id) @@ -84,10 +84,8 @@ public class LessonDataService : ILessonDataService updatingLesson.Title = lesson.Title; updatingLesson.LastPublisher = lesson.LastPublisher; updatingLesson.LastEdit = lesson.LastEdit; - // Permet d'indiquer en Db que l'entité a été modifiée. - DbContext.Entry(updatingLesson).State = EntityState.Modified; DbContext.SaveChangesAsync(); - return updatingLesson.FromEntityToModel().FromModelToDTO(); + return updatingLesson.FromEntityToDTO(); } public LessonDTO CreateLesson(string title, string lastPublisher, DateOnly? lastEdit) @@ -98,7 +96,7 @@ public class LessonDataService : ILessonDataService LastPublisher = lastPublisher, LastEdit = lastEdit, }; - DbContext.Lessons.Add(newLessonEntity.FromDTOToModel().FromModelToEntity()); + DbContext.Lessons.Add(newLessonEntity.FromDTOToEntity()); DbContext.SaveChangesAsync(); return newLessonEntity; } diff --git a/API_SQLuedo/Shared/ParagraphDataService.cs b/API_SQLuedo/Shared/ParagraphDataService.cs index 40a410d..7954f78 100644 --- a/API_SQLuedo/Shared/ParagraphDataService.cs +++ b/API_SQLuedo/Shared/ParagraphDataService.cs @@ -94,8 +94,6 @@ public class ParagraphDataService : IParagraphDataService updatingParagraph.Info = paragraphDTO.Info; updatingParagraph.Query = paragraphDTO.Query; updatingParagraph.Comment = paragraphDTO.Comment; - // Permet d'indiquer en Db que l'entité a été modifiée. - DbContext.Entry(updatingParagraph).State = EntityState.Modified; DbContext.SaveChangesAsync(); return updatingParagraph.FromEntityToDTO(); } diff --git a/API_SQLuedo/Shared/SuccessDataService.cs b/API_SQLuedo/Shared/SuccessDataService.cs index aa57de2..f2f7b88 100644 --- a/API_SQLuedo/Shared/SuccessDataService.cs +++ b/API_SQLuedo/Shared/SuccessDataService.cs @@ -84,8 +84,6 @@ public class SuccessDataService : ISuccessDataService updatingSuccess.UserId = success.UserId; updatingSuccess.InquiryId = success.InquiryId; updatingSuccess.IsFinished = success.IsFinished; - // Permet d'indiquer en Db que l'entité a été modifiée. - DbContext.Entry(updatingSuccess).State = EntityState.Modified; DbContext.SaveChangesAsync(); return updatingSuccess.FromEntityToDTO(); } diff --git a/API_SQLuedo/Shared/UserDataService.cs b/API_SQLuedo/Shared/UserDataService.cs index b7098a9..a90b809 100644 --- a/API_SQLuedo/Shared/UserDataService.cs +++ b/API_SQLuedo/Shared/UserDataService.cs @@ -30,7 +30,7 @@ namespace Shared throw new ArgumentException("Impossible de trouver l'utilisateur", nameof(id)); } - return userEntity.FromEntityToModel().FromModelToDTO(); + return userEntity.FromEntityToDTO(); } @@ -42,7 +42,7 @@ namespace Shared throw new ArgumentException("Impossible de trouver l'utilisateur", nameof(username)); } - return userEntity.FromEntityToModel().FromModelToDTO(); + return userEntity.FromEntityToDTO(); } @@ -69,7 +69,7 @@ namespace Shared break; } var users = query.ToList(); - return users.Select(s => s.FromEntityToModel().FromModelToDTO()); + return users.Select(s => s.FromEntityToDTO()); } public bool DeleteUser(int id) @@ -98,10 +98,8 @@ namespace Shared updatingUser.Password = user.Password; updatingUser.Email = user.Email; updatingUser.IsAdmin = user.IsAdmin; - // Permet d'indiquer en Db que l'entité a été modifiée. - DbContext.Entry(updatingUser).State = EntityState.Modified; DbContext.SaveChangesAsync(); - return updatingUser.FromEntityToModel().FromModelToDTO(); + return updatingUser.FromEntityToDTO(); } @@ -114,7 +112,7 @@ namespace Shared Email = email, IsAdmin = isAdmin }; - DbContext.Users.Add(newUserEntity.FromDTOToModel().FromModelToEntity()); + DbContext.Users.Add(newUserEntity.FromDTOToEntity()); DbContext.SaveChangesAsync(); return newUserEntity; From eaad9a7c6e8498bf6bc0a49dad8eb4ea74316ee5 Mon Sep 17 00:00:00 2001 From: Erwan MENAGER Date: Tue, 12 Mar 2024 16:20:52 +0100 Subject: [PATCH 14/14] Fix bug sur les tests consoles API + typo usersControlleur --- API_SQLuedo/API/Controllers/UserController.cs | 2 +- API_SQLuedo/TestConsoleAPI/Program.cs | 670 ++++++++++++++++-- 2 files changed, 624 insertions(+), 48 deletions(-) diff --git a/API_SQLuedo/API/Controllers/UserController.cs b/API_SQLuedo/API/Controllers/UserController.cs index 8771652..a6114f5 100644 --- a/API_SQLuedo/API/Controllers/UserController.cs +++ b/API_SQLuedo/API/Controllers/UserController.cs @@ -11,7 +11,7 @@ namespace API.Controllers [Authorize] [ApiVersion("1.0")] [ApiController] - public class UserController(ILogger logger, IUserService userService) : ControllerBase + public class UsersController(ILogger logger, IUserDataService userService) : ControllerBase { [HttpGet("users/{page}/{number}")] [ProducesResponseType(typeof(UserDTO), 200)] diff --git a/API_SQLuedo/TestConsoleAPI/Program.cs b/API_SQLuedo/TestConsoleAPI/Program.cs index 16d162e..91c03b5 100644 --- a/API_SQLuedo/TestConsoleAPI/Program.cs +++ b/API_SQLuedo/TestConsoleAPI/Program.cs @@ -1,15 +1,13 @@ // See https://aka.ms/new-console-template for more information using API.Controllers; -using API.Service; using DbContextLib; -using DbDataManager.Service; using Dto; -using Entities; using Microsoft.AspNetCore.Mvc; using Microsoft.Data.Sqlite; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; +using Model.OrderCriteria; using Shared; var connection = new SqliteConnection("DataSource=:memory:"); @@ -18,18 +16,66 @@ var options = new DbContextOptionsBuilder() .UseSqlite(connection) .Options; using ILoggerFactory factory = new LoggerFactory(); -ILogger logger = factory.CreateLogger(); +ILogger userLogger = factory.CreateLogger(); +ILogger inquiryLogger = factory.CreateLogger(); +ILogger paragraphLogger = factory.CreateLogger(); +ILogger lessonLogger = factory.CreateLogger(); +ILogger successLogger = factory.CreateLogger(); + using (var context = new UserDbContext(options)) { - IUserService service; - var controller = new UserController(logger, null); + var userController = new UsersController(userLogger, new UserDataService(context)); + var inquiryController = new InquiriesController(new InquiryDataService(context), inquiryLogger); + var paragraphController = new ParagraphsController(new ParagraphDataService(context), paragraphLogger); + var lessonController = new LessonsController(new LessonDataService(context), lessonLogger); + var successController = new SuccessesController(new SuccessDataService(context), successLogger); void PrintUsers() { Console.WriteLine(); - var users = controller.GetUsers(1, 10, Model.OrderCriteria.UserOrderCriteria.None) as OkObjectResult; - foreach(var item in users.Value as IEnumerable) + var users = userController.GetUsers(1, 10, UserOrderCriteria.None) as OkObjectResult; + foreach (var item in users.Value as IEnumerable) + { + Console.WriteLine(item); + } + } + + void PrintInquiries() + { + Console.WriteLine(); + var inquiries = inquiryController.GetInquiries(1, 10, InquiryOrderCriteria.None) as OkObjectResult; + foreach (var item in inquiries.Value as IEnumerable) + { + Console.WriteLine(item); + } + } + + void PrintParagraphs() + { + Console.WriteLine(); + var paragraphs = paragraphController.GetParagraphs(1, 10, ParagraphOrderCriteria.None) as OkObjectResult; + foreach (var item in paragraphs.Value as IEnumerable) + { + Console.WriteLine(item); + } + } + + void PrintLessons() + { + Console.WriteLine(); + var lessons = lessonController.GetLessons(1, 10, LessonOrderCriteria.None) as OkObjectResult; + foreach (var item in lessons.Value as IEnumerable) + { + Console.WriteLine(item); + } + } + + void PrintSuccesses() + { + Console.WriteLine(); + var successes = successController.GetSuccesses(1, 10, SuccessOrderCriteria.None) as OkObjectResult; + foreach (var item in successes.Value as IEnumerable) { Console.WriteLine(item); } @@ -39,26 +85,138 @@ using (var context = new UserDbContext(options)) { Console.WriteLine("\nVeuillez saisir le pseudonyme de l'utilisateur recherché : "); var username = Console.ReadLine(); - var user = controller.GetUserByUsername(username) as OkObjectResult; - if(user == null) + var user = userController.GetUserByUsername(username) as OkObjectResult; + if (user == null) { Console.WriteLine("Erreur, la requête n'a rien donné."); return; } Console.WriteLine(user.Value as UserDTO); + + } + + void SearchInquiryByTitle() + { + Console.WriteLine("\nVeuillez saisir le titre de l'enquête recherchée : "); + var title = Console.ReadLine(); + var inquiry = inquiryController.GetInquiryByTitle(title) as OkObjectResult; + if (inquiry == null) + { + Console.WriteLine("Erreur, la requête n'a rien donné."); + return; + } + Console.WriteLine(inquiry.Value as InquiryDTO); + } + + void SearchParagraphByTitle() + { + Console.WriteLine("\nVeuillez saisir le titre du paragraphe recherché : "); + var title = Console.ReadLine(); + var paragraph = paragraphController.GetParagraphByTitle(title) as OkObjectResult; + if (paragraph == null) + { + Console.WriteLine("Erreur, la requête n'a rien donné."); + return; + } + Console.WriteLine(paragraph.Value as ParagraphDTO); + + } + + void SearchLessonByTitle() + { + Console.WriteLine("\nVeuillez saisir le titre de la leçon recherchée : "); + var title = Console.ReadLine(); + var lesson = lessonController.GetLessonByTitle(title) as OkObjectResult; + if (lesson == null) + { + Console.WriteLine("Erreur, la requête n'a rien donné."); + return; + } + Console.WriteLine(lesson.Value as LessonDTO); + + } + + void SearchSuccessByUserId() + { + Console.WriteLine("\nVeuillez saisir l'identifiant de l'utilisateur du succès recherché : "); + var id = Console.ReadLine(); + var success = successController.GetSuccessByUserId(int.Parse(id)) as OkObjectResult; + if (success == null) + { + Console.WriteLine("Erreur, la requête n'a rien donné."); + return; + } + Console.WriteLine(success.Value as SuccessDTO); + } void SearchUserById() { Console.WriteLine("\nVeuillez saisir l'identifiant de l'utilisateur recherché : "); var id = Console.ReadLine(); - var user = controller.GetUserById(int.Parse(id)) as OkObjectResult; + var user = userController.GetUserById(int.Parse(id)) as OkObjectResult; if (user == null) { Console.WriteLine("Erreur, la requête n'a rien donné."); return; } Console.WriteLine(user.Value as UserDTO); + + } + + void SearchInquiryById() + { + Console.WriteLine("\nVeuillez saisir l'identifiant de l'enquête recherchée : "); + var id = Console.ReadLine(); + var inquiry = inquiryController.GetInquiryById(int.Parse(id)) as OkObjectResult; + if (inquiry == null) + { + Console.WriteLine("Erreur, la requête n'a rien donné."); + return; + } + Console.WriteLine(inquiry.Value as InquiryDTO); + } + + void SearchParagraphById() + { + Console.WriteLine("\nVeuillez saisir l'identifiant du paragraphe recherché : "); + var id = Console.ReadLine(); + var paragraph = paragraphController.GetParagraphById(int.Parse(id)) as OkObjectResult; + if (paragraph == null) + { + Console.WriteLine("Erreur, la requête n'a rien donné."); + return; + } + Console.WriteLine(paragraph.Value as ParagraphDTO); + + } + + void SearchSuccessByInquiryId() + { + Console.WriteLine("\nVeuillez saisir l'identifiant de l'enquête du succès recherché : "); + var id = Console.ReadLine(); + var success = successController.GetSuccessByInquiryId(int.Parse(id)) as OkObjectResult; + if (success == null) + { + Console.WriteLine("Erreur, la requête n'a rien donné."); + return; + } + Console.WriteLine(success.Value as SuccessDTO); + + } + + void SearchLessonById() + { + Console.WriteLine("\nVeuillez saisir l'identifiant de la leçon recherchée : "); + var id = Console.ReadLine(); + var lesson = lessonController.GetLessonById(int.Parse(id)) as OkObjectResult; + if (lesson == null) + { + Console.WriteLine("Erreur, la requête n'a rien donné."); + return; + } + Console.WriteLine(lesson.Value as LessonDTO); + } void AddUser() @@ -69,23 +227,115 @@ using (var context = new UserDbContext(options)) var email = Console.ReadLine(); Console.WriteLine("Veuillez saisir un mot de passe :"); var mdp = Console.ReadLine(); - var res = controller.CreateUser(new UserDTO(username, mdp, email, false)); - if(res.GetType() == typeof(CreatedResult)) { + var res = userController.CreateUser(new UserDTO(username, mdp, email, false)); + if (res.GetType() == typeof(CreatedResult)) + { Console.WriteLine("\nUtilisateur créé avec succès"); - } else + } + else { Console.WriteLine("\nErreur lors de la création de l'utilisateur !"); } + + } + + void AddInquiry() + { + Console.WriteLine("Veuillez saisir le titre :"); + var title = Console.ReadLine(); + Console.WriteLine("Veuillez saisir une description :"); + var description = Console.ReadLine(); + Console.WriteLine("Veuillez saisir un isUser (false / true) :"); + var isUser = Convert.ToBoolean(Console.ReadLine()); + Console.WriteLine("Veuillez saisir l'id de la database :"); + var database = Convert.ToInt32(Console.ReadLine()); + Console.WriteLine("Veuillez saisir l'id de la solution :"); + var solution = Convert.ToInt32(Console.ReadLine()); + var res = inquiryController.CreateInquiry(new InquiryDTO(title, description, false, database, solution)); + if (res.GetType() == typeof(CreatedResult)) + { + Console.WriteLine("\nEnquête créée avec succès"); + } + else + { + Console.WriteLine("\nErreur lors de la création de l'enquête !"); + } + } + + void AddParagraph() + { + Console.WriteLine("Veuillez saisir le titre :"); + var title = Console.ReadLine(); + Console.WriteLine("Veuillez saisir un contenu :"); + var content = Console.ReadLine(); + Console.WriteLine("Veuillez saisir une information :"); + var info = Console.ReadLine(); + Console.WriteLine("Veuillez saisir une query :"); + var query = Console.ReadLine(); + Console.WriteLine("Veuillez saisir un commentaire :"); + var comment = Console.ReadLine(); + Console.WriteLine("Veuillez saisir l'id de la leçon :"); + var lesson = Convert.ToInt32(Console.ReadLine()); + var res = paragraphController.CreateParagraph(new ParagraphDTO(title, content, info, query, comment, lesson)); + if (res.GetType() == typeof(CreatedResult)) + { + Console.WriteLine("\nParagraphe créé avec succès"); + } + else + { + Console.WriteLine("\nErreur lors de la création du paragraphe !"); + } + + } + + void AddLesson() + { + Console.WriteLine("Veuillez saisir le titre :"); + var title = Console.ReadLine(); + Console.WriteLine("Veuillez saisir votre nom :"); + var lastPublisher = Console.ReadLine(); + var res = lessonController.CreateLesson(new LessonDTO(title, lastPublisher, DateOnly.FromDateTime(DateTime.Now))); + if (res.GetType() == typeof(CreatedResult)) + { + Console.WriteLine("\nLeçon créée avec succès"); + } + else + { + Console.WriteLine("\nErreur lors de la création de la leçon !"); + } + + } + + void AddSuccess() + { + Console.WriteLine("Veuillez saisir l'identifiant de l'utilisateur lié au succès :"); + var userId = Console.ReadLine(); + Console.WriteLine("Veuillez saisir l'identifiant de l'enquête lié au succès :"); + var inquiryId = Console.ReadLine(); + Console.WriteLine("Veuillez indiquer si l'enquête a été complété (true/false) :"); + var isFinished = Console.ReadLine(); + var res = successController.CreateSuccess(new SuccessDTO(int.Parse(userId), int.Parse(inquiryId), bool.Parse(isFinished))); + if (res.GetType() == typeof(CreatedResult)) + { + Console.WriteLine("\nSuccès créé avec succès"); + } + else + { + Console.WriteLine("\nErreur lors de la création du succès !"); + } + } void UpdateUser() { Console.WriteLine("Quel est l'identifiant de l'utilisateur à mettre à jour ?"); var id = int.Parse(Console.ReadLine()); - var res = (controller.GetUserById(id)); - if (res.GetType() == typeof(OkObjectResult)) { + var res = (userController.GetUserById(id)); + if (res.GetType() == typeof(OkObjectResult)) + { var user = (res as OkObjectResult).Value as UserDTO; - if (user == null) { + if (user == null) + { Console.WriteLine("Erreur, un problème est survenu"); return; } @@ -96,27 +346,214 @@ using (var context = new UserDbContext(options)) var username = Console.ReadLine(); Console.WriteLine("Veuillez saisir l'email :"); var email = Console.ReadLine(); - var retour = controller.UpdateUser(id, new UserDTO(id, username, user.Password, email, user.IsAdmin)); - if(retour.GetType() == typeof(OkObjectResult)) + var retour = userController.UpdateUser(id, new UserDTO(id, username, user.Password, email, user.IsAdmin)); + if (retour.GetType() == typeof(OkObjectResult)) { Console.WriteLine("Mise à jour effectué avec succès !"); - } else + } + else { Console.WriteLine("Une erreur est survenue lors de la mise à jour."); } } - } - else { + } + else + { Console.WriteLine("Une erreur est survenue lors de la mise à jour !"); } + + } + + void UpdateInquiry() + { + Console.WriteLine("Quel est l'identifiant de l'enquête à mettre à jour ?"); + var id = int.Parse(Console.ReadLine()); + var res = (inquiryController.GetInquiryById(id)); + if (res.GetType() == typeof(OkObjectResult)) + { + var user = (res as OkObjectResult).Value as InquiryDTO; + if (user == null) + { + Console.WriteLine("Erreur, un problème est survenu"); + return; + } + else + { + Console.WriteLine("Enquête trouvée !\n"); + Console.WriteLine("Veuillez saisir le titre :"); + var title = Console.ReadLine(); + Console.WriteLine("Veuillez saisir la description :"); + var description = Console.ReadLine(); + Console.WriteLine("Veuillez indiquer si l'enquête est accessible aux visiteurs (0/1) :"); + var isUser = Console.ReadLine(); + Console.WriteLine("Veuillez saisir un commentaire :"); + var database = Convert.ToInt32(Console.ReadLine()); + Console.WriteLine("Veuillez saisir un commentaire :"); + var inquiryTable = Convert.ToInt32(Console.ReadLine()); + var retour = inquiryController.UpdateInquiry(id, new InquiryDTO(id, title, description, bool.Parse(isUser), database, inquiryTable)); + if (retour.GetType() == typeof(OkObjectResult)) + { + Console.WriteLine("Mise à jour effectué avec succès !"); + } + else + { + Console.WriteLine("Une erreur est survenue lors de la mise à jour."); + } + } + } + else + { + Console.WriteLine("Une erreur est survenue lors de la mise à jour !"); + } + + } + + void UpdateParagraph() + { + Console.WriteLine("Quel est l'identifiant du paragraphe à mettre à jour ?"); + var id = int.Parse(Console.ReadLine()); + var res = (paragraphController.GetParagraphById(id)); + if (res.GetType() == typeof(OkObjectResult)) + { + var paragraph = (res as OkObjectResult).Value as ParagraphDTO; + if (paragraph == null) + { + Console.WriteLine("Erreur, un problème est survenu"); + return; + } + else + { + Console.WriteLine("Paragraphe trouvé !\n"); + Console.WriteLine("Veuillez saisir le titre :"); + var title = Console.ReadLine(); + Console.WriteLine("Veuillez saisir un contenu :"); + var content = Console.ReadLine(); + Console.WriteLine("Veuillez saisir une information :"); + var info = Console.ReadLine(); + Console.WriteLine("Veuillez saisir une query :"); + var query = Console.ReadLine(); + Console.WriteLine("Veuillez saisir un commentaire :"); + var comment = Console.ReadLine(); + Console.WriteLine("Veuillez saisir l'id de la leçon :"); + var lesson = Convert.ToInt32(Console.ReadLine()); + var retour = paragraphController.UpdateParagraph(id, new ParagraphDTO(id, title, content, info, query, comment, lesson)); + if (retour.GetType() == typeof(OkObjectResult)) + { + Console.WriteLine("Mise à jour effectué avec succès !"); + } + else + { + Console.WriteLine("Une erreur est survenue lors de la mise à jour."); + } + } + } + else + { + Console.WriteLine("Une erreur est survenue lors de la mise à jour !"); + } + + } + + void UpdateLesson() + { + Console.WriteLine("Quel est l'identifiant de la leçon à mettre à jour ?"); + var id = int.Parse(Console.ReadLine()); + var res = (lessonController.GetLessonById(id)); + if (res.GetType() == typeof(OkObjectResult)) + { + var lesson = (res as OkObjectResult).Value as LessonDTO; + if (lesson == null) + { + Console.WriteLine("Erreur, un problème est survenu"); + return; + } + else + { + Console.WriteLine("Leçon trouvée !\n"); + Console.WriteLine("Veuillez saisir le titre :"); + var title = Console.ReadLine(); + Console.WriteLine("Veuillez saisir votre nom :"); + var lastPublisher = Console.ReadLine(); + var retour = lessonController.UpdateLesson(id, new LessonDTO(id, title, lastPublisher, DateOnly.FromDateTime(DateTime.Now))); + if (retour.GetType() == typeof(OkObjectResult)) + { + Console.WriteLine("Mise à jour effectué avec succès !"); + } + else + { + Console.WriteLine("Une erreur est survenue lors de la mise à jour."); + } + } + } + else + { + Console.WriteLine("Une erreur est survenue lors de la mise à jour !"); + } + + } + + void UpdateSuccess() + { + Console.WriteLine("Quel est l'identifiant de l'utilisateur lié au succès à mettre à jour ?"); + var id = int.Parse(Console.ReadLine()); + var res = (successController.GetSuccessByUserId(id)); + if (res.GetType() == typeof(OkObjectResult)) + { + var lesson = (res as OkObjectResult).Value as SuccessDTO; + if (lesson == null) + { + Console.WriteLine("Erreur, un problème est survenu"); + return; + } + else + { + Console.WriteLine("Succès trouvé !\n"); + Console.WriteLine("Veuillez saisir l'identifiant de l'utilisateur lié au succès :"); + var userId = Console.ReadLine(); + Console.WriteLine("Veuillez saisir l'identifiant de l'enquête lié au succès :"); + var inquiryId = Console.ReadLine(); + Console.WriteLine("Veuillez saisir si l'enquête est terminée (0/1) :"); + var isFinished = Console.ReadLine(); + var retour = successController.UpdateSuccess(id, new SuccessDTO(int.Parse(userId), int.Parse(inquiryId), bool.Parse(isFinished))); + if (retour.GetType() == typeof(OkObjectResult)) + { + Console.WriteLine("Mise à jour effectué avec succès !"); + } + else + { + Console.WriteLine("Une erreur est survenue lors de la mise à jour."); + } + } + } + else + { + Console.WriteLine("Une erreur est survenue lors de la mise à jour !"); + } + } void DeleteUser() { Console.WriteLine("Quel est l'identifiant de lutilisateur à supprimer ?"); var id = int.Parse(Console.ReadLine()); - var res = controller.DeleteUser(id); - if(res.GetType() == typeof(OkObjectResult)) + var res = userController.DeleteUser(id); + if (res.GetType() == typeof(OkObjectResult)) + { + Console.WriteLine("La suppression a été effectuée avec succès !"); + } + else + { + Console.WriteLine("Erreur lors de la suppression !"); + } + + } + + void DeleteInquiry() + { + Console.WriteLine("Quel est l'identifiant de l'enquête à supprimer ?"); + var id = int.Parse(Console.ReadLine()); + var res = inquiryController.DeleteInquiry(id); + if (res.GetType() == typeof(OkObjectResult)) { Console.WriteLine("La suppression a été effectuée avec succès !"); } @@ -126,11 +563,58 @@ using (var context = new UserDbContext(options)) } } + void DeleteParagraph() + { + Console.WriteLine("Quel est l'identifiant du paragraphe à supprimer ?"); + var id = int.Parse(Console.ReadLine()); + var res = paragraphController.DeleteParagraph(id); + if (res.GetType() == typeof(OkObjectResult)) + { + Console.WriteLine("La suppression a été effectuée avec succès !"); + } + else + { + Console.WriteLine("Erreur lors de la suppression !"); + } + + } + + void DeleteLesson() + { + Console.WriteLine("Quel est l'identifiant de la leçon à supprimer ?"); + var id = int.Parse(Console.ReadLine()); + var res = lessonController.DeleteLesson(id); + if (res.GetType() == typeof(OkObjectResult)) + { + Console.WriteLine("La suppression a été effectuée avec succès !"); + } + else + { + Console.WriteLine("Erreur lors de la suppression !"); + } + + } + + void DeleteSuccess() + { + Console.WriteLine("Quel est l'identifiant de l'utilisateur lié au succès à supprimer ?"); + var id = int.Parse(Console.ReadLine()); + var res = successController.DeleteSuccess(id); + if (res.GetType() == typeof(OkObjectResult)) + { + Console.WriteLine("La suppression a été effectuée avec succès !"); + } + else + { + Console.WriteLine("Erreur lors de la suppression !"); + } + + } - void Menu() + void MenuUsers() { Console.WriteLine("|------------------------------------------------|"); - Console.WriteLine("| Menu |"); + Console.WriteLine("| MenuUsers |"); Console.WriteLine("|------------------------------------------------|"); Console.WriteLine("| t - Effectuer des tests automatiques |"); Console.WriteLine("| 1 - Afficher les utilisateurs |"); @@ -143,33 +627,122 @@ using (var context = new UserDbContext(options)) Console.WriteLine("|------------------------------------------------|"); } - Menu(); + void MenuInquiries() + { + Console.WriteLine("|------------------------------------------------|"); + Console.WriteLine("| MenuInquiries |"); + Console.WriteLine("|------------------------------------------------|"); + Console.WriteLine("| 1 - Afficher les enquêtes |"); + Console.WriteLine("| 2 - Rechercher une enquête avec son titre |"); + Console.WriteLine("| 3 - Rechercher une enquête avec son ID |"); + Console.WriteLine("| 4 - Ajouter une enquête |"); + Console.WriteLine("| 5 - Mettre à jour une enquête |"); + Console.WriteLine("| 6 - Supprimer une enquête |"); + Console.WriteLine("| q - Quitter |"); + Console.WriteLine("|------------------------------------------------|"); + } + + void MenuParagraphs() + { + Console.WriteLine("|------------------------------------------------|"); + Console.WriteLine("| MenuParagraphs |"); + Console.WriteLine("|------------------------------------------------|"); + Console.WriteLine("| 1 - Afficher les paragraphes |"); + Console.WriteLine("| 2 - Rechercher un paragraphe avec son titre |"); + Console.WriteLine("| 3 - Rechercher un paragraphe avec son ID |"); + Console.WriteLine("| 4 - Ajouter un paragraphe |"); + Console.WriteLine("| 5 - Mettre à jour un paragraphe |"); + Console.WriteLine("| 6 - Supprimer un paragraphe |"); + Console.WriteLine("| q - Quitter |"); + Console.WriteLine("|------------------------------------------------|"); + } + + void MenuLessons() + { + Console.WriteLine("|------------------------------------------------|"); + Console.WriteLine("| MenuLessons |"); + Console.WriteLine("|------------------------------------------------|"); + Console.WriteLine("| 1 - Afficher les leçons |"); + Console.WriteLine("| 2 - Rechercher une leçon avec son titre |"); + Console.WriteLine("| 3 - Rechercher une leçon avec son ID |"); + Console.WriteLine("| 4 - Ajouter une leçon |"); + Console.WriteLine("| 5 - Mettre à jour une leçon |"); + Console.WriteLine("| 6 - Supprimer une leçon |"); + Console.WriteLine("| q - Quitter |"); + Console.WriteLine("|------------------------------------------------|"); + } + + void MenuSuccesses() + { + Console.WriteLine("|------------------------------------------------|"); + Console.WriteLine("| MenuSuccesses |"); + Console.WriteLine("|------------------------------------------------|"); + Console.WriteLine("| 1 - Afficher les succès |"); + Console.WriteLine("| 2 - Rechercher un succès avec son userId |"); + Console.WriteLine("| 3 - Rechercher un succès avec son inquiryId |"); + Console.WriteLine("| 4 - Ajouter un succès |"); + Console.WriteLine("| 5 - Mettre à jour un succès |"); + Console.WriteLine("| 6 - Supprimer un succès |"); + Console.WriteLine("| q - Quitter |"); + Console.WriteLine("|------------------------------------------------|"); + } + + MenuUsers(); + //MenuInquiries(); + //MenuParagraphs(); + //MenuLessons(); + //MenuSuccesses(); Console.WriteLine("\nSaisie :"); var saisie = Console.ReadLine(); - while (saisie != "q") { + while (saisie != "q") + { switch (saisie) { case "1": - PrintUsers(); + PrintUsers(); + //PrintInquiries(); + //PrintParagraphs(); + //PrintLessons(); + //PrintSuccesses(); break; case "2": SearchUserByUsername(); + //SearchInquiryByTitle(); + //SearchParagraphByTitle(); + //SearchLessonByTitle(); + //SearchSuccessByUserId(); break; case "3": SearchUserById(); + //SearchInquiryById(); + //SearchParagraphById(); + //SearchLessonById(); + //SearchSuccessByInquiryId(); break; case "4": AddUser(); + //AddInquiry(); + //AddParagraph(); + //AddLesson(); + //AddSuccess(); break; case "5": UpdateUser(); + //UpdateInquiry(); + //UpdateParagraph(); + //UpdateLesson(); + //UpdateSuccess(); break; case "6": DeleteUser(); + //DeleteInquiry(); + //DeleteParagraph(); + //DeleteLesson(); + //UpdateSuccess(); break; case "t": - AutoTests(); + AutoTestsUsers(); break; default: break; @@ -177,25 +750,30 @@ using (var context = new UserDbContext(options)) Console.WriteLine("\nAppuyez sur n'importe quelle touche pour continuer..."); Console.ReadKey(); Console.Clear(); - Menu(); + MenuUsers(); + //MenuInquiries(); + //MenuParagraphs(); + //MenuLessons(); + //MenuSuccesses(); Console.WriteLine("\nSaisie :"); saisie = Console.ReadLine(); } - void AutoTests() + void AutoTestsUsers() { // Affichage des utilisateurs Console.WriteLine("\n##########################################################\n"); Console.WriteLine("Affichages des utilisateurs stubbés dans le contexte :\n"); - var res = controller.GetUsers(1, 10, Model.OrderCriteria.UserOrderCriteria.None) as OkObjectResult; - if(res == null) + var res = userController.GetUsers(1, 10, UserOrderCriteria.None); + if (res == null) { Console.WriteLine("\nErreur lors de l'acquisition de la liste des utilisateurs"); } else { - var users = res.Value as IEnumerable; - if(users == null) { + var users = res as IEnumerable; + if (users == null) + { Console.WriteLine("\nErreur, les ustilisateurs n'ont pas été trouvés !"); } else @@ -207,14 +785,14 @@ using (var context = new UserDbContext(options)) // Recherche d'utilisateur par ID Console.WriteLine("\n##########################################################\n"); Console.WriteLine("Affichage de l'utilisateur ayant pour identifiant 1 :\n"); - var res1 = controller.GetUserById(1) as OkObjectResult; + var res1 = userController.GetUserById(1); if (res1 == null) { Console.WriteLine("\nErreur lors de l'acquisition de l'utilisateur !"); } else { - var user = res1.Value as UserDTO; + var user = res1; if (user == null) { Console.WriteLine("\nErreur, l'utilisateur n'existe pas !"); @@ -228,14 +806,14 @@ using (var context = new UserDbContext(options)) // Recherche d'utilisateur par pseudonyme Console.WriteLine("\n##########################################################\n"); Console.WriteLine("Affichage de l'utilisateur ayant pour username johnny :\n"); - var res2 = controller.GetUserByUsername("johnny") as OkObjectResult; + var res2 = userController.GetUserByUsername("johnny"); if (res2 == null) { Console.WriteLine("\nErreur lors de l'acquisition de l'utilisateur !"); } else { - var user1 = res2.Value as UserDTO; + var user1 = res2; if (user1 == null) { Console.WriteLine("\nErreur, l'utilisateur n'existe pas !"); @@ -251,7 +829,7 @@ using (var context = new UserDbContext(options)) Console.WriteLine("Création de l'utilisateur :\n"); var user2 = new UserDTO("JohnDoe", "motdepasse", "johndoe@gmail.com", false); Console.WriteLine(user2); - var res3 = controller.CreateUser(user2) as CreatedResult; + var res3 = userController.CreateUser(user2); if (res3 == null) { Console.WriteLine("\nErreur lors de la création de l'utilisateur !"); @@ -268,8 +846,7 @@ using (var context = new UserDbContext(options)) // Mise à jour d'un utilisateur Console.WriteLine("\n##########################################################\n"); Console.WriteLine("Mise à jour de l'adresse email de l'utilisateur :\n"); - user2 = ((controller.GetUserByUsername("JohnDoe") as OkObjectResult).Value as UserDTO); - if (user2 == null) + if (userController.GetUserByUsername("JohnDoe") == null) { Console.WriteLine("\nErreur lors de la récupération de l'utilisateur !"); } @@ -278,7 +855,7 @@ using (var context = new UserDbContext(options)) Console.WriteLine(user2); Console.WriteLine("\nNouvelle adresse : John.DOE@etu.uca.fr"); var user3 = new UserDTO(user2.Id, user2.Username, user2.Password, "John.DOE@etu.uca.fr", user2.IsAdmin); - var res4 = controller.UpdateUser(user2.Id, user3) as OkObjectResult; + var res4 = userController.UpdateUser(1, user3); if (res4 == null) { Console.WriteLine("\nErreur lors de la mise à jour de l'utilisateur !"); @@ -296,15 +873,14 @@ using (var context = new UserDbContext(options)) // Suppression d'un utilisateur Console.WriteLine("\n##########################################################\n"); Console.WriteLine("Suppression de l'utilisateur JohnDoe:\n"); - user2 = ((controller.GetUserByUsername("JohnDoe") as OkObjectResult).Value as UserDTO); - if (user2 == null) + if (userController.GetUserByUsername("JohnDoe") == null) { Console.WriteLine("\nErreur lors de la récupération de l'utilisateur !"); } else { Console.WriteLine(user2); - var res5 = controller.DeleteUser(user2.Id) as OkObjectResult; + var res5 = userController.DeleteUser(user2.Id); if (res5 == null) { Console.WriteLine("\nErreur lors de la suppression de l'utilisateur !");