From 7df84c1ce856577527835abc5a667cb30845d28e Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Mon, 8 Oct 2018 20:07:38 +0000 Subject: [PATCH] --- devdocs/todo.txt | 1 - linecounts/linecount.txt | 203 ++++++++++++++++++++++++ server/AyaNova/Startup.cs | 18 ++- server/AyaNova/biz/WidgetBiz.cs | 20 ++- server/AyaNova/models/Widget.cs | 1 + server/AyaNova/util/AutoId.cs | 26 +++ server/AyaNova/util/AySchema.cs | 12 +- server/AyaNova/util/Seeder.cs | 4 + server/AyaNova/util/ServerBootConfig.cs | 4 + 9 files changed, 275 insertions(+), 14 deletions(-) create mode 100644 server/AyaNova/util/AutoId.cs diff --git a/devdocs/todo.txt b/devdocs/todo.txt index f7ecc874..3f444868 100644 --- a/devdocs/todo.txt +++ b/devdocs/todo.txt @@ -28,7 +28,6 @@ Once that is done then can steam ahead on the biz objects but until I have the c IMMEDIATE ITEMS: ================ - - Auto visible id number assigning code - Give widgets a visible ID number scheme and add to tests - Ensure search code process keywords includes the Visible ID value andadd test for that in Search indexing tests diff --git a/linecounts/linecount.txt b/linecounts/linecount.txt index 3f2280cf..fc5a1d9e 100644 --- a/linecounts/linecount.txt +++ b/linecounts/linecount.txt @@ -674,3 +674,206 @@ test\raven-integration\Widget\WidgetLists.cs, code is 45, comment is 13, blank i test\raven-integration\Widget\WidgetRights.cs, code is 139, comment is 62, blank is 62. test\raven-integration\Widget\WidgetValidationTests.cs, code is 139, comment is 58, blank is 67. =============================================================================== +=============================================================================== +EXTENSION NAME : linecount +EXTENSION VERSION : 0.1.7 +------------------------------------------------------------------------------- +count time : 2018-10-08 12:38:32 +count workspace : c:\data\code\raven +total files : 191 +total code lines : 12483 +total comment lines : 5491 +total blank lines : 4637 + +dist\docker\linux-x64\ayanovadocker\dockerfile, code is 4, comment is 0, blank is 0. +dist\docker\linux-x64\docker-compose.yml, code is 47, comment is 2, blank is 5. +dist\docker\linux-x64\docker-compose.yml.original.b4.metrics, code is 37, comment is 1, blank is 4. +dist\docker\linux-x64\host\docker-nginx-ayanova-sample-config\letsencrypt\docker-compose.yml, code is 15, comment is 0, blank is 3. +dist\docker\linux-x64\host\docker-nginx-ayanova-sample-config\letsencrypt\letsencrypt-site\index.html, code is 5, comment is 0, blank is 0. +dist\docker\linux-x64\host\docker-nginx-ayanova-sample-config\letsencrypt\nginx.conf, code is 11, comment is 0, blank is 2. +dist\docker\linux-x64\host\docker-nginx-ayanova-sample-config\production\dh-param\dhparam-2048.pem, code is 8, comment is 1, blank is 0. +dist\docker\linux-x64\host\docker-nginx-ayanova-sample-config\production\docker-compose.yml, code is 19, comment is 0, blank is 3. +dist\docker\linux-x64\host\docker-nginx-ayanova-sample-config\production\production-site\index.html, code is 13, comment is 0, blank is 0. +dist\docker\linux-x64\host\docker-nginx-ayanova-sample-config\production\production.conf, code is 120, comment is 6, blank is 13. +dist\docker\linux-x64\restartnginx.sh, code is 3, comment is 3, blank is 0. +makedocs.bat, code is 3, comment is 0, blank is 0. +makedocs.sh, code is 2, comment is 1, blank is 0. +server\AyaNova\appsettings.Development.json, code is 10, comment is 0, blank is 0. +server\AyaNova\appsettings.json, code is 15, comment is 0, blank is 2. +server\AyaNova\AyaNova.csproj, code is 13, comment is 0, blank is 1. +server\AyaNova\biz\AttachableAttribute.cs, code is 8, comment is 7, blank is 1. +server\AyaNova\biz\AuthorizationRoles.cs, code is 27, comment is 26, blank is 6. +server\AyaNova\biz\AyaEvent.cs, code is 18, comment is 8, blank is 7. +server\AyaNova\biz\AyaObjectOwnerId.cs, code is 27, comment is 7, blank is 16. +server\AyaNova\biz\AyaType.cs, code is 26, comment is 131, blank is 13. +server\AyaNova\biz\AyaTypeId.cs, code is 74, comment is 20, blank is 26. +server\AyaNova\biz\BizObject.cs, code is 57, comment is 5, blank is 29. +server\AyaNova\biz\BizObjectExistsInDatabase.cs, code is 42, comment is 7, blank is 21. +server\AyaNova\biz\BizObjectFactory.cs, code is 40, comment is 4, blank is 15. +server\AyaNova\biz\BizObjectNameFetcher.cs, code is 24, comment is 30, blank is 18. +server\AyaNova\biz\BizObjectNameFetcherDirect.cs, code is 49, comment is 6, blank is 15. +server\AyaNova\biz\BizRoles.cs, code is 110, comment is 67, blank is 40. +server\AyaNova\biz\BizRoleSet.cs, code is 9, comment is 5, blank is 3. +server\AyaNova\biz\EventLogProcessor.cs, code is 64, comment is 34, blank is 32. +server\AyaNova\biz\IBizObject.cs, code is 15, comment is 24, blank is 16. +server\AyaNova\biz\IImportAyaNova7Object.cs, code is 13, comment is 13, blank is 6. +server\AyaNova\biz\IJobObject.cs, code is 8, comment is 9, blank is 5. +server\AyaNova\biz\ImportAyaNova7Biz.cs, code is 132, comment is 73, blank is 61. +server\AyaNova\biz\JobOperationsBiz.cs, code is 68, comment is 8, blank is 32. +server\AyaNova\biz\JobsBiz.cs, code is 202, comment is 106, blank is 76. +server\AyaNova\biz\JobStatus.cs, code is 10, comment is 4, blank is 4. +server\AyaNova\biz\JobType.cs, code is 11, comment is 5, blank is 6. +server\AyaNova\biz\LocaleBiz.cs, code is 372, comment is 90, blank is 111. +server\AyaNova\biz\PrimeData.cs, code is 65, comment is 22, blank is 28. +server\AyaNova\biz\Search.cs, code is 528, comment is 227, blank is 156. +server\AyaNova\biz\TagBiz.cs, code is 279, comment is 124, blank is 93. +server\AyaNova\biz\TaggableAttribute.cs, code is 8, comment is 7, blank is 1. +server\AyaNova\biz\TagGroupBiz.cs, code is 185, comment is 77, blank is 77. +server\AyaNova\biz\TagGroupMapBiz.cs, code is 65, comment is 34, blank is 42. +server\AyaNova\biz\TagMapBiz.cs, code is 88, comment is 50, blank is 48. +server\AyaNova\biz\TrialBiz.cs, code is 47, comment is 24, blank is 23. +server\AyaNova\biz\UserBiz.cs, code is 405, comment is 320, blank is 139. +server\AyaNova\biz\UserOptionsBiz.cs, code is 58, comment is 28, blank is 35. +server\AyaNova\biz\UserType.cs, code is 13, comment is 56, blank is 4. +server\AyaNova\biz\ValidateJsonPatch.cs, code is 49, comment is 3, blank is 15. +server\AyaNova\biz\ValidationError.cs, code is 9, comment is 2, blank is 3. +server\AyaNova\biz\ValidationErrorType.cs, code is 14, comment is 2, blank is 8. +server\AyaNova\biz\WidgetBiz.cs, code is 231, comment is 82, blank is 92. +server\AyaNova\ControllerHelpers\ApiCreatedResponse.cs, code is 11, comment is 2, blank is 8. +server\AyaNova\ControllerHelpers\ApiCustomExceptionFilter.cs, code is 53, comment is 29, blank is 19. +server\AyaNova\ControllerHelpers\ApiDetailError.cs, code is 16, comment is 5, blank is 10. +server\AyaNova\ControllerHelpers\ApiError.cs, code is 21, comment is 5, blank is 12. +server\AyaNova\ControllerHelpers\ApiErrorCode.cs, code is 24, comment is 5, blank is 9. +server\AyaNova\ControllerHelpers\ApiErrorCodeStockMessage.cs, code is 43, comment is 8, blank is 8. +server\AyaNova\ControllerHelpers\ApiErrorResponse.cs, code is 60, comment is 11, blank is 35. +server\AyaNova\ControllerHelpers\ApiNotAuthorizedResponse.cs, code is 20, comment is 4, blank is 11. +server\AyaNova\ControllerHelpers\ApiOkResponse.cs, code is 11, comment is 2, blank is 8. +server\AyaNova\ControllerHelpers\ApiOkWithPagingResponse.cs, code is 14, comment is 7, blank is 11. +server\AyaNova\ControllerHelpers\ApiPagedResponse.cs, code is 15, comment is 2, blank is 9. +server\AyaNova\ControllerHelpers\ApiServerState.cs, code is 115, comment is 39, blank is 38. +server\AyaNova\ControllerHelpers\ApiUploadProcessor.cs, code is 124, comment is 45, blank is 42. +server\AyaNova\ControllerHelpers\Authorized.cs, code is 75, comment is 70, blank is 40. +server\AyaNova\ControllerHelpers\DisableFormValueModelBindingAttribute.cs, code is 31, comment is 14, blank is 5. +server\AyaNova\ControllerHelpers\MultipartRequestHelper.cs, code is 42, comment is 28, blank is 7. +server\AyaNova\ControllerHelpers\PaginationLinkBuilder.cs, code is 63, comment is 7, blank is 20. +server\AyaNova\ControllerHelpers\PagingOptions.cs, code is 17, comment is 0, blank is 6. +server\AyaNova\ControllerHelpers\UserIdFromContext.cs, code is 14, comment is 1, blank is 2. +server\AyaNova\ControllerHelpers\UserLocaleIdFromContext.cs, code is 14, comment is 1, blank is 1. +server\AyaNova\ControllerHelpers\UserNameFromContext.cs, code is 15, comment is 1, blank is 5. +server\AyaNova\ControllerHelpers\UserRolesFromContext.cs, code is 13, comment is 1, blank is 5. +server\AyaNova\Controllers\ApiRootController.cs, code is 42, comment is 25, blank is 13. +server\AyaNova\Controllers\AttachmentController.cs, code is 246, comment is 141, blank is 79. +server\AyaNova\Controllers\AuthController.cs, code is 101, comment is 47, blank is 25. +server\AyaNova\Controllers\AyaTypeController.cs, code is 48, comment is 15, blank is 20. +server\AyaNova\Controllers\BackupController.cs, code is 38, comment is 127, blank is 40. +server\AyaNova\Controllers\EventLogController.cs, code is 90, comment is 32, blank is 31. +server\AyaNova\Controllers\ImportAyaNova7Controller.cs, code is 166, comment is 73, blank is 48. +server\AyaNova\Controllers\JobOperationsController.cs, code is 68, comment is 35, blank is 33. +server\AyaNova\Controllers\LicenseController.cs, code is 116, comment is 48, blank is 40. +server\AyaNova\Controllers\LocaleController.cs, code is 245, comment is 101, blank is 84. +server\AyaNova\Controllers\LogFilesController.cs, code is 78, comment is 35, blank is 35. +server\AyaNova\Controllers\MetricsController.cs, code is 81, comment is 34, blank is 24. +server\AyaNova\Controllers\SearchController.cs, code is 45, comment is 23, blank is 16. +server\AyaNova\Controllers\ServerStateController.cs, code is 64, comment is 42, blank is 22. +server\AyaNova\Controllers\TagController.cs, code is 163, comment is 84, blank is 59. +server\AyaNova\Controllers\TagGroupController.cs, code is 178, comment is 97, blank is 66. +server\AyaNova\Controllers\TagGroupMapController.cs, code is 112, comment is 38, blank is 48. +server\AyaNova\Controllers\TagMapController.cs, code is 147, comment is 54, blank is 65. +server\AyaNova\Controllers\TrialController.cs, code is 73, comment is 26, blank is 19. +server\AyaNova\Controllers\UserController.cs, code is 225, comment is 99, blank is 77. +server\AyaNova\Controllers\UserOptionsController.cs, code is 143, comment is 47, blank is 46. +server\AyaNova\Controllers\WidgetController.cs, code is 184, comment is 110, blank is 68. +server\AyaNova\generator\BackgroundService.cs, code is 43, comment is 13, blank is 16. +server\AyaNova\generator\CoreJobMetricsReport.cs, code is 23, comment is 15, blank is 19. +server\AyaNova\generator\CoreJobMetricsSnapshot.cs, code is 70, comment is 26, blank is 40. +server\AyaNova\generator\CoreJobSweeper.cs, code is 74, comment is 30, blank is 28. +server\AyaNova\generator\Generate.cs, code is 65, comment is 27, blank is 32. +server\AyaNova\models\AyContext.cs, code is 70, comment is 13, blank is 17. +server\AyaNova\models\dto\ImportV7MapItem.cs, code is 15, comment is 3, blank is 3. +server\AyaNova\models\dto\JobOperationsFetchInfo.cs, code is 13, comment is 23, blank is 4. +server\AyaNova\models\dto\JobOperationsLogInfoItem.cs, code is 10, comment is 11, blank is 5. +server\AyaNova\models\dto\NameIdActiveItem.cs, code is 9, comment is 0, blank is 3. +server\AyaNova\models\dto\NameIdItem.cs, code is 8, comment is 0, blank is 2. +server\AyaNova\models\dto\NameItem.cs, code is 7, comment is 3, blank is 2. +server\AyaNova\models\dto\NewTextIdConcurrencyTokenItem.cs, code is 9, comment is 0, blank is 2. +server\AyaNova\models\dto\TagGroupMapInfo.cs, code is 9, comment is 0, blank is 4. +server\AyaNova\models\dto\TagMapGroupInfo.cs, code is 10, comment is 1, blank is 4. +server\AyaNova\models\dto\TagMapInfo.cs, code is 10, comment is 1, blank is 3. +server\AyaNova\models\dto\TypeAndIdInfo.cs, code is 9, comment is 0, blank is 4. +server\AyaNova\models\dto\UploadedFileInfo.cs, code is 9, comment is 3, blank is 2. +server\AyaNova\models\Event.cs, code is 54, comment is 6, blank is 9. +server\AyaNova\models\FileAttachment.cs, code is 24, comment is 3, blank is 4. +server\AyaNova\models\License.cs, code is 14, comment is 0, blank is 6. +server\AyaNova\models\Locale.cs, code is 27, comment is 9, blank is 11. +server\AyaNova\models\LocaleItem.cs, code is 20, comment is 1, blank is 7. +server\AyaNova\models\OpsJob.cs, code is 42, comment is 9, blank is 11. +server\AyaNova\models\OpsJobLog.cs, code is 23, comment is 3, blank is 9. +server\AyaNova\models\SearchDictionary.cs, code is 14, comment is 1, blank is 5. +server\AyaNova\models\SearchKey.cs, code is 19, comment is 0, blank is 6. +server\AyaNova\models\Tag.cs, code is 16, comment is 1, blank is 5. +server\AyaNova\models\TagGroup.cs, code is 16, comment is 1, blank is 5. +server\AyaNova\models\TagGroupMap.cs, code is 18, comment is 0, blank is 5. +server\AyaNova\models\TagMap.cs, code is 20, comment is 0, blank is 5. +server\AyaNova\models\User.cs, code is 40, comment is 80, blank is 5. +server\AyaNova\models\UserOptions.cs, code is 29, comment is 82, blank is 8. +server\AyaNova\models\Widget.cs, code is 22, comment is 1, blank is 6. +server\AyaNova\Program.cs, code is 170, comment is 35, blank is 47. +server\AyaNova\Startup.cs, code is 267, comment is 79, blank is 125. +server\AyaNova\SwaggerDefaultValues.cs, code is 30, comment is 12, blank is 5. +server\AyaNova\util\ApplicationLogging.cs, code is 10, comment is 4, blank is 3. +server\AyaNova\util\AutoId.cs, code is 24, comment is 1, blank is 2. +server\AyaNova\util\AyaNovaVersion.cs, code is 20, comment is 5, blank is 6. +server\AyaNova\util\AySchema.cs, code is 172, comment is 78, blank is 91. +server\AyaNova\util\CopyObject.cs, code is 46, comment is 14, blank is 10. +server\AyaNova\util\DateUtil.cs, code is 29, comment is 30, blank is 12. +server\AyaNova\util\DbUtil.cs, code is 307, comment is 77, blank is 100. +server\AyaNova\util\EnumAttributeExtension.cs, code is 23, comment is 11, blank is 2. +server\AyaNova\util\ExceptionUtil.cs, code is 18, comment is 8, blank is 8. +server\AyaNova\util\FileHash.cs, code is 18, comment is 2, blank is 7. +server\AyaNova\util\FileUtil.cs, code is 254, comment is 140, blank is 78. +server\AyaNova\util\Hasher.cs, code is 26, comment is 16, blank is 13. +server\AyaNova\util\IsLocalExtension.cs, code is 21, comment is 4, blank is 6. +server\AyaNova\util\License.cs, code is 405, comment is 121, blank is 115. +server\AyaNova\util\MetricsRegistry.cs, code is 60, comment is 81, blank is 26. +server\AyaNova\util\RetryHelper.cs, code is 29, comment is 14, blank is 11. +server\AyaNova\util\Seeder.cs, code is 239, comment is 92, blank is 95. +server\AyaNova\util\ServerBootConfig.cs, code is 123, comment is 38, blank is 51. +server\AyaNova\util\ServiceProviderProvider.cs, code is 35, comment is 12, blank is 11. +server\AyaNova\util\StringUtil.cs, code is 42, comment is 37, blank is 20. +server\AyaNova\wwwroot\api\sw.css, code is 6, comment is 0, blank is 0. +server\AyaNova\wwwroot\index.htm, code is 48, comment is 3, blank is 10. +startinflux.bat, code is 3, comment is 0, blank is 0. +startsql.bat, code is 1, comment is 0, blank is 0. +startsql.sh, code is 1, comment is 1, blank is 0. +test\raven-integration\ApiResponse.cs, code is 10, comment is 2, blank is 3. +test\raven-integration\ApiTextResponse.cs, code is 10, comment is 2, blank is 3. +test\raven-integration\Attachments\AttachmentTest.cs, code is 90, comment is 45, blank is 50. +test\raven-integration\Authentication\Auth.cs, code is 19, comment is 13, blank is 6. +test\raven-integration\AyaType\AyaType.cs, code is 22, comment is 8, blank is 8. +test\raven-integration\EventLog\EventLog.cs, code is 71, comment is 33, blank is 30. +test\raven-integration\ImportV7\ImportV7.cs, code is 32, comment is 11, blank is 16. +test\raven-integration\JobOperations\JobOperations.cs, code is 30, comment is 16, blank is 15. +test\raven-integration\Locale\Locale.cs, code is 88, comment is 47, blank is 33. +test\raven-integration\Locale\RequestedLocaleKeys.cs, code is 42, comment is 11, blank is 17. +test\raven-integration\LogFiles\LogFiles.cs, code is 19, comment is 7, blank is 8. +test\raven-integration\Metrics\Metrics.cs, code is 27, comment is 9, blank is 17. +test\raven-integration\Privacy\Privacy.cs, code is 16, comment is 6, blank is 8. +test\raven-integration\raven-integration.csproj, code is 14, comment is 0, blank is 3. +test\raven-integration\Search\SearchOps.cs, code is 349, comment is 103, blank is 117. +test\raven-integration\ServerState\ServerStateTest.cs, code is 13, comment is 37, blank is 31. +test\raven-integration\Tags\TagCrud.cs, code is 46, comment is 31, blank is 31. +test\raven-integration\Tags\TagGroupOps.cs, code is 72, comment is 29, blank is 41. +test\raven-integration\Tags\TagLists.cs, code is 52, comment is 10, blank is 22. +test\raven-integration\Tags\TagMapOps.cs, code is 195, comment is 93, blank is 95. +test\raven-integration\testdata\ayanova.data.dump.xxx.zip, it is a binary file. +test\raven-integration\testdata\test.png, it is a binary file. +test\raven-integration\testdata\test.zip, it is a binary file. +test\raven-integration\User\UserCrud.cs, code is 203, comment is 83, blank is 59. +test\raven-integration\User\UserInactive.cs, code is 18, comment is 6, blank is 9. +test\raven-integration\User\UserOptionsRu.cs, code is 68, comment is 36, blank is 30. +test\raven-integration\util.cs, code is 14, comment is 1, blank is 3. +test\raven-integration\Widget\WidgetCrud.cs, code is 113, comment is 57, blank is 59. +test\raven-integration\Widget\WidgetLists.cs, code is 45, comment is 13, blank is 18. +test\raven-integration\Widget\WidgetRights.cs, code is 139, comment is 62, blank is 62. +test\raven-integration\Widget\WidgetValidationTests.cs, code is 139, comment is 58, blank is 67. +=============================================================================== diff --git a/server/AyaNova/Startup.cs b/server/AyaNova/Startup.cs index 0e131fea..2d58fa85 100644 --- a/server/AyaNova/Startup.cs +++ b/server/AyaNova/Startup.cs @@ -404,13 +404,27 @@ namespace AyaNova //TESTING if (TESTING_REFRESH_DB) { - AyaNova.Core.License.Fetch(apiServerState, dbContext, _log); - Util.Seeder.SeedDatabase(Util.Seeder.SeedLevel.HugeForLoadTest); + AyaNova.Core.License.Fetch(apiServerState, dbContext, _log); + Util.Seeder.SeedDatabase(Util.Seeder.SeedLevel.SmallOneManShopTrialDataSet); } //TESTING #endif + //TEST AUTOID + //Note that seeder may init this already in which case this code doesn't even need to run + if (ServerBootConfig.WIDGET_SERIAL == null) + { + //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 MostRecentWidget = dbContext.Widget.AsNoTracking().OrderByDescending(x => x.Id).FirstOrDefault(); + uint MaxWidgetId = 0; + if (MostRecentWidget != null) + MaxWidgetId = MostRecentWidget.Serial; + ServerBootConfig.WIDGET_SERIAL = new AutoId(MaxWidgetId); + } + //Open up the server for visitors apiServerState.SetOpen(); diff --git a/server/AyaNova/biz/WidgetBiz.cs b/server/AyaNova/biz/WidgetBiz.cs index 35d3596a..f89a1736 100644 --- a/server/AyaNova/biz/WidgetBiz.cs +++ b/server/AyaNova/biz/WidgetBiz.cs @@ -37,7 +37,7 @@ namespace AyaNova.Biz return new WidgetBiz(ct, 1, ServerBootConfig.AYANOVA_DEFAULT_LANGUAGE_ID, AuthorizationRoles.BizAdminFull); } - //////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////////////////// //EXISTS internal async Task ExistsAsync(long id) { @@ -50,7 +50,7 @@ namespace AyaNova.Biz { //This is simple so nothing more here, but often will be copying to a different output object or some other ops return await ct.Widget.SingleOrDefaultAsync(m => m.Id == fetchId); - } + } //////////////////////////////////////////////////////////////////////////////////////////////// //CREATE @@ -65,6 +65,9 @@ namespace AyaNova.Biz Widget outObj = inObj; outObj.OwnerId = UserId; + //Test get serial id visible id number from generator + outObj.Serial = ServerBootConfig.WIDGET_SERIAL.GetNext(); + await ct.Widget.AddAsync(outObj); await ct.SaveChangesAsync(); @@ -73,7 +76,7 @@ namespace AyaNova.Biz //EVENT LOG EventLogProcessor.LogEventToDatabase(new Event(UserId, outObj.Id, BizType, AyaEvent.Created), ct); - + //SEARCH INDEXING Search.ProcessNewObjectKeywords(ct, UserLocaleId, outObj.Id, BizType, outObj.Name, outObj.Notes, outObj.Name); @@ -94,6 +97,9 @@ namespace AyaNova.Biz //do stuff with widget Widget outObj = inObj; outObj.OwnerId = UserId; + //Test get serial id visible id number from generator + outObj.Serial = ServerBootConfig.WIDGET_SERIAL.GetNext(); + TempContext.Widget.Add(outObj); TempContext.SaveChanges(); @@ -121,7 +127,7 @@ namespace AyaNova.Biz if (ret != null) { //Log - EventLogProcessor.LogEventToDatabase(new Event(UserId, fetchId, BizType, AyaEvent.Retrieved), ct); + EventLogProcessor.LogEventToDatabase(new Event(UserId, fetchId, BizType, AyaEvent.Retrieved), ct); } return ret; } @@ -206,7 +212,7 @@ namespace AyaNova.Biz { //Replace the db object with the PUT object - CopyObject.Copy(inObj, dbObj, "Id"); + CopyObject.Copy(inObj, dbObj, "Id,Serial"); //Set "original" value of concurrency token to input token //this will allow EF to check it out ct.Entry(dbObj).OriginalValues["ConcurrencyToken"] = inObj.ConcurrencyToken; @@ -217,7 +223,7 @@ namespace AyaNova.Biz //Log modification EventLogProcessor.LogEventToDatabase(new Event(UserId, dbObj.Id, BizType, AyaEvent.Modified), ct); - + //Update keywords Search.ProcessUpdatedObjectKeywords(ct, UserLocaleId, dbObj.Id, BizType, dbObj.Name, dbObj.Notes, dbObj.Name); @@ -239,7 +245,7 @@ namespace AyaNova.Biz //Log modification EventLogProcessor.LogEventToDatabase(new Event(UserId, dbObj.Id, BizType, AyaEvent.Modified), ct); - + //Update keywords Search.ProcessUpdatedObjectKeywords(ct, UserLocaleId, dbObj.Id, BizType, dbObj.Name, dbObj.Notes, dbObj.Name); diff --git a/server/AyaNova/models/Widget.cs b/server/AyaNova/models/Widget.cs index 43136b93..e48a817c 100644 --- a/server/AyaNova/models/Widget.cs +++ b/server/AyaNova/models/Widget.cs @@ -16,6 +16,7 @@ namespace AyaNova.Models [Required] public long OwnerId { get; set; } public string Name { get; set; } + public uint Serial { get; set; } public decimal? DollarAmount { get; set; } public bool? Active { get; set; } public AuthorizationRoles Roles { get; set; } diff --git a/server/AyaNova/util/AutoId.cs b/server/AyaNova/util/AutoId.cs new file mode 100644 index 00000000..1fd06a2b --- /dev/null +++ b/server/AyaNova/util/AutoId.cs @@ -0,0 +1,26 @@ +using System; +using System.Threading.Tasks; +namespace AyaNova.Util +{ + public class AutoId + { + private readonly object valueLock = new object(); + private uint currentValue; //postgre bigint + + public AutoId(uint initialValue) + { + currentValue = initialValue; + } + + public uint GetNext() + { + lock (valueLock) + { + currentValue += 1; + if (currentValue == 0) + currentValue += 1; + return currentValue; + } + } + } +} \ No newline at end of file diff --git a/server/AyaNova/util/AySchema.cs b/server/AyaNova/util/AySchema.cs index 6c183aa2..062d8735 100644 --- a/server/AyaNova/util/AySchema.cs +++ b/server/AyaNova/util/AySchema.cs @@ -22,8 +22,8 @@ namespace AyaNova.Util //!!!!WARNING: BE SURE TO UPDATE THE DbUtil::PrepareDatabaseForSeeding WHEN NEW TABLES ADDED!!!! private const int DESIRED_SCHEMA_LEVEL = 9; - internal const long EXPECTED_COLUMN_COUNT = 99; - internal const long EXPECTED_INDEX_COUNT = 22; + internal const long EXPECTED_COLUMN_COUNT = 100; + internal const long EXPECTED_INDEX_COUNT = 23; //!!!!WARNING: BE SURE TO UPDATE THE DbUtil::PrepareDatabaseForSeeding WHEN NEW TABLES ADDED!!!! @@ -152,7 +152,7 @@ namespace AyaNova.Util exec("CREATE TABLE alocaleitem (id BIGSERIAL PRIMARY KEY, localeid bigint not null REFERENCES alocale (id), key text not null, display text not null)"); //LOOKAT: this is for what exactly?? - // exec("CREATE INDEX alocaleitem_localeid_key_idx ON alocaleitem (localeid,key)"); + // exec("CREATE INDEX alocaleitem_localeid_key_idx ON alocaleitem (localeid,key)"); //This seems more appropriate exec("CREATE INDEX alocaleitem_localeid_key_display_idx ON alocaleitem (localeid,key, display)"); @@ -201,9 +201,13 @@ namespace AyaNova.Util //Add widget table //id, text, longtext, boolean, currency, - exec("CREATE TABLE awidget (id BIGSERIAL PRIMARY KEY, ownerid bigint not null, name varchar(255) not null, " + + exec("CREATE TABLE awidget (id BIGSERIAL PRIMARY KEY, ownerid bigint not null, name varchar(255) not null, serial bigint not null," + "startdate timestamp, enddate timestamp, dollaramount decimal(19,5), active bool, roles int4, notes text)"); + //TEST TEST TEST ONLY FOR DEVELOPMENT TESTING TO ENSURE UNIQUENESS + exec("CREATE UNIQUE INDEX awidget_serial_idx ON awidget (serial);"); + + //Compound index for name fetching exec("CREATE UNIQUE INDEX awidget_name_id_idx ON awidget (id, name);"); diff --git a/server/AyaNova/util/Seeder.cs b/server/AyaNova/util/Seeder.cs index 4f1da171..11e4ebd2 100644 --- a/server/AyaNova/util/Seeder.cs +++ b/server/AyaNova/util/Seeder.cs @@ -30,6 +30,10 @@ namespace AyaNova.Util ApiServerState.ServerState wasServerState = apiServerState.GetState(); string wasReason = apiServerState.Reason; + //START SERIAL NUMBER GENERATORS + if (ServerBootConfig.WIDGET_SERIAL == null) + ServerBootConfig.WIDGET_SERIAL = new AutoId(0); + try { log.LogInformation("SEEDER: Seed data level - " + slevel.ToString()); diff --git a/server/AyaNova/util/ServerBootConfig.cs b/server/AyaNova/util/ServerBootConfig.cs index bc1da3d1..6470891c 100644 --- a/server/AyaNova/util/ServerBootConfig.cs +++ b/server/AyaNova/util/ServerBootConfig.cs @@ -12,6 +12,10 @@ namespace AyaNova.Util internal static class ServerBootConfig { + //TEST AUTOID + //Get the highest id number issued previously and start the auto-id at that level + internal static AutoId WIDGET_SERIAL { get; set; } + //Diagnostic static values used during development, may not be related to config at all, this is just a convenient class to put them in #if (DEBUG)