diff --git a/app/lib/frontend/handlers/package.dart b/app/lib/frontend/handlers/package.dart index 368d166a98..8754a39327 100644 --- a/app/lib/frontend/handlers/package.dart +++ b/app/lib/frontend/handlers/package.dart @@ -531,17 +531,5 @@ Future listAdvisoriesForPackage( throw NotFoundException.resource(packageName); } - final advisories = - await securityAdvisoryBackend.lookupSecurityAdvisories(packageName); - if (advisories.isEmpty) { - return ListAdvisoriesResponse(advisories: []); - } - final advisoriesUpdated = advisories.fold( - advisories.first.syncTime, - (previousValue, advisory) => advisory.syncTime.isAfter(previousValue) - ? advisory.syncTime - : previousValue); - return ListAdvisoriesResponse( - advisories: advisories.map((e) => e.advisory).toList(), - advisoriesUpdated: advisoriesUpdated); + return await securityAdvisoryBackend.listAdvisoriesResponse(packageName); } diff --git a/app/lib/service/security_advisories/backend.dart b/app/lib/service/security_advisories/backend.dart index 1eb3d93661..2450a24935 100644 --- a/app/lib/service/security_advisories/backend.dart +++ b/app/lib/service/security_advisories/backend.dart @@ -5,7 +5,8 @@ import 'dart:async'; import 'dart:convert'; -import 'package:_pub_shared/data/advisories_api.dart' show OSV; +import 'package:_pub_shared/data/advisories_api.dart' + show ListAdvisoriesResponse, OSV; import 'package:basics/basics.dart'; import 'package:clock/clock.dart'; import 'package:collection/collection.dart'; @@ -50,6 +51,16 @@ class SecurityAdvisoryBackend { }))!; } + /// Create a [ListAdvisoriesResponse] for [package] using advisories from + /// cache. + Future listAdvisoriesResponse(String package) async { + final advisories = await lookupSecurityAdvisories(package); + return ListAdvisoriesResponse( + advisories: advisories.map((a) => a.advisory).toList(), + advisoriesUpdated: advisories.map((a) => a.syncTime).maxOrNull, + ); + } + Future lookupById(String id) async { final key = _db.emptyKey.append(SecurityAdvisory, id: id); return _db.lookupOrNull(key);