From 777b58a920f9c13818b5ef02bcee4965cf4c5c7a Mon Sep 17 00:00:00 2001 From: Sylvain Renault <sylvain.renault@hhi.fraunhofer.de> Date: Wed, 10 Apr 2024 17:42:22 +0200 Subject: [PATCH] Services are intitalized on server startup. Creating an object with a given UUID now get an 409 error if the id is already existing in the database. --- openapi | 2 +- .../ControllersImpl/TrackablesImpl.cs | 10 +++-- .../ControllersImpl/WorldAnchorsImpl.cs | 10 +++-- .../ControllersImpl/WorldLinksImpl.cs | 38 ++++++++++--------- .../ETSI.ARF.OpenAPI.WorldStorage/Startup.cs | 13 +++++-- 5 files changed, 46 insertions(+), 27 deletions(-) diff --git a/openapi b/openapi index 57adeb4..84f8163 160000 --- a/openapi +++ b/openapi @@ -1 +1 @@ -Subproject commit 57adeb471026ccc88074889aefbe68ef692cb0ca +Subproject commit 84f816367c469b590cb2db47a4bb1b06b56729f9 diff --git a/server/worldstorage/src/ETSI.ARF.OpenAPI.WorldStorage/ETSI-ARF/ControllersImpl/TrackablesImpl.cs b/server/worldstorage/src/ETSI.ARF.OpenAPI.WorldStorage/ETSI-ARF/ControllersImpl/TrackablesImpl.cs index 9d8d06b..5845b10 100644 --- a/server/worldstorage/src/ETSI.ARF.OpenAPI.WorldStorage/ETSI-ARF/ControllersImpl/TrackablesImpl.cs +++ b/server/worldstorage/src/ETSI.ARF.OpenAPI.WorldStorage/ETSI-ARF/ControllersImpl/TrackablesImpl.cs @@ -73,7 +73,11 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers try { Trackable mytrackable = _trackableService.Create(trackable); - return StatusCode(200, mytrackable.UUID.ToString()); + if (mytrackable == null) + { + return StatusCode(409, "UUID already existing!"); + } + else return StatusCode(200, mytrackable.UUID.ToString()); } catch (Exception e) { @@ -100,7 +104,7 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers { worldlinkinfo += worldlink.UUID.ToString() + "; "; worldlink.UUIDFrom = Guid.Empty; - worldlink.TypeFrom = ObjectType.NotIdentifiedEnum; + worldlink.TypeFrom = TypeWorldStorage.UNKNOWNEnum; _worldLinkService.Replace(worldlink); } @@ -110,7 +114,7 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers { worldlinkinfo += worldlink.UUID.ToString() + "; "; worldlink.UUIDTo = Guid.Empty; - worldlink.TypeTo = ObjectType.NotIdentifiedEnum; + worldlink.TypeTo = TypeWorldStorage.UNKNOWNEnum; _worldLinkService.Replace(worldlink); } if (worldlinkinfo.Length > 1) diff --git a/server/worldstorage/src/ETSI.ARF.OpenAPI.WorldStorage/ETSI-ARF/ControllersImpl/WorldAnchorsImpl.cs b/server/worldstorage/src/ETSI.ARF.OpenAPI.WorldStorage/ETSI-ARF/ControllersImpl/WorldAnchorsImpl.cs index 97189a0..8d5e48b 100644 --- a/server/worldstorage/src/ETSI.ARF.OpenAPI.WorldStorage/ETSI-ARF/ControllersImpl/WorldAnchorsImpl.cs +++ b/server/worldstorage/src/ETSI.ARF.OpenAPI.WorldStorage/ETSI-ARF/ControllersImpl/WorldAnchorsImpl.cs @@ -73,7 +73,11 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers try { WorldAnchor myworldanchor = _worldAnchorService.Create(worldAnchor); - return StatusCode(200, myworldanchor.UUID.ToString()); + if (myworldanchor == null) + { + return StatusCode(409, "UUID alread exexisting!"); + } + else return StatusCode(200, myworldanchor.UUID.ToString()); } catch (Exception e) { @@ -100,7 +104,7 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers { worldlinkinfo += worldlink.UUID.ToString() + "; "; worldlink.UUIDFrom = Guid.Empty; - worldlink.TypeFrom = ObjectType.NotIdentifiedEnum; + worldlink.TypeFrom = TypeWorldStorage.UNKNOWNEnum; _worldLinkService.Replace(worldlink); } @@ -110,7 +114,7 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers { worldlinkinfo += worldlink.UUID.ToString() + "; "; worldlink.UUIDTo = Guid.Empty; - worldlink.TypeTo = ObjectType.NotIdentifiedEnum; + worldlink.TypeTo = TypeWorldStorage.UNKNOWNEnum; _worldLinkService.Replace(worldlink); } if (worldlinkinfo.Length > 1) diff --git a/server/worldstorage/src/ETSI.ARF.OpenAPI.WorldStorage/ETSI-ARF/ControllersImpl/WorldLinksImpl.cs b/server/worldstorage/src/ETSI.ARF.OpenAPI.WorldStorage/ETSI-ARF/ControllersImpl/WorldLinksImpl.cs index 9bbb362..cd5da8a 100644 --- a/server/worldstorage/src/ETSI.ARF.OpenAPI.WorldStorage/ETSI-ARF/ControllersImpl/WorldLinksImpl.cs +++ b/server/worldstorage/src/ETSI.ARF.OpenAPI.WorldStorage/ETSI-ARF/ControllersImpl/WorldLinksImpl.cs @@ -72,7 +72,11 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers try { WorldLink myworldlink = _worldLinkService.Create(worldLink); - return StatusCode(200, myworldlink.UUID.ToString()); + if (myworldlink == null) + { + return StatusCode(409, "UUID already existing!"); + } + else return StatusCode(200, myworldlink.UUID.ToString()); } catch (Exception e) { @@ -103,36 +107,36 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers if (null != myworldlink) { // check TypeFrom - if (myworldlink.TypeFrom == ObjectType.TrackableEnum) + if (myworldlink.TypeFrom == TypeWorldStorage.TRACKABLEEnum) { if (null == _trackableService.Get(myworldlink.UUIDFrom)) { - myworldlink.TypeFrom = ObjectType.NotIdentifiedEnum; + myworldlink.TypeFrom = TypeWorldStorage.UNKNOWNEnum; myworldlink.UUIDFrom = Guid.Empty; } } - else if (myworldlink.TypeFrom == ObjectType.WorldAnchorEnum) + else if (myworldlink.TypeFrom == TypeWorldStorage.ANCHOREnum) { if (null == _worldAnchorService.Get(myworldlink.UUIDFrom)) { - myworldlink.TypeFrom = ObjectType.NotIdentifiedEnum; + myworldlink.TypeFrom = TypeWorldStorage.UNKNOWNEnum; myworldlink.UUIDFrom = Guid.Empty; } } // check TypeTo - if (myworldlink.TypeTo == ObjectType.TrackableEnum) + if (myworldlink.TypeTo == TypeWorldStorage.TRACKABLEEnum) { if (null == _trackableService.Get(myworldlink.UUIDTo)) { - myworldlink.TypeTo = ObjectType.NotIdentifiedEnum; + myworldlink.TypeTo = TypeWorldStorage.UNKNOWNEnum; myworldlink.UUIDTo = Guid.Empty; } } - else if (myworldlink.TypeTo == ObjectType.WorldAnchorEnum) + else if (myworldlink.TypeTo == TypeWorldStorage.ANCHOREnum) { if (null == _worldAnchorService.Get(myworldlink.UUIDTo)) { - myworldlink.TypeTo = ObjectType.NotIdentifiedEnum; + myworldlink.TypeTo = TypeWorldStorage.UNKNOWNEnum; myworldlink.UUIDTo = Guid.Empty; } } @@ -153,36 +157,36 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers foreach (WorldLink myworldlink in worldlinklist) { // check TypeFrom - if (myworldlink.TypeFrom == ObjectType.TrackableEnum) + if (myworldlink.TypeFrom == TypeWorldStorage.TRACKABLEEnum) { if (null == _trackableService.Get(myworldlink.UUIDFrom)) { - myworldlink.TypeFrom = ObjectType.NotIdentifiedEnum; + myworldlink.TypeFrom = TypeWorldStorage.UNKNOWNEnum; myworldlink.UUIDFrom = Guid.Empty; } } - else if (myworldlink.TypeFrom == ObjectType.WorldAnchorEnum) + else if (myworldlink.TypeFrom == TypeWorldStorage.ANCHOREnum) { if (null == _worldAnchorService.Get(myworldlink.UUIDFrom)) { - myworldlink.TypeFrom = ObjectType.NotIdentifiedEnum; + myworldlink.TypeFrom = TypeWorldStorage.UNKNOWNEnum; myworldlink.UUIDFrom = Guid.Empty; } } // check TypeTo - if (myworldlink.TypeTo == ObjectType.TrackableEnum) + if (myworldlink.TypeTo == TypeWorldStorage.TRACKABLEEnum) { if (null == _trackableService.Get(myworldlink.UUIDTo)) { - myworldlink.TypeTo = ObjectType.NotIdentifiedEnum; + myworldlink.TypeTo = TypeWorldStorage.UNKNOWNEnum; myworldlink.UUIDTo = Guid.Empty; } } - else if (myworldlink.TypeTo == ObjectType.WorldAnchorEnum) + else if (myworldlink.TypeTo == TypeWorldStorage.ANCHOREnum) { if (null == _worldAnchorService.Get(myworldlink.UUIDTo)) { - myworldlink.TypeTo = ObjectType.NotIdentifiedEnum; + myworldlink.TypeTo = TypeWorldStorage.UNKNOWNEnum; myworldlink.UUIDTo = Guid.Empty; } } diff --git a/server/worldstorage/src/ETSI.ARF.OpenAPI.WorldStorage/Startup.cs b/server/worldstorage/src/ETSI.ARF.OpenAPI.WorldStorage/Startup.cs index af7fb23..2978f0a 100644 --- a/server/worldstorage/src/ETSI.ARF.OpenAPI.WorldStorage/Startup.cs +++ b/server/worldstorage/src/ETSI.ARF.OpenAPI.WorldStorage/Startup.cs @@ -92,8 +92,8 @@ namespace ETSI.ARF.OpenAPI.WorldStorage // // appsetting.json - requires using Microsoft.Extensions.Options - services.Configure<DatabaseSettings>(Configuration.GetSection(nameof(DatabaseSettings))); - + IServiceCollection c = services.Configure<DatabaseSettings>(Configuration.GetSection(nameof(DatabaseSettings))); + // // MongoDB // @@ -104,7 +104,7 @@ namespace ETSI.ARF.OpenAPI.WorldStorage services.AddSingleton<TrackableService>(); services.AddSingleton<WorldAnchorService>(); services.AddSingleton<WorldLinkService>(); - + // Add framework services. services // Don't need the full MVC stack for an API, see https://andrewlock.net/comparing-startup-between-the-asp-net-core-3-templates/ @@ -160,6 +160,13 @@ namespace ETSI.ARF.OpenAPI.WorldStorage /// <param name="env"></param> public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { + // + // Initialize all ARF services + // + app.ApplicationServices.GetRequiredService<TrackableService>(); + app.ApplicationServices.GetRequiredService<WorldAnchorService>(); + app.ApplicationServices.GetRequiredService<WorldLinkService>(); + if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); -- GitLab