From 3fe07a13cdf754c98b7ef5c84551c41b676b529d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20=28Dibildos=29=20Gonz=C3=A1lez?= Date: Thu, 12 Mar 2026 11:18:37 +0100 Subject: [PATCH 1/7] fix(resetProjectDatabaseCache): correct function call to Reset-Database --- private/projectDatabase/project_database.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/private/projectDatabase/project_database.ps1 b/private/projectDatabase/project_database.ps1 index 0793c9f..d7a1d39 100644 --- a/private/projectDatabase/project_database.ps1 +++ b/private/projectDatabase/project_database.ps1 @@ -231,7 +231,7 @@ function resetProjectDatabaseCache{ "Resetting project cache for $KeyLock" | Write-MyDebug -Section "ProjectDatabase" - Reset.Database -Key $KeyLock + Reset-Database -Key $KeyLock $script:ProjectDatabaseCache.Remove($KeyLock) } \ No newline at end of file From 37327d6074cd3554a1fed7c5ed878f32a7f40f4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20=28Dibildos=29=20Gonz=C3=A1lez?= Date: Thu, 12 Mar 2026 12:48:11 +0100 Subject: [PATCH 2/7] refactor(ProjectDatabase): enhance caching mechanism and improve debug messages --- private/projectDatabase/project_database.ps1 | 65 ++----------------- .../project_database_cache.ps1 | 56 ++++++++++++++++ 2 files changed, 63 insertions(+), 58 deletions(-) create mode 100644 private/projectDatabase/project_database_cache.ps1 diff --git a/private/projectDatabase/project_database.ps1 b/private/projectDatabase/project_database.ps1 index d7a1d39..ae1e1af 100644 --- a/private/projectDatabase/project_database.ps1 +++ b/private/projectDatabase/project_database.ps1 @@ -50,8 +50,10 @@ function Get-ProjectFromDatabase{ $prj = getProjectDatabaseCache -KeyLock $keyLock if($null -ne $prj){ - "Project cache hit for $Owner/$ProjectNumber" | Write-MyDebug -Section "ProjectDatabase" + "🟩 Get Project from MEMORY $Owner/$ProjectNumber" | Write-MyDebug -Section "ProjectDatabase" return $prj + } else { + "🟧 Get Project from DATABASE $Owner/$ProjectNumber" | Write-MyDebug -Section "ProjectDatabase" } # No cache or cache mismatch, read from database @@ -65,6 +67,8 @@ function Get-ProjectFromDatabase{ $prj.items = $prj.items | Copy-MyHashTable $prj.Staged = $prj.Staged | Copy-MyHashTable + setProjectDatabaseCache -KeyLock $keyLock -SafeId $prj.safeId -Database $prj + return $prj } @@ -161,6 +165,8 @@ function Save-ProjectDatabase{ # Add safe mark $Database.safeId = [guid]::NewGuid().ToString() + "🟥 Set Project from DATABASE $Owner/$ProjectNumber safeid [$($Database.safeId)]" | Write-MyDebug -Section "ProjectDatabase" + # Save database Save-Database -Key $dbkey -Database $Database setProjectDatabaseCache -KeyLock $dbkeyLock -SafeId $Database.safeId -Database $Database @@ -177,61 +183,4 @@ function Get-ProjectDatabaseKey{ $keylock = "$key-lock" return $key, $keylock -} - -$script:ProjectDatabaseCache = @{} - -function getProjectDatabaseCache{ - param( - [Parameter(Mandatory,Position = 0)][string]$KeyLock - ) - - $lock = Get-Database -Key $KeyLock - - if([string]::IsNullOrWhiteSpace($lock)){ - "No cache lock found for $KeyLock. Cache will be ignored." | Write-MyDebug -Section "ProjectDatabase" - return $null - } - - $cache = $script:ProjectDatabaseCache[$KeyLock] - - if($lock -cne $cache.safeId) { - "Cache lock mismatch for $KeyLock. Cache safeId [$($cache.SafeId)], lock [$lock]. Cache will be ignored." | Write-MyDebug -Section "ProjectDatabase" - resetProjectDatabaseCache -KeyLock $KeyLock - return $null - } - - "Getting fields cache for $KeyLock with lock [$lock] and cache safeId [$($cache.SafeId)]" | Write-MyDebug -Section "ProjectDatabase" - return $cache.Database -} - -function setProjectDatabaseCache{ - param( - [Parameter(Mandatory,Position = 0)][string]$KeyLock, - [Parameter(Mandatory,Position = 1)][string]$SafeId, - [Parameter(Mandatory,Position = 2)][object]$Database - ) - - "Setting project cache for $KeyLock with safeId [$SafeId]" | Write-MyDebug -Section "ProjectDatabase" - - # Save safeId to project-lock - Save-Database -Database $SafeId -Key $KeyLock - - # Set lock in database to prevent concurrent updates - $script:ProjectDatabaseCache[$KeyLock] = @{ - Database = $Database - SafeId = $SafeId - } -} - -function resetProjectDatabaseCache{ - param( - [Parameter(Mandatory,Position = 0)][string]$KeyLock - ) - - "Resetting project cache for $KeyLock" | Write-MyDebug -Section "ProjectDatabase" - - Reset-Database -Key $KeyLock - - $script:ProjectDatabaseCache.Remove($KeyLock) } \ No newline at end of file diff --git a/private/projectDatabase/project_database_cache.ps1 b/private/projectDatabase/project_database_cache.ps1 new file mode 100644 index 0000000..477a130 --- /dev/null +++ b/private/projectDatabase/project_database_cache.ps1 @@ -0,0 +1,56 @@ +$script:ProjectDatabaseCache = @{} + +function getProjectDatabaseCache{ + param( + [Parameter(Mandatory,Position = 0)][string]$KeyLock + ) + + $lock = Get-Database -Key $KeyLock + + if([string]::IsNullOrWhiteSpace($lock)){ + "No cache lock found for $KeyLock. Cache will be ignored." | Write-MyDebug -Section "ProjectDatabaseCache" + return $null + } + + $cache = $script:ProjectDatabaseCache[$KeyLock] + + if($lock -cne $cache.safeId) { + "Cache lock mismatch for $KeyLock. Cache safeId [$($cache.SafeId)], lock [$lock]. Cache will be ignored." | Write-MyDebug -Section "ProjectDatabaseCache" + resetProjectDatabaseCache -KeyLock $KeyLock + return $null + } + + "Getting fields cache for $KeyLock with lock [$lock] and cache safeId [$($cache.SafeId)]" | Write-MyDebug -Section "ProjectDatabaseCache" + return $cache.Database +} + +function setProjectDatabaseCache{ + param( + [Parameter(Mandatory,Position = 0)][string]$KeyLock, + [Parameter(Mandatory,Position = 1)][string]$SafeId, + [Parameter(Mandatory,Position = 2)][object]$Database + ) + + "Setting project cache for $KeyLock with safeId [$SafeId]" | Write-MyDebug -Section "ProjectDatabaseCache" + + # Save safeId to project-lock + Save-Database -Database $SafeId -Key $KeyLock + + # Set lock in database to prevent concurrent updates + $script:ProjectDatabaseCache[$KeyLock] = @{ + Database = $Database + SafeId = $SafeId + } +} + +function resetProjectDatabaseCache{ + param( + [Parameter(Mandatory,Position = 0)][string]$KeyLock + ) + + "Resetting project cache for $KeyLock" | Write-MyDebug -Section "ProjectDatabase" + + Reset-Database -Key $KeyLock + + $script:ProjectDatabaseCache.Remove($KeyLock) +} \ No newline at end of file From 2e29638ee0028f43a503d216895dd538a47b9a6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20=28Dibildos=29=20Gonz=C3=A1lez?= Date: Fri, 13 Mar 2026 07:15:12 +0100 Subject: [PATCH 3/7] fit(Get-ValidNames): add "" as valid value to allow empy parameters --- public/fields/getValidNames.ps1 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/public/fields/getValidNames.ps1 b/public/fields/getValidNames.ps1 index a1c03ae..aeccd70 100644 --- a/public/fields/getValidNames.ps1 +++ b/public/fields/getValidNames.ps1 @@ -14,10 +14,11 @@ function Get-ValidNames{ return $null } - $field = Get-ProjectFields -Owner $owner -ProjectNumber $projectNumber -Name $FieldName + $field = Get-ProjectFields -Owner $owner -ProjectNumber $projectNumber -Name $FieldName -Exact if($field.dataType -eq "SINGLE_SELECT"){ $ret = $field.MoreInfo + $ret +="" } else { throw "Get-ValidNames only supports fields with SINGLE_SELECT dataType. Field $FieldName has $($field.dataType) dataType." } From 59ac4752ea6698968a489df78bb656391e582efd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20=28Dibildos=29=20Gonz=C3=A1lez?= Date: Fri, 13 Mar 2026 07:15:31 +0100 Subject: [PATCH 4/7] feat(Get-ProjectFields): add Exact parameter for precise field name filtering --- public/fields/project_fields_list.ps1 | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/public/fields/project_fields_list.ps1 b/public/fields/project_fields_list.ps1 index 8e62cee..622b67f 100644 --- a/public/fields/project_fields_list.ps1 +++ b/public/fields/project_fields_list.ps1 @@ -38,6 +38,7 @@ function Get-ProjectFields{ [Parameter()] [string]$Owner, [Parameter()] [string]$ProjectNumber, [Parameter(Position = 0)][string]$Name, + [Parameter()][switch]$Exact, [Parameter()][switch]$Force ) @@ -61,7 +62,11 @@ function Get-ProjectFields{ # if name if($Name){ # Filter fields by name - $fieldList = $fieldList | Where-Object { $_.name -like "*$Name*" } + if($Exact){ + $fieldList = $fieldList | Where-Object { $_.name -eq $Name } + } else { + $fieldList = $fieldList | Where-Object { $_.name -like "*$Name*" } + } } # return if #db is null From f7b8c18f9d0cde585e6b8e6cd8b0cb4d4e74d24f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20=28Dibildos=29=20Gonz=C3=A1lez?= Date: Fri, 13 Mar 2026 07:16:06 +0100 Subject: [PATCH 5/7] fix(Use-Order): change return statement to Write-Output for consistency --- public/items/use_order.ps1 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/public/items/use_order.ps1 b/public/items/use_order.ps1 index 45cb4f9..8914e4f 100644 --- a/public/items/use_order.ps1 +++ b/public/items/use_order.ps1 @@ -57,7 +57,7 @@ function Use-Order { #return item if($PassThru) { $i = Get-ProjectItem -ItemId $itemId - return [PsCustomObject]$i + Write-Output ([PsCustomObject]$i) } # Get function to show item @@ -71,7 +71,6 @@ function Use-Order { ClearScreen = $ClearScreen } $ShowProjectItemScriptBlock.Invoke($params) - return } } Export-ModuleMember -Function Use-Order -Alias "uo" \ No newline at end of file From 4f436a4dd7f654c51aef9cc66d8c288db74043e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20=28Dibildos=29=20Gonz=C3=A1lez?= Date: Fri, 13 Mar 2026 07:16:16 +0100 Subject: [PATCH 6/7] fix(Edit-ProjectItem): replace warning message with debug output for empty DefaultValues --- public/items/edit_project_item.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/items/edit_project_item.ps1 b/public/items/edit_project_item.ps1 index 4fed57a..7b4dd28 100644 --- a/public/items/edit_project_item.ps1 +++ b/public/items/edit_project_item.ps1 @@ -82,7 +82,7 @@ function Edit-ProjectItem { # Default if($DefaultValues){ - Write-MyWarning "No Default values are currently setup. Please use other parameters to set values or update the DefaultValues parameter with default values" + "DefaultValues EMPTY" | Write-MyDebug -section "Edit-ProjectItem" # Do not edit but leave this parameters flow the edit process } From c73dc9699a629a4c276f552e723e8327782d5a7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20=28Dibildos=29=20Gonz=C3=A1lez?= Date: Fri, 13 Mar 2026 07:35:08 +0100 Subject: [PATCH 7/7] fix(Use-Order): remove unused ShowProjectItemScriptBlock logic --- public/items/use_order.ps1 | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/public/items/use_order.ps1 b/public/items/use_order.ps1 index 9c9f34c..c8155be 100644 --- a/public/items/use_order.ps1 +++ b/public/items/use_order.ps1 @@ -74,18 +74,5 @@ function Use-Order { $i = Get-ProjectItem -ItemId $itemId Write-Output ([PsCustomObject]$i) } - - # Get function to show item - $ShowProjectItemScriptBlock = $ShowProjectItemScriptBlock ?? { param($parameters) Show-ProjectItem @parameters } - - # Show item in console or editor - $params = @{ - Item = $itemId - OpenInEditor = $OpenInEditor - OpenInBrowser = $OpenInBrowser - ClearScreen = $ClearScreen - } - $ShowProjectItemScriptBlock.Invoke($params) - } } Export-ModuleMember -Function Use-Order -Alias "uo" \ No newline at end of file