Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,9 @@ dependencies {
implementation group: 'org.springframework.boot', name: 'spring-boot-starter', version: '3.3.5'
implementation group: 'org.springframework.security', name: 'spring-security-core', version: '6.3.3'
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-security', version: '3.3.3'
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-websocket
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-websocket', version: '3.4.1'

// JSON Web Token libraries
implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.5'
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.5'
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package fr.parisnanterre.greentrip.backend.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
// Le préfixe pour les messages envoyés
registry.enableSimpleBroker("/topic");
// Le préfixe pour les messages destinés au client
registry.setApplicationDestinationPrefixes("/app");
}

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").withSockJS(); // point d'entrée WebSocket
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package fr.parisnanterre.greentrip.backend.controller;

import fr.parisnanterre.greentrip.backend.entity.Message;
import fr.parisnanterre.greentrip.backend.entity.Role;
import fr.parisnanterre.greentrip.backend.entity.User;
import fr.parisnanterre.greentrip.backend.service.MessageService;
import fr.parisnanterre.greentrip.backend.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
Expand All @@ -23,6 +23,9 @@ public class MessageController {
@Autowired
private UserService userService;

@Autowired
private SimpMessagingTemplate messagingTemplate;

// Envoi d'un message
@PostMapping
public ResponseEntity<Message> sendMessage(@RequestBody Message message) {
Expand All @@ -37,6 +40,13 @@ public ResponseEntity<Message> sendMessage(@RequestBody Message message) {

// Appel du service pour envoyer le message
Message savedMessage = messageService.sendMessageFromAdminToUser(message);

// Publier le message aux clients via WebSocket pour chaque destinataire
for (User receiver : message.getReceivers()) {
// Publier le message sur un topic spécifique à chaque utilisateur
messagingTemplate.convertAndSend("/topic/messages/" + receiver.getId(), savedMessage);
}

return ResponseEntity.ok(savedMessage);
} catch (Exception ex) {
ex.printStackTrace();
Expand Down Expand Up @@ -67,6 +77,10 @@ public ResponseEntity<List<Message>> getConversationWithAdmins(@PathVariable Lon
public ResponseEntity<Message> sendMessageFromUser(@RequestBody Message message) {
try {
Message savedMessage = messageService.sendMessageFromUserToAdmins(message);

// Publier le message aux admins via WebSocket
messagingTemplate.convertAndSend("/topic/messages/admins", savedMessage);

return ResponseEntity.ok(savedMessage);
} catch (Exception e) {
e.printStackTrace();
Expand Down