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; + + } + } +}