1+ -- CreateEnum
2+ CREATE TYPE "WorkspaceType " AS ENUM (' USER' , ' TEAM' );
3+
4+ -- CreateEnum
5+ CREATE TYPE "MockServerAction " AS ENUM (' CREATED' , ' DELETED' , ' ACTIVATED' , ' DEACTIVATED' );
6+
7+ -- CreateTable
8+ CREATE TABLE "MockServer " (
9+ " id" TEXT NOT NULL ,
10+ " name" TEXT NOT NULL ,
11+ " subdomain" TEXT NOT NULL ,
12+ " creatorUid" TEXT ,
13+ " collectionID" TEXT NOT NULL ,
14+ " workspaceType" " WorkspaceType" NOT NULL ,
15+ " workspaceID" TEXT NOT NULL ,
16+ " delayInMs" INTEGER NOT NULL DEFAULT 0 ,
17+ " isPublic" BOOLEAN NOT NULL DEFAULT true,
18+ " isActive" BOOLEAN NOT NULL DEFAULT true,
19+ " hitCount" INTEGER NOT NULL DEFAULT 0 ,
20+ " lastHitAt" TIMESTAMPTZ (3 ),
21+ " createdOn" TIMESTAMPTZ (3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ,
22+ " updatedOn" TIMESTAMPTZ (3 ) NOT NULL ,
23+ " deletedAt" TIMESTAMPTZ (3 ),
24+
25+ CONSTRAINT " MockServer_pkey" PRIMARY KEY (" id" )
26+ );
27+
28+ -- CreateTable
29+ CREATE TABLE "MockServerLog " (
30+ " id" TEXT NOT NULL ,
31+ " mockServerID" TEXT NOT NULL ,
32+ " requestMethod" TEXT NOT NULL ,
33+ " requestPath" TEXT NOT NULL ,
34+ " requestHeaders" JSONB NOT NULL ,
35+ " requestBody" JSONB,
36+ " requestQuery" JSONB,
37+ " responseStatus" INTEGER NOT NULL ,
38+ " responseHeaders" JSONB NOT NULL ,
39+ " responseBody" JSONB,
40+ " responseTime" INTEGER NOT NULL ,
41+ " ipAddress" TEXT ,
42+ " userAgent" TEXT ,
43+ " executedAt" TIMESTAMPTZ (3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ,
44+
45+ CONSTRAINT " MockServerLog_pkey" PRIMARY KEY (" id" )
46+ );
47+
48+ -- CreateTable
49+ CREATE TABLE "MockServerActivity " (
50+ " id" TEXT NOT NULL ,
51+ " mockServerID" TEXT NOT NULL ,
52+ " action" " MockServerAction" NOT NULL ,
53+ " performedBy" TEXT ,
54+ " performedAt" TIMESTAMPTZ (3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ,
55+
56+ CONSTRAINT " MockServerActivity_pkey" PRIMARY KEY (" id" )
57+ );
58+
59+ -- CreateIndex
60+ CREATE UNIQUE INDEX "MockServer_subdomain_key " ON " MockServer" (" subdomain" );
61+
62+ -- CreateIndex
63+ CREATE INDEX "MockServerLog_mockServerID_idx " ON " MockServerLog" (" mockServerID" );
64+
65+ -- CreateIndex
66+ CREATE INDEX "MockServerLog_mockServerID_executedAt_idx " ON " MockServerLog" (" mockServerID" , " executedAt" );
67+
68+ -- CreateIndex
69+ CREATE INDEX "MockServerActivity_mockServerID_idx " ON " MockServerActivity" (" mockServerID" );
70+
71+ -- AddForeignKey
72+ ALTER TABLE " MockServer" ADD CONSTRAINT " MockServer_creatorUid_fkey" FOREIGN KEY (" creatorUid" ) REFERENCES " User" (" uid" ) ON DELETE SET NULL ON UPDATE CASCADE;
73+
74+ -- AddForeignKey
75+ ALTER TABLE " MockServerLog" ADD CONSTRAINT " MockServerLog_mockServerID_fkey" FOREIGN KEY (" mockServerID" ) REFERENCES " MockServer" (" id" ) ON DELETE CASCADE ON UPDATE CASCADE;
76+
77+ -- AddForeignKey
78+ ALTER TABLE " MockServerActivity" ADD CONSTRAINT " MockServerActivity_mockServerID_fkey" FOREIGN KEY (" mockServerID" ) REFERENCES " MockServer" (" id" ) ON DELETE CASCADE ON UPDATE CASCADE;
79+
80+
81+
82+ -- Add mockExamples column to UserRequest
83+ ALTER TABLE " UserRequest"
84+ ADD COLUMN " mockExamples" JSONB;
85+
86+ -- Add mockExamples column to TeamRequest
87+ ALTER TABLE " TeamRequest"
88+ ADD COLUMN " mockExamples" JSONB;
89+
90+ -- Create function to sync mock examples
91+ CREATE OR REPLACE FUNCTION sync_mock_examples ()
92+ RETURNS TRIGGER AS $$
93+ BEGIN
94+ NEW." mockExamples" := jsonb_build_object(
95+ ' examples' ,
96+ COALESCE(
97+ (
98+ SELECT jsonb_agg(
99+ jsonb_build_object(
100+ ' key' , key,
101+ ' name' , value- >> ' name' ,
102+ ' endpoint' , value- > ' originalRequest' - >> ' endpoint' ,
103+ ' method' , value- > ' originalRequest' - >> ' method' ,
104+ ' headers' , COALESCE(value- > ' originalRequest' - > ' headers' , ' []' ::jsonb),
105+ ' statusCode' , (value- >> ' code' )::int ,
106+ ' statusText' , value- >> ' status' ,
107+ ' responseBody' , value- >> ' body' ,
108+ ' responseHeaders' , COALESCE(value- > ' headers' , ' []' ::jsonb)
109+ )
110+ )
111+ FROM jsonb_each(NEW .request - > ' responses' ) AS responses(key, value)
112+ WHERE jsonb_typeof(NEW .request - > ' responses' ) = ' object'
113+ ),
114+ ' []' ::jsonb
115+ )
116+ );
117+
118+ RETURN NEW;
119+ END;
120+ $$ LANGUAGE plpgsql;
121+
122+ -- Create trigger for UserRequest
123+ CREATE TRIGGER trigger_sync_mock_examples_user_request
124+ BEFORE INSERT OR UPDATE OF request ON " UserRequest"
125+ FOR EACH ROW
126+ EXECUTE FUNCTION sync_mock_examples();
127+
128+ -- Create trigger for TeamRequest
129+ CREATE TRIGGER trigger_sync_mock_examples_team_request
130+ BEFORE INSERT OR UPDATE OF request ON " TeamRequest"
131+ FOR EACH ROW
132+ EXECUTE FUNCTION sync_mock_examples();
133+
134+ -- Backfill existing data for UserRequest
135+ UPDATE " UserRequest" SET request = request WHERE request IS NOT NULL ;
136+
137+ -- Backfill existing data for TeamRequest
138+ UPDATE " TeamRequest" SET request = request WHERE request IS NOT NULL ;
139+
140+ -- Add GIN indexes
141+ CREATE INDEX "idx_mock_examples_user_requests_gin " ON " UserRequest" USING GIN (" mockExamples" );
142+ CREATE INDEX "idx_mock_examples_team_requests_gin " ON " TeamRequest" USING GIN (" mockExamples" );
0 commit comments