getPackages method

  1. @Route.get('/webapi/packages')
Future<Response> getPackages(
  1. Request req
)

Implementation

@Route.get('/webapi/packages')
Future<shelf.Response> getPackages(shelf.Request req) async {
  var params = req.requestedUri.queryParameters;
  var size = int.tryParse(params['size'] ?? '') ?? 10;
  var page = int.tryParse(params['page'] ?? '') ?? 0;
  var sort = params['sort'] ?? 'download';
  var q = params['q'];

  String? keyword;
  String? uploader;
  String? dependency;

  if (q == null) {
  } else if (q.startsWith('email:')) {
    uploader = q.substring(6).trim();
  } else if (q.startsWith('dependency:')) {
    dependency = q.substring(11).trim();
  } else {
    keyword = q;
  }

  final result = await metaStore.queryPackages(
    size: size,
    page: page,
    sort: sort,
    keyword: keyword,
    uploader: uploader,
    dependency: dependency,
  );

  var data = ListApi(result.count, [
    for (var package in result.packages)
      ListApiPackage(
        package.name,
        package.versions.last.pubspec['description'] as String?,
        getPackageTags(package.versions.last.pubspec),
        package.versions.last.version,
        package.updatedAt,
      )
  ]);

  return _okWithJson({'data': data.toJson()});
}