From 516e7576a2a461aa928511c2077d2075b0b59964 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20=28Dibildos=29=20Gonz=C3=A1lez?= Date: Wed, 17 Sep 2025 08:49:39 +0200 Subject: [PATCH 01/10] feat(Save-ProjectDatabase): add safeId parameter to prevent overwriting changes --- .../project_database.test..ps1 | 69 +++++++++++++++++++ private/projectDatabase/project_database.ps1 | 22 ++++-- 2 files changed, 85 insertions(+), 6 deletions(-) create mode 100644 Test/public/projectDatabase/project_database.test..ps1 diff --git a/Test/public/projectDatabase/project_database.test..ps1 b/Test/public/projectDatabase/project_database.test..ps1 new file mode 100644 index 0000000..276252f --- /dev/null +++ b/Test/public/projectDatabase/project_database.test..ps1 @@ -0,0 +1,69 @@ + +function Test_SaveProjectDatabase_SafeId_Flag_PrivateCall{ + + Reset-InvokeCommandMock + Mock_DatabaseRoot + + $Owner = "SomeOrg" ; $ProjectNumber = 164 + MockCall_GitHubOrgProjectWithFields -Owner $owner -ProjectNumber $projectNumber -FileName 'projectV2.json' + + # Call on private mode + $modulePath = $MODULE_PATH | Split-Path -Parent + $module = Import-Module -Name $modulePath -PassThru + + & $module { + $Owner = "SomeOrg" ; $ProjectNumber = 164 + # Cache the project + $prj = Get-Project -Owner $Owner -ProjectNumber $ProjectNumber + + + $prj = Get-ProjectFromDatabase -Owner $Owner -ProjectNumber $ProjectNumber + Assert-IsNotNull -Object $prj.safeId + + # Update project and the safeId should be updated + $oldSafeId = $prj.safeId + Save-ProjectDatabase -Database $prj + $prj2 = Get-ProjectFromDatabase -Owner $Owner -ProjectNumber $ProjectNumber + + Assert-IsNotNull -Object $prj2.safeId + Assert-AreNotEqual -Presented $oldSafeId -Expected $prj2.safeId + } + +} + +function Test_SaveProjectDatabase_Safe_PrivateCall{ + + Reset-InvokeCommandMock + Mock_DatabaseRoot + + $Owner = "SomeOrg" ; $ProjectNumber = 164 + MockCall_GitHubOrgProjectWithFields -Owner $owner -ProjectNumber $projectNumber -FileName 'projectV2.json' + + # Call on private mode + $modulePath = $MODULE_PATH | Split-Path -Parent + $module = Import-Module -Name $modulePath -PassThru + + & $module { + + $Owner = "SomeOrg" ; $ProjectNumber = 164 + # Cache the project + $prj1 = Get-Project -Owner $Owner -ProjectNumber $ProjectNumber + + # modify the project + $db = Get-Project -Owner $Owner -ProjectNumber $ProjectNumber ; Save-ProjectDatabase -Database $db + + # Check that safeId has changed + $prj2 = Get-Project -Owner $Owner -ProjectNumber $ProjectNumber + Assert-AreNotEqual -Presented $prj2.safeId -Expected $prj1.safeId + + ## When saving again as prj1 that has been saved before it will throw + $hasThrow = $false + try{ + Save-ProjectDatabase -Database $prj1 -Safe + } catch { + $hasThrow = $true + } + Assert-IsTrue -Condition $hasThrow + } + +} \ No newline at end of file diff --git a/private/projectDatabase/project_database.ps1 b/private/projectDatabase/project_database.ps1 index 19f88a8..675cada 100644 --- a/private/projectDatabase/project_database.ps1 +++ b/private/projectDatabase/project_database.ps1 @@ -101,24 +101,34 @@ function Set-ProjectDatabaseV2{ function Save-ProjectDatabase{ [CmdletBinding()] param( - [Parameter(Position = 0)][hashtable]$Database + [Parameter(Mandatory,Position = 0)][hashtable]$Database, + [Parameter()][switch]$Safe ) $owner = $Database.owner $projectnumber = $Database.number - if($null -eq $Database){ - throw "Database parameter is required" - } - if([string]::IsNullOrWhiteSpace($owner)){ throw "Database.owner is null or empty" } if($projectnumber -le 0){ throw "Database.number is null or not a positive integer" } - + $dbkey = Get-DatabaseKey -Owner $owner -ProjectNumber $projectnumber + + if($Safe){ + $oldDatabase = Get-Database -Key $dbkey + + if ($oldDatabase.safeId -ne $Database.safeId){ + throw "The database has changed since it was read. Aborting save to prevent overwriting changes." + } + + } + + # Add safe mark + $Database.safeId = [guid]::NewGuid().ToString() + Save-Database -Key $dbkey -Database $Database } From bd3c0b79fb44487a955dc2d5565ec47fc8b2e9f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20=28Dibildos=29=20Gonz=C3=A1lez?= Date: Wed, 17 Sep 2025 15:07:59 +0200 Subject: [PATCH 02/10] fix(Sync-ProjectDatabase): add -Safe parameter to Save-ProjectDatabase to prevent overwriting changes --- private/projectDatabase/project_database_Async.ps1 | 4 +--- private/projectDatabase/project_database_Sync.ps1 | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/private/projectDatabase/project_database_Async.ps1 b/private/projectDatabase/project_database_Async.ps1 index 4ef34f6..1a2d2cc 100644 --- a/private/projectDatabase/project_database_Async.ps1 +++ b/private/projectDatabase/project_database_Async.ps1 @@ -22,7 +22,7 @@ function Sync-ProjectDatabaseAsync { $db = Sync-ProjectAsync -Database $db -SyncBatchSize $SyncBatchSize # Saved changes to database - Save-ProjectDatabase -Database $db + Save-ProjectDatabase -Database $db -Safe if (Test-ProjectDatabaseStaged -Owner $Owner -ProjectNumber $ProjectNumber) { "Still pending staged values" | Write-MyError @@ -100,8 +100,6 @@ function Sync-ProjectAsync { Remove-ItemStaged -Database $db -ItemId $call.itemId -FieldId $call.FieldId } - Save-ProjectDatabase -Database $db - return $db } diff --git a/private/projectDatabase/project_database_Sync.ps1 b/private/projectDatabase/project_database_Sync.ps1 index c9e2878..013b2e2 100644 --- a/private/projectDatabase/project_database_Sync.ps1 +++ b/private/projectDatabase/project_database_Sync.ps1 @@ -20,7 +20,7 @@ function Sync-ProjectDatabase{ # Send update to project $db = Sync-Project -Database $db - Save-ProjectDatabase -Database $db + Save-ProjectDatabase -Database $db -Safe if (Test-ProjectDatabaseStaged -Owner $Owner -ProjectNumber $ProjectNumber) { "Still pending staged values" | Write-MyError From 6d3d64135cd69fd4909fb2411ebfdc691e752a61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20=28Dibildos=29=20Gonz=C3=A1lez?= Date: Wed, 17 Sep 2025 15:10:04 +0200 Subject: [PATCH 03/10] refactor(Update-ProjectDatabase): return database object from Set-ProjectDatabaseV2 and save it --- private/projectDatabase/project_database.ps1 | 2 +- private/projectDatabase/project_database_update.ps1 | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/private/projectDatabase/project_database.ps1 b/private/projectDatabase/project_database.ps1 index 675cada..1da2110 100644 --- a/private/projectDatabase/project_database.ps1 +++ b/private/projectDatabase/project_database.ps1 @@ -95,7 +95,7 @@ function Set-ProjectDatabaseV2{ $db.items = $items $db.fields = $fields - Save-ProjectDatabase -Database $db + return $db } function Save-ProjectDatabase{ diff --git a/private/projectDatabase/project_database_update.ps1 b/private/projectDatabase/project_database_update.ps1 index 953caa5..53ae77b 100644 --- a/private/projectDatabase/project_database_update.ps1 +++ b/private/projectDatabase/project_database_update.ps1 @@ -84,7 +84,8 @@ function Update-ProjectDatabase { $fields = $fields | Set-ContentFields # Set-ProjectDatabase -Owner $Owner -ProjectNumber $ProjectNumber -Items $items -Fields $fields - Set-ProjectDatabaseV2 $projectV2 -Items $items -Fields $fields + $db = Set-ProjectDatabaseV2 $projectV2 -Items $items -Fields $fields + Save-ProjectDatabase $db return $true } From cfa98046e2464c57eba8260da20542c62727b02a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20=28Dibildos=29=20Gonz=C3=A1lez?= Date: Wed, 17 Sep 2025 15:11:01 +0200 Subject: [PATCH 04/10] fix(Reset-ProjectItemStaged): add -Safe parameter to Save-ProjectDatabase to prevent data loss --- public/project_item_staged.ps1 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/public/project_item_staged.ps1 b/public/project_item_staged.ps1 index 0aba28b..b168ea1 100644 --- a/public/project_item_staged.ps1 +++ b/public/project_item_staged.ps1 @@ -107,7 +107,8 @@ function Reset-ProjectItemStaged{ $db = Get-Project $Owner $ProjectNumber $db.Staged = $null - Save-ProjectDatabase -Database $db + + Save-ProjectDatabase -Database $db -Safe } Export-ModuleMember -Function Reset-ProjectItemStaged From 596254f2a8d11634977ef003020e72857a410eb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20=28Dibildos=29=20Gonz=C3=A1lez?= Date: Wed, 17 Sep 2025 15:11:24 +0200 Subject: [PATCH 05/10] refactor(Add-ProjectItemDirect): replace Set-ProjectItem with Set-Item for database update --- public/project_item.ps1 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/public/project_item.ps1 b/public/project_item.ps1 index d9b2965..e4645d9 100644 --- a/public/project_item.ps1 +++ b/public/project_item.ps1 @@ -322,7 +322,8 @@ function Add-ProjectItemDirect { $item = $item | Convert-NodeItemToHash - Set-ProjectItem -Owner $Owner -ProjectNumber $ProjectNumber -Item $item + # Set-ProjectItem -Owner $Owner -ProjectNumber $ProjectNumber -Item $item + Set-Item $db $item Save-ProjectDatabase -Database $db From c534470fe3d29833f14efed0c155397a6c95920f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20=28Dibildos=29=20Gonz=C3=A1lez?= Date: Wed, 17 Sep 2025 15:30:21 +0200 Subject: [PATCH 06/10] refactor(ProjectDatabase): rename Set-ProjectDatabaseV2 to Save-ProjectV2toDatabase and save projectV2 to projectDatabase --- Notes.md | 2 +- private/projectDatabase/project_database.ps1 | 5 +++-- private/projectDatabase/project_database_update.ps1 | 5 ++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Notes.md b/Notes.md index 1827764..b16b01b 100644 --- a/Notes.md +++ b/Notes.md @@ -46,7 +46,7 @@ graph TD; U[Update-ProjectDatabase] G[Invoke-GitHubOrgProjectWithFields] - U<---->V2[Set-ProjectDatabaseV2] + U<---->V2[Save-ProjectV2toDatabase] end I<-->G diff --git a/private/projectDatabase/project_database.ps1 b/private/projectDatabase/project_database.ps1 index 1da2110..87cffea 100644 --- a/private/projectDatabase/project_database.ps1 +++ b/private/projectDatabase/project_database.ps1 @@ -68,7 +68,7 @@ function Reset-ProjectDatabase{ Reset-Database -Key $dbKey } -function Set-ProjectDatabaseV2{ +function Save-ProjectV2toDatabase{ [CmdletBinding()] param( [Parameter(Position = 0)][object]$ProjectV2, @@ -95,7 +95,8 @@ function Set-ProjectDatabaseV2{ $db.items = $items $db.fields = $fields - return $db + # This is the only Save.ProjectDatabase that should not be called with -Safe + Save-ProjectDatabase -Database $db } function Save-ProjectDatabase{ diff --git a/private/projectDatabase/project_database_update.ps1 b/private/projectDatabase/project_database_update.ps1 index 53ae77b..ad5d5da 100644 --- a/private/projectDatabase/project_database_update.ps1 +++ b/private/projectDatabase/project_database_update.ps1 @@ -83,9 +83,8 @@ function Update-ProjectDatabase { # Add content fields $fields = $fields | Set-ContentFields - # Set-ProjectDatabase -Owner $Owner -ProjectNumber $ProjectNumber -Items $items -Fields $fields - $db = Set-ProjectDatabaseV2 $projectV2 -Items $items -Fields $fields - Save-ProjectDatabase $db + # Save ProjectV2 object to ProjectDatabase + Save-ProjectV2toDatabase $projectV2 -Items $items -Fields $fields return $true } From da6a7532243886522a30a8d3d5f706e856748e09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20=28Dibildos=29=20Gonz=C3=A1lez?= Date: Wed, 17 Sep 2025 15:31:25 +0200 Subject: [PATCH 07/10] fix(ProjectItem): add -Safe parameter to Save-ProjectDatabase to prevent data loss --- public/project_item.ps1 | 45 +++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/public/project_item.ps1 b/public/project_item.ps1 index e4645d9..e1b6866 100644 --- a/public/project_item.ps1 +++ b/public/project_item.ps1 @@ -56,28 +56,28 @@ function Get-ProjectItem { end { if ($durty) { "Saving durty database" | Write-Verbose - Save-ProjectDatabase -Database $db + Save-ProjectDatabase -Database $db -Safe } } } Export-ModuleMember -Function Get-ProjectItem -function Set-ProjectItem { - [CmdletBinding()] - param( - [Parameter(Mandatory, ValueFromPipeline, Position = 0)][object]$Item, - [Parameter()][string]$Owner, - [Parameter()][string]$ProjectNumber - ) - ($Owner, $ProjectNumber) = Get-OwnerAndProjectNumber -Owner $Owner -ProjectNumber $ProjectNumber - if ([string]::IsNullOrWhiteSpace($owner) -or [string]::IsNullOrWhiteSpace($ProjectNumber)) { "Owner and ProjectNumber are required" | Write-MyError; return $null } +# function Set-ProjectItem { +# [CmdletBinding()] +# param( +# [Parameter(Mandatory, ValueFromPipeline, Position = 0)][object]$Item, +# [Parameter()][string]$Owner, +# [Parameter()][string]$ProjectNumber +# ) +# ($Owner, $ProjectNumber) = Get-OwnerAndProjectNumber -Owner $Owner -ProjectNumber $ProjectNumber +# if ([string]::IsNullOrWhiteSpace($owner) -or [string]::IsNullOrWhiteSpace($ProjectNumber)) { "Owner and ProjectNumber are required" | Write-MyError; return $null } - $db = Get-Project -Owner $Owner -ProjectNumber $ProjectNumber +# $db = Get-Project -Owner $Owner -ProjectNumber $ProjectNumber - Set-Item $db $item +# Set-Item $db $item - Save-ProjectDatabase -Database $db -} +# Save-ProjectDatabase -Database $db -Safe +# } function Remove-ProjectItem { [CmdletBinding()] @@ -99,7 +99,7 @@ function Remove-ProjectItem { } end { - Save-ProjectDatabase -Database $db + Save-ProjectDatabase -Database $db -Safe } } @@ -269,7 +269,7 @@ function Edit-ProjectItem { Save-ItemFieldValue $db $itemId $FieldName $Value # Commit changes to the database - Save-ProjectDatabase -Database $db + Save-ProjectDatabase -Database $db } Export-ModuleMember -Function Edit-ProjectItem @@ -322,10 +322,9 @@ function Add-ProjectItemDirect { $item = $item | Convert-NodeItemToHash - # Set-ProjectItem -Owner $Owner -ProjectNumber $ProjectNumber -Item $item Set-Item $db $item - Save-ProjectDatabase -Database $db + Save-ProjectDatabase -Database $db -Safe } @@ -386,12 +385,10 @@ function Remove-ProjectItemDirect { $ret = $response.data.deleteProjectV2Item.deletedItemId - if (! $NoCache) { - # Remove item from cache - "Removing item [$ItemId] from cache" | Write-Verbose - Remove-Item $db $ItemId - Save-ProjectDatabase $db - } + # Remove item from cache + "Removing item [$ItemId] from cache" | Write-Verbose + Remove-Item $db $ItemId + Save-ProjectDatabase -Database $db -Safe return $ret } From 2cee305f89e7be96154647971633432a298bd333 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20=28Dibildos=29=20Gonz=C3=A1lez?= Date: Wed, 17 Sep 2025 16:31:04 +0200 Subject: [PATCH 08/10] refactor(ProjectItem): replace Get-ProjectItem with Resolve-ProjectItem for improved database handling --- Test/public/project_item.test.ps1 | 3 -- .../project_database_Item_Resolve.ps1 | 36 +++++++++++++++++++ .../projectDatabase/project_database_call.ps1 | 4 +-- public/project_item.ps1 | 36 ++++++------------- 4 files changed, 49 insertions(+), 30 deletions(-) create mode 100644 private/projectDatabase/project_database_Item_Resolve.ps1 diff --git a/Test/public/project_item.test.ps1 b/Test/public/project_item.test.ps1 index 2aedb35..d914185 100644 --- a/Test/public/project_item.test.ps1 +++ b/Test/public/project_item.test.ps1 @@ -358,9 +358,6 @@ function Test_GetItemDirect_SUCCESS{ Assert-AreEqual -Expected $contentId -Presented $result.contentId } -function Test_GetItemDirect_SUCCESS_WithCache{ - Assert-NotImplemented -} function Test_ShowProjectItem_SUCCESS{ diff --git a/private/projectDatabase/project_database_Item_Resolve.ps1 b/private/projectDatabase/project_database_Item_Resolve.ps1 new file mode 100644 index 0000000..d607159 --- /dev/null +++ b/private/projectDatabase/project_database_Item_Resolve.ps1 @@ -0,0 +1,36 @@ +function Resolve-ProjectItem { + [CmdletBinding()] + param( + [Parameter(Mandatory, Position = 0)][object]$Database, + [Parameter(Mandatory, Position = 1)][string]$ItemId, + [Parameter()][switch]$Force + ) + + $dirty = $false + + # Get Item to know what we are updating + $item = Get-Item -Database $Database -ItemId $ItemId + + if (( ! $item ) -or $Force) { + "Fetching item [$ItemId] from API" | Write-Verbose + + # Get direct. No cache as we are in a database modification context + $item = Get-ProjectItemDirect -ItemId $ItemId + + if ( ! $item ) { + "Item [$ItemId] not found in API" | Write-MyError + return $null, $false + } + + # Add to database + Set-Item $db $item + + # Get item again to allow the merge between staged and project fields + $item = Get-Item $db $itemId + + $dirty = $true + } + + return $item, $dirty + +} \ No newline at end of file diff --git a/private/projectDatabase/project_database_call.ps1 b/private/projectDatabase/project_database_call.ps1 index 74ee7c3..337b7b8 100644 --- a/private/projectDatabase/project_database_call.ps1 +++ b/private/projectDatabase/project_database_call.ps1 @@ -94,8 +94,8 @@ function GetItemInfo { # TODO: Situation where we are updating an item that is not cached and therefore type is not known if (-not $item.type) { # Single fetch item from api - # Avoid caching as we are beeing called from a Database modification context - $item = Get-ProjectItemDirect -ItemId $ItemId + # memory Database is updated wit the item too + $item = Resolve-ProjectItem -Database $Database -ItemId $ItemId } if ( $null -eq $item) { diff --git a/public/project_item.ps1 b/public/project_item.ps1 index e1b6866..fce3454 100644 --- a/public/project_item.ps1 +++ b/public/project_item.ps1 @@ -27,35 +27,21 @@ function Get-ProjectItem { # Get Item from Project database $db = Get-Project -Owner $Owner -ProjectNumber $ProjectNumber + if(! $db){ "Project not found for Owner [$Owner] and ProjectNumber [$ProjectNumber]" | Write-MyError; return $null} + # Durty flag $durty = $false } process { - if ($db) { - $item = Get-Item $db $itemId - } - - if (( ! $item ) -or $Force) { - "Fetching item [$ItemId] from API" | Write-Verbose - - # Get direct. No cache as we are in a database modification context - $item = Get-ProjectItemDirect -ItemId $ItemId - - # Add to database - Set-Item $db $item - $durty = $true - - # Get item again to allow the merge between staged and project fields - $item = Get-Item $db $itemId - } + $item, $dirty = Resolve-ProjectItem -Database $db -ItemId $ItemId -Force:$Force return $item } end { - if ($durty) { - "Saving durty database" | Write-Verbose + if ($dirty) { + "Saving dirty database" | Write-Verbose Save-ProjectDatabase -Database $db -Safe } } @@ -71,11 +57,11 @@ function Get-ProjectItem { # ) # ($Owner, $ProjectNumber) = Get-OwnerAndProjectNumber -Owner $Owner -ProjectNumber $ProjectNumber # if ([string]::IsNullOrWhiteSpace($owner) -or [string]::IsNullOrWhiteSpace($ProjectNumber)) { "Owner and ProjectNumber are required" | Write-MyError; return $null } - +# # $db = Get-Project -Owner $Owner -ProjectNumber $ProjectNumber - +# # Set-Item $db $item - +# # Save-ProjectDatabase -Database $db -Safe # } @@ -253,8 +239,8 @@ function Edit-ProjectItem { $db = Get-Project -Owner $Owner -ProjectNumber $ProjectNumber -Force:$Force -SkipItems:$(-not $Force) # Find the actual value of the item. Item+Staged - $item = Get-ProjectItem -ItemId $ItemId -Owner $Owner -ProjectNumber $ProjectNumber - + # $item = Get-ProjectItem -ItemId $ItemId -Owner $Owner -ProjectNumber $ProjectNumber + $item = Resolve-ProjectItem -Database $db -ItemId $ItemId # if the item is not found if($null -eq $item){ "Item [$ItemId] not found" | Write-MyError; return $null} @@ -269,7 +255,7 @@ function Edit-ProjectItem { Save-ItemFieldValue $db $itemId $FieldName $Value # Commit changes to the database - Save-ProjectDatabase -Database $db + Save-ProjectDatabase -Database $db -Safe } Export-ModuleMember -Function Edit-ProjectItem From f29fbb56f44d4e1d912d3465bc259fb80bc24d68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20=28Dibildos=29=20Gonz=C3=A1lez?= Date: Wed, 17 Sep 2025 16:38:33 +0200 Subject: [PATCH 09/10] refactor(ProjectDatabase): rename Save-ProjectDatabase to Save-ProjectDatabaseSafe for clarity and safety --- Notes.md | 4 ++-- .../projectDatabase/project_database.test..ps1 | 6 +++--- private/projectDatabase/project_database.ps1 | 8 ++++++++ private/projectDatabase/project_database_Async.ps1 | 2 +- private/projectDatabase/project_database_Sync.ps1 | 2 +- public/project_item.ps1 | 12 ++++++------ public/project_item_staged.ps1 | 2 +- 7 files changed, 22 insertions(+), 14 deletions(-) diff --git a/Notes.md b/Notes.md index b16b01b..ff48feb 100644 --- a/Notes.md +++ b/Notes.md @@ -2,7 +2,7 @@ Notes used during the development of the module -## Save-ProjectDatabase +## Save-ProjectDatabaseSafe ```mermaid graph TD; @@ -11,7 +11,7 @@ graph TD; subgraph Module 0([Sync-ProjectItemStaged]) - 1[Save-ProjectDatabase] + 1[Save-ProjectDatabaseSafe] 2[Get-Project] 3[Get-Project] 4[Set-ProjectV2Item] diff --git a/Test/public/projectDatabase/project_database.test..ps1 b/Test/public/projectDatabase/project_database.test..ps1 index 276252f..f9052f7 100644 --- a/Test/public/projectDatabase/project_database.test..ps1 +++ b/Test/public/projectDatabase/project_database.test..ps1 @@ -22,7 +22,7 @@ function Test_SaveProjectDatabase_SafeId_Flag_PrivateCall{ # Update project and the safeId should be updated $oldSafeId = $prj.safeId - Save-ProjectDatabase -Database $prj + Save-ProjectDatabaseSafe -Database $prj $prj2 = Get-ProjectFromDatabase -Owner $Owner -ProjectNumber $ProjectNumber Assert-IsNotNull -Object $prj2.safeId @@ -50,7 +50,7 @@ function Test_SaveProjectDatabase_Safe_PrivateCall{ $prj1 = Get-Project -Owner $Owner -ProjectNumber $ProjectNumber # modify the project - $db = Get-Project -Owner $Owner -ProjectNumber $ProjectNumber ; Save-ProjectDatabase -Database $db + $db = Get-Project -Owner $Owner -ProjectNumber $ProjectNumber ; Save-ProjectDatabaseSafe -Database $db # Check that safeId has changed $prj2 = Get-Project -Owner $Owner -ProjectNumber $ProjectNumber @@ -59,7 +59,7 @@ function Test_SaveProjectDatabase_Safe_PrivateCall{ ## When saving again as prj1 that has been saved before it will throw $hasThrow = $false try{ - Save-ProjectDatabase -Database $prj1 -Safe + Save-ProjectDatabaseSafe -Database $prj1 } catch { $hasThrow = $true } diff --git a/private/projectDatabase/project_database.ps1 b/private/projectDatabase/project_database.ps1 index 87cffea..d074652 100644 --- a/private/projectDatabase/project_database.ps1 +++ b/private/projectDatabase/project_database.ps1 @@ -99,6 +99,14 @@ function Save-ProjectV2toDatabase{ Save-ProjectDatabase -Database $db } +function Save-ProjectDatabaseSafe{ + [CmdletBinding()] + param( + [Parameter(Mandatory,Position = 0)][hashtable]$Database + ) + Save-ProjectDatabase -Database $Database -Safe +} + function Save-ProjectDatabase{ [CmdletBinding()] param( diff --git a/private/projectDatabase/project_database_Async.ps1 b/private/projectDatabase/project_database_Async.ps1 index 1a2d2cc..fa28c4a 100644 --- a/private/projectDatabase/project_database_Async.ps1 +++ b/private/projectDatabase/project_database_Async.ps1 @@ -22,7 +22,7 @@ function Sync-ProjectDatabaseAsync { $db = Sync-ProjectAsync -Database $db -SyncBatchSize $SyncBatchSize # Saved changes to database - Save-ProjectDatabase -Database $db -Safe + Save-ProjectDatabaseSafe -Database $db if (Test-ProjectDatabaseStaged -Owner $Owner -ProjectNumber $ProjectNumber) { "Still pending staged values" | Write-MyError diff --git a/private/projectDatabase/project_database_Sync.ps1 b/private/projectDatabase/project_database_Sync.ps1 index 013b2e2..d6b0284 100644 --- a/private/projectDatabase/project_database_Sync.ps1 +++ b/private/projectDatabase/project_database_Sync.ps1 @@ -20,7 +20,7 @@ function Sync-ProjectDatabase{ # Send update to project $db = Sync-Project -Database $db - Save-ProjectDatabase -Database $db -Safe + Save-ProjectDatabaseSafe -Database $db if (Test-ProjectDatabaseStaged -Owner $Owner -ProjectNumber $ProjectNumber) { "Still pending staged values" | Write-MyError diff --git a/public/project_item.ps1 b/public/project_item.ps1 index fce3454..a4209f0 100644 --- a/public/project_item.ps1 +++ b/public/project_item.ps1 @@ -42,7 +42,7 @@ function Get-ProjectItem { end { if ($dirty) { "Saving dirty database" | Write-Verbose - Save-ProjectDatabase -Database $db -Safe + Save-ProjectDatabaseSafe -Database $db } } @@ -62,7 +62,7 @@ function Get-ProjectItem { # # Set-Item $db $item # -# Save-ProjectDatabase -Database $db -Safe +# Save-ProjectDatabaseSafe -Database $db # } function Remove-ProjectItem { @@ -85,7 +85,7 @@ function Remove-ProjectItem { } end { - Save-ProjectDatabase -Database $db -Safe + Save-ProjectDatabaseSafe -Database $db } } @@ -255,7 +255,7 @@ function Edit-ProjectItem { Save-ItemFieldValue $db $itemId $FieldName $Value # Commit changes to the database - Save-ProjectDatabase -Database $db -Safe + Save-ProjectDatabaseSafe -Database $db } Export-ModuleMember -Function Edit-ProjectItem @@ -310,7 +310,7 @@ function Add-ProjectItemDirect { Set-Item $db $item - Save-ProjectDatabase -Database $db -Safe + Save-ProjectDatabaseSafe -Database $db } @@ -374,7 +374,7 @@ function Remove-ProjectItemDirect { # Remove item from cache "Removing item [$ItemId] from cache" | Write-Verbose Remove-Item $db $ItemId - Save-ProjectDatabase -Database $db -Safe + Save-ProjectDatabaseSafe -Database $db return $ret } diff --git a/public/project_item_staged.ps1 b/public/project_item_staged.ps1 index b168ea1..5f3e93f 100644 --- a/public/project_item_staged.ps1 +++ b/public/project_item_staged.ps1 @@ -108,7 +108,7 @@ function Reset-ProjectItemStaged{ $db.Staged = $null - Save-ProjectDatabase -Database $db -Safe + Save-ProjectDatabaseSafe -Database $db } Export-ModuleMember -Function Reset-ProjectItemStaged From 0c9ce0aebabeff8ac795e8ad163a25a61bac226e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20=28Dibildos=29=20Gonz=C3=A1lez?= Date: Wed, 17 Sep 2025 17:07:53 +0200 Subject: [PATCH 10/10] test(projectDatabase): copilot Code Review comments --- .../{project_database.test..ps1 => project_database.test.ps1} | 0 private/projectDatabase/project_database_Item_Resolve.ps1 | 4 ++-- public/project_item.ps1 | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename Test/public/projectDatabase/{project_database.test..ps1 => project_database.test.ps1} (100%) diff --git a/Test/public/projectDatabase/project_database.test..ps1 b/Test/public/projectDatabase/project_database.test.ps1 similarity index 100% rename from Test/public/projectDatabase/project_database.test..ps1 rename to Test/public/projectDatabase/project_database.test.ps1 diff --git a/private/projectDatabase/project_database_Item_Resolve.ps1 b/private/projectDatabase/project_database_Item_Resolve.ps1 index d607159..39ae0e7 100644 --- a/private/projectDatabase/project_database_Item_Resolve.ps1 +++ b/private/projectDatabase/project_database_Item_Resolve.ps1 @@ -23,10 +23,10 @@ function Resolve-ProjectItem { } # Add to database - Set-Item $db $item + Set-Item $Database $item # Get item again to allow the merge between staged and project fields - $item = Get-Item $db $itemId + $item = Get-Item $Database $itemId $dirty = $true } diff --git a/public/project_item.ps1 b/public/project_item.ps1 index a4209f0..97e99fe 100644 --- a/public/project_item.ps1 +++ b/public/project_item.ps1 @@ -240,7 +240,7 @@ function Edit-ProjectItem { # Find the actual value of the item. Item+Staged # $item = Get-ProjectItem -ItemId $ItemId -Owner $Owner -ProjectNumber $ProjectNumber - $item = Resolve-ProjectItem -Database $db -ItemId $ItemId + ($item, $dirty) = Resolve-ProjectItem -Database $db -ItemId $ItemId # if the item is not found if($null -eq $item){ "Item [$ItemId] not found" | Write-MyError; return $null}