diff --git a/api/.sqlx/query-10978826d109deef49e1ccf11bbc82f41cf63dc2a60b7cf04b1118911061049d.json b/api/.sqlx/query-10978826d109deef49e1ccf11bbc82f41cf63dc2a60b7cf04b1118911061049d.json new file mode 100644 index 000000000..0d4afb8f2 --- /dev/null +++ b/api/.sqlx/query-10978826d109deef49e1ccf11bbc82f41cf63dc2a60b7cf04b1118911061049d.json @@ -0,0 +1,26 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT packages.scope as \"scope: ScopeName\", packages.name as \"name: PackageName\"\n FROM packages\n WHERE EXISTS (\n SELECT 1 FROM package_versions\n WHERE scope = packages.scope AND name = packages.name AND is_yanked = false\n ) AND NOT packages.is_archived\n ORDER BY packages.created_at DESC\n LIMIT 10", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "scope: ScopeName", + "type_info": "Text" + }, + { + "ordinal": 1, + "name": "name: PackageName", + "type_info": "Text" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false, + false + ] + }, + "hash": "10978826d109deef49e1ccf11bbc82f41cf63dc2a60b7cf04b1118911061049d" +} diff --git a/api/.sqlx/query-30b9ed6f2599f58359be85dbe805dc017cd8a8fae02189ee046485b66bc69f19.json b/api/.sqlx/query-30b9ed6f2599f58359be85dbe805dc017cd8a8fae02189ee046485b66bc69f19.json deleted file mode 100644 index b04f503ee..000000000 --- a/api/.sqlx/query-30b9ed6f2599f58359be85dbe805dc017cd8a8fae02189ee046485b66bc69f19.json +++ /dev/null @@ -1,132 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "SELECT packages.scope \"package_scope: ScopeName\", packages.name \"package_name: PackageName\", packages.description \"package_description\", packages.github_repository_id \"package_github_repository_id\", packages.runtime_compat as \"package_runtime_compat: RuntimeCompat\", packages.readme_source as \"package_readme_source: ReadmeSource\", packages.when_featured \"package_when_featured\", packages.is_archived \"package_is_archived\", packages.updated_at \"package_updated_at\", packages.created_at \"package_created_at\",\n (SELECT COUNT(created_at) FROM package_versions WHERE scope = packages.scope AND name = packages.name) as \"package_version_count!\",\n latest.version as \"package_latest_version?\",\n latest.meta as \"package_version_meta?: PackageVersionMeta\",\n github_repositories.id \"github_repository_id?\", github_repositories.owner \"github_repository_owner?\", github_repositories.name \"github_repository_name?\", github_repositories.updated_at \"github_repository_updated_at?\", github_repositories.created_at \"github_repository_created_at?\"\n FROM packages\n LEFT JOIN github_repositories ON packages.github_repository_id = github_repositories.id\n LEFT JOIN LATERAL (\n SELECT version, meta FROM package_versions\n WHERE scope = packages.scope AND name = packages.name AND version NOT LIKE '%-%' AND is_yanked = false\n ORDER BY version DESC LIMIT 1\n ) latest ON true\n WHERE EXISTS (\n SELECT 1 FROM package_versions\n WHERE scope = packages.scope AND name = packages.name AND is_yanked = false\n ) AND NOT packages.is_archived\n ORDER BY packages.created_at DESC\n LIMIT 10", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "package_scope: ScopeName", - "type_info": "Text" - }, - { - "ordinal": 1, - "name": "package_name: PackageName", - "type_info": "Text" - }, - { - "ordinal": 2, - "name": "package_description", - "type_info": "Text" - }, - { - "ordinal": 3, - "name": "package_github_repository_id", - "type_info": "Int8" - }, - { - "ordinal": 4, - "name": "package_runtime_compat: RuntimeCompat", - "type_info": "Jsonb" - }, - { - "ordinal": 5, - "name": "package_readme_source: ReadmeSource", - "type_info": { - "Custom": { - "name": "package_readme_source", - "kind": { - "Enum": [ - "readme", - "jsdoc" - ] - } - } - } - }, - { - "ordinal": 6, - "name": "package_when_featured", - "type_info": "Timestamptz" - }, - { - "ordinal": 7, - "name": "package_is_archived", - "type_info": "Bool" - }, - { - "ordinal": 8, - "name": "package_updated_at", - "type_info": "Timestamptz" - }, - { - "ordinal": 9, - "name": "package_created_at", - "type_info": "Timestamptz" - }, - { - "ordinal": 10, - "name": "package_version_count!", - "type_info": "Int8" - }, - { - "ordinal": 11, - "name": "package_latest_version?", - "type_info": "Text" - }, - { - "ordinal": 12, - "name": "package_version_meta?: PackageVersionMeta", - "type_info": "Jsonb" - }, - { - "ordinal": 13, - "name": "github_repository_id?", - "type_info": "Int8" - }, - { - "ordinal": 14, - "name": "github_repository_owner?", - "type_info": "Text" - }, - { - "ordinal": 15, - "name": "github_repository_name?", - "type_info": "Text" - }, - { - "ordinal": 16, - "name": "github_repository_updated_at?", - "type_info": "Timestamptz" - }, - { - "ordinal": 17, - "name": "github_repository_created_at?", - "type_info": "Timestamptz" - } - ], - "parameters": { - "Left": [] - }, - "nullable": [ - false, - false, - false, - true, - false, - false, - true, - false, - false, - false, - null, - false, - false, - false, - false, - false, - false, - false - ] - }, - "hash": "30b9ed6f2599f58359be85dbe805dc017cd8a8fae02189ee046485b66bc69f19" -} diff --git a/api/.sqlx/query-3ff9f83c64ecc84ed776ec057b575817c93b93353684d6470165d54edf2587c5.json b/api/.sqlx/query-3ff9f83c64ecc84ed776ec057b575817c93b93353684d6470165d54edf2587c5.json new file mode 100644 index 000000000..fb4ade8b7 --- /dev/null +++ b/api/.sqlx/query-3ff9f83c64ecc84ed776ec057b575817c93b93353684d6470165d54edf2587c5.json @@ -0,0 +1,32 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT package_versions.scope as \"scope: ScopeName\", package_versions.name as \"name: PackageName\", package_versions.version as \"version: Version\"\n FROM package_versions\n JOIN packages ON packages.scope = package_versions.scope AND packages.name = package_versions.name\n WHERE NOT packages.is_archived\n ORDER BY package_versions.created_at DESC\n LIMIT 10", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "scope: ScopeName", + "type_info": "Text" + }, + { + "ordinal": 1, + "name": "name: PackageName", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "version: Version", + "type_info": "Text" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false, + false, + false + ] + }, + "hash": "3ff9f83c64ecc84ed776ec057b575817c93b93353684d6470165d54edf2587c5" +} diff --git a/api/.sqlx/query-8aabfceedb18bd0ce7182f9d10035041bbe3fa6dd79d3726b7907df3e98e9f4e.json b/api/.sqlx/query-8aabfceedb18bd0ce7182f9d10035041bbe3fa6dd79d3726b7907df3e98e9f4e.json deleted file mode 100644 index 877d6b399..000000000 --- a/api/.sqlx/query-8aabfceedb18bd0ce7182f9d10035041bbe3fa6dd79d3726b7907df3e98e9f4e.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "SELECT package_versions.scope as \"scope: ScopeName\", package_versions.name as \"name: PackageName\", package_versions.version as \"version: Version\", package_versions.user_id, package_versions.readme_path as \"readme_path: PackagePath\", package_versions.exports as \"exports: ExportsMap\", package_versions.is_yanked, package_versions.uses_npm, package_versions.meta as \"meta: PackageVersionMeta\", package_versions.updated_at, package_versions.created_at, package_versions.rekor_log_id, package_versions.license\n FROM package_versions\n JOIN packages ON packages.scope = package_versions.scope AND packages.name = package_versions.name\n WHERE NOT packages.is_archived\n ORDER BY package_versions.created_at DESC\n LIMIT 10", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "scope: ScopeName", - "type_info": "Text" - }, - { - "ordinal": 1, - "name": "name: PackageName", - "type_info": "Text" - }, - { - "ordinal": 2, - "name": "version: Version", - "type_info": "Text" - }, - { - "ordinal": 3, - "name": "user_id", - "type_info": "Uuid" - }, - { - "ordinal": 4, - "name": "readme_path: PackagePath", - "type_info": "Text" - }, - { - "ordinal": 5, - "name": "exports: ExportsMap", - "type_info": "Jsonb" - }, - { - "ordinal": 6, - "name": "is_yanked", - "type_info": "Bool" - }, - { - "ordinal": 7, - "name": "uses_npm", - "type_info": "Bool" - }, - { - "ordinal": 8, - "name": "meta: PackageVersionMeta", - "type_info": "Jsonb" - }, - { - "ordinal": 9, - "name": "updated_at", - "type_info": "Timestamptz" - }, - { - "ordinal": 10, - "name": "created_at", - "type_info": "Timestamptz" - }, - { - "ordinal": 11, - "name": "rekor_log_id", - "type_info": "Text" - }, - { - "ordinal": 12, - "name": "license", - "type_info": "Text" - } - ], - "parameters": { - "Left": [] - }, - "nullable": [ - false, - false, - false, - true, - true, - false, - false, - false, - false, - false, - false, - true, - true - ] - }, - "hash": "8aabfceedb18bd0ce7182f9d10035041bbe3fa6dd79d3726b7907df3e98e9f4e" -} diff --git a/api/.sqlx/query-ae566aa403f724030aea56131462e4fc6cd44d8c2d292bb02982b3e75becc752.json b/api/.sqlx/query-ae566aa403f724030aea56131462e4fc6cd44d8c2d292bb02982b3e75becc752.json new file mode 100644 index 000000000..8984d68bf --- /dev/null +++ b/api/.sqlx/query-ae566aa403f724030aea56131462e4fc6cd44d8c2d292bb02982b3e75becc752.json @@ -0,0 +1,26 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT packages.scope as \"scope: ScopeName\", packages.name as \"name: PackageName\"\n FROM packages\n WHERE packages.when_featured IS NOT NULL AND NOT packages.is_archived\n ORDER BY packages.when_featured DESC\n LIMIT 10", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "scope: ScopeName", + "type_info": "Text" + }, + { + "ordinal": 1, + "name": "name: PackageName", + "type_info": "Text" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false, + false + ] + }, + "hash": "ae566aa403f724030aea56131462e4fc6cd44d8c2d292bb02982b3e75becc752" +} diff --git a/api/.sqlx/query-e6b8c334e0d73d20c5031c4486ea56ee60fdba567ef29b90ef16b4d9b9f1830a.json b/api/.sqlx/query-e6b8c334e0d73d20c5031c4486ea56ee60fdba567ef29b90ef16b4d9b9f1830a.json deleted file mode 100644 index 515c0259f..000000000 --- a/api/.sqlx/query-e6b8c334e0d73d20c5031c4486ea56ee60fdba567ef29b90ef16b4d9b9f1830a.json +++ /dev/null @@ -1,132 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "SELECT packages.scope \"package_scope: ScopeName\", packages.name \"package_name: PackageName\", packages.description \"package_description\", packages.github_repository_id \"package_github_repository_id\", packages.runtime_compat as \"package_runtime_compat: RuntimeCompat\", packages.readme_source as \"package_readme_source: ReadmeSource\", packages.when_featured \"package_when_featured\", packages.is_archived \"package_is_archived\", packages.updated_at \"package_updated_at\", packages.created_at \"package_created_at\",\n (SELECT COUNT(created_at) FROM package_versions WHERE scope = packages.scope AND name = packages.name) as \"package_version_count!\",\n latest.version as \"package_latest_version?\",\n latest.meta as \"package_version_meta?: PackageVersionMeta\",\n github_repositories.id \"github_repository_id?\", github_repositories.owner \"github_repository_owner?\", github_repositories.name \"github_repository_name?\", github_repositories.updated_at \"github_repository_updated_at?\", github_repositories.created_at \"github_repository_created_at?\"\n FROM packages\n LEFT JOIN github_repositories ON packages.github_repository_id = github_repositories.id\n LEFT JOIN LATERAL (\n SELECT version, meta FROM package_versions\n WHERE scope = packages.scope AND name = packages.name AND version NOT LIKE '%-%' AND is_yanked = false\n ORDER BY version DESC LIMIT 1\n ) latest ON true\n WHERE packages.when_featured IS NOT NULL AND NOT packages.is_archived\n ORDER BY packages.when_featured DESC\n LIMIT 10", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "package_scope: ScopeName", - "type_info": "Text" - }, - { - "ordinal": 1, - "name": "package_name: PackageName", - "type_info": "Text" - }, - { - "ordinal": 2, - "name": "package_description", - "type_info": "Text" - }, - { - "ordinal": 3, - "name": "package_github_repository_id", - "type_info": "Int8" - }, - { - "ordinal": 4, - "name": "package_runtime_compat: RuntimeCompat", - "type_info": "Jsonb" - }, - { - "ordinal": 5, - "name": "package_readme_source: ReadmeSource", - "type_info": { - "Custom": { - "name": "package_readme_source", - "kind": { - "Enum": [ - "readme", - "jsdoc" - ] - } - } - } - }, - { - "ordinal": 6, - "name": "package_when_featured", - "type_info": "Timestamptz" - }, - { - "ordinal": 7, - "name": "package_is_archived", - "type_info": "Bool" - }, - { - "ordinal": 8, - "name": "package_updated_at", - "type_info": "Timestamptz" - }, - { - "ordinal": 9, - "name": "package_created_at", - "type_info": "Timestamptz" - }, - { - "ordinal": 10, - "name": "package_version_count!", - "type_info": "Int8" - }, - { - "ordinal": 11, - "name": "package_latest_version?", - "type_info": "Text" - }, - { - "ordinal": 12, - "name": "package_version_meta?: PackageVersionMeta", - "type_info": "Jsonb" - }, - { - "ordinal": 13, - "name": "github_repository_id?", - "type_info": "Int8" - }, - { - "ordinal": 14, - "name": "github_repository_owner?", - "type_info": "Text" - }, - { - "ordinal": 15, - "name": "github_repository_name?", - "type_info": "Text" - }, - { - "ordinal": 16, - "name": "github_repository_updated_at?", - "type_info": "Timestamptz" - }, - { - "ordinal": 17, - "name": "github_repository_created_at?", - "type_info": "Timestamptz" - } - ], - "parameters": { - "Left": [] - }, - "nullable": [ - false, - false, - false, - true, - false, - false, - true, - false, - false, - false, - null, - false, - false, - false, - false, - false, - false, - false - ] - }, - "hash": "e6b8c334e0d73d20c5031c4486ea56ee60fdba567ef29b90ef16b4d9b9f1830a" -} diff --git a/api/src/api.yml b/api/src/api.yml index 7fadeadaf..3ad1069fc 100644 --- a/api/src/api.yml +++ b/api/src/api.yml @@ -3012,22 +3012,52 @@ components: type: array description: The newest packages. items: - $ref: "#/components/schemas/Package" + $ref: "#/components/schemas/StatsPackage" updated: type: array description: The recently uploaded package versions. items: - $ref: "#/components/schemas/PackageVersion" + $ref: "#/components/schemas/StatsPackageVersion" featured: type: array description: The featured packages items: - $ref: "#/components/schemas/Package" + $ref: "#/components/schemas/StatsPackage" required: - newest - updated - featured + StatsPackage: + type: object + properties: + scope: + type: string + description: The scope of the package. + name: + type: string + description: The name of the package. + required: + - scope + - name + + StatsPackageVersion: + type: object + properties: + scope: + type: string + description: The scope of the package. + package: + type: string + description: The name of the package. + version: + type: string + description: The version string. + required: + - scope + - package + - version + PackageScore: type: object properties: diff --git a/api/src/api/package.rs b/api/src/api/package.rs index 072a2b92a..b527a1e17 100644 --- a/api/src/api/package.rs +++ b/api/src/api/package.rs @@ -114,7 +114,10 @@ use super::ApiSource; use super::ApiSourceDirEntry; use super::ApiSourceDirEntryKind; use super::ApiStats; +use super::ApiStatsPackage; +use super::ApiStatsPackageVersion; use super::ApiUpdatePackageGithubRepositoryRequest; + use super::ApiUpdatePackageRequest; use super::ApiUpdatePackageVersionRequest; @@ -244,9 +247,12 @@ pub async fn global_stats_handler(req: Request) -> ApiResult { let (newest, updated, featured) = db.package_stats().await?; Ok(ApiStats { - newest: newest.into_iter().map(ApiPackage::from).collect(), - updated: updated.into_iter().map(ApiPackageVersion::from).collect(), - featured: featured.into_iter().map(ApiPackage::from).collect(), + newest: newest.into_iter().map(ApiStatsPackage::from).collect(), + updated: updated + .into_iter() + .map(ApiStatsPackageVersion::from) + .collect(), + featured: featured.into_iter().map(ApiStatsPackage::from).collect(), }) } diff --git a/api/src/api/types.rs b/api/src/api/types.rs index c9a132cac..729b11895 100644 --- a/api/src/api/types.rs +++ b/api/src/api/types.rs @@ -799,9 +799,43 @@ pub enum ApiUpdateScopeRequest { #[derive(Debug, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ApiStats { - pub newest: Vec, - pub updated: Vec, - pub featured: Vec, + pub newest: Vec, + pub updated: Vec, + pub featured: Vec, +} + +#[derive(Debug, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct ApiStatsPackage { + pub scope: ScopeName, + pub name: PackageName, +} + +impl From for ApiStatsPackage { + fn from(p: StatsPackage) -> Self { + Self { + scope: p.scope, + name: p.name, + } + } +} + +#[derive(Debug, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct ApiStatsPackageVersion { + pub scope: ScopeName, + pub package: PackageName, + pub version: Version, +} + +impl From for ApiStatsPackageVersion { + fn from(v: StatsPackageVersion) -> Self { + Self { + scope: v.scope, + package: v.name, + version: v.version, + } + } } #[derive(Debug, Serialize, Deserialize)] diff --git a/api/src/db/database.rs b/api/src/db/database.rs index c1a759de6..71d0e8b57 100644 --- a/api/src/db/database.rs +++ b/api/src/db/database.rs @@ -1673,23 +1673,13 @@ impl Database { pub async fn package_stats( &self, ) -> Result<( - Vec, - Vec, - Vec, + Vec, + Vec, + Vec, )> { let newest_fut = sqlx::query!( - r#"SELECT packages.scope "package_scope: ScopeName", packages.name "package_name: PackageName", packages.description "package_description", packages.github_repository_id "package_github_repository_id", packages.runtime_compat as "package_runtime_compat: RuntimeCompat", packages.readme_source as "package_readme_source: ReadmeSource", packages.when_featured "package_when_featured", packages.is_archived "package_is_archived", packages.updated_at "package_updated_at", packages.created_at "package_created_at", - (SELECT COUNT(created_at) FROM package_versions WHERE scope = packages.scope AND name = packages.name) as "package_version_count!", - latest.version as "package_latest_version?", - latest.meta as "package_version_meta?: PackageVersionMeta", - github_repositories.id "github_repository_id?", github_repositories.owner "github_repository_owner?", github_repositories.name "github_repository_name?", github_repositories.updated_at "github_repository_updated_at?", github_repositories.created_at "github_repository_created_at?" + r#"SELECT packages.scope as "scope: ScopeName", packages.name as "name: PackageName" FROM packages - LEFT JOIN github_repositories ON packages.github_repository_id = github_repositories.id - LEFT JOIN LATERAL ( - SELECT version, meta FROM package_versions - WHERE scope = packages.scope AND name = packages.name AND version NOT LIKE '%-%' AND is_yanked = false - ORDER BY version DESC LIMIT 1 - ) latest ON true WHERE EXISTS ( SELECT 1 FROM package_versions WHERE scope = packages.scope AND name = packages.name AND is_yanked = false @@ -1697,100 +1687,41 @@ impl Database { ORDER BY packages.created_at DESC LIMIT 10"#, ) - .map(|r| { - let package = Package { - scope: r.package_scope, - name: r.package_name, - description: r.package_description, - github_repository_id: r.package_github_repository_id, - runtime_compat: r.package_runtime_compat, - created_at: r.package_created_at, - updated_at: r.package_updated_at, - version_count: r.package_version_count, - latest_version: r.package_latest_version, - when_featured: r.package_when_featured, - is_archived: r.package_is_archived, - readme_source: r.package_readme_source, - }; - let github_repository = if r.package_github_repository_id.is_some() { - Some(GithubRepository { - id: r.github_repository_id.unwrap(), - owner: r.github_repository_owner.unwrap(), - name: r.github_repository_name.unwrap(), - created_at: r.github_repository_created_at.unwrap(), - updated_at: r.github_repository_updated_at.unwrap(), - }) - } else { - None - }; - let meta = r.package_version_meta.unwrap_or_default(); - (package, github_repository, meta) + .map(|r| StatsPackage { + scope: r.scope, + name: r.name, }) .fetch_all(&self.pool); - let updated_fut = sqlx::query_as!( - PackageVersion, - r#"SELECT package_versions.scope as "scope: ScopeName", package_versions.name as "name: PackageName", package_versions.version as "version: Version", package_versions.user_id, package_versions.readme_path as "readme_path: PackagePath", package_versions.exports as "exports: ExportsMap", package_versions.is_yanked, package_versions.uses_npm, package_versions.meta as "meta: PackageVersionMeta", package_versions.updated_at, package_versions.created_at, package_versions.rekor_log_id, package_versions.license + let updated_fut = sqlx::query!( + r#"SELECT package_versions.scope as "scope: ScopeName", package_versions.name as "name: PackageName", package_versions.version as "version: Version" FROM package_versions JOIN packages ON packages.scope = package_versions.scope AND packages.name = package_versions.name WHERE NOT packages.is_archived ORDER BY package_versions.created_at DESC LIMIT 10"#, ) + .map(|r| StatsPackageVersion { + scope: r.scope, + name: r.name, + version: r.version, + }) .fetch_all(&self.pool); let featured_fut = sqlx::query!( - r#"SELECT packages.scope "package_scope: ScopeName", packages.name "package_name: PackageName", packages.description "package_description", packages.github_repository_id "package_github_repository_id", packages.runtime_compat as "package_runtime_compat: RuntimeCompat", packages.readme_source as "package_readme_source: ReadmeSource", packages.when_featured "package_when_featured", packages.is_archived "package_is_archived", packages.updated_at "package_updated_at", packages.created_at "package_created_at", - (SELECT COUNT(created_at) FROM package_versions WHERE scope = packages.scope AND name = packages.name) as "package_version_count!", - latest.version as "package_latest_version?", - latest.meta as "package_version_meta?: PackageVersionMeta", - github_repositories.id "github_repository_id?", github_repositories.owner "github_repository_owner?", github_repositories.name "github_repository_name?", github_repositories.updated_at "github_repository_updated_at?", github_repositories.created_at "github_repository_created_at?" + r#"SELECT packages.scope as "scope: ScopeName", packages.name as "name: PackageName" FROM packages - LEFT JOIN github_repositories ON packages.github_repository_id = github_repositories.id - LEFT JOIN LATERAL ( - SELECT version, meta FROM package_versions - WHERE scope = packages.scope AND name = packages.name AND version NOT LIKE '%-%' AND is_yanked = false - ORDER BY version DESC LIMIT 1 - ) latest ON true WHERE packages.when_featured IS NOT NULL AND NOT packages.is_archived ORDER BY packages.when_featured DESC LIMIT 10"#, ) - .map(|r| { - let package = Package { - scope: r.package_scope, - name: r.package_name, - description: r.package_description, - github_repository_id: r.package_github_repository_id, - runtime_compat: r.package_runtime_compat, - created_at: r.package_created_at, - updated_at: r.package_updated_at, - version_count: r.package_version_count, - latest_version: r.package_latest_version, - when_featured: r.package_when_featured, - is_archived: r.package_is_archived, - readme_source: r.package_readme_source, - }; - let github_repository = if r.package_github_repository_id.is_some() { - Some(GithubRepository { - id: r.github_repository_id.unwrap(), - owner: r.github_repository_owner.unwrap(), - name: r.github_repository_name.unwrap(), - created_at: r.github_repository_created_at.unwrap(), - updated_at: r.github_repository_updated_at.unwrap(), - }) - } else { - None - }; - let meta = r.package_version_meta.unwrap_or_default(); - (package, github_repository, meta) + .map(|r| StatsPackage { + scope: r.scope, + name: r.name, }) .fetch_all(&self.pool); - let (newest, updated, featured) = - tokio::try_join!(newest_fut, updated_fut, featured_fut)?; - - Ok((newest, updated, featured)) + Ok(tokio::try_join!(newest_fut, updated_fut, featured_fut)?) } #[instrument(name = "Database::metrics", skip(self), err)] diff --git a/api/src/db/models.rs b/api/src/db/models.rs index 039c911bb..a5963d961 100644 --- a/api/src/db/models.rs +++ b/api/src/db/models.rs @@ -868,6 +868,19 @@ pub struct NewPackageVersionDependency<'s> { pub type PackageWithGitHubRepoAndMeta = (Package, Option, PackageVersionMeta); +#[derive(Debug)] +pub struct StatsPackage { + pub scope: ScopeName, + pub name: PackageName, +} + +#[derive(Debug)] +pub struct StatsPackageVersion { + pub scope: ScopeName, + pub name: PackageName, + pub version: Version, +} + #[derive(Debug, Clone)] #[allow(dead_code)] pub struct NpmTarball { diff --git a/frontend/routes/index.tsx b/frontend/routes/index.tsx index a5c9d8975..ab61ab8be 100644 --- a/frontend/routes/index.tsx +++ b/frontend/routes/index.tsx @@ -1,7 +1,11 @@ // Copyright 2024 the JSR authors. All rights reserved. MIT license. import { define } from "../util.ts"; import { assertOk, path } from "../utils/api.ts"; -import type { Package, PackageVersion, Stats } from "../utils/api_types.ts"; +import type { + Stats, + StatsPackage, + StatsPackageVersion, +} from "../utils/api_types.ts"; import type { PanelEntry } from "../components/ListPanel.tsx"; import { ListPanel } from "../components/ListPanel.tsx"; import { ComponentChildren } from "preact"; @@ -228,7 +232,7 @@ function BenefitText({ children }: { children: ComponentChildren }) { } function PackageToPanelEntry( - entry: Package, + entry: StatsPackage, ): PanelEntry { return { value: `@${entry.scope}/${entry.name}`, @@ -237,7 +241,7 @@ function PackageToPanelEntry( } function PackageVersionToPanelEntry( - entry: PackageVersion, + entry: StatsPackageVersion, ): PanelEntry { return { value: `@${entry.scope}/${entry.package}`, diff --git a/frontend/utils/api_types.ts b/frontend/utils/api_types.ts index fcce0d44f..fb511e559 100644 --- a/frontend/utils/api_types.ts +++ b/frontend/utils/api_types.ts @@ -246,10 +246,21 @@ export interface PackageVersionReference { version: string; } +export interface StatsPackage { + scope: string; + name: string; +} + +export interface StatsPackageVersion { + scope: string; + package: string; + version: string; +} + export interface Stats { - newest: Package[]; - updated: PackageVersionWithUser[]; - featured: Package[]; + newest: StatsPackage[]; + updated: StatsPackageVersion[]; + featured: StatsPackage[]; } export interface List {