
All checks were successful
Build and Push to Registry / build-and-push (push) Successful in 4m27s
53 lines
1.6 KiB
TypeScript
53 lines
1.6 KiB
TypeScript
import getConfig from 'next/config';
|
|
const { publicRuntimeConfig } = getConfig();
|
|
|
|
export default class DatabaseService {
|
|
|
|
// Empêcher l'instanciation de cette classe utilitaire
|
|
private constructor() { }
|
|
|
|
/**
|
|
* Récupère les données d'une table avec pagination
|
|
* @param tableName Nom de la table à consulter
|
|
* @param page Numéro de page (commence à 1)
|
|
* @param limit Nombre d'éléments par page
|
|
* @returns Données de la table avec pagination
|
|
*/
|
|
public static async getTableData(tableName: string, page: number = 1, limit: number = 10): Promise<any> {
|
|
// Vérification des paramètres
|
|
if (!tableName) {
|
|
throw new Error('Le nom de la table est requis');
|
|
}
|
|
|
|
// Validation du nom de la table (par sécurité)
|
|
const tableNameRegex = /^[a-zA-Z0-9_]+$/;
|
|
if (!tableNameRegex.test(tableName)) {
|
|
throw new Error('Nom de table invalide');
|
|
}
|
|
|
|
try {
|
|
// Construction de l'URL avec paramètres de pagination
|
|
const url = `${publicRuntimeConfig.NEXT_PUBLIC_API_URL}/db/${tableName}?page=${page}&limit=${limit}`;
|
|
|
|
// Appel à l'API REST
|
|
const response = await fetch(url, {
|
|
method: 'GET',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
});
|
|
|
|
if (!response.ok) {
|
|
const errorData = await response.json();
|
|
throw new Error(errorData.message || 'Erreur lors de la récupération des données');
|
|
}
|
|
|
|
const data = await response.json();
|
|
return data;
|
|
} catch (error) {
|
|
console.error('Erreur lors de l\'accès à la base de données:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
}
|