Skip to content

Commit 5840b5a

Browse files
committed
delete packages
1 parent 499db62 commit 5840b5a

File tree

4 files changed

+60
-57
lines changed

4 files changed

+60
-57
lines changed

src/cls/ZPM/DeletedPackage.cls

Lines changed: 0 additions & 25 deletions
This file was deleted.

src/cls/ZPM/Owner.cls

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@ ClassMethod IsOwner(packageName As %String) As %Status
2020
Return $$$OK
2121
}
2222

23-
ClassMethod getId() As %String
23+
ClassMethod GetId() As %String
2424
{
2525
Return $Username
2626
}
2727

2828
ClassMethod SaveOwner(packageName, packageVersion) As %Status
2929
{
30-
Set owner = ..getId()
30+
Set owner = ..GetId()
3131
Set package = ##class(ZPM.Package).NameVersionOpen(packageName, packageVersion)
3232
Set package.owner = owner
3333
Return package.%Save()

src/cls/ZPM/Package.cls

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ Index NameUpLink On (name, UpLink);
6969

7070
Property deployed As %Boolean;
7171

72+
Property deleted As %Boolean [ InitialExpression = 0 ];
73+
7274
Method nameSet(value As %String) As %Status
7375
{
7476
Set i%name = $$$lcase(value)
@@ -203,7 +205,7 @@ ClassMethod VersionFind(pkg As %String = "", version As %String = "") As %String
203205
}
204206
}
205207

206-
Trigger DeletePackage [ Event = DELETE, Foreach = row/object ]
208+
Trigger DeletePackageTrigger [ Event = DELETE, Foreach = row/object ]
207209
{
208210
// delete DeployedPackage
209211
New id,package,name,version
@@ -214,15 +216,13 @@ Trigger DeletePackage [ Event = DELETE, Foreach = row/object ]
214216
&sql(DELETE FROM ZPM.DeployedPackage WHERE name = :name AND version = :version)
215217
}
216218

217-
ClassMethod IsDeleted(name, version) As %Boolean
219+
ClassMethod MarkAsDeleted(name, version) As %Boolean
218220
{
219-
Set count = 0
220-
&sql(SELECT COUNT(1) INTO :count FROM DeletedPackage WHERE name = :name AND version = :version)
221-
If (count = 0) {
222-
Return 0
223-
} Else {
221+
Set package = ##class(ZPM.Package).NameVersionOpen(name, version, , .tSC)
222+
If ($ISOBJECT(package) && (package.deleted = 1)) {
224223
Return 1
225224
}
225+
Return 0
226226
}
227227

228228
Method platformVersionsGet() As %ListOfDataTypes
@@ -249,23 +249,29 @@ Method platformVersionsGet() As %ListOfDataTypes
249249
Return tList
250250
}
251251

252-
ClassMethod DeleteExistingPackages(pkg As %String, version As %String, markDeleted As %Boolean = 0) As %Status
252+
ClassMethod DeleteExistingPackages(pkg As %String, version As %String) As %Status
253253
{
254254
// delete all "proxy" packages
255255
&sql(DELETE FROM ZPM.Package WHERE Name = :pkg AND UpLink IS NOT NULL)
256256
Set tSC = ..NameVersionDelete(pkg, version)
257257
Return:$$$ISERR(tSC) tSC
258258

259-
If (markDeleted) {
260-
Set count = 0
261-
&sql(SELECT COUNT(1) INTO :count FROM ZPM.Package WHERE Name = :pkg)
262-
If (count = 0) {
263-
&sql(DELETE FROM ZPM.DeletedPackage WHERE name = :pkg)
264-
} Else {
265-
&sql(INSERT INTO ZPM.DeletedPackage(name, version) VALUES (:pkg, :version))
266-
}
267-
}
268-
Return 1
259+
Return $$$OK
260+
}
261+
262+
ClassMethod DeletePackageVersion(pkg As %String, version As %String) As %Status
263+
{
264+
Set package = ##class(ZPM.Package).NameVersionOpen(pkg, version, , .tSC)
265+
Return:$$$ISERR(tSC) tSC
266+
Set package.deleted = 1
267+
Return package.%Save()
268+
}
269+
270+
ClassMethod DeletePackage(pkg As %String) As %Status
271+
{
272+
&sql(DELETE FROM ZPM.Package WHERE name = :pkg)
273+
If SQLCODE'=0 Return $$$ERROR($$$SQLError, SQLCODE, $g(%msg))
274+
Return $$$OK
269275
}
270276

271277
ClassMethod versionValidate(pkg As %String = "", version As %String = "") As %String
@@ -581,7 +587,7 @@ ClassMethod GetLatest(searchTerms As %DynamicArray = "", manifest As %String = "
581587
Set sql = "SELECT p1.name, p1.repository, p1.description, p1.version, ul.Host, IFNULL( (SELECT TOP 1 1 FROM ZPM.Package p3 WHERE p1.name=p3.name AND p3.owner = ? ORDER BY p3.versionMajor DESC, p3.versionMinor DESC, p3.versionPatch DESC, p3.versionPrerelease DESC, p3.versionBuildmetadata DESC ), 0, 1) as owner"_
582588
" FROM ZPM.Package p1 "_
583589
" LEFT JOIN ZPM.UpLink ul ON ul.ID = p1.UpLink " _
584-
" WHERE "_searchCondition_" "_
590+
" WHERE deleted = 0 OR deleted IS NULL AND "_searchCondition_" "_
585591
" AND p1.version = ( SELECT TOP 1 version FROM ZPM.Package p2 WHERE p1.name=p2.name ORDER BY p2.versionMajor DESC, p2.versionMinor DESC, p2.versionPatch DESC, p2.versionPrerelease DESC, p2.versionBuildmetadata DESC ) "
586592

587593
Set tStatement = ##class(%SQL.Statement).%New()
@@ -718,6 +724,9 @@ Storage Default
718724
<Value name="22">
719725
<Value>platformVersion</Value>
720726
</Value>
727+
<Value name="23">
728+
<Value>deleted</Value>
729+
</Value>
721730
</Data>
722731
<Data name="dependencies">
723732
<Attribute>dependencies</Attribute>

src/cls/ZPM/Registry.cls

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,10 @@ XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ]
3434
<Route Url="/packages/:package/:version/:platformVersion/?" Method="GET" Call="Package" Cors="true" />
3535
<!-- Publish Package -->
3636
<Route Url="/packages" Method="POST" Call="PublishPackage" Cors="true" />
37+
<!-- Unpublish Package Version -->
38+
<Route Url="/packages/:package/:version" Method="Delete" Call="UnPublishPackageVersion" Cors="true" />
3739
<!-- Unpublish Package -->
38-
<Route Url="/packages/:package/:version" Method="Delete" Call="UnPublishPackage" Cors="true" />
39-
40+
<Route Url="/packages/:package" Method="Delete" Call="UnPublishPackage" Cors="true" />
4041

4142
<!-- Package Archive -->
4243
<Route Url="/download/:package/:platformVersion/:file" Method="GET" Call="GetArchive" Cors="true" />
@@ -115,7 +116,7 @@ ClassMethod Package(pkg As %String = "", version As %String = "", platformVersio
115116
Return ..ReportHttpStatusCode(..#HTTP404NOTFOUND)
116117
}
117118
Set package = ##class(ZPM.Package).NameVersionOpen(pkg, version, .tSC)
118-
If $$$ISERR(tSC) || ('$IsObject(package)) {
119+
If $$$ISERR(tSC) || ('$IsObject(package))||(package.deleted=1) {
119120
Return ..ReportHttpStatusCode(..#HTTP404NOTFOUND)
120121
}
121122
If package.deployed,platformVersion'="" {
@@ -141,7 +142,7 @@ ClassMethod PackageManifest(pkg As %String = "", version As %String = "", platfo
141142
Set package = ##class(ZPM.Package).NameVersionOpen(pkg, version)
142143
}
143144

144-
If ('$IsObject(package))||('package.manifest.Size) {
145+
If ('$IsObject(package))||('package.manifest.Size)||(package.deleted=1) {
145146
Return ..ReportHttpStatusCode(..#HTTP404NOTFOUND)
146147
}
147148

@@ -158,7 +159,7 @@ ClassMethod PackageInstaller(pkg As %String = "", version As %String = "") As %S
158159
}
159160

160161
Set package = ##class(ZPM.Package).NameVersionOpen(pkg, version)
161-
If ('$IsObject(package)) {
162+
If ('$IsObject(package)||(package.deleted=1)) {
162163
Return ..ReportHttpStatusCode(..#HTTP404NOTFOUND)
163164
}
164165
If package.installer.Size {
@@ -170,8 +171,26 @@ ClassMethod PackageInstaller(pkg As %String = "", version As %String = "") As %S
170171
Return ..ReportHttpStatusCode(..#HTTP404NOTFOUND)
171172
}
172173

173-
/// Unpublish (delete) directly published package
174-
ClassMethod UnPublishPackage(pkg As %String = "", version As %String = "") As %Status
174+
ClassMethod UnPublishPackage(pkg As %String = "") As %Status
175+
{
176+
Set tSC = $$$OK
177+
Set tSC = ##class(ZPM.Owner).IsAuth()
178+
If ($$$ISERR(tSC)) {
179+
Return ..ReportHttpStatusCode(..#HTTP401UNAUTHORIZED, tSC)
180+
}
181+
Set pkg = $$$lcase(pkg)
182+
If ('##class(ZPM.Package).NameExists(pkg)) {
183+
Return ..ReportHttpStatusCode(..#HTTP404NOTFOUND)
184+
}
185+
Set tSC = ##class(ZPM.Owner).IsOwner(pkg)
186+
If ($$$ISERR(tSC)) {
187+
Return ..ReportHttpStatusCode(..#HTTP403FORBIDDEN, tSC)
188+
}
189+
Return ##class(ZPM.Package).DeletePackage(pkg)
190+
}
191+
192+
/// Unpublish (delete) directly published package version
193+
ClassMethod UnPublishPackageVersion(pkg As %String = "", version As %String = "") As %Status
175194
{
176195
Set tSC = $$$OK
177196
Set tSC = ##class(ZPM.Owner).IsAuth()
@@ -191,7 +210,7 @@ ClassMethod UnPublishPackage(pkg As %String = "", version As %String = "") As %S
191210
// only directly published package could be deleted
192211
Return ..ReportHttpStatusCode(..#HTTP400BADREQUEST)
193212
}
194-
Return ##class(ZPM.Package).DeleteExistingPackages(pkg, version, 1)
213+
Return ##class(ZPM.Package).DeletePackageVersion(pkg, version)
195214
}
196215

197216
ClassMethod PublishPackage() As %Status
@@ -211,7 +230,7 @@ ClassMethod PublishPackage() As %Status
211230
If ($$$ISERR(tSC)) {
212231
Return ..ReportHttpStatusCode(..#HTTP403FORBIDDEN, tSC)
213232
}
214-
If (##class(ZPM.Package).IsDeleted(name, version)) {
233+
If (##class(ZPM.Package).MarkAsDeleted(name, version)) {
215234
Return ..ReportHttpStatusCode(..#HTTP500INTERNALSERVERERROR, $$$ERROR(5001,"This version was deleted, change version number"))
216235
}
217236

@@ -282,7 +301,7 @@ ClassMethod GetArchive(name, platformVersion, fileName) As %Status
282301
Set package = ##class(ZPM.Package).NameVersionOpen(name, version, , .tSC)
283302
}
284303

285-
If '$IsObject(package)||('package.size) {
304+
If '$IsObject(package)||('package.size)||(package.deleted=1) {
286305
Return ..ReportHttpStatusCode(..#HTTP404NOTFOUND)
287306
}
288307

@@ -310,7 +329,7 @@ ClassMethod AllPackages() As %Status
310329

311330
Set manifest = %request.Get("manifest","")
312331
Set allVersions = %request.Get("allVersions","")
313-
Set owner = ##class(ZPM.Owner).getId()
332+
Set owner = ##class(ZPM.Owner).GetId()
314333
Set tList = ##class(ZPM.Package).GetLatest(searchTerms, manifest, allVersions, owner, .tSC)
315334

316335
If ($$$ISERR(tSC)) {

0 commit comments

Comments
 (0)