@@ -19,27 +19,43 @@ function Get-ProjectItem{
1919 [Parameter ()][switch ]$Force
2020 )
2121
22- ($Owner , $ProjectNumber ) = Get-OwnerAndProjectNumber - Owner $Owner - ProjectNumber $ProjectNumber
23- if ([string ]::IsNullOrWhiteSpace($owner ) -or [string ]::IsNullOrWhiteSpace($ProjectNumber )){ " Owner and ProjectNumber are required" | Write-MyError ; return $null }
24-
25-
26- # Get Item from Project database
27- $db = Get-Project - Owner $Owner - ProjectNumber $ProjectNumber - Force:$Force
22+ begin {
23+ ($Owner , $ProjectNumber ) = Get-OwnerAndProjectNumber - Owner $Owner - ProjectNumber $ProjectNumber
24+ if ([string ]::IsNullOrWhiteSpace($owner ) -or [string ]::IsNullOrWhiteSpace($ProjectNumber )){ " Owner and ProjectNumber are required" | Write-MyError ; return $null }
25+
26+
27+ # Get Item from Project database
28+ $db = Get-Project - Owner $Owner - ProjectNumber $ProjectNumber - Force:$Force
2829
29- if ( $db ){
30- $item = Get-Item $db $itemId
30+ # Durty flag
31+ $durty = $false
3132 }
3233
33- # If item not found on cache get it directly
34- if ($null -eq $item ){
35- $item = Get-ProjectItemDirect - ItemId $ItemId - NoCache
34+ process {
35+ if ($db ){
36+ $item = Get-Item $db $itemId
37+ }
38+ if ($null -eq $item ){
39+ " Item [$ItemId ] not found in cache, fetching from API" | Write-Verbose
40+
41+ # Get direct. No cache as we are in a database modification context
42+ $item = Get-ProjectItemDirect - ItemId $ItemId
3643
37- Set-Item $db $item
44+ # Add to database
45+ Set-Item $db $item
46+ $durty = $true
47+ }
3848
39- Save-ProjectDatabase - Database $db
49+ return $item
50+ }
51+
52+ end {
53+ if ($durty ){
54+ " Saving durty database" | Write-Verbose
55+ Save-ProjectDatabase - Database $db
56+ }
4057 }
4158
42- return $item
4359} Export-ModuleMember - Function Get-ProjectItem
4460
4561function Set-ProjectItem {
@@ -67,14 +83,21 @@ function Remove-ProjectItem{
6783 [Parameter ()][string ]$ProjectNumber
6884 )
6985
70- ($Owner , $ProjectNumber ) = Get-OwnerAndProjectNumber - Owner $Owner - ProjectNumber $ProjectNumber
71- if ([string ]::IsNullOrWhiteSpace($owner ) -or [string ]::IsNullOrWhiteSpace($ProjectNumber )){ " Owner and ProjectNumber are required" | Write-MyError ; return $null }
86+ begin {
87+ ($Owner , $ProjectNumber ) = Get-OwnerAndProjectNumber - Owner $Owner - ProjectNumber $ProjectNumber
88+ if ([string ]::IsNullOrWhiteSpace($owner ) -or [string ]::IsNullOrWhiteSpace($ProjectNumber )){ " Owner and ProjectNumber are required" | Write-MyError ; return $null }
89+
90+ $db = Get-Project - Owner $Owner - ProjectNumber $ProjectNumber
91+ }
7292
73- $db = Get-Project - Owner $Owner - ProjectNumber $ProjectNumber
93+ process {
94+ Remove-Item $db $itemId
95+ }
7496
75- Remove-Item $db $itemId
97+ end {
98+ Save-ProjectDatabase - Database $db
99+ }
76100
77- Save-ProjectDatabase - Database $db
78101}
79102
80103function Find-ProjectItem {
@@ -316,8 +339,7 @@ function Remove-ProjectItemDirect{
316339function Get-ProjectItemDirect {
317340 [CmdletBinding ()]
318341 param (
319- [Parameter (Mandatory , ValueFromPipeline , Position = 0 )][string ]$ItemId ,
320- [Parameter ()][switch ]$NoCache
342+ [Parameter (Mandatory , ValueFromPipeline , Position = 0 )][string ]$ItemId
321343 )
322344
323345 $response = Invoke-MyCommand - Command GetItem - Parameters @ {
@@ -337,12 +359,6 @@ function Get-ProjectItemDirect{
337359
338360 $item = $response.data.node | Convert-NodeItemToHash
339361
340- if (! $NoCache ){
341- " Adding item [$ItemId ] to cache" | Write-Verbose
342- Set-ProjectItem - Owner $Owner - ProjectNumber $ProjectNumber - Item $item
343- Save-ProjectDatabase - Owner $Owner - ProjectNumber $ProjectNumber
344- }
345-
346362 return $item
347363} Export-ModuleMember - Function Get-ProjectItemDirect
348364
0 commit comments