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 {