Fonctionne git add .git add .

This commit is contained in:
ExostFlash 2025-06-03 10:54:50 +02:00
parent db352ab6bf
commit 4797a3ee53
8 changed files with 32 additions and 105 deletions

View file

@ -11,7 +11,7 @@ import java.util.Date
enum class MatchState { enum class MatchState {
ONGOING, ONGOING,
FINISHED, OVER,
NOT_STARTED NOT_STARTED
} }

View file

@ -55,7 +55,7 @@ class MatchRestController(private val matchService: MatchService) {
// Lister les matchs terminés // Lister les matchs terminés
@GetMapping("/over") @GetMapping("/over")
fun getAllFinished(): ResponseEntity<List<MatchBean>?> { fun getAllFinished(): ResponseEntity<List<MatchBean>?> {
return ResponseEntity.ok(matchService.getAll().filter { it.state == MatchState.FINISHED }) return ResponseEntity.ok(matchService.getAll().filter { it.state == MatchState.OVER })
} }
// Lister les matchs non commencés // Lister les matchs non commencés

View file

@ -30,7 +30,7 @@ class RefereeWebSocketController(
id = refereeUpdateMessage.refereeId, id = refereeUpdateMessage.refereeId,
name = refereeUpdateMessage.name, name = refereeUpdateMessage.name,
firstName = refereeUpdateMessage.firstName, firstName = refereeUpdateMessage.firstName,
qualification = refereeUpdateMessage.qualification level = refereeUpdateMessage.level
) )
// Update the referee in the database // Update the referee in the database

View file

@ -1,6 +1,7 @@
package fr.teamflash.fencerjudgeback.websocket.models package fr.teamflash.fencerjudgeback.websocket.models
import fr.teamflash.fencerjudgeback.entities.MatchBean import fr.teamflash.fencerjudgeback.entities.MatchBean
import java.util.*
/** /**
* Message model for match updates sent through WebSocket * Message model for match updates sent through WebSocket
@ -12,7 +13,7 @@ data class MatchUpdateMessage(
val refereeId: Long?, val refereeId: Long?,
val score1: Int, val score1: Int,
val score2: Int, val score2: Int,
val date: String?, val date: Date?,
val type: UpdateType = UpdateType.SCORE_UPDATE val type: UpdateType = UpdateType.SCORE_UPDATE
) { ) {
enum class UpdateType { enum class UpdateType {

View file

@ -1,6 +1,7 @@
package fr.teamflash.fencerjudgeback.websocket.models package fr.teamflash.fencerjudgeback.websocket.models
import fr.teamflash.fencerjudgeback.entities.RefereeBean import fr.teamflash.fencerjudgeback.entities.RefereeBean
import fr.teamflash.fencerjudgeback.entities.RefereeLevel
/** /**
* Message model for referee updates sent through WebSocket * Message model for referee updates sent through WebSocket
@ -9,7 +10,7 @@ data class RefereeUpdateMessage(
val refereeId: Long, val refereeId: Long,
val name: String?, val name: String?,
val firstName: String?, val firstName: String?,
val qualification: String?, val level: RefereeLevel?,
val type: UpdateType = UpdateType.REFEREE_UPDATE val type: UpdateType = UpdateType.REFEREE_UPDATE
) { ) {
enum class UpdateType { enum class UpdateType {
@ -27,7 +28,7 @@ data class RefereeUpdateMessage(
refereeId = refereeBean.id ?: 0, refereeId = refereeBean.id ?: 0,
name = refereeBean.name, name = refereeBean.name,
firstName = refereeBean.firstName, firstName = refereeBean.firstName,
qualification = refereeBean.qualification, level = refereeBean.level,
type = type type = type
) )
} }

View file

@ -1,7 +1,7 @@
export enum MatchState { export enum MatchState {
ONGOING = 1, ONGOING = 0,
OVER = 2, OVER = 1,
NOT_STARTED = 3, NOT_STARTED = 2,
} }
export interface Matches { export interface Matches {

View file

@ -1,6 +1,5 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http'; import { Observable, of } from 'rxjs';
import { Observable, Subject, BehaviorSubject, of } from 'rxjs';
import { Matches, MatchState } from '@interfaces/matches'; import { Matches, MatchState } from '@interfaces/matches';
@Injectable({ providedIn: 'root' }) @Injectable({ providedIn: 'root' })
@ -46,115 +45,41 @@ export class MatchesService {
state: MatchState.NOT_STARTED, state: MatchState.NOT_STARTED,
}, },
]; ];
private socket?: WebSocket;
private apiUrl = 'http://localhost:8080';
private matchUpdates$ = new Subject<Matches[]>();
private allMatches: Matches[] = [];
private nextMatchId = Math.max(...this.matches.map((m) => m.id)) + 1; private nextMatchId = Math.max(...this.matches.map((m) => m.id)) + 1;
constructor(private http: HttpClient) { constructor() {
this.sendCurrentMatches(); console.log('[MatchesService] Initial matches loaded:', this.matches);
}
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 lenvoi dun match :',
error
);
},
});
});
}
private connectToMatchUpdatesWebSocket(): void {
const wsUrl = 'http://localhost:8080/ws';
this.socket = new WebSocket(wsUrl);
this.socket.onopen = () => {
console.log('[WebSocket] ✅ Connecté à', wsUrl);
};
this.socket.onmessage = (event) => {
try {
const data = JSON.parse(event.data) as Matches[];
console.log('[WebSocket] 📥 Données reçues :', data);
this.matchUpdates$.next(data);
} catch (e) {
console.error('[WebSocket] ❌ Erreur de parsing JSON', e);
}
};
this.socket.onerror = (err) => {
console.error('[WebSocket] ❌ Erreur :', err);
};
this.socket.onclose = () => {
console.warn('[WebSocket] 🔌 Fermeture de la connexion');
};
}
private sendMatchesToWebSocket(): void {
if (this.socket && this.socket.readyState === WebSocket.OPEN) {
const dataToSend = JSON.stringify(this.matches);
this.socket.send(dataToSend);
console.log('[WebSocket] 📤 Données envoyées :', dataToSend);
} else {
console.warn("[WebSocket] ⚠️ Le WebSocket n'est pas encore ouvert.");
}
} }
getMatches(): Observable<Matches[]> { getMatches(): Observable<Matches[]> {
return this.matchUpdates$.asObservable(); console.log('[MatchesService] Fetching all matches');
return of(this.matches);
} }
getMatchById(id: number): Observable<Matches | undefined> { getMatchById(id: number): Observable<Matches | undefined> {
const match = this.allMatches.find((m) => m.id === id); const match = this.matches.find((m) => m.id === id);
console.log(`[MatchesService] Match ID ${id} récupéré :`, match); console.log(`[MatchesService] Fetching match ID: ${id}`, match);
return new BehaviorSubject(match).asObservable(); return of(match);
}
// Préparation future pour WebSocket
connectToMatchUpdatesWebSocket(): void {
console.log(
'[MatchesService] WebSocket connection placeholder initialized'
);
// ici tu pourrais plus tard faire : this.socket = new WebSocket('ws://...') etc.
} }
updateMatch(id: number, updatedData: Partial<Matches>): void { updateMatch(id: number, updatedData: Partial<Matches>): void {
const matchIndex = this.allMatches.findIndex((m) => m.id === id); const match = this.matches.find((m) => m.id === id);
if (matchIndex !== -1) { if (match) {
const updatedMatch = { ...this.allMatches[matchIndex], ...updatedData }; Object.assign(match, updatedData);
this.allMatches[matchIndex] = updatedMatch; console.log(`[MatchesService] Match ${id} mis à jour :`, match);
this.matchUpdates$.next([...this.allMatches]); // émettre un nouveau tableau
console.log(
`[MatchesService] Match ${id} mis à jour localement :`,
updatedMatch
);
} else { } else {
console.warn(`[MatchesService] Match ${id} non trouvé pour mise à jour`); console.warn(`[MatchesService] Match ${id} introuvable`);
} }
} }
ngOnDestroy(): void {
this.socket?.close();
}
create(match: Omit<Matches, 'id'>): Observable<Matches> { create(match: Omit<Matches, 'id'>): Observable<Matches> {
const newMatch: Matches = { const newMatch: Matches = {
...match, ...match,

BIN
db.mv.db

Binary file not shown.