Add specific team chat channels, and update README
This commit is contained in:
parent
e2a95252bb
commit
2ab11f7a4b
8 changed files with 351 additions and 97 deletions
|
|
@ -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())
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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' });
|
||||
|
|
|
|||
|
|
@ -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 }) => {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue