func listForPackage()

in Sources/PackageRegistryExample/Controllers/PackageReleasesController.swift [27:56]


    func listForPackage(request: Request) async throws -> Response {
        let scope = try request.getPackageScopeParam()
        // Client may append .json extension to the URI (4.1)
        let name = try request.getPackageNameParam(removingExtension: ".json")
        let package = PackageIdentity(scope: scope, name: name)

        let list = try await self.packageReleases.list(for: package)

        guard !list.isEmpty else {
            throw DataAccessError.notFound
        }

        var links = [String]()
        // Link to the latest published release - `list` is already sorted with most recent first
        let latest = list.first! // !-safe since list is not empty at this point
        links.append("<\(self.configuration.api.baseURL)/\(package.scope)/\(package.name)/\(latest.version)>; rel=\"latest-version\"")
        // Link to source repository, if any
        if let repositoryURL = latest.repositoryURL {
            links.append("<\(repositoryURL)>; rel=\"canonical\"")
        }

        var headers = HTTPHeaders()
        headers.setLinkHeader(links)

        let response = PackageReleasesResponse(
            releases: Dictionary(list.map { ($0.version.description, PackageReleasesResponse.ReleaseInfo.from($0, baseURL: self.configuration.api.baseURL)) },
                                 uniquingKeysWith: { first, _ in first })
        )
        return Response.json(status: .ok, body: response, headers: headers)
    }