feat(communication): add room visibility and project chat controls
All checks were successful
Build and Release FEDEO / verify (push) Successful in 57s
Build and Release FEDEO / build-and-release (push) Successful in 6m27s

This commit is contained in:
2026-10-02 18:27:02 +02:00
parent 0887863981
commit 7e6c2fbac5
14 changed files with 364 additions and 21 deletions

View File

@@ -9,6 +9,7 @@ import {
communicationRoomMembers,
communicationRoomReads,
communicationRooms,
communicationHiddenRooms,
notificationsItems,
projects,
} from "../../db/schema"
@@ -244,6 +245,28 @@ export default async function communicationRoutes(server: FastifyInstance) {
server.get("/communication/chat/status", async () => ({ ready: true, provider: "fedeo" }))
server.get("/communication/chat/room-preferences", async (req: any) => {
const tenantId = await requireTenant(req)
const hidden = await server.db.select({ key: communicationHiddenRooms.roomKey }).from(communicationHiddenRooms)
.where(and(eq(communicationHiddenRooms.tenantId, tenantId), eq(communicationHiddenRooms.userId, req.user.user_id)))
return { hiddenRoomKeys: hidden.map(room => room.key) }
})
server.put("/communication/chat/room-preferences", async (req: any, reply) => {
const tenantId = await requireTenant(req)
const { roomKey, hidden } = req.body || {}
if (typeof hidden !== "boolean" || typeof roomKey !== "string" || roomKey.length > 200
|| !/^(?:[a-z0-9._=-]+|collaboration:[a-f0-9-]{36})$/.test(roomKey)) {
return reply.code(400).send({ error: "Ungültige Raumeinstellung" })
}
const value = { tenantId, userId: req.user.user_id, roomKey }
if (hidden) await server.db.insert(communicationHiddenRooms).values(value).onConflictDoNothing()
else await server.db.delete(communicationHiddenRooms).where(and(
eq(communicationHiddenRooms.tenantId, tenantId), eq(communicationHiddenRooms.userId, req.user.user_id),
eq(communicationHiddenRooms.roomKey, roomKey)))
return { roomKey, hidden }
})
server.get("/communication/chat/users", async (req: any) => {
const tenantId = await requireTenant(req)
return { users: (await tenantUsers(tenantId)).map((user) => ({