diff --git a/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/restControllers/PlayerRestController.kt b/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/restControllers/PlayerRestController.kt index 75fe6ce..628282a 100644 --- a/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/restControllers/PlayerRestController.kt +++ b/FencerJudgeBack/src/main/kotlin/fr/teamflash/fencerjudgeback/restControllers/PlayerRestController.kt @@ -1,7 +1,6 @@ package fr.teamflash.fencerjudgeback.restControllers import fr.teamflash.fencerjudgeback.entities.PlayerBean -import fr.teamflash.fencerjudgeback.restControllers.MatchRestController.Companion.URL_ORIGIN import fr.teamflash.fencerjudgeback.services.PlayerService import org.springframework.http.ResponseEntity import org.springframework.web.bind.annotation.CrossOrigin @@ -50,21 +49,18 @@ class PlayerRestController(private val playerService: PlayerService) { } // Ajouter un joueur - @CrossOrigin(origins = [URL_ORIGIN]) @PostMapping("/create-player") fun createPlayer(@RequestBody player: PlayerBean): ResponseEntity { return ResponseEntity.ok(playerService.createPlayer(player)) } // Modifier un joueur - @CrossOrigin(origins = [URL_ORIGIN]) @PutMapping("/update-player/{id}") fun updatePlayer(@PathVariable id: Long, @RequestBody player: PlayerBean): ResponseEntity { return ResponseEntity.ok(playerService.updatePlayer(id, player)) } // Supprimer un joueur - @CrossOrigin(origins = [URL_ORIGIN]) @DeleteMapping("/delete-player/{id}") fun deletePlayer(@PathVariable id: Long): ResponseEntity { return ResponseEntity.ok(playerService.deletePlayerById(id)) diff --git a/FencerJudgeFront/src/app/app.module.ts b/FencerJudgeFront/src/app/app.module.ts index 4490d31..de9e710 100644 --- a/FencerJudgeFront/src/app/app.module.ts +++ b/FencerJudgeFront/src/app/app.module.ts @@ -1,6 +1,7 @@ import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { FormsModule } from '@angular/forms'; +import { HttpClientModule } from '@angular/common/http'; import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; @@ -29,7 +30,7 @@ import { MatchesDelComponent } from './components/match/matches-del/matches-del. SponsortComponent, MatchesDelComponent, ], - imports: [BrowserModule, AppRoutingModule, FormsModule], + imports: [BrowserModule, AppRoutingModule, FormsModule, HttpClientModule], providers: [], bootstrap: [AppComponent], }) diff --git a/FencerJudgeFront/src/app/services/matches/matches.service.ts b/FencerJudgeFront/src/app/services/matches/matches.service.ts index 5a80f75..9f3fdeb 100644 --- a/FencerJudgeFront/src/app/services/matches/matches.service.ts +++ b/FencerJudgeFront/src/app/services/matches/matches.service.ts @@ -1,4 +1,5 @@ import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; import { Observable, Subject, BehaviorSubject, of } from 'rxjs'; import { Matches, MatchState } from '@interfaces/matches'; @@ -46,16 +47,50 @@ export class MatchesService { }, ]; private socket?: WebSocket; + private apiUrl = 'http://localhost:8080'; private matchUpdates$ = new Subject(); private allMatches: Matches[] = []; private nextMatchId = Math.max(...this.matches.map((m) => m.id)) + 1; - constructor() { - this.connectToMatchUpdatesWebSocket(); + constructor(private http: HttpClient) { + this.sendCurrentMatches(); + } + + public sendCurrentMatches(): void { + if (!this.matches || this.matches.length === 0) { + console.warn('[HTTP] ⚠️ Aucun match à envoyer.'); + return; + } + + const headers = { + headers: { + 'Content-Type': 'application/json', + }, + }; + + this.matches.forEach((match) => { + this.http + .post( + this.apiUrl + '/matches/create-match', + JSON.stringify(match), + headers + ) + .subscribe({ + next: (response) => { + console.log('[HTTP] ✅ Match envoyé avec succès :', response); + }, + error: (error) => { + console.error( + '[HTTP] ❌ Erreur lors de l’envoi d’un match :', + error + ); + }, + }); + }); } private connectToMatchUpdatesWebSocket(): void { - const wsUrl = 'http://localhost:8080/ws/matches-app'; + const wsUrl = 'http://localhost:8080/ws'; this.socket = new WebSocket(wsUrl); this.socket.onopen = () => { @@ -91,10 +126,6 @@ export class MatchesService { } } - public sendCurrentMatches(): void { - this.sendMatchesToWebSocket(); - } - getMatches(): Observable { return this.matchUpdates$.asObservable(); } diff --git a/db.lock.db b/db.lock.db deleted file mode 100644 index 072e750..0000000 --- a/db.lock.db +++ /dev/null @@ -1,6 +0,0 @@ -#FileLock -#Mon Jun 02 17:40:34 CEST 2025 -hostName=ExostFlash -id=197313393c88a931fa21bf5ce1281b7253870b00683 -method=file -server=192.167.2.100\:54366 diff --git a/db.mv.db b/db.mv.db index f4f797b..632875e 100644 Binary files a/db.mv.db and b/db.mv.db differ diff --git a/db.trace.db b/db.trace.db new file mode 100644 index 0000000..016cc9c --- /dev/null +++ b/db.trace.db @@ -0,0 +1,48 @@ +2025-06-03 09:54:12.514185+02:00 database: close +org.h2.message.DbException: IO Exception: "Closing" +IO Exception: "Closing" [90028-232] + at org.h2.message.DbException.get(DbException.java:212) + at org.h2.mvstore.db.Store.close(Store.java:374) + at org.h2.engine.Database.closeOpenFilesAndUnlock(Database.java:1292) + at org.h2.engine.Database.closeImpl(Database.java:1254) + at org.h2.engine.Database.close(Database.java:1173) + at org.h2.engine.Database.onShutdown(Database.java:1158) + at org.h2.engine.OnExitDatabaseCloser.onShutdown(OnExitDatabaseCloser.java:85) + at org.h2.engine.OnExitDatabaseCloser.run(OnExitDatabaseCloser.java:114) +Caused by: org.h2.jdbc.JdbcSQLNonTransientException: IO Exception: "Closing" +IO Exception: "Closing" [90028-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:566) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + ... 8 more +Caused by: org.h2.mvstore.MVStoreException: Reading from file sun.nio.ch.FileChannelImpl@1baeb921 failed at 15775 (length -1), read 0, remaining 24 [2.3.232/1] + at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:996) + at org.h2.mvstore.DataUtils.readFully(DataUtils.java:455) + at org.h2.mvstore.FileStore.readFully(FileStore.java:721) + at org.h2.mvstore.SingleFileStore.readFully(SingleFileStore.java:60) + at org.h2.mvstore.SingleFileStore.readFully(SingleFileStore.java:28) + at org.h2.mvstore.SFChunk.readFully(SFChunk.java:35) + at org.h2.mvstore.Chunk.readToC(Chunk.java:496) + at org.h2.mvstore.FileStore.getToC(FileStore.java:2070) + at org.h2.mvstore.FileStore.rewriteChunks(FileStore.java:1913) + at org.h2.mvstore.FileStore.compactRewrite(FileStore.java:1901) + at org.h2.mvstore.FileStore.rewriteChunks(FileStore.java:1862) + at org.h2.mvstore.FileStore.lambda$compact$0(FileStore.java:879) + at org.h2.mvstore.MVStore.tryExecuteUnderStoreLock(MVStore.java:937) + at org.h2.mvstore.FileStore.compact(FileStore.java:879) + at org.h2.mvstore.RandomAccessStore.compactStore(RandomAccessStore.java:441) + at org.h2.mvstore.FileStore.compactStore(FileStore.java:890) + at org.h2.mvstore.FileStore.stop(FileStore.java:275) + at org.h2.mvstore.MVStore.closeStore(MVStore.java:693) + at org.h2.mvstore.MVStore.close(MVStore.java:643) + at org.h2.mvstore.db.Store.close(Store.java:364) + ... 6 more +Caused by: java.io.IOException: Le périphérique n’est pas prêt + at java.base/sun.nio.ch.FileDispatcherImpl.pread0(Native Method) + at java.base/sun.nio.ch.FileDispatcherImpl.pread(FileDispatcherImpl.java:67) + at java.base/sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:338) + at java.base/sun.nio.ch.IOUtil.read(IOUtil.java:306) + at java.base/sun.nio.ch.IOUtil.read(IOUtil.java:283) + at java.base/sun.nio.ch.FileChannelImpl.readInternal(FileChannelImpl.java:984) + at java.base/sun.nio.ch.FileChannelImpl.read(FileChannelImpl.java:964) + at org.h2.mvstore.DataUtils.readFully(DataUtils.java:441) + ... 24 more