Add specific team chat channels, and update README

This commit is contained in:
Brian McGonagill 2026-03-25 08:32:15 -05:00
parent e2a95252bb
commit 2ab11f7a4b
8 changed files with 351 additions and 97 deletions

View file

@ -135,12 +135,13 @@ model PhotoSubmission {
model ChatMessage {
id String @id @default(uuid())
gameId String
game Game @relation(fields: [gameId], references: [id], onDelete: Cascade)
game Game @relation(fields: [gameId], references: [id], onDelete: Cascade)
teamId String?
team Team? @relation(fields: [teamId], references: [id])
team Team? @relation(fields: [teamId], references: [id])
userId String
user User @relation(fields: [userId], references: [id])
user User @relation(fields: [userId], references: [id])
message String
isDirect Boolean @default(false)
sentAt DateTime @default(now())
}

View file

@ -201,6 +201,10 @@ router.delete('/:id', authenticate, async (req: AuthRequest, res: Response) => {
return res.status(403).json({ error: 'Not authorized' });
}
if (game.status !== 'DRAFT') {
return res.status(400).json({ error: 'Only draft games can be deleted' });
}
await prisma.game.delete({ where: { id } });
res.json({ message: 'Game deleted' });

View file

@ -26,24 +26,39 @@ export default function setupSocket(io: Server) {
});
});
socket.on('chat-message', async (data: { gameId: string; teamId?: string; message: string; userId: string; userName: string }) => {
socket.on('chat-message', async (data: {
gameId: string;
teamId?: string;
isDirect?: boolean;
message: string;
userId: string;
userName: string
}) => {
const chatMessage = await prisma.chatMessage.create({
data: {
gameId: data.gameId,
teamId: data.teamId,
teamId: data.teamId || null,
userId: data.userId,
message: data.message
message: data.message,
isDirect: data.isDirect || false
}
});
io.to(`game:${data.gameId}`).emit('chat-message', {
const messageData = {
id: chatMessage.id,
teamId: data.teamId,
isDirect: chatMessage.isDirect,
userId: data.userId,
userName: data.userName,
message: data.message,
sentAt: chatMessage.sentAt
});
};
if (data.isDirect && data.teamId) {
io.to(`game:${data.gameId}`).emit('chat-message', messageData);
} else {
io.to(`game:${data.gameId}`).emit('chat-message', messageData);
}
});
socket.on('team-advanced', async (data: { gameId: string; teamId: string }) => {