Skip to content

Commit 3d75bce

Browse files
authored
Refactor /score and /options endpoint (#8774)
1 parent 35f1bb8 commit 3d75bce

File tree

3 files changed

+55
-42
lines changed

3 files changed

+55
-42
lines changed

app/lib/frontend/handlers/custom_api.dart

Lines changed: 2 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import '../../scorecard/backend.dart';
2121
import '../../search/backend.dart';
2222
import '../../search/search_client.dart';
2323
import '../../search/search_service.dart';
24-
import '../../service/download_counts/backend.dart';
2524
import '../../service/topics/count_topics.dart';
2625
import '../../shared/configuration.dart';
2726
import '../../shared/exceptions.dart';
@@ -218,38 +217,7 @@ Future<VersionScore> packageVersionScoreHandler(
218217
{String? version}) async {
219218
checkPackageVersionParams(package, version);
220219
return (await cache.versionScore(package, version).get(() async {
221-
final pkg = await packageBackend.lookupPackage(package);
222-
if (pkg == null) {
223-
throw NotFoundException.resource('package "$package"');
224-
}
225-
final v =
226-
(version == null || version == 'latest') ? pkg.latestVersion! : version;
227-
final pv = await packageBackend.lookupPackageVersion(package, v);
228-
if (pv == null) {
229-
throw NotFoundException.resource('package "$package" version "$version"');
230-
}
231-
232-
var updated = pkg.updated;
233-
final card = await scoreCardBackend.getScoreCardData(package, v);
234-
if (updated == null || card.updated?.isAfter(updated) == true) {
235-
updated = card.updated;
236-
}
237-
238-
final tags = <String>{
239-
...pkg.getTags(),
240-
...pv.getTags(),
241-
...?card.derivedTags,
242-
};
243-
244-
return VersionScore(
245-
grantedPoints: card.grantedPubPoints,
246-
maxPoints: card.maxPubPoints,
247-
likeCount: pkg.likes,
248-
downloadCount30Days:
249-
downloadCountsBackend.lookup30DaysTotalCounts(package),
250-
tags: tags.toList(),
251-
lastUpdated: updated,
252-
);
220+
return await scoreCardBackend.getVersionScore(package, version: version);
253221
}))!;
254222
}
255223

@@ -475,15 +443,7 @@ Future<PkgOptions> getPackageOptionsHandler(
475443
shelf.Request request,
476444
String package,
477445
) async {
478-
checkPackageVersionParams(package);
479-
final p = await packageBackend.lookupPackage(package);
480-
if (p == null) {
481-
throw NotFoundException.resource(package);
482-
}
483-
return PkgOptions(
484-
isDiscontinued: p.isDiscontinued,
485-
isUnlisted: p.isUnlisted,
486-
);
446+
return await packageBackend.getPackageOptions(package);
487447
}
488448

489449
/// Handles `PUT /api/packages/<package>/options`.

app/lib/package/backend.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,20 @@ class PackageBackend {
419419
return count;
420420
}
421421

422+
/// Returns the package options.
423+
Future<api.PkgOptions> getPackageOptions(String package) async {
424+
checkPackageVersionParams(package);
425+
final p = await packageBackend.lookupPackage(package);
426+
if (p == null) {
427+
throw NotFoundException.resource(package);
428+
}
429+
return api.PkgOptions(
430+
isDiscontinued: p.isDiscontinued,
431+
replacedBy: p.replacedBy,
432+
isUnlisted: p.isUnlisted,
433+
);
434+
}
435+
422436
/// Updates [options] on [package].
423437
Future<void> updateOptions(String package, api.PkgOptions options) async {
424438
final authenticatedUser = await requireAuthenticatedWebUser();

app/lib/scorecard/backend.dart

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@
44

55
import 'dart:async';
66

7+
import 'package:_pub_shared/data/package_api.dart';
78
import 'package:clock/clock.dart';
89
import 'package:gcloud/service_scope.dart' as ss;
910
import 'package:logging/logging.dart';
1011
import 'package:meta/meta.dart';
1112
import 'package:pool/pool.dart';
13+
import 'package:pub_dev/service/download_counts/backend.dart';
1214
import 'package:pub_dev/service/download_counts/computations.dart';
1315
import 'package:pub_dev/shared/exceptions.dart';
1416
import 'package:pub_dev/task/backend.dart';
@@ -186,6 +188,43 @@ class ScoreCardBackend {
186188
final pv = list[1] as PackageVersion?;
187189
return PackageStatus.fromModels(p, pv);
188190
}
191+
192+
/// Return the version score object served in the API.
193+
Future<VersionScore> getVersionScore(String package,
194+
{String? version}) async {
195+
final pkg = await packageBackend.lookupPackage(package);
196+
if (pkg == null) {
197+
throw NotFoundException.resource('package "$package"');
198+
}
199+
final v =
200+
(version == null || version == 'latest') ? pkg.latestVersion! : version;
201+
final pv = await packageBackend.lookupPackageVersion(package, v);
202+
if (pv == null) {
203+
throw NotFoundException.resource('package "$package" version "$version"');
204+
}
205+
206+
var updated = pkg.updated;
207+
final card = await scoreCardBackend.getScoreCardData(package, v);
208+
if (updated == null || card.updated?.isAfter(updated) == true) {
209+
updated = card.updated;
210+
}
211+
212+
final tags = <String>{
213+
...pkg.getTags(),
214+
...pv.getTags(),
215+
...?card.derivedTags,
216+
};
217+
218+
return VersionScore(
219+
grantedPoints: card.grantedPubPoints,
220+
maxPoints: card.maxPubPoints,
221+
likeCount: pkg.likes,
222+
downloadCount30Days:
223+
downloadCountsBackend.lookup30DaysTotalCounts(package),
224+
tags: tags.toList(),
225+
lastUpdated: updated,
226+
);
227+
}
189228
}
190229

191230
Future<void> purgeScorecardData(

0 commit comments

Comments
 (0)