feat: Store messages from the master channel in the DB
This commit is contained in:
		
							parent
							
								
									f69658833c
								
							
						
					
					
						commit
						b924590746
					
				| @ -40,6 +40,7 @@ | |||||||
|     "express": "^4.21.2", |     "express": "^4.21.2", | ||||||
|     "socket.io": "^4.8.1", |     "socket.io": "^4.8.1", | ||||||
|     "socket.io-client": "^4.8.1", |     "socket.io-client": "^4.8.1", | ||||||
|     "tsm": "^2.3.0" |     "tsm": "^2.3.0", | ||||||
|  |     "uuid": "^11.0.4" | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,5 +1,26 @@ | |||||||
| import cassandra from 'cassandra-driver'; | import cassandra from 'cassandra-driver'; | ||||||
| 
 | 
 | ||||||
|  | async function createChannel(client: cassandra.Client, channelName: string) { | ||||||
|  |   await client.execute(` | ||||||
|  |     CREATE TABLE IF NOT EXISTS channels.channel_${channelName} ( | ||||||
|  |         id UUID PRIMARY KEY, | ||||||
|  |         message_content TEXT, | ||||||
|  |         timestamp TIMESTAMP, | ||||||
|  |         sender UUID | ||||||
|  |     );`)
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | async function storeMessage( | ||||||
|  |   client: cassandra.Client, | ||||||
|  |   channelName: string, | ||||||
|  |   content: string, | ||||||
|  |   sender: string, | ||||||
|  |   id: string) { | ||||||
|  |   const now = new Date(); | ||||||
|  |   await client.execute(`INSERT INTO channels.channel_${channelName} (id, message_content, timestamp, sender)
 | ||||||
|  |                VALUES (${id}, '${content}', ${now.getTime()}, ${sender})`)
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
| const client = new cassandra.Client({ | const client = new cassandra.Client({ | ||||||
|   contactPoints: ['localhost'], |   contactPoints: ['localhost'], | ||||||
|   localDataCenter: 'datacenter1', |   localDataCenter: 'datacenter1', | ||||||
| @ -11,4 +32,4 @@ 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 users WITH REPLICATION = {'class': 'SimpleStrategy', 'replication_factor': 1};`); | ||||||
| await client.execute(`CREATE KEYSPACE IF NOT EXISTS channels 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; | export { client, createChannel, storeMessage }; | ||||||
| @ -1,6 +1,7 @@ | |||||||
| import { Server as SocketIOServer } from 'socket.io'; | import { Server as SocketIOServer } from 'socket.io'; | ||||||
| import type { HttpServer } from 'vite'; | import type { HttpServer } from 'vite'; | ||||||
| import client from './server/db/'; | import { client, createChannel, storeMessage } from './server/db/'; | ||||||
|  | import { v4 as uuidv4 } from 'uuid'; | ||||||
| 
 | 
 | ||||||
| let io: SocketIOServer | undefined; | let io: SocketIOServer | undefined; | ||||||
| 
 | 
 | ||||||
| @ -9,13 +10,15 @@ export function startupSocketIOServer(httpServer: HttpServer | null) { | |||||||
|   console.log('[ws:kit] setup'); |   console.log('[ws:kit] setup'); | ||||||
|   io = new SocketIOServer(httpServer); |   io = new SocketIOServer(httpServer); | ||||||
| 
 | 
 | ||||||
|   io.on('connection', (socket) => { |   io.on('connection', async (socket) => { | ||||||
|     // Runs on client connect
 |     // Runs on client connect
 | ||||||
|     console.log(`[ws:kit] client connected (${socket.id})`); |     console.log(`[ws:kit] client connected (${socket.id})`); | ||||||
| 
 |  | ||||||
|     // Runs on message receive
 |     // Runs on message receive
 | ||||||
|     socket.on('message', (msg) => { |     socket.on('message', async (msg) => { | ||||||
|       console.log(`[ws:kit] message from ${socket.id}: ${msg}`); |       console.log(`[ws:kit] message from ${socket.id}: ${msg}`); | ||||||
|  |       // Store the message in the database
 | ||||||
|  |       await createChannel(client, '000'); | ||||||
|  |       await storeMessage(client, '000', msg, uuidv4(), uuidv4()); | ||||||
|       io!.emit('message', { |       io!.emit('message', { | ||||||
|         user: socket.id, |         user: socket.id, | ||||||
|         message: msg, |         message: msg, | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user