feat(market): migrations and schema updates

This commit is contained in:
Nicholas Tindle
2024-07-31 14:19:40 -05:00
parent 8e7ecc25c7
commit d490863526
3 changed files with 82 additions and 7 deletions

View File

@@ -0,0 +1,61 @@
-- CreateTable
CREATE TABLE "Agents" (
"id" UUID NOT NULL DEFAULT gen_random_uuid(),
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
"version" INTEGER NOT NULL DEFAULT 1,
"name" TEXT,
"description" TEXT,
"author" TEXT,
"keywords" TEXT[],
"categories" TEXT[],
"search" tsvector DEFAULT ''::tsvector,
"graph" JSONB NOT NULL,
CONSTRAINT "Agents_pkey" PRIMARY KEY ("id","version")
);
-- CreateTable
CREATE TABLE "AnalyticsTracker" (
"id" UUID NOT NULL DEFAULT gen_random_uuid(),
"agentId" UUID NOT NULL,
"views" INTEGER NOT NULL,
"downloads" INTEGER NOT NULL
);
-- CreateIndex
CREATE UNIQUE INDEX "Agents_id_key" ON "Agents"("id");
-- CreateIndex
CREATE UNIQUE INDEX "AnalyticsTracker_id_key" ON "AnalyticsTracker"("id");
-- AddForeignKey
ALTER TABLE "AnalyticsTracker" ADD CONSTRAINT "AnalyticsTracker_agentId_fkey" FOREIGN KEY ("agentId") REFERENCES "Agents"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- Add trigger to update the search column with the tsvector of the agent
-- Function to be invoked by trigger
CREATE OR REPLACE FUNCTION update_tsvector_column() RETURNS TRIGGER AS $$
BEGIN
NEW.search := to_tsvector('english', COALESCE(NEW.description, '')|| ' ' ||COALESCE(NEW.name, '')|| ' ' ||COALESCE(NEW.author, ''));
RETURN NEW;
END;
$$ LANGUAGE plpgsql SECURITY definer SET search_path = public, pg_temp;
-- Trigger that keeps the TSVECTOR up to date
DROP TRIGGER IF EXISTS "update_tsvector" ON "Agents";
CREATE TRIGGER "update_tsvector"
BEFORE INSERT OR UPDATE ON "Agents"
FOR EACH ROW
EXECUTE FUNCTION update_tsvector_column ();

View File

@@ -0,0 +1,3 @@
# Please do not edit this file manually
# It should be added in your version-control system (i.e. Git)
provider = "postgresql"

View File

@@ -4,13 +4,15 @@ datasource db {
}
generator client {
provider = "prisma-client-py"
recursive_type_depth = 5
interface = "asyncio"
provider = "prisma-client-py"
recursive_type_depth = 5
interface = "asyncio"
previewFeatures = ["fullTextSearch"]
partial_type_generator = "market/utils/partial_types.py"
}
model Agents {
id String @default(uuid())
id String @unique @default(dbgenerated("gen_random_uuid()")) @db.Uuid
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@ -22,9 +24,18 @@ model Agents {
keywords String[]
categories String[]
search Unsupported("tsvector")? @default(dbgenerated("''::tsvector"))
graph Json
graph Json
AnalyticsTracker AnalyticsTracker[]
@@id(name: "graphVersionId", [id, version])
}
}
model AnalyticsTracker {
id String @unique @default(dbgenerated("gen_random_uuid()")) @db.Uuid
agentId String @db.Uuid
agent Agents @relation(fields: [agentId], references: [id])
views Int
downloads Int
}