Skip to content

Commit

Permalink
add room persistence
Browse files Browse the repository at this point in the history
  • Loading branch information
dankoster committed Oct 30, 2024
1 parent 8bc5fa6 commit 444fe32
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 4 deletions.
10 changes: 9 additions & 1 deletion server/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -99,9 +99,12 @@ const updateFunctionByUUID = new Map<string, {
}>()

//server is starting up... get rooms list
const roomByUUID = new Map<string, Room>()
const roomByUUID = db.getRoomsByUUID() ?? new Map<string, Room>()
const connectionByUUID = db.getConnectionsByUUID() ?? new Map<string, Connection>()

console.log('got rooms',roomByUUID)
console.log('got connections', connectionByUUID)

export function validateConnectionByUUID(uuid: string) {
return connectionByUUID.has(uuid)
}
Expand Down Expand Up @@ -178,6 +181,7 @@ function deleteRoom(room: Room) {
}
});

db.deleteRoom(room)
roomByUUID.delete(room.id)
notifyAllConnections(sseEvent.delete_room, room)
}
Expand Down Expand Up @@ -264,6 +268,7 @@ api.post(`/${apiRoute.room}`, async (ctx) => {
}

con.roomId = room.id
db.persistRoom(room)
roomByUUID.set(room.id, room)

//TODO: persist room?
Expand Down Expand Up @@ -336,6 +341,9 @@ api.post(`/${apiRoute.clear}/:key`, async (ctx) => {
console.log("CLEAR", oldData, roomByUUID)
ctx.response.body = oldData

roomByUUID.forEach(room => db.deleteRoom(room))
connectionByUUID.forEach((con, uuid) => db.deleteConnection(uuid))

//reinit with empty everything
connectionByUUID.clear()
roomByUUID.clear()
Expand Down
37 changes: 34 additions & 3 deletions server/db.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Database } from "jsr:@db/sqlite";
import { Connection, type Identity } from "./api.ts";
import { assertEquals } from "jsr:@std/assert";
import type { Connection, Identity, Room } from "./api.ts";

//const db = new Database("test.db");

Expand Down Expand Up @@ -36,7 +36,19 @@ createTableIdentity.run()
createTableRoom.run()
createTableConnection.run()

const upsertRoom = db.prepare(`
INSERT
INTO room ( id, ownerId )
VALUES ( :id, :ownerId )
ON CONFLICT(id)
DO UPDATE SET
ownerId = excluded.ownerId
RETURNING *;
`)

const deleteConnectionByUUID = db.prepare(`DELETE FROM connection WHERE uuid = :uuid`)
const deleteRoomByIds = db.prepare(`DELETE FROM room WHERE id = :id AND ownerId = :ownerId;`)
const selectRooms = db.prepare(`SELECT * FROM room;`)

const upsertConnection = db.prepare(`
INSERT
Expand Down Expand Up @@ -66,15 +78,27 @@ const upsertIdentity = db.prepare(`INSERT
RETURNING *;`
)

const selectConnections = db.prepare(`SELECT * FROM connection`)
const selectIdentityById = db.prepare(`SELECT * FROM identity WHERE id = :id`)
const selectConnections = db.prepare(`SELECT * FROM connection;`)
const selectIdentityById = db.prepare(`SELECT * FROM identity WHERE id = :id;`)
const selectIdentityBySource = db.prepare(
`SELECT *
FROM identity
WHERE source = :source
AND source_id = :source_id;`
)

export function persistRoom(room: Room) {
return upsertRoom.get({...room})
}

export function deleteRoom(room: Room) {
return deleteRoomByIds.get({...room})
}

export function deleteConnection(uuid: string) {
return deleteConnectionByUUID.get({uuid})
}

export function persistConnection(uuid: string, con: Connection) {

let idResult: Identity | undefined = undefined
Expand Down Expand Up @@ -122,6 +146,13 @@ export function getConnectionsByUUID() {
return result
}

export function getRoomsByUUID() {
const rooms = selectRooms.all()
const result = new Map<string, Room>()
rooms.forEach(r => result.set(r.id, r as Room))
return result
}

function removeNullFields(obj: any) {
for (const prop in obj) {
if (obj[prop] == null)
Expand Down

1 comment on commit 444fe32

@deno-deploy
Copy link

@deno-deploy deno-deploy bot commented on 444fe32 Oct 30, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Failed to deploy:

UNCAUGHT_EXCEPTION

Error: Failed to load SQLite3 Dynamic Library
    at https://jsr.io/@db/sqlite/0.12.0/src/ffi.ts:633:9

Please sign in to comment.