diff --git a/ManagerService/Controllers/SectionController.cs b/ManagerService/Controllers/SectionController.cs index f1067fb..5a979c7 100644 --- a/ManagerService/Controllers/SectionController.cs +++ b/ManagerService/Controllers/SectionController.cs @@ -1,6 +1,5 @@ using Manager.DTOs; using Manager.Helpers; -using Manager.Interfaces.Models; using Manager.Services; using ManagerService.Data; using ManagerService.Data.SubSection; @@ -16,7 +15,6 @@ using Newtonsoft.Json; using NSwag.Annotations; using System; using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Text.Json; @@ -128,6 +126,154 @@ namespace ManagerService.Controllers } } + /// + /// Get a list of all section from a specific configuration (mobile format) + /// + /// configuration id + [AllowAnonymous] + [ProducesResponseType(typeof(List), 200)] + [ProducesResponseType(typeof(string), 500)] + [ProducesResponseType(typeof(string), 400)] + [HttpGet("configuration/{id}/detail")] + public ObjectResult GetFromConfigurationDetail(string id) + { + try + { + if (id == null) + throw new ArgumentNullException("Param is null"); + + Configuration configuration = _myInfoMateDbContext.Configurations.FirstOrDefault(c => c.Id == id); + + if (configuration != null) + { + List
sections = _myInfoMateDbContext.Sections.Where(s => s.ConfigurationId == id && !s.IsSubSection).ToList(); + List sectionsToReturn = new List(); + + foreach (var section in sections) + { + var dto = SectionFactory.ToDTO(section); + + switch (section.Type) + { + case SectionType.Map: + var geoPoints = _myInfoMateDbContext.GeoPoints.Where(gp => gp.SectionMapId == section.Id).ToList(); + List geoPointDTOs = new List(); + foreach (var geoPoint in geoPoints) + { + geoPointDTOs.Add(new GeoPointDTO() { + id = geoPoint.Id, + title = geoPoint.Title, + description = geoPoint.Description, + contents = geoPoint.Contents, + categorieId = geoPoint.CategorieId, + latitude = geoPoint.Latitude, + longitude = geoPoint.Longitude, + imageResourceId = geoPoint.ImageResourceId, + imageUrl = geoPoint.ImageUrl, + schedules = geoPoint.Schedules, + prices = geoPoint.Prices, + phone = geoPoint.Phone, + email = geoPoint.Email, + site = geoPoint.Site + }); + } + (dto as MapDTO).points = geoPointDTOs; + break; + case SectionType.Quiz: + var quizQuestions = _myInfoMateDbContext.QuizQuestions.Where(qq => qq.SectionQuizId == section.Id).ToList(); + List questionDTOs = new List(); + foreach (var quizQuestion in quizQuestions) + { + questionDTOs.Add(new QuestionDTO() + { + id = quizQuestion.Id, + label = quizQuestion.Label, + responses = quizQuestion.Responses, + imageBackgroundResourceId = quizQuestion.ResourceId, + imageBackgroundResourceType = quizQuestion.Resource?.Type, + imageBackgroundResourceUrl = quizQuestion.Resource?.Url, + order = quizQuestion.Order, + }); + } + (dto as QuizDTO).questions = questionDTOs; + break; + case SectionType.Menu: + var subSections = _myInfoMateDbContext.Sections.Where(s => s.IsSubSection && s.ParentId == section.Id).ToList(); + List subSectionToReturn = new List(); + foreach (var subSection in subSections) + { + var subDTO = SectionFactory.ToDTO(subSection); + switch (subSection.Type) + { + case SectionType.Map: + var geoPointsSub = _myInfoMateDbContext.GeoPoints.Where(gp => gp.SectionMapId == subSection.Id).ToList(); + List geoPointDTOsSub = new List(); + foreach (var geoPointSub in geoPointsSub) + { + geoPointDTOsSub.Add(new GeoPointDTO() + { + id = geoPointSub.Id, + title = geoPointSub.Title, + description = geoPointSub.Description, + contents = geoPointSub.Contents, + categorieId = geoPointSub.CategorieId, + latitude = geoPointSub.Latitude, + longitude = geoPointSub.Longitude, + imageResourceId = geoPointSub.ImageResourceId, + imageUrl = geoPointSub.ImageUrl, + schedules = geoPointSub.Schedules, + prices = geoPointSub.Prices, + phone = geoPointSub.Phone, + email = geoPointSub.Email, + site = geoPointSub.Site + }); + } + (subDTO as MapDTO).points = geoPointDTOsSub; + break; + case SectionType.Quiz: + var quizQuestionsSub = _myInfoMateDbContext.QuizQuestions.Where(qq => qq.SectionQuizId == subSection.Id).ToList(); + List questionDTOsSub = new List(); + foreach (var quizQuestionSub in quizQuestionsSub) + { + questionDTOsSub.Add(new QuestionDTO() + { + id = quizQuestionSub.Id, + label = quizQuestionSub.Label, + responses = quizQuestionSub.Responses, + imageBackgroundResourceId = quizQuestionSub.ResourceId, + imageBackgroundResourceType = quizQuestionSub.Resource?.Type, + imageBackgroundResourceUrl = quizQuestionSub.Resource?.Url, + order = quizQuestionSub.Order, + }); + } + (subDTO as QuizDTO).questions = questionDTOsSub; + break; + } + + subSectionToReturn.Add(subDTO); + } + (dto as MenuDTO).sections = subSectionToReturn; + break; + } + + sectionsToReturn.Add(dto); + } + + return new OkObjectResult(sectionsToReturn); + } + else + return new NotFoundObjectResult("Configuration not found"); + } + catch (ArgumentNullException ex) + { + return new BadRequestObjectResult(ex.Message) { }; + } + catch (Exception ex) + { + return new ObjectResult(ex.Message) { StatusCode = 500 }; + } + } + /// /// Delete all section from a specific configuration /// @@ -212,7 +358,6 @@ namespace ManagerService.Controllers { try { - //OldSection section = _sectionService.GetById(id); Section section = _myInfoMateDbContext.Sections.FirstOrDefault(s => s.Id == id); if (section == null) @@ -221,38 +366,6 @@ namespace ManagerService.Controllers var dto = SectionFactory.ToDTO(section); return new OkObjectResult(dto); - /*switch (section.Type) { - case SectionType.Map: - MapDTO mapDTO = JsonConvert.DeserializeObject(section.Data); - mapDTO.Id = section.Id; - mapDTO.Label = section.Label; - mapDTO.Description = section.Description; - mapDTO.Type = section.Type; - mapDTO.ImageId = section.ImageId; - mapDTO.IsSubSection = section.IsSubSection; - mapDTO.DateCreation = section.DateCreation; - mapDTO.Data = section.Data; - return new OkObjectResult(mapDTO); - case SectionType.Slider: - SliderDTO sliderDTO = JsonConvert.DeserializeObject(section.Data); - sliderDTO.Id = section.Id; - sliderDTO.Label = section.Label; - sliderDTO.Description = section.Description; - sliderDTO.Type = section.Type; - sliderDTO.ImageId = section.ImageId; - sliderDTO.IsSubSection = section.IsSubSection; - sliderDTO.DateCreation = section.DateCreation; - sliderDTO.Data = section.Data; - return new OkObjectResult(section.ToDTO()); - case SectionType.Menu: - return new OkObjectResult(section.ToDTO()); - case SectionType.Web: - return new OkObjectResult(section.ToDTO()); - case SectionType.Video: - return new OkObjectResult(section.ToDTO()); - default: - return new OkObjectResult(section.ToDTO()); - }*/ } catch (KeyNotFoundException ex) { diff --git a/ManagerService/DTOs/SubSection/MenuDTO.cs b/ManagerService/DTOs/SubSection/MenuDTO.cs index e5e1ef3..6fbee4a 100644 --- a/ManagerService/DTOs/SubSection/MenuDTO.cs +++ b/ManagerService/DTOs/SubSection/MenuDTO.cs @@ -6,6 +6,6 @@ namespace Manager.DTOs public class MenuDTO : SectionDTO { //public string Title { get; set; } // Dictionary with all languages - public List sections { get; set; } + public List sections { get; set; } } } diff --git a/ManagerService/Data/SubSection/SectionMenu.cs b/ManagerService/Data/SubSection/SectionMenu.cs index c68a714..685fa71 100644 --- a/ManagerService/Data/SubSection/SectionMenu.cs +++ b/ManagerService/Data/SubSection/SectionMenu.cs @@ -39,7 +39,7 @@ namespace ManagerService.Data.SubSection latitude = Latitude, longitude = Longitude, meterZoneGPS = MeterZoneGPS, - sections = MenuSections.Select(s => s.ToDTO()).ToList() + //sections = MenuSections.Select(s => s.ToDTO()).ToList() }; } }