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;