Skip to content

Commit 2b924e1

Browse files
committed
Add db-table-check endpoint for effect_patterns
1 parent 2981f63 commit 2b924e1

1 file changed

Lines changed: 54 additions & 0 deletions

File tree

  • packages/mcp-server/app/api/db-table-check
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/**
2+
* Database table check endpoint (Admin only)
3+
*
4+
* Attempts to query effect_patterns and returns error details if it fails.
5+
*/
6+
7+
import { createDatabase } from "@effect-patterns/toolkit";
8+
import { sql } from "drizzle-orm";
9+
import { Effect } from "effect";
10+
import { type NextRequest, NextResponse } from "next/server";
11+
import { validateAdminKey } from "../../../src/auth/adminAuth";
12+
import { runWithRuntime } from "../../../src/server/init";
13+
import { errorHandler } from "../../../src/server/errorHandler";
14+
15+
const handleDbTableCheck = Effect.fn("db-table-check")(function* (
16+
request: NextRequest
17+
) {
18+
yield* validateAdminKey(request);
19+
20+
const dbUrl = process.env.DATABASE_URL_OVERRIDE || process.env.DATABASE_URL;
21+
if (!dbUrl) {
22+
return yield* Effect.fail(
23+
new Error("DATABASE_URL not configured on server")
24+
);
25+
}
26+
27+
const result = yield* Effect.gen(function* () {
28+
const { db, close } = createDatabase(dbUrl);
29+
const count = yield* Effect.tryPromise(async () => {
30+
return await db.execute(sql`SELECT COUNT(*)::int as count FROM effect_patterns`);
31+
});
32+
yield* Effect.promise(() => close());
33+
return count;
34+
});
35+
36+
return {
37+
success: true,
38+
result,
39+
};
40+
});
41+
42+
export async function GET(request: NextRequest) {
43+
const result = await runWithRuntime(
44+
handleDbTableCheck(request).pipe(
45+
Effect.catchAll((error) => errorHandler(error))
46+
)
47+
);
48+
49+
if (result instanceof Response) {
50+
return result;
51+
}
52+
53+
return NextResponse.json(result, { status: 200 });
54+
}

0 commit comments

Comments
 (0)