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 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 | 1x 11x 11x 11x 1x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 1x 1x 1x 1x 3x 4x 2x 4x 1x 4x 4x 4x 1x 1x 2x 2x 2x 1x | import { Injectable } from '@angular/core';
import { HttpClient, HttpParams } from '@angular/common/http';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { environment } from '../config/environment';
import { AuthService } from './auth.service';
import {
User,
UpdateUserRequest,
PageUser,
Win
} from '../models';
@Injectable({
providedIn: 'root'
})
export class UserService {
private readonly API_URL = `${environment.apiUrl}/users`;
constructor(
private http: HttpClient,
private authService: AuthService
) {}
/**
* Obtenir le profil de l'utilisateur connecté
*/
getCurrentUser(): Observable<User> {
return this.http.get<User>(`${this.API_URL}/me`, {
headers: this.authService.getAuthHeaders()
});
}
/**
* Lister les utilisateurs (paginé)
*/
getAllUsers(page: number = 0, size: number = 10): Observable<PageUser> {
const params = new HttpParams()
.set('page', page.toString())
.set('size', size.toString());
return this.http.get<any>(this.API_URL, {
params,
headers: this.authService.getAuthHeaders()
}).pipe(
map((response: any) => {
// Mapper la réponse de l'API vers le format PageUser
// Spring Data peut retourner différentes structures selon la version
const content = response.content || [];
const pageable = response.pageable || {};
const currentPageNumber = response.number !== undefined ? response.number : (pageable.pageNumber !== undefined ? pageable.pageNumber : page);
const pageSize = response.size || pageable.pageSize || size;
// Calculer totalElements et totalPages
let totalElements = response.totalElements;
let totalPages = response.totalPages;
let isLast = response.last;
let isFirst = response.first;
// Si totalElements n'est pas fourni, essayer de l'estimer
if (totalElements === undefined || totalElements === null) {
// Si on est à la dernière page et qu'on connaît le nombre d'éléments
if (content.length < pageSize) {
// Probablement la dernière page
totalElements = (currentPageNumber * pageSize) + content.length;
totalPages = Math.ceil(totalElements / pageSize);
isLast = true;
} else E{
// On ne peut pas déterminer le total, utiliser une valeur par défaut
// qui permettra la pagination même si on ne connaît pas le total exact
totalElements = (currentPageNumber + 1) * pageSize; // Estimation minimale
totalPages = Math.ceil(totalElements / pageSize);
isLast = false;
}
} else {
totalPages = totalPages || Math.ceil(totalElements / pageSize);
}
// Déterminer first et last si non fournis
if (isFirst === undefined) {
isFirst = currentPageNumber === 0;
}
if (isLast === undefined) {
isLast = currentPageNumber >= (totalPages - 1);
}
const pageUser: PageUser = {
content: content,
totalElements: totalElements,
totalPages: totalPages,
size: pageSize,
number: currentPageNumber,
first: isFirst,
last: isLast
};
// Logs uniquement pour la première page ou en cas d'erreur
if (page === 0) {
}
return pageUser;
})
);
}
/**
* Mettre à jour un utilisateur (PUT - remplace toutes les données)
*/
updateUser(id: number, userData: UpdateUserRequest): Observable<User> {
return this.http.put<User>(`${this.API_URL}/${id}`, userData, {
headers: this.authService.getAuthHeaders()
});
}
/**
* Mettre à jour partiellement un utilisateur (PATCH)
*/
updatePartialUser(id: number, userData: UpdateUserRequest): Observable<User> {
return this.http.patch<User>(`${this.API_URL}/${id}`, userData, {
headers: this.authService.getAuthHeaders()
});
}
/**
* Supprimer un utilisateur
*/
deleteUser(id: number): Observable<any> {
return this.http.delete(`${this.API_URL}/${id}`, {
headers: this.authService.getAuthHeaders(),
responseType: 'text' as 'json' // Accepter les réponses texte du backend
}).pipe(
map((response: any) => {
// Si la réponse est une chaîne, la convertir en objet
if (typeof response === 'string') {
return { message: response, success: true };
}
return response;
})
);
}
/**
* Obtenir l'historique des gains d'un utilisateur
*/
getUserWins(id: number): Observable<Win[]> {
return this.http.get<Win[]>(`${this.API_URL}/${id}/wins`, {
headers: this.authService.getAuthHeaders()
});
}
}
|