From 881ddd1648ad2c10280ead41c1bc0dec583bd705 Mon Sep 17 00:00:00 2001 From: April Hall Date: Wed, 8 Jan 2025 17:44:20 -0500 Subject: [PATCH] feat: Setup Apache Cassandra --- bun.lockb | Bin 191367 -> 192824 bytes package.json | 8 ++------ src/lib/server/db/index.ts | 21 +++++++++++++++------ src/lib/websocketConfig.ts | 2 +- 4 files changed, 18 insertions(+), 13 deletions(-) diff --git a/bun.lockb b/bun.lockb index a0ea9c2c8f639d77aa9377cd327c1a92a5d02053..81cb291d1b8bdda93da0cd14831632c18a766a69 100755 GIT binary patch delta 33506 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 delta 32810 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 diff --git a/package.json b/package.json index 5285fc3..bba1ead 100644 --- a/package.json +++ b/package.json @@ -11,9 +11,7 @@ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", "format": "prettier --write .", - "lint": "prettier --check . && eslint .", - "db:migrate": "drizzle-kit generate --config drizzle.config.ts && drizzle-kit push --config drizzle.config.ts", - "db:studio": "drizzle-kit studio" + "lint": "prettier --check . && eslint ." }, "devDependencies": { "@eslint/compat": "^1.2.3", @@ -21,7 +19,6 @@ "@sveltejs/kit": "^2.0.0", "@sveltejs/vite-plugin-svelte": "^4.0.0", "autoprefixer": "^10.4.20", - "drizzle-kit": "^0.22.0", "eslint": "^9.7.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-svelte": "^2.36.0", @@ -38,10 +35,9 @@ }, "dependencies": { "@types/express": "^5.0.0", + "cassandra-driver": "^4.7.2", "daisyui": "^4.12.23", - "drizzle-orm": "^0.33.0", "express": "^4.21.2", - "postgres": "^3.4.4", "socket.io": "^4.8.1", "socket.io-client": "^4.8.1", "tsm": "^2.3.0" diff --git a/src/lib/server/db/index.ts b/src/lib/server/db/index.ts index 54e3632..010cd15 100644 --- a/src/lib/server/db/index.ts +++ b/src/lib/server/db/index.ts @@ -1,6 +1,15 @@ -import { drizzle } from 'drizzle-orm/postgres-js'; -import postgres from 'postgres'; -import { env } from '$env/dynamic/private'; -if (!env.DATABASE_URL) throw new Error('DATABASE_URL is not set'); -const client = postgres(env.DATABASE_URL); -export const db = drizzle(client); +import cassandra from 'cassandra-driver'; + +const client = new cassandra.Client({ + contactPoints: ['localhost'], + localDataCenter: 'datacenter1', + keyspace: 'users', +}); + +// Connect to Cassandra/ScyllaDB and create +// necessary tables, keyspaces, etc +await client.connect(); +await client.execute(`CREATE KEYSPACE IF NOT EXISTS users WITH REPLICATION = {'class': 'SimpleStrategy', 'replication_factor': 1};`); +await client.execute(`CREATE KEYSPACE IF NOT EXISTS channels WITH REPLICATION = {'class': 'SimpleStrategy', 'replication_factor': 1};`); + +export default client; diff --git a/src/lib/websocketConfig.ts b/src/lib/websocketConfig.ts index 6c4848f..b914f51 100644 --- a/src/lib/websocketConfig.ts +++ b/src/lib/websocketConfig.ts @@ -1,6 +1,6 @@ import { Server as SocketIOServer } from 'socket.io'; import type { HttpServer } from 'vite'; -import { type TypeMessage } from './'; +import client from './server/db/'; let io: SocketIOServer | undefined;