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