diff --git a/ManagerService/Controllers/ApplicationInstanceController.cs b/ManagerService/Controllers/ApplicationInstanceController.cs index 960d245..44b4d9f 100644 --- a/ManagerService/Controllers/ApplicationInstanceController.cs +++ b/ManagerService/Controllers/ApplicationInstanceController.cs @@ -17,7 +17,7 @@ namespace ManagerService.Controllers { [Authorize] // TODO Add ROLES (Roles = "Admin") [ApiController, Route("api/[controller]")] - [OpenApiTag("Instance", Description = "Application instance management")] + [OpenApiTag("ApplicationInstance", Description = "Application instance management")] public class ApplicationInstanceController : ControllerBase { private readonly MyInfoMateDbContext _myInfoMateDbContext; @@ -190,13 +190,12 @@ namespace ManagerService.Controllers [ProducesResponseType(typeof(List), 200)] [ProducesResponseType(typeof(string), 500)] [HttpGet("{applicationInstanceId}/application-link")] - public ObjectResult GetAllApplicationLinkFromApplicationInstance([FromQuery] string applicationInstanceId) + public ObjectResult GetAllApplicationLinkFromApplicationInstance(string applicationInstanceId) { try { - List appConfigurationLinks = _myInfoMateDbContext.AppConfigurationLinks.Where(acl => acl.ApplicationInstanceId == applicationInstanceId).ToList(); - - return new OkObjectResult(appConfigurationLinks.Select(acl => acl.ToDTO()).OrderBy(acl => acl.order)); + List appConfigurationLinks = _myInfoMateDbContext.AppConfigurationLinks.Include(acl => acl.Configuration).Where(acl => acl.ApplicationInstanceId == applicationInstanceId).ToList(); + return new OkObjectResult(appConfigurationLinks.Select(acl => acl.ToDTO()).OrderBy(acl => acl.order).ToList()); } catch (Exception ex) { @@ -234,6 +233,10 @@ namespace ManagerService.Controllers if (configuration == null) throw new KeyNotFoundException("This configuration was not found"); + // Check if already linked + if (_myInfoMateDbContext.AppConfigurationLinks.Any(acl => acl.ConfigurationId == appConfigurationLinkDTO.configurationId && acl.ApplicationInstanceId == applicationInstanceId)) + return new ConflictObjectResult("This configuration is already linked to this applicationInstance"); + // Todo add some verification ? AppConfigurationLink appConfigurationLink = new AppConfigurationLink().FromDTO(appConfigurationLinkDTO); appConfigurationLink.Id = idService.GenerateHexId(); diff --git a/ManagerService/Controllers/InstanceController.cs b/ManagerService/Controllers/InstanceController.cs index 9ebd076..06a8799 100644 --- a/ManagerService/Controllers/InstanceController.cs +++ b/ManagerService/Controllers/InstanceController.cs @@ -76,7 +76,9 @@ namespace ManagerService.Controllers if (instance == null) throw new KeyNotFoundException("This instance was not found"); - return new OkObjectResult(instance.ToDTO()); + var applicationInstances = _myInfoMateDbContext.ApplicationInstances.Where(ai => ai.InstanceId == instance.Id).ToList(); + + return new OkObjectResult(instance.ToDTO(applicationInstances.Select(ai => ai.ToDTO()).ToList())); } catch (KeyNotFoundException ex) { @@ -121,7 +123,9 @@ namespace ManagerService.Controllers _myInfoMateDbContext.Instances.Add(instance); _myInfoMateDbContext.SaveChanges(); - return new OkObjectResult(instance.ToDTO()); + var applicationInstances = _myInfoMateDbContext.ApplicationInstances.Where(ai => ai.InstanceId == instance.Id).ToList(); + + return new OkObjectResult(instance.ToDTO(applicationInstances.Select(ai => ai.ToDTO()).ToList())); } catch (ArgumentNullException ex) { @@ -167,7 +171,9 @@ namespace ManagerService.Controllers //OldInstance instanceModified = _instanceService.Update(updatedInstance.Id, instance); _myInfoMateDbContext.SaveChanges(); - return new OkObjectResult(instance.ToDTO()); + var applicationInstances = _myInfoMateDbContext.ApplicationInstances.Where(ai => ai.InstanceId == instance.Id).ToList(); + + return new OkObjectResult(instance.ToDTO(applicationInstances.Select(ai => ai.ToDTO()).ToList())); } catch (ArgumentNullException ex) { @@ -202,7 +208,9 @@ namespace ManagerService.Controllers if (instance == null) throw new KeyNotFoundException("Instance was not found"); - return new OkObjectResult(instance.ToDTO()); + var applicationInstances = _myInfoMateDbContext.ApplicationInstances.Where(ai => ai.InstanceId == instance.Id).ToList(); + + return new OkObjectResult(instance.ToDTO(applicationInstances.Select(ai => ai.ToDTO()).ToList())); } catch (KeyNotFoundException ex) { diff --git a/ManagerService/DTOs/AppConfigurationLinkDTO.cs b/ManagerService/DTOs/AppConfigurationLinkDTO.cs index f8061e9..d2321ab 100644 --- a/ManagerService/DTOs/AppConfigurationLinkDTO.cs +++ b/ManagerService/DTOs/AppConfigurationLinkDTO.cs @@ -6,6 +6,8 @@ public string configurationId { get; set; } + public ConfigurationDTO configuration { get; set; } + public string applicationInstanceId { get; set; } public int? order { get; set; } diff --git a/ManagerService/DTOs/InstanceDTO.cs b/ManagerService/DTOs/InstanceDTO.cs index f0578f5..7b4f885 100644 --- a/ManagerService/DTOs/InstanceDTO.cs +++ b/ManagerService/DTOs/InstanceDTO.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; namespace ManagerService.DTOs { @@ -14,5 +15,7 @@ namespace ManagerService.DTOs public bool isTablet { get; set; } public bool isWeb { get; set; } public bool isVR { get; set; } + + public List applicationInstanceDTOs { get; set; } } } diff --git a/ManagerService/Data/AppConfigurationLink.cs b/ManagerService/Data/AppConfigurationLink.cs index 901b0d0..d2654ff 100644 --- a/ManagerService/Data/AppConfigurationLink.cs +++ b/ManagerService/Data/AppConfigurationLink.cs @@ -41,6 +41,7 @@ namespace ManagerService.Data { id = Id, configurationId = ConfigurationId, + configuration = Configuration?.ToDTO(new List()), applicationInstanceId = ApplicationInstanceId, order = Order, isActive = IsActive, diff --git a/ManagerService/Data/Instance.cs b/ManagerService/Data/Instance.cs index d13cf46..ffd8a5f 100644 --- a/ManagerService/Data/Instance.cs +++ b/ManagerService/Data/Instance.cs @@ -1,5 +1,6 @@ using ManagerService.DTOs; using System; +using System.Collections.Generic; using System.ComponentModel.DataAnnotations; namespace ManagerService.Data @@ -33,7 +34,7 @@ namespace ManagerService.Data public bool IsVR { get; set; } - public InstanceDTO ToDTO() + public InstanceDTO ToDTO(List applicationInstanceDTOs) { return new InstanceDTO() { @@ -47,6 +48,7 @@ namespace ManagerService.Data isTablet = IsTablet, isWeb = IsWeb, isVR = IsVR, + applicationInstanceDTOs = applicationInstanceDTOs }; } diff --git a/ManagerService/Startup.cs b/ManagerService/Startup.cs index 00ea28a..022db4a 100644 --- a/ManagerService/Startup.cs +++ b/ManagerService/Startup.cs @@ -188,7 +188,7 @@ namespace ManagerService app.UseCors( #if DEBUG options => options - .SetIsOriginAllowed(origin => string.IsNullOrEmpty(origin) || origin == "http://localhost:53264") + .SetIsOriginAllowed(origin => string.IsNullOrEmpty(origin) || origin == "http://localhost:62150") .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials()