From 6f4e8d87eba9899d15caa121a8cc641e2dae2bb6 Mon Sep 17 00:00:00 2001 From: pedro Date: Mon, 2 Jun 2025 23:49:19 +0200 Subject: [PATCH 1/2] =?UTF-8?q?appli=20r=C3=A9par=C3=A9e,=20tests=20foncti?= =?UTF-8?q?onnels,=20websocket=20=C3=A0=20faire=20et=20security=20=C3=A0?= =?UTF-8?q?=20impl=C3=A9menter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fencerjudgeback/config/MatchWebSocketConfig.kt | 2 +- .../repositories/MatchRepository.kt | 6 ------ .../fencerjudgeback/services/MatchService.kt | 14 +++++++------- .../fencerjudgeback/services/RefereeService.kt | 10 +++++----- .../controllers/RefereeWebSocketController.kt | 1 - 5 files changed, 13 insertions(+), 20 deletions(-) diff --git a/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/config/MatchWebSocketConfig.kt b/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/config/MatchWebSocketConfig.kt index 80d1341..5138d75 100644 --- a/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/config/MatchWebSocketConfig.kt +++ b/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/config/MatchWebSocketConfig.kt @@ -15,7 +15,7 @@ open class MatchWebSocketConfig : WebSocketMessageBrokerConfigurer { override fun configureMessageBroker(registry: MessageBrokerRegistry) { // Enable a simple memory-based message broker to send messages to clients // Prefix for messages FROM server TO client - registry.enableSimpleBroker(CHANNEL_NAME) + registry.enableSimpleBroker(CHANNEL_MATCH_NAME) // Prefix for messages FROM client TO server registry.setApplicationDestinationPrefixes("/ws") diff --git a/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/repositories/MatchRepository.kt b/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/repositories/MatchRepository.kt index 9ce2449..728d059 100644 --- a/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/repositories/MatchRepository.kt +++ b/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/repositories/MatchRepository.kt @@ -6,10 +6,4 @@ import org.springframework.stereotype.Repository @Repository interface MatchRepository: JpaRepository { - fun getAll(): List { - return listOf( - MatchBean(1, "Fleuret", "France", "Paris", 1, 2, 3, 10, 12, "16-08-2004", "terminé") - ) - // return this.findAll() - } } \ No newline at end of file diff --git a/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/services/MatchService.kt b/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/services/MatchService.kt index 83ec52a..3ba9c54 100644 --- a/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/services/MatchService.kt +++ b/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/services/MatchService.kt @@ -14,13 +14,13 @@ class MatchService( ) { // Obtenir tous les matchs (public) fun getAll() : List { - println("MatchService.getMatchs") - return matchRepository.getAll() + println("MatchService.getAll") + return matchRepository.findAll() } // Obtenir un match par id (public) fun getById(id: Long?): MatchBean? { - println("MatchService.getMatchById : $id") + println("MatchService.getById : $id") if (id == null) { println("MatchService.getMatchById : Match not found") @@ -32,8 +32,8 @@ class MatchService( // Obtenir un ou plusieurs match(s) par joueurs (id) (public) fun getByPlayers(player1ID: Long?, player2ID: Long?): List { - println("MatchService.getMatchByPlayers : $player1ID - $player2ID") - return matchRepository.getAll().filter { it.player1ID == player1ID && it.player2ID == player2ID } + println("MatchService.getByPlayers : $player1ID - $player2ID") + return matchRepository.findAll().filter { it.player1ID == player1ID && it.player2ID == player2ID } } // Ajouter un match (admin) @@ -81,14 +81,14 @@ class MatchService( fun getMatchesByCity(city: String): List? { println("MatchService.getMatchesByCity : $city") - return matchRepository.getAll() + return matchRepository.findAll() .filter { it.city == city } } fun getMatchesByCountry(country: String): List? { println("MatchService.getMatchesByCountry : $country") - return matchRepository.getAll() + return matchRepository.findAll() .filter { it.country == country } } diff --git a/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/services/RefereeService.kt b/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/services/RefereeService.kt index 218a1cb..410efa8 100644 --- a/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/services/RefereeService.kt +++ b/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/services/RefereeService.kt @@ -15,13 +15,13 @@ class RefereeService( ) { // Obtenir tous les arbitres (public) fun getAll(): List { - println("RefereeService.getReferees") + println("RefereeService.getAll") return refereeRepository.findAll() } // Obtenir un arbitre par id (public) fun getById(id:Long?) : RefereeBean? { - println("RefereeService.getRefereeById : $id") + println("RefereeService.getById : $id") if (id == null) { return null @@ -32,19 +32,19 @@ class RefereeService( // Obtenir un ou plusieurs arbitre(s) par nom (public) fun getByName(name:String): List? { - println("RefereeService.getRefereeByName : $name") + println("RefereeService.getByName : $name") return refereeRepository.findAll().filter{ it.name == name } } // Obtenir un ou plusieurs arbitre(s) par prénom fun getByFirstName(firstName:String): List? { - println("RefereeService.getRefereeByFirstName : $firstName") + println("RefereeService.getByFirstName : $firstName") return refereeRepository.findAll().filter{ it.firstName == firstName } } // Obtenir un ou plusieurs arbitre(s) par qualification fun getByQualification(qualification:String): List? { - println("RefereeService.getRefereeByQualification : $qualification") + println("RefereeService.getByQualification : $qualification") return refereeRepository.findAll().filter{ it.qualification == qualification } } diff --git a/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/websocket/controllers/RefereeWebSocketController.kt b/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/websocket/controllers/RefereeWebSocketController.kt index 2b21601..34c7a94 100644 --- a/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/websocket/controllers/RefereeWebSocketController.kt +++ b/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/websocket/controllers/RefereeWebSocketController.kt @@ -1,6 +1,5 @@ package fr.teamflash.fencerjudgeback.websocket.controllers -import fr.teamflash.fencerjudgeback.config.CHANNEL_NAME import fr.teamflash.fencerjudgeback.entities.RefereeBean import fr.teamflash.fencerjudgeback.services.RefereeService import fr.teamflash.fencerjudgeback.websocket.models.RefereeUpdateMessage -- 2.45.3 From 608e0f768061a0c9cd57faaf7b99674705281c52 Mon Sep 17 00:00:00 2001 From: clemcle81500 Date: Tue, 3 Jun 2025 07:54:12 +0200 Subject: [PATCH 2/2] =?UTF-8?q?Avanc=C3=A9e=20sur=20ws?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/MatchWebSocketConfig.kt | 4 +- .../entities/MatchUpdateBean.kt | 3 ++ .../repositories/MatchRepository.kt | 6 --- .../fencerjudgeback/services/MatchService.kt | 8 ++-- .../controllers/MatchWebSocketController.kt | 48 +++++++++++-------- .../controllers/RefereeWebSocketController.kt | 2 +- .../static/testMatchWebSocketHTML.html | 17 +++---- ...html => testPlusOrMinusWebSocketHTML.html} | 26 +++++----- 8 files changed, 63 insertions(+), 51 deletions(-) create mode 100644 FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/entities/MatchUpdateBean.kt rename FencerJudgeBack/src/main/resources/static/{testRefereeWebSocketHTML.html => testPlusOrMinusWebSocketHTML.html} (71%) diff --git a/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/config/MatchWebSocketConfig.kt b/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/config/MatchWebSocketConfig.kt index 80d1341..6fc3650 100644 --- a/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/config/MatchWebSocketConfig.kt +++ b/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/config/MatchWebSocketConfig.kt @@ -15,10 +15,10 @@ open class MatchWebSocketConfig : WebSocketMessageBrokerConfigurer { override fun configureMessageBroker(registry: MessageBrokerRegistry) { // Enable a simple memory-based message broker to send messages to clients // Prefix for messages FROM server TO client - registry.enableSimpleBroker(CHANNEL_NAME) + registry.enableSimpleBroker(CHANNEL_MATCH_NAME) // Prefix for messages FROM client TO server - registry.setApplicationDestinationPrefixes("/ws") + registry.setApplicationDestinationPrefixes("/ws/matches") } override fun registerStompEndpoints(registry: StompEndpointRegistry) { diff --git a/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/entities/MatchUpdateBean.kt b/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/entities/MatchUpdateBean.kt new file mode 100644 index 0000000..16059ac --- /dev/null +++ b/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/entities/MatchUpdateBean.kt @@ -0,0 +1,3 @@ +package fr.teamflash.fencerjudgeback.entities + +data class MatchUpdateBean(val match: MatchBean?=null, val playerId:Long?=null) \ No newline at end of file diff --git a/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/repositories/MatchRepository.kt b/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/repositories/MatchRepository.kt index 9ce2449..728d059 100644 --- a/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/repositories/MatchRepository.kt +++ b/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/repositories/MatchRepository.kt @@ -6,10 +6,4 @@ import org.springframework.stereotype.Repository @Repository interface MatchRepository: JpaRepository { - fun getAll(): List { - return listOf( - MatchBean(1, "Fleuret", "France", "Paris", 1, 2, 3, 10, 12, "16-08-2004", "terminé") - ) - // return this.findAll() - } } \ No newline at end of file diff --git a/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/services/MatchService.kt b/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/services/MatchService.kt index 83ec52a..1e5f24b 100644 --- a/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/services/MatchService.kt +++ b/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/services/MatchService.kt @@ -15,7 +15,7 @@ class MatchService( // Obtenir tous les matchs (public) fun getAll() : List { println("MatchService.getMatchs") - return matchRepository.getAll() + return matchRepository.findAll() } // Obtenir un match par id (public) @@ -33,7 +33,7 @@ class MatchService( // Obtenir un ou plusieurs match(s) par joueurs (id) (public) fun getByPlayers(player1ID: Long?, player2ID: Long?): List { println("MatchService.getMatchByPlayers : $player1ID - $player2ID") - return matchRepository.getAll().filter { it.player1ID == player1ID && it.player2ID == player2ID } + return matchRepository.findAll().filter { it.player1ID == player1ID && it.player2ID == player2ID } } // Ajouter un match (admin) @@ -81,14 +81,14 @@ class MatchService( fun getMatchesByCity(city: String): List? { println("MatchService.getMatchesByCity : $city") - return matchRepository.getAll() + return matchRepository.findAll() .filter { it.city == city } } fun getMatchesByCountry(country: String): List? { println("MatchService.getMatchesByCountry : $country") - return matchRepository.getAll() + return matchRepository.findAll() .filter { it.country == country } } diff --git a/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/websocket/controllers/MatchWebSocketController.kt b/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/websocket/controllers/MatchWebSocketController.kt index 1b86f73..bee6a2f 100644 --- a/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/websocket/controllers/MatchWebSocketController.kt +++ b/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/websocket/controllers/MatchWebSocketController.kt @@ -2,6 +2,7 @@ package fr.teamflash.fencerjudgeback.websocket.controllers import fr.teamflash.fencerjudgeback.config.CHANNEL_MATCH_NAME import fr.teamflash.fencerjudgeback.entities.MatchBean +import fr.teamflash.fencerjudgeback.entities.MatchUpdateBean import fr.teamflash.fencerjudgeback.services.MatchService import fr.teamflash.fencerjudgeback.websocket.models.MatchUpdateMessage import org.springframework.context.event.EventListener @@ -9,12 +10,9 @@ import org.springframework.messaging.handler.annotation.MessageMapping import org.springframework.messaging.simp.SimpMessagingTemplate import org.springframework.messaging.simp.stomp.StompHeaderAccessor import org.springframework.stereotype.Controller -import org.springframework.web.bind.annotation.PathVariable -import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.socket.messaging.SessionSubscribeEvent @Controller -@RequestMapping("/ws/matches") class MatchWebSocketController( private val matchService: MatchService, private val messagingTemplate: SimpMessagingTemplate @@ -73,29 +71,40 @@ class MatchWebSocketController( val headerAccessor = StompHeaderAccessor.wrap(event.message) if (CHANNEL_MATCH_NAME == headerAccessor.destination) { messagingTemplate.convertAndSend(CHANNEL_MATCH_NAME, messageHistory) - println("Lancement...") + println("Lancement du WebSocket") } } - @MessageMapping("/plusPoint/{playerId}") - fun addPoint(match:MatchBean, @PathVariable playerId:Long) { - when (playerId) { - match.player1ID -> match.score1 += 1 - match.player2ID -> match.score2 += 1 + @MessageMapping("/plusPoint") + fun addPoint(matchUpdateBean: MatchUpdateBean) { + val playerId = matchUpdateBean.playerId + val match = matchUpdateBean.match + print("plus") + if (match != null) { + print("minus") + when (playerId) { + match.player1ID -> if (match.score1 > 0) match.score1 -= 1 + match.player2ID -> if (match.score2 > 0) match.score2 -= 1 + } + matchService.updateMatch(match.id, match) + broadcastMatchUpdate(match) } - matchService.updateMatch(match.id, match) - broadcastMatchUpdate(match) } - @MessageMapping("/minusPoint/{playerId}") - fun minusPoint(match:MatchBean, @PathVariable playerId:Long) { - when (playerId) { - match.player1ID -> if (match.score1 > 0) match.score1 -= 1 - match.player2ID -> if (match.score2 > 0) match.score2 -= 1 + @MessageMapping("/minusPoint") + fun minusPoint(matchUpdateBean: MatchUpdateBean) { + val playerId = matchUpdateBean.playerId + val match = matchUpdateBean.match + print("minus") + if (match != null) { + when (playerId) { + match.player1ID -> if (match.score1 > 0) match.score1 -= 1 + match.player2ID -> if (match.score2 > 0) match.score2 -= 1 + } + matchService.updateMatch(match.id, match) + broadcastMatchUpdate(match) + } } - matchService.updateMatch(match.id, match) - broadcastMatchUpdate(match) - } @MessageMapping("/add") fun addMatchtoMainList(match:MatchBean) { @@ -104,5 +113,6 @@ class MatchWebSocketController( messageHistory.add(match) broadcastMatchUpdate(match, MatchUpdateMessage.UpdateType.NEW_MATCH) mainId = mainId?.plus(1) + println("Ajout du match $match.id en bdd") } } \ No newline at end of file diff --git a/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/websocket/controllers/RefereeWebSocketController.kt b/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/websocket/controllers/RefereeWebSocketController.kt index 2b21601..6064fda 100644 --- a/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/websocket/controllers/RefereeWebSocketController.kt +++ b/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/websocket/controllers/RefereeWebSocketController.kt @@ -1,6 +1,6 @@ package fr.teamflash.fencerjudgeback.websocket.controllers -import fr.teamflash.fencerjudgeback.config.CHANNEL_NAME +import fr.teamflash.fencerjudgeback.config.CHANNEL_MATCH_NAME import fr.teamflash.fencerjudgeback.entities.RefereeBean import fr.teamflash.fencerjudgeback.services.RefereeService import fr.teamflash.fencerjudgeback.websocket.models.RefereeUpdateMessage diff --git a/FencerJudgeBack/src/main/resources/static/testMatchWebSocketHTML.html b/FencerJudgeBack/src/main/resources/static/testMatchWebSocketHTML.html index 2819a41..05c5007 100644 --- a/FencerJudgeBack/src/main/resources/static/testMatchWebSocketHTML.html +++ b/FencerJudgeBack/src/main/resources/static/testMatchWebSocketHTML.html @@ -29,15 +29,14 @@
Connexion...
- - - - + + +
- - + +
@@ -63,7 +62,7 @@ function sendMatch() { const match = { - matchId: parseInt(document.getElementById("matchId").value), + id: 1, player1Id: parseInt(document.getElementById("player1Id").value), player2Id: parseInt(document.getElementById("player2Id").value), refereeId: parseInt(document.getElementById("refereeId").value), @@ -73,12 +72,14 @@ }; stompClient.send("/ws/matches/add", {}, JSON.stringify(match)); + + displayMessage(match) } function displayMessage(match) { const area = document.getElementById("messageArea"); const div = document.createElement("div"); - div.textContent = `Match ${match.matchId}: ${match.player1Id} (${match.score1}) vs ${match.player2Id} (${match.score2})`; + div.textContent = `Match ${match.id}: ${match.player1Id} (${match.score1}) vs ${match.player2Id} (${match.score2})`; area.appendChild(div); } diff --git a/FencerJudgeBack/src/main/resources/static/testRefereeWebSocketHTML.html b/FencerJudgeBack/src/main/resources/static/testPlusOrMinusWebSocketHTML.html similarity index 71% rename from FencerJudgeBack/src/main/resources/static/testRefereeWebSocketHTML.html rename to FencerJudgeBack/src/main/resources/static/testPlusOrMinusWebSocketHTML.html index 87d370b..05219fd 100644 --- a/FencerJudgeBack/src/main/resources/static/testRefereeWebSocketHTML.html +++ b/FencerJudgeBack/src/main/resources/static/testPlusOrMinusWebSocketHTML.html @@ -29,15 +29,14 @@
Connexion...
- - - - + + +
- - + +
@@ -47,8 +46,8 @@ -- 2.45.3