Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,7 @@ public void updateExtension(Extension extension) {
cache.evictNamespaceDetails(extension);
cache.evictLatestExtensionVersion(extension);
cache.evictExtensionJsons(extension);
cache.evictExtensionQueryExtensionData(extension);

if (extension.getVersions().stream().anyMatch(ExtensionVersion::isActive)) {
// There is at least one active version => activate the extension
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -694,6 +694,7 @@ public ResultJson postReview(ReviewJson review, String namespace, String extensi
search.updateSearchEntry(extension);
cache.evictExtensionJsons(extension);
cache.evictLatestExtensionVersion(extension);
cache.evictExtensionQueryExtensionData(extension);
return ResultJson.success("Added review for " + NamingUtil.toExtensionId(extension));
}

Expand Down Expand Up @@ -721,6 +722,7 @@ public ResultJson deleteReview(String namespace, String extensionName) {
search.updateSearchEntry(extension);
cache.evictExtensionJsons(extension);
cache.evictLatestExtensionVersion(extension);
cache.evictExtensionQueryExtensionData(extension);
return ResultJson.success("Deleted review for " + NamingUtil.toExtensionId(extension));
}

Expand Down
3 changes: 2 additions & 1 deletion server/src/main/java/org/eclipse/openvsx/UserService.java
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,6 @@ public ResultJson addNamespaceMember(Namespace namespace, UserData user, String
}

@Transactional(rollbackOn = { ErrorResultException.class, NotFoundException.class })
@CacheEvict(value = { CACHE_NAMESPACE_DETAILS_JSON }, key="#details.name")
public ResultJson updateNamespaceDetails(NamespaceDetailsJson details, UserData user) {
var namespace = repositories.findNamespace(details.getName());
if (namespace == null) {
Expand Down Expand Up @@ -211,6 +210,8 @@ public ResultJson updateNamespaceDetails(NamespaceDetailsJson details, UserData
namespace.setLogoStorageType(null);
}

cache.evictNamespaceDetails(namespace);
cache.evictExtensionQueryExtensionData(namespace);
return ResultJson.success("Updated details for namespace " + details.getName());
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
/** ******************************************************************************
* Copyright (c) 2025 Precies. Software OU and others
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
* ****************************************************************************** */
package org.eclipse.openvsx.adapter;

import java.util.Collections;
import java.util.List;
import java.util.stream.Stream;

import static org.eclipse.openvsx.adapter.ExtensionQueryParam.*;

public record ExtensionQueryExtensionData(
String publicId,
String extensionId,
String extensionName,
String displayName,
String shortDescription,
ExtensionQueryResult.Publisher publisher,
List<ExtensionVersion> versions,
List<Long> latestVersions,
List<ExtensionQueryResult.Statistic> statistics,
List<String> tags,
String releaseDate,
String publishedDate,
String lastUpdated,
List<String> categories,
String preview
) {

public record ExtensionVersion(long id, ExtensionQueryResult.ExtensionVersion data) {
public ExtensionQueryResult.ExtensionVersion toJson(int flags) {
var files = test(flags, FLAG_INCLUDE_FILES) ? data.files() : null;
var assetUri = test(flags, FLAG_INCLUDE_ASSET_URI) ? data.assetUri() : null;
var properties = test(flags, FLAG_INCLUDE_VERSION_PROPERTIES) ? data.properties() : null;

return new ExtensionQueryResult.ExtensionVersion(
data.version(),
data.lastUpdated(),
assetUri,
assetUri,
files,
properties,
data.targetPlatform()
);
}
}

public ExtensionQueryResult.Extension toJson(int flags) {
var extVersionStream = Stream.<ExtensionVersion>empty();
if (test(flags, FLAG_INCLUDE_LATEST_VERSION_ONLY)) {
extVersionStream = versions.stream().filter(v -> latestVersions.contains(v.id()));
} else if (test(flags, FLAG_INCLUDE_VERSIONS)) {
extVersionStream = versions.stream();
}

var extVersions = extVersionStream.map(v -> v.toJson(flags)).toList();
var stats = test(flags, FLAG_INCLUDE_STATISTICS) ? statistics : Collections.<ExtensionQueryResult.Statistic>emptyList();
return new ExtensionQueryResult.Extension(
publicId,
extensionName,
displayName,
shortDescription,
publisher,
extVersions,
stats,
tags,
releaseDate,
publishedDate,
lastUpdated,
categories,
preview()
);
}

private static boolean test(int flags, int flag) {
return (flags & flag) != 0;
}
}
Loading
Loading