Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | 1x 11x 11x 11x 5x 5x 1x 5x 3x 2x 2x 2x 2x 1x 5x 4x 1x 3x 2x 1x 1x 1x 1x 1x 1x 1x 1x | import { Injectable } from '@angular/core';
import { HttpClient, HttpParams, HttpErrorResponse } from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { catchError, map } from 'rxjs/operators';
import { environment } from '../config/environment';
import { AuthService } from './auth.service';
import { PerformDrawResponse, FinalWinnerResponse } from '../models';
@Injectable({
providedIn: 'root'
})
export class DrawService {
private readonly API_URL = `${environment.apiUrl}/draw`;
constructor(
private http: HttpClient,
private authService: AuthService
) {}
/**
* Effectuer le tirage final du jeu concours (admin)
* Gère les cas où le backend retourne du texte brut au lieu de JSON
*/
performFinalDraw(seed?: number): Observable<PerformDrawResponse> {
let params = new HttpParams();
if (seed !== undefined) {
params = params.set('seed', seed.toString());
}
return this.http.post<PerformDrawResponse>(`${this.API_URL}/final`, {}, {
params,
headers: this.authService.getAuthHeaders()
}).pipe(
catchError((error: HttpErrorResponse) => {
// Si le backend retourne du texte brut dans error.error
if (error.error && typeof error.error === 'string') {
const textResponse = error.error as string;
// Extraire le message d'erreur du texte
const errorMessage = textResponse.includes('Aucun') || textResponse.includes('aucun')
? textResponse
: `Erreur lors du tirage final: ${textResponse}`;
// Créer une erreur avec le message extrait
const customError: any = {
status: error.status,
message: errorMessage,
error: { message: errorMessage, error: textResponse }
};
return throwError(() => customError);
}
// Pour les autres erreurs, on propage l'erreur originale
return throwError(() => error);
})
);
}
/**
* Obtenir le gagnant du tirage final
* Gère les cas où le backend retourne 400 ou 404 (pas de gagnant) ou du texte brut
* Les erreurs 400/404 sont considérées comme normales (pas de gagnant)
* Utilise responseType: 'json' avec catchError pour gérer les erreurs proprement
*/
getFinalWinner(): Observable<FinalWinnerResponse> {
return this.http.get<FinalWinnerResponse>(`${this.API_URL}/winner`, {
headers: this.authService.getAuthHeaders()
}).pipe(
catchError((error: HttpErrorResponse) => {
// Si c'est une erreur 404 (pas de gagnant) - cas normal après correction backend
if (error.status === 404) {
return throwError(() => ({
status: 404,
message: 'No winner found',
silent: true
}));
}
// Si c'est encore une erreur 400 (ancien backend non redémarré)
// Vérifier si c'est un JSON avec un message d'erreur
if (error.status === 400) {
// Si c'est un objet JSON avec une propriété "error"
if (error.error && typeof error.error === 'object' && error.error.error) {
const errorMessage = error.error.error;
if (errorMessage.includes('Aucun tirage') ||
errorMessage.includes('aucun tirage') ||
errorMessage.includes('pas de tirage')) {
return throwError(() => ({
status: 404,
message: 'No winner found',
silent: true
}));
}
}
// Si c'est du texte brut
if (error.error && typeof error.error === 'string') {
const textResponse = error.error as string;
if (textResponse.includes('Aucun tirage') ||
textResponse.includes('aucun tirage') ||
textResponse.includes('pas de tirage')) {
return throwError(() => ({
status: 404,
message: 'No winner found',
silent: true
}));
}
}
}
// Pour les vraies erreurs, on propage l'erreur originale
return throwError(() => error);
})
);
}
}
|