diff --git a/backend/controllers/chatController.js b/backend/controllers/chatController.js index dc90dae..411e970 100644 --- a/backend/controllers/chatController.js +++ b/backend/controllers/chatController.js @@ -13,6 +13,7 @@ class ChatController { this.sendOneToOneMessage = this.sendOneToOneMessage.bind(this); this.getOneToOneMessageHistory = this.getOneToOneMessageHistory.bind(this); this.getRoomList = this.getRoomList.bind(this); + this.getRoomCreateOptions = this.getRoomCreateOptions.bind(this); } async getMessages(req, res) { @@ -175,6 +176,15 @@ class ChatController { res.status(500).json({ error: error.message }); } } + + async getRoomCreateOptions(req, res) { + try { + const options = await chatService.getRoomCreateOptions(); + res.status(200).json(options); + } catch (error) { + res.status(500).json({ error: error.message }); + } + } } export default ChatController; diff --git a/backend/routers/chatRouter.js b/backend/routers/chatRouter.js index 9d44ffc..ee4bfd9 100644 --- a/backend/routers/chatRouter.js +++ b/backend/routers/chatRouter.js @@ -15,5 +15,6 @@ router.post('/initOneToOne', authenticate, chatController.initOneToOne); router.post('/oneToOne/sendMessage', authenticate, chatController.sendOneToOneMessage); // Neue Route zum Senden einer Nachricht router.get('/oneToOne/messageHistory', authenticate, chatController.getOneToOneMessageHistory); // Neue Route zum Abrufen der Nachrichtengeschichte router.get('/rooms', chatController.getRoomList); +router.get('/room-create-options', authenticate, chatController.getRoomCreateOptions); export default router; diff --git a/backend/services/chatService.js b/backend/services/chatService.js index a983090..255c1ef 100644 --- a/backend/services/chatService.js +++ b/backend/services/chatService.js @@ -148,6 +148,27 @@ class ChatService { ] }); } + + async getRoomCreateOptions() { + const { default: UserRightType } = await import('../models/type/user_right.js'); + const { default: InterestType } = await import('../models/type/interest.js'); + + const [rights, interests] = await Promise.all([ + UserRightType.findAll({ + attributes: ['id', 'title'], + order: [['id', 'ASC']] + }), + InterestType.findAll({ + attributes: ['id', 'name'], + order: [['id', 'ASC']] + }) + ]); + + return { + rights: rights.map((r) => ({ id: r.id, title: r.title })), + roomTypes: interests.map((i) => ({ id: i.id, name: i.name })) + }; + } } export default new ChatService(); diff --git a/frontend/src/api/chatApi.js b/frontend/src/api/chatApi.js index 68ea439..da86789 100644 --- a/frontend/src/api/chatApi.js +++ b/frontend/src/api/chatApi.js @@ -4,3 +4,8 @@ export const fetchPublicRooms = async () => { const response = await apiClient.get("/api/chat/rooms"); return response.data; // expecting array of { id, title, ... } }; + +export const fetchRoomCreateOptions = async () => { + const response = await apiClient.get("/api/chat/room-create-options"); + return response.data; +}; diff --git a/frontend/src/dialogues/chat/MultiChatDialog.vue b/frontend/src/dialogues/chat/MultiChatDialog.vue index 81c76d6..2eada01 100644 --- a/frontend/src/dialogues/chat/MultiChatDialog.vue +++ b/frontend/src/dialogues/chat/MultiChatDialog.vue @@ -8,7 +8,7 @@
@@ -29,7 +29,7 @@
- +
@@ -59,73 +59,81 @@
-
Neuen Raum erstellen
+
{{ $t('chat.multichat.createRoom.title') }}
- - + +
{{ roomCreateValidation.range }}
- Kommando: {{ buildRoomCreateCommandPreview() || '/cr ' }} + {{ $t('chat.multichat.createRoom.commandPrefix') }}: {{ buildRoomCreateCommandPreview() || '/cr ' }}
@@ -191,7 +199,7 @@