feat(backend-api): Add allPackageReleases query

This commit is contained in:
Christoph Herzog
2024-04-10 10:50:21 +02:00
parent c6ab1e5f56
commit 3a4b557ca6
3 changed files with 60 additions and 3 deletions

View File

@@ -417,6 +417,7 @@ type PackageVersion implements Node & PackageReleaseInterface & PackageInstance
deletedAt: DateTime deletedAt: DateTime
package: Package! package: Package!
webc: WebcImage webc: WebcImage
webcV3: WebcImage
"""List of direct dependencies of this package version""" """List of direct dependencies of this package version"""
dependencies(offset: Int, before: String, after: String, first: Int, last: Int): PackageVersionConnection! dependencies(offset: Int, before: String, after: String, first: Int, last: Int): PackageVersionConnection!
@@ -457,7 +458,7 @@ type PackageVersion implements Node & PackageReleaseInterface & PackageInstance
piritaFile: String @deprecated(reason: "Please use distribution.piritaDownloadUrl instead.") piritaFile: String @deprecated(reason: "Please use distribution.piritaDownloadUrl instead.")
piritaFileSize: Int @deprecated(reason: "Please use distribution.piritaSize instead.") piritaFileSize: Int @deprecated(reason: "Please use distribution.piritaSize instead.")
pirita256hash: String @deprecated(reason: "Please use distribution.piritaSha256Hash instead.") pirita256hash: String @deprecated(reason: "Please use distribution.piritaSha256Hash instead.")
distribution: PackageDistribution! distribution(version: WebcVersion): PackageDistribution!
filesystem: [PackageVersionFilesystem]! filesystem: [PackageVersionFilesystem]!
isLastVersion: Boolean! isLastVersion: Boolean!
witFile: String witFile: String
@@ -1040,6 +1041,11 @@ type PackageDistribution {
webcSha256Hash: String webcSha256Hash: String
} }
enum WebcVersion {
V2
V3
}
type PackageVersionFilesystem { type PackageVersionFilesystem {
wasm: String! wasm: String!
host: String! host: String!
@@ -1218,7 +1224,7 @@ type PackageWebcEdge {
cursor: String! cursor: String!
} }
type PackageWebc implements Node & PackageReleaseInterface { type PackageWebc implements Node & PackageReleaseInterface & PackageInstance {
"""The ID of the object""" """The ID of the object"""
id: ID! id: ID!
createdAt: DateTime! createdAt: DateTime!
@@ -2284,7 +2290,7 @@ type Query {
getCommands(names: [String!]!): [Command] getCommands(names: [String!]!): [Command]
getCollections(before: String, after: String, first: Int, last: Int): CollectionConnection getCollections(before: String, after: String, first: Int, last: Int): CollectionConnection
getSignedUrlForPackageUpload(name: String!, version: String = "latest", expiresAfterSeconds: Int = 60): SignedUrl getSignedUrlForPackageUpload(name: String!, version: String = "latest", expiresAfterSeconds: Int = 60): SignedUrl
getPackageHash(hash: String!): PackageWebc getPackageHash(name: String, hash: String!): PackageWebc
getPackageRelease(hash: String!): PackageWebc getPackageRelease(hash: String!): PackageWebc
categories(offset: Int, before: String, after: String, first: Int, last: Int): CategoryConnection! categories(offset: Int, before: String, after: String, first: Int, last: Int): CategoryConnection!
blogposts(tags: [String!], before: String, after: String, first: Int, last: Int): BlogPostConnection! blogposts(tags: [String!], before: String, after: String, first: Int, last: Int): BlogPostConnection!

View File

@@ -628,6 +628,16 @@ pub async fn get_package_release(
.map(|x| x.get_package_release) .map(|x| x.get_package_release)
} }
pub async fn get_package_releases(
client: &WasmerClient,
vars: types::AllPackageReleasesVars,
) -> Result<types::PackageWebcConnection, anyhow::Error> {
let res = client
.run_graphql(types::GetAllPackageReleases::build(vars))
.await?;
Ok(res.all_package_releases)
}
/// Retrieve all versions of a package as a stream that auto-paginates. /// Retrieve all versions of a package as a stream that auto-paginates.
pub fn get_package_versions_stream( pub fn get_package_versions_stream(
client: &WasmerClient, client: &WasmerClient,

View File

@@ -187,6 +187,47 @@ mod queries {
pub all_package_versions: PackageVersionConnection, pub all_package_versions: PackageVersionConnection,
} }
#[derive(cynic::QueryVariables, Debug, Clone, Default)]
pub struct AllPackageReleasesVars {
pub offset: Option<i32>,
pub before: Option<String>,
pub after: Option<String>,
pub first: Option<i32>,
pub last: Option<i32>,
pub created_after: Option<DateTime>,
pub updated_after: Option<DateTime>,
pub sort_by: Option<PackageVersionSortBy>,
}
#[derive(cynic::QueryFragment, Debug)]
#[cynic(graphql_type = "Query", variables = "AllPackageReleasesVars")]
pub struct GetAllPackageReleases {
pub all_package_releases: PackageWebcConnection,
}
impl GetAllPackageReleases {
pub fn into_packages(self) -> Vec<PackageWebc> {
self.all_package_releases
.edges
.into_iter()
.filter_map(|x| x)
.filter_map(|x| x.node)
.collect()
}
}
#[derive(cynic::QueryFragment, Debug)]
pub struct PackageWebcConnection {
pub page_info: PageInfo,
pub edges: Vec<Option<PackageWebcEdge>>,
}
#[derive(cynic::QueryFragment, Debug)]
pub struct PackageWebcEdge {
pub node: Option<PackageWebc>,
}
#[derive(cynic::QueryFragment, Debug)] #[derive(cynic::QueryFragment, Debug)]
pub struct PackageVersionConnection { pub struct PackageVersionConnection {
pub page_info: PageInfo, pub page_info: PageInfo,