diff --git a/server/database/migrations/0004_woozy_the_captain.sql b/server/database/migrations/0004_woozy_the_captain.sql new file mode 100644 index 0000000..f678563 --- /dev/null +++ b/server/database/migrations/0004_woozy_the_captain.sql @@ -0,0 +1 @@ +CREATE INDEX "project_stats_lookup_idx" ON "project_stats" USING btree ("date","projectType","versionCategory","excluded","version"); \ No newline at end of file diff --git a/server/database/migrations/meta/0004_snapshot.json b/server/database/migrations/meta/0004_snapshot.json new file mode 100644 index 0000000..ea5a9a9 --- /dev/null +++ b/server/database/migrations/meta/0004_snapshot.json @@ -0,0 +1,296 @@ +{ + "id": "56b50461-051e-4b84-9a69-e2095cc89be4", + "prevId": "2686b21f-04d0-46f4-8e4f-9d008f353773", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.dependencies": { + "name": "dependencies", + "schema": "", + "columns": { + "project_id": { + "name": "project_id", + "type": "varchar(8)", + "primaryKey": false, + "notNull": true + }, + "dependency_id": { + "name": "dependency_id", + "type": "varchar(8)", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "dependencies_project_id_modpacks_id_fk": { + "name": "dependencies_project_id_modpacks_id_fk", + "tableFrom": "dependencies", + "tableTo": "modpacks", + "columnsFrom": [ + "project_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "dependencies_project_id_dependency_id_pk": { + "name": "dependencies_project_id_dependency_id_pk", + "columns": [ + "project_id", + "dependency_id" + ] + } + }, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.global_stats": { + "name": "global_stats", + "schema": "", + "columns": { + "projects": { + "name": "projects", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "versions": { + "name": "versions", + "type": "bigint", + "primaryKey": false, + "notNull": true + }, + "files": { + "name": "files", + "type": "bigint", + "primaryKey": false, + "notNull": true + }, + "authors": { + "name": "authors", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "date": { + "name": "date", + "type": "date", + "primaryKey": true, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.modpacks": { + "name": "modpacks", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "varchar(8)", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "icon_url": { + "name": "icon_url", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "downloads": { + "name": "downloads", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.project_stats": { + "name": "project_stats", + "schema": "", + "columns": { + "downloads": { + "name": "downloads", + "type": "bigint", + "primaryKey": false, + "notNull": true + }, + "versions": { + "name": "versions", + "type": "bigint", + "primaryKey": false, + "notNull": true + }, + "count": { + "name": "count", + "type": "bigint", + "primaryKey": false, + "notNull": true + }, + "version": { + "name": "version", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "loader": { + "name": "loader", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "date": { + "name": "date", + "type": "date", + "primaryKey": false, + "notNull": true + }, + "projectType": { + "name": "projectType", + "type": "project_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "versionCategory": { + "name": "versionCategory", + "type": "version_category", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "excluded": { + "name": "excluded", + "type": "boolean", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "project_stats_lookup_idx": { + "name": "project_stats_lookup_idx", + "columns": [ + { + "expression": "date", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "projectType", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "versionCategory", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "excluded", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "version", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": { + "project_stats_version_loader_date_projectType_versionCategory_excluded_pk": { + "name": "project_stats_version_loader_date_projectType_versionCategory_excluded_pk", + "columns": [ + "version", + "loader", + "date", + "projectType", + "versionCategory", + "excluded" + ] + } + }, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": { + "public.project_type": { + "name": "project_type", + "schema": "public", + "values": [ + "mod", + "plugin", + "datapack", + "shader", + "resourcepack", + "modpack" + ] + }, + "public.version_category": { + "name": "version_category", + "schema": "public", + "values": [ + "all", + "major", + "minor", + "unified" + ] + } + }, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/server/database/migrations/meta/_journal.json b/server/database/migrations/meta/_journal.json index b4de9d2..b0dc804 100644 --- a/server/database/migrations/meta/_journal.json +++ b/server/database/migrations/meta/_journal.json @@ -29,6 +29,13 @@ "when": 1781766491223, "tag": "0003_boring_colleen_wing", "breakpoints": true + }, + { + "idx": 4, + "version": "7", + "when": 1782198969649, + "tag": "0004_woozy_the_captain", + "breakpoints": true } ] } \ No newline at end of file diff --git a/server/database/schema.ts b/server/database/schema.ts index 2046bfa..0d0b1c3 100644 --- a/server/database/schema.ts +++ b/server/database/schema.ts @@ -2,6 +2,7 @@ import { bigint, boolean, date, + index, integer, pgEnum, pgTable, @@ -91,6 +92,14 @@ export const projectStats = pgTable( table.excluded, ], }), + + index("project_stats_lookup_idx").on( + table.date, + table.projectType, + table.versionCategory, + table.excluded, + table.version, + ), ], );