CodeIssuesDiscussionsWikiPull RequestsProjectsCommitsActionsReleasesContributorsPulse● GatesSecuritySettingsDeploymentsPipelineInsightsAgents✨ Explain✨ Ask AI✨ Workspace✨ Spec✨ Tests▓ Debt Map✨ NL Search🏛 Archaeology
Blame · Line-by-line history
0009_packages.sql
Each line is annotated with the commit that last touched it. Click any SHA to jump to that commit and see the surrounding change.
| e2da5c6 | 1 | -- Gluecron migration 0009: Block C2 — Package registry (npm-compatible). |
| 2 | -- | |
| 3 | -- Tables: | |
| 4 | -- packages — logical package (one per repo per ecosystem) | |
| 5 | -- package_versions — published versions with tarball stored as bytea | |
| 6 | -- package_tags — dist tags (latest, beta, etc.) | |
| 7 | ||
| 8 | --> statement-breakpoint | |
| 9 | CREATE TABLE IF NOT EXISTS "packages" ( | |
| 10 | "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, | |
| 11 | "repository_id" uuid NOT NULL, | |
| 12 | "ecosystem" text NOT NULL DEFAULT 'npm', | |
| 13 | "scope" text, | |
| 14 | "name" text NOT NULL, | |
| 15 | "description" text, | |
| 16 | "readme" text, | |
| 17 | "homepage" text, | |
| 18 | "license" text, | |
| 19 | "visibility" text NOT NULL DEFAULT 'public', | |
| 20 | "created_at" timestamp DEFAULT now() NOT NULL, | |
| 21 | "updated_at" timestamp DEFAULT now() NOT NULL, | |
| 22 | CONSTRAINT "packages_repo_fk" FOREIGN KEY ("repository_id") REFERENCES "repositories"("id") ON DELETE cascade | |
| 23 | ); | |
| 24 | ||
| 25 | --> statement-breakpoint | |
| 26 | CREATE INDEX IF NOT EXISTS "packages_repo" ON "packages" ("repository_id"); | |
| 27 | --> statement-breakpoint | |
| 28 | CREATE UNIQUE INDEX IF NOT EXISTS "packages_eco_scope_name" ON "packages" ("ecosystem", "scope", "name"); | |
| 29 | ||
| 30 | --> statement-breakpoint | |
| 31 | CREATE TABLE IF NOT EXISTS "package_versions" ( | |
| 32 | "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, | |
| 33 | "package_id" uuid NOT NULL, | |
| 34 | "version" text NOT NULL, | |
| 35 | "shasum" text NOT NULL, | |
| 36 | "integrity" text, | |
| 37 | "size_bytes" integer NOT NULL DEFAULT 0, | |
| 38 | "metadata" text NOT NULL DEFAULT '{}', | |
| 39 | "tarball" text, | |
| 40 | "published_by" uuid, | |
| 41 | "yanked" boolean NOT NULL DEFAULT false, | |
| 42 | "yanked_reason" text, | |
| 43 | "published_at" timestamp DEFAULT now() NOT NULL, | |
| 44 | CONSTRAINT "package_versions_pkg_fk" FOREIGN KEY ("package_id") REFERENCES "packages"("id") ON DELETE cascade, | |
| 45 | CONSTRAINT "package_versions_user_fk" FOREIGN KEY ("published_by") REFERENCES "users"("id") ON DELETE set null | |
| 46 | ); | |
| 47 | ||
| 48 | --> statement-breakpoint | |
| 49 | CREATE INDEX IF NOT EXISTS "package_versions_pkg" ON "package_versions" ("package_id"); | |
| 50 | --> statement-breakpoint | |
| 51 | CREATE UNIQUE INDEX IF NOT EXISTS "package_versions_pkg_version" ON "package_versions" ("package_id", "version"); | |
| 52 | ||
| 53 | --> statement-breakpoint | |
| 54 | CREATE TABLE IF NOT EXISTS "package_tags" ( | |
| 55 | "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, | |
| 56 | "package_id" uuid NOT NULL, | |
| 57 | "tag" text NOT NULL, | |
| 58 | "version_id" uuid NOT NULL, | |
| 59 | "updated_at" timestamp DEFAULT now() NOT NULL, | |
| 60 | CONSTRAINT "package_tags_pkg_fk" FOREIGN KEY ("package_id") REFERENCES "packages"("id") ON DELETE cascade, | |
| 61 | CONSTRAINT "package_tags_version_fk" FOREIGN KEY ("version_id") REFERENCES "package_versions"("id") ON DELETE cascade | |
| 62 | ); | |
| 63 | ||
| 64 | --> statement-breakpoint | |
| 65 | CREATE UNIQUE INDEX IF NOT EXISTS "package_tags_pkg_tag" ON "package_tags" ("package_id", "tag"); |