chat WIP
This commit is contained in:
22
server/modules/chat/index.ts
Normal file
22
server/modules/chat/index.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
import client from '../../prisma/client.ts'
|
||||
|
||||
export async function chatInit() {
|
||||
const existing = client.chatChannel.findFirst({
|
||||
where: {
|
||||
id: 0,
|
||||
},
|
||||
})
|
||||
|
||||
if (!existing) {
|
||||
await client.chatChannel.create({
|
||||
create: {
|
||||
id: 0,
|
||||
name: 'Main channel',
|
||||
},
|
||||
update: null,
|
||||
where: {
|
||||
id: 0,
|
||||
},
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
Warnings:
|
||||
|
||||
- You are about to drop the column `volumes` on the `UserPreferences` table. All the data in the column will be lost.
|
||||
|
||||
*/
|
||||
-- RedefineTables
|
||||
PRAGMA defer_foreign_keys=ON;
|
||||
PRAGMA foreign_keys=OFF;
|
||||
CREATE TABLE "new_UserPreferences" (
|
||||
"userId" TEXT NOT NULL PRIMARY KEY,
|
||||
"toggleInputHotkey" TEXT DEFAULT '',
|
||||
"toggleOutputHotkey" TEXT DEFAULT '',
|
||||
CONSTRAINT "UserPreferences_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
||||
);
|
||||
INSERT INTO "new_UserPreferences" ("toggleInputHotkey", "toggleOutputHotkey", "userId") SELECT "toggleInputHotkey", "toggleOutputHotkey", "userId" FROM "UserPreferences";
|
||||
DROP TABLE "UserPreferences";
|
||||
ALTER TABLE "new_UserPreferences" RENAME TO "UserPreferences";
|
||||
PRAGMA foreign_keys=ON;
|
||||
PRAGMA defer_foreign_keys=OFF;
|
||||
18
server/prisma/migrations/20251226190516_chat/migration.sql
Normal file
18
server/prisma/migrations/20251226190516_chat/migration.sql
Normal file
@@ -0,0 +1,18 @@
|
||||
-- CreateTable
|
||||
CREATE TABLE "ChatMessage" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"userId" TEXT NOT NULL,
|
||||
"channelId" TEXT NOT NULL,
|
||||
"content" TEXT NOT NULL DEFAULT '',
|
||||
CONSTRAINT "ChatMessage_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
||||
CONSTRAINT "ChatMessage_channelId_fkey" FOREIGN KEY ("channelId") REFERENCES "ChatChannel" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "ChatChannel" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"name" TEXT NOT NULL
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "ChatChannel_name_key" ON "ChatChannel"("name");
|
||||
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
Warnings:
|
||||
|
||||
- The primary key for the `ChatChannel` table will be changed. If it partially fails, the table could be left without primary key constraint.
|
||||
- You are about to alter the column `id` on the `ChatChannel` table. The data in that column could be lost. The data in that column will be cast from `String` to `Int`.
|
||||
- You are about to alter the column `channelId` on the `ChatMessage` table. The data in that column could be lost. The data in that column will be cast from `String` to `Int`.
|
||||
- Added the required column `createdAt` to the `ChatMessage` table without a default value. This is not possible if the table is not empty.
|
||||
|
||||
*/
|
||||
-- RedefineTables
|
||||
PRAGMA defer_foreign_keys=ON;
|
||||
PRAGMA foreign_keys=OFF;
|
||||
CREATE TABLE "new_ChatChannel" (
|
||||
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
"name" TEXT NOT NULL
|
||||
);
|
||||
INSERT INTO "new_ChatChannel" ("id", "name") SELECT "id", "name" FROM "ChatChannel";
|
||||
DROP TABLE "ChatChannel";
|
||||
ALTER TABLE "new_ChatChannel" RENAME TO "ChatChannel";
|
||||
CREATE UNIQUE INDEX "ChatChannel_name_key" ON "ChatChannel"("name");
|
||||
CREATE TABLE "new_ChatMessage" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"userId" TEXT NOT NULL,
|
||||
"channelId" INTEGER NOT NULL,
|
||||
"content" TEXT NOT NULL DEFAULT '',
|
||||
"createdAt" DATETIME NOT NULL,
|
||||
CONSTRAINT "ChatMessage_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
||||
CONSTRAINT "ChatMessage_channelId_fkey" FOREIGN KEY ("channelId") REFERENCES "ChatChannel" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
||||
);
|
||||
INSERT INTO "new_ChatMessage" ("channelId", "content", "id", "userId") SELECT "channelId", "content", "id", "userId" FROM "ChatMessage";
|
||||
DROP TABLE "ChatMessage";
|
||||
ALTER TABLE "new_ChatMessage" RENAME TO "ChatMessage";
|
||||
PRAGMA foreign_keys=ON;
|
||||
PRAGMA defer_foreign_keys=OFF;
|
||||
@@ -0,0 +1,17 @@
|
||||
-- RedefineTables
|
||||
PRAGMA defer_foreign_keys=ON;
|
||||
PRAGMA foreign_keys=OFF;
|
||||
CREATE TABLE "new_ChatMessage" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"userId" TEXT NOT NULL,
|
||||
"channelId" INTEGER NOT NULL,
|
||||
"content" TEXT NOT NULL,
|
||||
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT "ChatMessage_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
||||
CONSTRAINT "ChatMessage_channelId_fkey" FOREIGN KEY ("channelId") REFERENCES "ChatChannel" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
||||
);
|
||||
INSERT INTO "new_ChatMessage" ("channelId", "content", "createdAt", "id", "userId") SELECT "channelId", "content", "createdAt", "id", "userId" FROM "ChatMessage";
|
||||
DROP TABLE "ChatMessage";
|
||||
ALTER TABLE "new_ChatMessage" RENAME TO "ChatMessage";
|
||||
PRAGMA foreign_keys=ON;
|
||||
PRAGMA defer_foreign_keys=OFF;
|
||||
@@ -18,6 +18,8 @@ model User {
|
||||
|
||||
Session Session[]
|
||||
UserPreferences UserPreferences?
|
||||
|
||||
ChatMessage ChatMessage[]
|
||||
}
|
||||
|
||||
model Session {
|
||||
@@ -34,7 +36,26 @@ model UserPreferences {
|
||||
userId String @id
|
||||
toggleInputHotkey String? @default("")
|
||||
toggleOutputHotkey String? @default("")
|
||||
volumes Json? @default("{}")
|
||||
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
}
|
||||
|
||||
model ChatMessage {
|
||||
id String @id
|
||||
|
||||
userId String
|
||||
channelId Int
|
||||
content String
|
||||
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Restrict)
|
||||
channel ChatChannel @relation(fields: [channelId], references: [id], onDelete: Cascade)
|
||||
}
|
||||
|
||||
model ChatChannel {
|
||||
id Int @id
|
||||
name String @unique
|
||||
|
||||
messages ChatMessage[]
|
||||
}
|
||||
23
server/routes/chat.ts
Normal file
23
server/routes/chat.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
import type { FastifyInstance } from 'fastify'
|
||||
import prisma from '../prisma/client.ts'
|
||||
|
||||
export default function (fastify: FastifyInstance) {
|
||||
fastify.get('/chats', async (req, reply) => {
|
||||
if (req.user) {
|
||||
return prisma.chatChannel.findMany()
|
||||
}
|
||||
|
||||
reply.code(401).send(false)
|
||||
})
|
||||
|
||||
fastify.get('/chats/:id', async (req, reply) => {
|
||||
if (req.user) {
|
||||
console.log('Trying to fetch chat with id', req.body.id)
|
||||
|
||||
// return prisma.userPreferences.findFirst({ where: { userId: req.user.id } })
|
||||
return true
|
||||
}
|
||||
|
||||
reply.code(401).send(false)
|
||||
})
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import FastifyAutoLoad from '@fastify/autoload'
|
||||
import FastifyCookie from '@fastify/cookie'
|
||||
import FastifyCors from '@fastify/cors'
|
||||
import Fastify from 'fastify'
|
||||
import { chatInit } from './modules/chat/index.ts'
|
||||
import prisma from './prisma/client.ts'
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url)
|
||||
@@ -43,6 +44,8 @@ fastify.register(FastifyAutoLoad, {
|
||||
|
||||
await prisma.$connect()
|
||||
fastify.log.info('Testing DB Connection. OK')
|
||||
|
||||
await chatInit()
|
||||
}
|
||||
catch (err) {
|
||||
fastify.log.error(err)
|
||||
|
||||
Reference in New Issue
Block a user