|
4 | 4 |
|
5 | 5 | import { createDatabase } from "@effect-patterns/toolkit" |
6 | 6 | import { sql } from "drizzle-orm" |
7 | | -import { NextResponse } from "next/server" |
| 7 | +import { Effect } from "effect" |
| 8 | +import { type NextRequest } from "next/server" |
| 9 | +import { createSimpleHandler } from "../../../src/server/routeHandler" |
8 | 10 |
|
9 | | -export async function POST() { |
10 | | - try { |
11 | | - const dbUrl = process.env.DATABASE_URL |
12 | | - if (!dbUrl) { |
13 | | - return NextResponse.json({ |
14 | | - success: false, |
15 | | - error: "DATABASE_URL not set" |
16 | | - }, { status: 500 }) |
17 | | - } |
| 11 | +const handleFinalReset = (_request: NextRequest) => Effect.gen(function* () { |
| 12 | + const dbUrl = process.env.DATABASE_URL |
| 13 | + if (!dbUrl) { |
| 14 | + return yield* Effect.fail(new Error("DATABASE_URL not set")) |
| 15 | + } |
18 | 16 |
|
| 17 | + yield* Effect.tryPromise(async () => { |
19 | 18 | const { db, close } = createDatabase(dbUrl) |
| 19 | + try { |
| 20 | + // Drop existing tables |
| 21 | + await db.execute(sql`DROP TABLE IF EXISTS effect_patterns CASCADE`) |
| 22 | + await db.execute(sql`DROP TABLE IF EXISTS application_patterns CASCADE`) |
20 | 23 |
|
21 | | - // Drop existing tables |
22 | | - await db.execute(sql`DROP TABLE IF EXISTS effect_patterns CASCADE`) |
23 | | - await db.execute(sql`DROP TABLE IF EXISTS application_patterns CASCADE`) |
24 | | - |
25 | | - // Create effect_patterns table with individual statements |
26 | | - await db.execute(sql`CREATE TABLE effect_patterns ( |
27 | | - id UUID PRIMARY KEY, |
28 | | - slug VARCHAR(255) NOT NULL UNIQUE, |
29 | | - title VARCHAR(500) NOT NULL, |
30 | | - summary TEXT NOT NULL, |
31 | | - skill_level VARCHAR(50) NOT NULL, |
32 | | - category VARCHAR(100), |
33 | | - difficulty VARCHAR(50), |
34 | | - tags JSONB DEFAULT '[]', |
35 | | - examples JSONB DEFAULT '[]', |
36 | | - use_cases JSONB DEFAULT '[]', |
37 | | - rule JSONB, |
38 | | - content TEXT, |
39 | | - author VARCHAR(255), |
40 | | - lesson_order INTEGER, |
41 | | - application_pattern_id UUID REFERENCES application_patterns(id) ON DELETE SET NULL, |
42 | | - validated BOOLEAN DEFAULT false NOT NULL, |
43 | | - validated_at TIMESTAMP, |
44 | | - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
45 | | - updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP |
46 | | - )`) |
| 24 | + // Create effect_patterns table with individual statements |
| 25 | + await db.execute(sql`CREATE TABLE effect_patterns ( |
| 26 | + id UUID PRIMARY KEY, |
| 27 | + slug VARCHAR(255) NOT NULL UNIQUE, |
| 28 | + title VARCHAR(500) NOT NULL, |
| 29 | + summary TEXT NOT NULL, |
| 30 | + skill_level VARCHAR(50) NOT NULL, |
| 31 | + category VARCHAR(100), |
| 32 | + difficulty VARCHAR(50), |
| 33 | + tags JSONB DEFAULT '[]', |
| 34 | + examples JSONB DEFAULT '[]', |
| 35 | + use_cases JSONB DEFAULT '[]', |
| 36 | + rule JSONB, |
| 37 | + content TEXT, |
| 38 | + author VARCHAR(255), |
| 39 | + lesson_order INTEGER, |
| 40 | + application_pattern_id UUID REFERENCES application_patterns(id) ON DELETE SET NULL, |
| 41 | + validated BOOLEAN DEFAULT false NOT NULL, |
| 42 | + validated_at TIMESTAMP, |
| 43 | + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
| 44 | + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP |
| 45 | + )`) |
47 | 46 |
|
48 | | - // Create application_patterns table with individual statements |
49 | | - await db.execute(sql`CREATE TABLE application_patterns ( |
50 | | - id UUID PRIMARY KEY, |
51 | | - slug VARCHAR(255) NOT NULL UNIQUE, |
52 | | - name VARCHAR(255) NOT NULL, |
53 | | - description TEXT NOT NULL, |
54 | | - learning_order INTEGER NOT NULL, |
55 | | - effect_module VARCHAR(100), |
56 | | - sub_patterns JSONB DEFAULT '[]', |
57 | | - validated BOOLEAN DEFAULT false NOT NULL, |
58 | | - validated_at TIMESTAMP, |
59 | | - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
60 | | - updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP |
61 | | - )`) |
62 | | - |
63 | | - await close() |
| 47 | + // Create application_patterns table with individual statements |
| 48 | + await db.execute(sql`CREATE TABLE application_patterns ( |
| 49 | + id UUID PRIMARY KEY, |
| 50 | + slug VARCHAR(255) NOT NULL UNIQUE, |
| 51 | + name VARCHAR(255) NOT NULL, |
| 52 | + description TEXT NOT NULL, |
| 53 | + learning_order INTEGER NOT NULL, |
| 54 | + effect_module VARCHAR(100), |
| 55 | + sub_patterns JSONB DEFAULT '[]', |
| 56 | + validated BOOLEAN DEFAULT false NOT NULL, |
| 57 | + validated_at TIMESTAMP, |
| 58 | + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
| 59 | + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP |
| 60 | + )`) |
| 61 | + } finally { |
| 62 | + await close() |
| 63 | + } |
| 64 | + }) |
64 | 65 |
|
65 | | - return NextResponse.json({ |
66 | | - success: true, |
67 | | - message: "Database reset completed with full schema", |
68 | | - tablesRecreated: 2 |
69 | | - }) |
70 | | - } catch (error) { |
71 | | - console.error("Reset error:", error) |
72 | | - const errorMessage = error instanceof Error ? error.message : String(error) |
73 | | - return NextResponse.json( |
74 | | - { |
75 | | - success: false, |
76 | | - error: "Database reset failed", |
77 | | - details: errorMessage |
78 | | - }, |
79 | | - { status: 500 } |
80 | | - ) |
| 66 | + return { |
| 67 | + success: true, |
| 68 | + message: "Database reset completed with full schema", |
| 69 | + tablesRecreated: 2 |
81 | 70 | } |
82 | | -} |
| 71 | +}) |
| 72 | + |
| 73 | +export const POST = createSimpleHandler(handleFinalReset, { |
| 74 | + requireAuth: false, |
| 75 | + requireAdmin: true, |
| 76 | +}) |
0 commit comments