feat: add flush db script
- commit
- 6ce47eb72d5cb9017eff10c68e89e9cd5b51ed9d
- author
- Kit · · 2025-02-13 15:10 UTC
- parent
- 31fa4a3
- signature
- SSH Unverified
SHA256:H91DFuEG4jpk5edzLA4aUKkpv4zv9Q339ipRmkph6TkThe key is unknown
3 files · +109 -1
M package.json +2 -1
| @@ -18,7 +18,8 @@ | |||
| 18 | 18 | "test:unit": "vitest", | |
| 19 | 19 | "test": "npm run test:unit -- --run", | |
| 20 | 20 | "db:generate": "npx drizzle-kit generate", | |
| 21 | - | "db:push": "npx drizzle-kit push" | |
| 21 | + | "db:push": "npx drizzle-kit push", | |
| 22 | + | "db:flush": "tsx utils/db-flush.ts" | |
| 22 | 23 | }, | |
| 23 | 24 | "devDependencies": { | |
| 24 | 25 | "@eslint/compat": "^1.2.6", | |
| @@ -18,7 +18,8 @@ | |||||
| 18 | "test:unit": "vitest", | 18 | "test:unit": "vitest", | ||
| 19 | "test": "npm run test:unit -- --run", | 19 | "test": "npm run test:unit -- --run", | ||
| 20 | "db:generate": "npx drizzle-kit generate", | 20 | "db:generate": "npx drizzle-kit generate", | ||
| 21 | - | "db:push": "npx drizzle-kit push" | 21 | + | "db:push": "npx drizzle-kit push", |
| 22 | + | "db:flush": "tsx utils/db-flush.ts" | |||
| 22 | }, | 23 | }, | ||
| 23 | "devDependencies": { | 24 | "devDependencies": { | ||
| 24 | "@eslint/compat": "^1.2.6", | 25 | "@eslint/compat": "^1.2.6", | ||
A src/lib/db/flush.ts +52 -0
| @@ -0,0 +1,52 @@ | |||
| 1 | + | import { createClient } from '@libsql/client'; | |
| 2 | + | import * as dotenv from 'dotenv'; | |
| 3 | + | ||
| 4 | + | // Load environment variables from .env file | |
| 5 | + | dotenv.config(); | |
| 6 | + | ||
| 7 | + | const { TURSO_DATABASE_URL, TURSO_AUTH_TOKEN } = process.env; | |
| 8 | + | ||
| 9 | + | if (!TURSO_DATABASE_URL || !TURSO_AUTH_TOKEN) { | |
| 10 | + | throw new Error('Missing required environment variables TURSO_DATABASE_URL and/or TURSO_AUTH_TOKEN'); | |
| 11 | + | } | |
| 12 | + | ||
| 13 | + | async function flushDatabase() { | |
| 14 | + | console.debug('Starting database content flush...'); | |
| 15 | + | ||
| 16 | + | const client = createClient({ | |
| 17 | + | url: TURSO_DATABASE_URL as string, | |
| 18 | + | authToken: TURSO_AUTH_TOKEN as string | |
| 19 | + | }); | |
| 20 | + | ||
| 21 | + | try { | |
| 22 | + | // Clear tables in correct order to respect foreign key constraints | |
| 23 | + | console.debug('Clearing messages table...'); | |
| 24 | + | await client.execute('DELETE FROM messages'); | |
| 25 | + | ||
| 26 | + | console.debug('Clearing sessions table...'); | |
| 27 | + | await client.execute('DELETE FROM sessions'); | |
| 28 | + | ||
| 29 | + | console.debug('Clearing chat rooms table...'); | |
| 30 | + | await client.execute('DELETE FROM chat_rooms'); | |
| 31 | + | ||
| 32 | + | console.debug('Clearing users table...'); | |
| 33 | + | await client.execute('DELETE FROM users'); | |
| 34 | + | ||
| 35 | + | console.debug('Database content flush completed successfully'); | |
| 36 | + | } catch (error) { | |
| 37 | + | console.error('Error flushing database content:', error); | |
| 38 | + | throw error; | |
| 39 | + | } finally { | |
| 40 | + | await client.close(); | |
| 41 | + | } | |
| 42 | + | } | |
| 43 | + | ||
| 44 | + | // Execute if this file is run directly | |
| 45 | + | if (process.argv[1] === import.meta.url) { | |
| 46 | + | flushDatabase() | |
| 47 | + | .then(() => process.exit(0)) | |
| 48 | + | .catch((error) => { | |
| 49 | + | console.error('Failed to flush database content:', error); | |
| 50 | + | process.exit(1); | |
| 51 | + | }); | |
| 52 | + | } ⏎̸ | |
| @@ -0,0 +1,52 @@ | |||||
| 1 | + | import { createClient } from '@libsql/client'; | |||
| 2 | + | import * as dotenv from 'dotenv'; | |||
| 3 | + | ||||
| 4 | + | // Load environment variables from .env file | |||
| 5 | + | dotenv.config(); | |||
| 6 | + | ||||
| 7 | + | const { TURSO_DATABASE_URL, TURSO_AUTH_TOKEN } = process.env; | |||
| 8 | + | ||||
| 9 | + | if (!TURSO_DATABASE_URL || !TURSO_AUTH_TOKEN) { | |||
| 10 | + | throw new Error('Missing required environment variables TURSO_DATABASE_URL and/or TURSO_AUTH_TOKEN'); | |||
| 11 | + | } | |||
| 12 | + | ||||
| 13 | + | async function flushDatabase() { | |||
| 14 | + | console.debug('Starting database content flush...'); | |||
| 15 | + | ||||
| 16 | + | const client = createClient({ | |||
| 17 | + | url: TURSO_DATABASE_URL as string, | |||
| 18 | + | authToken: TURSO_AUTH_TOKEN as string | |||
| 19 | + | }); | |||
| 20 | + | ||||
| 21 | + | try { | |||
| 22 | + | // Clear tables in correct order to respect foreign key constraints | |||
| 23 | + | console.debug('Clearing messages table...'); | |||
| 24 | + | await client.execute('DELETE FROM messages'); | |||
| 25 | + | ||||
| 26 | + | console.debug('Clearing sessions table...'); | |||
| 27 | + | await client.execute('DELETE FROM sessions'); | |||
| 28 | + | ||||
| 29 | + | console.debug('Clearing chat rooms table...'); | |||
| 30 | + | await client.execute('DELETE FROM chat_rooms'); | |||
| 31 | + | ||||
| 32 | + | console.debug('Clearing users table...'); | |||
| 33 | + | await client.execute('DELETE FROM users'); | |||
| 34 | + | ||||
| 35 | + | console.debug('Database content flush completed successfully'); | |||
| 36 | + | } catch (error) { | |||
| 37 | + | console.error('Error flushing database content:', error); | |||
| 38 | + | throw error; | |||
| 39 | + | } finally { | |||
| 40 | + | await client.close(); | |||
| 41 | + | } | |||
| 42 | + | } | |||
| 43 | + | ||||
| 44 | + | // Execute if this file is run directly | |||
| 45 | + | if (process.argv[1] === import.meta.url) { | |||
| 46 | + | flushDatabase() | |||
| 47 | + | .then(() => process.exit(0)) | |||
| 48 | + | .catch((error) => { | |||
| 49 | + | console.error('Failed to flush database content:', error); | |||
| 50 | + | process.exit(1); | |||
| 51 | + | }); | |||
| 52 | + | } ⏎̸ | |||
A utils/db-flush.ts +55 -0
| @@ -0,0 +1,55 @@ | |||
| 1 | + | import { createClient } from '@libsql/client'; | |
| 2 | + | import * as dotenv from 'dotenv'; | |
| 3 | + | ||
| 4 | + | // Load environment variables from .env file | |
| 5 | + | dotenv.config(); | |
| 6 | + | ||
| 7 | + | const { TURSO_DATABASE_URL, TURSO_AUTH_TOKEN } = process.env; | |
| 8 | + | ||
| 9 | + | if (!TURSO_DATABASE_URL || !TURSO_AUTH_TOKEN) { | |
| 10 | + | throw new Error('Missing required environment variables TURSO_DATABASE_URL and/or TURSO_AUTH_TOKEN'); | |
| 11 | + | } | |
| 12 | + | ||
| 13 | + | async function flushDatabase() { | |
| 14 | + | console.log('Starting database content flush...'); | |
| 15 | + | ||
| 16 | + | const client = createClient({ | |
| 17 | + | url: TURSO_DATABASE_URL as string, | |
| 18 | + | authToken: TURSO_AUTH_TOKEN as string | |
| 19 | + | }); | |
| 20 | + | ||
| 21 | + | try { | |
| 22 | + | // Clear tables in correct order to respect foreign key constraints | |
| 23 | + | console.log('Clearing messages table...'); | |
| 24 | + | await client.execute('DELETE FROM messages'); | |
| 25 | + | ||
| 26 | + | console.log('Clearing sessions table...'); | |
| 27 | + | await client.execute('DELETE FROM sessions'); | |
| 28 | + | ||
| 29 | + | console.log('Clearing chat rooms table...'); | |
| 30 | + | await client.execute('DELETE FROM chat_rooms'); | |
| 31 | + | ||
| 32 | + | console.log('Clearing users table...'); | |
| 33 | + | await client.execute('DELETE FROM users'); | |
| 34 | + | ||
| 35 | + | console.log('Database content flush completed successfully'); | |
| 36 | + | } catch (error) { | |
| 37 | + | console.error('Error flushing database content:', error); | |
| 38 | + | throw error; | |
| 39 | + | } finally { | |
| 40 | + | await client.close(); | |
| 41 | + | } | |
| 42 | + | } | |
| 43 | + | ||
| 44 | + | // Execute if this file is run directly | |
| 45 | + | if (new URL(import.meta.url).pathname === process.argv[1]) { | |
| 46 | + | flushDatabase() | |
| 47 | + | .then(() => { | |
| 48 | + | console.debug('[db-flush] Exiting process with code 0'); | |
| 49 | + | process.exit(0); | |
| 50 | + | }) | |
| 51 | + | .catch((error) => { | |
| 52 | + | console.error('[db-flush] Failed to flush database content:', error); | |
| 53 | + | process.exit(1); | |
| 54 | + | }); | |
| 55 | + | } ⏎̸ | |
| @@ -0,0 +1,55 @@ | |||||
| 1 | + | import { createClient } from '@libsql/client'; | |||
| 2 | + | import * as dotenv from 'dotenv'; | |||
| 3 | + | ||||
| 4 | + | // Load environment variables from .env file | |||
| 5 | + | dotenv.config(); | |||
| 6 | + | ||||
| 7 | + | const { TURSO_DATABASE_URL, TURSO_AUTH_TOKEN } = process.env; | |||
| 8 | + | ||||
| 9 | + | if (!TURSO_DATABASE_URL || !TURSO_AUTH_TOKEN) { | |||
| 10 | + | throw new Error('Missing required environment variables TURSO_DATABASE_URL and/or TURSO_AUTH_TOKEN'); | |||
| 11 | + | } | |||
| 12 | + | ||||
| 13 | + | async function flushDatabase() { | |||
| 14 | + | console.log('Starting database content flush...'); | |||
| 15 | + | ||||
| 16 | + | const client = createClient({ | |||
| 17 | + | url: TURSO_DATABASE_URL as string, | |||
| 18 | + | authToken: TURSO_AUTH_TOKEN as string | |||
| 19 | + | }); | |||
| 20 | + | ||||
| 21 | + | try { | |||
| 22 | + | // Clear tables in correct order to respect foreign key constraints | |||
| 23 | + | console.log('Clearing messages table...'); | |||
| 24 | + | await client.execute('DELETE FROM messages'); | |||
| 25 | + | ||||
| 26 | + | console.log('Clearing sessions table...'); | |||
| 27 | + | await client.execute('DELETE FROM sessions'); | |||
| 28 | + | ||||
| 29 | + | console.log('Clearing chat rooms table...'); | |||
| 30 | + | await client.execute('DELETE FROM chat_rooms'); | |||
| 31 | + | ||||
| 32 | + | console.log('Clearing users table...'); | |||
| 33 | + | await client.execute('DELETE FROM users'); | |||
| 34 | + | ||||
| 35 | + | console.log('Database content flush completed successfully'); | |||
| 36 | + | } catch (error) { | |||
| 37 | + | console.error('Error flushing database content:', error); | |||
| 38 | + | throw error; | |||
| 39 | + | } finally { | |||
| 40 | + | await client.close(); | |||
| 41 | + | } | |||
| 42 | + | } | |||
| 43 | + | ||||
| 44 | + | // Execute if this file is run directly | |||
| 45 | + | if (new URL(import.meta.url).pathname === process.argv[1]) { | |||
| 46 | + | flushDatabase() | |||
| 47 | + | .then(() => { | |||
| 48 | + | console.debug('[db-flush] Exiting process with code 0'); | |||
| 49 | + | process.exit(0); | |||
| 50 | + | }) | |||
| 51 | + | .catch((error) => { | |||
| 52 | + | console.error('[db-flush] Failed to flush database content:', error); | |||
| 53 | + | process.exit(1); | |||
| 54 | + | }); | |||
| 55 | + | } ⏎̸ | |||