From 0333db82f29d61270e9bc902fb7eaaefd1f7c788 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Thu, 14 May 2020 14:35:37 +0000 Subject: [PATCH] --- devdocs/todo.txt | 3 +- .../AyaNova/Controllers/WidgetController.cs | 28 +++++++++++++++++-- server/AyaNova/biz/WidgetBiz.cs | 16 +++++++++++ server/AyaNova/util/ServerBootConfig.cs | 4 +-- 4 files changed, 46 insertions(+), 5 deletions(-) diff --git a/devdocs/todo.txt b/devdocs/todo.txt index 4d476479..11b37e12 100644 --- a/devdocs/todo.txt +++ b/devdocs/todo.txt @@ -2,7 +2,8 @@ PRIORITY - ALWAYS Lowest level stuff first =-=-=-=- todo: switch to Identity column from serial column as it's the proper way to do autoid in postgres now - +todo: uint isn't very big, maybe I should use long in it's place everywhere (concurrency token??) + https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/integral-numeric-types todo: AUTO ID GENERATOR change to a dedicated spot in global rather than inferring as it is not right practically for reasons Get the auto-id most recent values at boot time diff --git a/server/AyaNova/Controllers/WidgetController.cs b/server/AyaNova/Controllers/WidgetController.cs index 758c8dc0..fc9ffcb1 100644 --- a/server/AyaNova/Controllers/WidgetController.cs +++ b/server/AyaNova/Controllers/WidgetController.cs @@ -109,7 +109,7 @@ namespace AyaNova.Api.Controllers if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o, !Authorized.HasModifyRole(HttpContext.Items, biz.BizType))); } - + /// /// Put (update) Widget /// @@ -156,7 +156,31 @@ namespace AyaNova.Api.Controllers return NoContent(); } - + + /// + /// Reset serial number + /// + /// + /// Next starting value for auto generated serial numbers + /// From route path + /// Widget + [HttpPost("reset-serial/{newSerial}")] + public async Task ResetSerial([FromRoute] long newSerial, ApiVersion apiVersion) + { + if (!serverState.IsOpen) + return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + WidgetBiz biz = WidgetBiz.GetBiz(ct, HttpContext); + if (!Authorized.HasCreateRole(HttpContext.Items, biz.BizType)) + return StatusCode(403, new ApiNotAuthorizedResponse()); + if (!ModelState.IsValid) + return BadRequest(new ApiErrorResponse(ModelState)); + bool result=await biz.ResetSerial(newSerial); + if (!result) + return BadRequest(new ApiErrorResponse(biz.Errors)); + else + return NoContent(); + } + /////////////////////////////////////////////// //TEST ROUTES // diff --git a/server/AyaNova/biz/WidgetBiz.cs b/server/AyaNova/biz/WidgetBiz.cs index f1df132c..5c3a3874 100644 --- a/server/AyaNova/biz/WidgetBiz.cs +++ b/server/AyaNova/biz/WidgetBiz.cs @@ -170,6 +170,22 @@ namespace AyaNova.Biz } } + + + //////////////////////////////////////////////////////////////////////////////////////////////// + //RESET SERIAL + // + internal async Task ResetSerial(long newSerial) + { + + await ct.SaveChangesAsync(); + + await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, newObject.Id, BizType, AyaEvent.ResetSerial,newSerial.ToString()), ct); + + return true; + } + + //////////////////////////////////////////////////////////////////////////////////////////////// //SEARCH // diff --git a/server/AyaNova/util/ServerBootConfig.cs b/server/AyaNova/util/ServerBootConfig.cs index 15e1ca87..3e237a7c 100644 --- a/server/AyaNova/util/ServerBootConfig.cs +++ b/server/AyaNova/util/ServerBootConfig.cs @@ -229,8 +229,8 @@ namespace AyaNova.Util //query for most recently used serial number //(note, can't query for highest serial as it can and likely will reset or be changed manually from time to time // so the algorithm is to keep the most recent sequence going on startup of the server) - var serializedObject = ct.Widget.AsNoTracking().OrderByDescending(x => x.Id).FirstOrDefault(); - WIDGET_SERIAL = new AutoId(serializedObject == null ? 0 : serializedObject.Serial); + // var serializedObject = ct.Widget.AsNoTracking().OrderByDescending(x => x.Id).FirstOrDefault(); + // WIDGET_SERIAL = new AutoId(serializedObject == null ? 0 : serializedObject.Serial); // var MostRecentWidget = ct.Widget.AsNoTracking().OrderByDescending(x => x.Id).FirstOrDefault(); // uint MaxWidgetId = 0;