Skip to content

Commit 3b40e3c

Browse files
author
amvanbaren
committed
cache extensionquery json
1 parent bc84afc commit 3b40e3c

14 files changed

Lines changed: 392 additions & 162 deletions

server/src/main/java/org/eclipse/openvsx/ExtensionService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ public void updateExtension(Extension extension) {
141141
cache.evictNamespaceDetails(extension);
142142
cache.evictLatestExtensionVersion(extension);
143143
cache.evictExtensionJsons(extension);
144+
cache.evictExtensionQueryExtensionData(extension);
144145

145146
if (extension.getVersions().stream().anyMatch(ExtensionVersion::isActive)) {
146147
// There is at least one active version => activate the extension

server/src/main/java/org/eclipse/openvsx/LocalRegistryService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -694,6 +694,7 @@ public ResultJson postReview(ReviewJson review, String namespace, String extensi
694694
search.updateSearchEntry(extension);
695695
cache.evictExtensionJsons(extension);
696696
cache.evictLatestExtensionVersion(extension);
697+
cache.evictExtensionQueryExtensionData(extension);
697698
return ResultJson.success("Added review for " + NamingUtil.toExtensionId(extension));
698699
}
699700

@@ -721,6 +722,7 @@ public ResultJson deleteReview(String namespace, String extensionName) {
721722
search.updateSearchEntry(extension);
722723
cache.evictExtensionJsons(extension);
723724
cache.evictLatestExtensionVersion(extension);
725+
cache.evictExtensionQueryExtensionData(extension);
724726
return ResultJson.success("Deleted review for " + NamingUtil.toExtensionId(extension));
725727
}
726728

server/src/main/java/org/eclipse/openvsx/UserService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,6 @@ public ResultJson addNamespaceMember(Namespace namespace, UserData user, String
170170
}
171171

172172
@Transactional(rollbackOn = { ErrorResultException.class, NotFoundException.class })
173-
@CacheEvict(value = { CACHE_NAMESPACE_DETAILS_JSON }, key="#details.name")
174173
public ResultJson updateNamespaceDetails(NamespaceDetailsJson details, UserData user) {
175174
var namespace = repositories.findNamespace(details.getName());
176175
if (namespace == null) {
@@ -211,6 +210,8 @@ public ResultJson updateNamespaceDetails(NamespaceDetailsJson details, UserData
211210
namespace.setLogoStorageType(null);
212211
}
213212

213+
cache.evictNamespaceDetails(namespace);
214+
cache.evictExtensionQueryExtensionData(namespace);
214215
return ResultJson.success("Updated details for namespace " + details.getName());
215216
}
216217

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
/** ******************************************************************************
2+
* Copyright (c) 2025 Precies. Software OU and others
3+
*
4+
* This program and the accompanying materials are made available under the
5+
* terms of the Eclipse Public License v. 2.0 which is available at
6+
* http://www.eclipse.org/legal/epl-2.0.
7+
*
8+
* SPDX-License-Identifier: EPL-2.0
9+
* ****************************************************************************** */
10+
package org.eclipse.openvsx.adapter;
11+
12+
import java.util.Collections;
13+
import java.util.List;
14+
import java.util.stream.Stream;
15+
16+
import static org.eclipse.openvsx.adapter.ExtensionQueryParam.*;
17+
18+
public record ExtensionQueryExtensionData(
19+
String publicId,
20+
String extensionId,
21+
String extensionName,
22+
String displayName,
23+
String shortDescription,
24+
ExtensionQueryResult.Publisher publisher,
25+
List<ExtensionVersion> versions,
26+
List<Long> latestVersions,
27+
List<ExtensionQueryResult.Statistic> statistics,
28+
List<String> tags,
29+
String releaseDate,
30+
String publishedDate,
31+
String lastUpdated,
32+
List<String> categories,
33+
String preview
34+
) {
35+
36+
public record ExtensionVersion(long id, ExtensionQueryResult.ExtensionVersion data) {
37+
public ExtensionQueryResult.ExtensionVersion toJson(int flags) {
38+
var files = test(flags, FLAG_INCLUDE_FILES) ? data.files() : null;
39+
var assetUri = test(flags, FLAG_INCLUDE_ASSET_URI) ? data.assetUri() : null;
40+
var properties = test(flags, FLAG_INCLUDE_VERSION_PROPERTIES) ? data.properties() : null;
41+
42+
return new ExtensionQueryResult.ExtensionVersion(
43+
data.version(),
44+
data.lastUpdated(),
45+
assetUri,
46+
assetUri,
47+
files,
48+
properties,
49+
data.targetPlatform()
50+
);
51+
}
52+
}
53+
54+
public ExtensionQueryResult.Extension toJson(int flags) {
55+
var extVersionStream = Stream.<ExtensionVersion>empty();
56+
if (test(flags, FLAG_INCLUDE_LATEST_VERSION_ONLY)) {
57+
extVersionStream = versions.stream().filter(v -> latestVersions.contains(v.id()));
58+
} else if (test(flags, FLAG_INCLUDE_VERSIONS)) {
59+
extVersionStream = versions.stream();
60+
}
61+
62+
var extVersions = extVersionStream.map(v -> v.toJson(flags)).toList();
63+
var stats = test(flags, FLAG_INCLUDE_STATISTICS) ? statistics : Collections.<ExtensionQueryResult.Statistic>emptyList();
64+
return new ExtensionQueryResult.Extension(
65+
publicId,
66+
extensionName,
67+
displayName,
68+
shortDescription,
69+
publisher,
70+
extVersions,
71+
stats,
72+
tags,
73+
releaseDate,
74+
publishedDate,
75+
lastUpdated,
76+
categories,
77+
preview()
78+
);
79+
}
80+
81+
private static boolean test(int flags, int flag) {
82+
return (flags & flag) != 0;
83+
}
84+
}

0 commit comments

Comments
 (0)