Ajout de la gestion des erreurs HTTP, implémentation de la validation des comptes, et mise à jour des dépendances. Création de tests pour les entités et services de compte, ainsi que l'ajout d'un système de limitation de taux.

This commit is contained in:
2025-08-12 18:29:05 +00:00
parent 14e69e1f61
commit 3fe9fc7142
18 changed files with 1774 additions and 64 deletions

View File

@ -6,21 +6,86 @@ export default class AccountRepository implements AccountRepositoryInterface {
constructor(private readonly database: DatabaseInterface) {}
async findByEmail(email: string): Promise<AccountEntity | null> {
// Implémentation simple pour l'exemple
// Dans un vrai projet, on ferait une requête à la base de données
console.log(`Recherche du compte avec email: ${email}`);
return null;
const sql = `
SELECT id, email, password, role_id, created_at, updated_at
FROM accounts
WHERE email = $1
`;
const result = await this.database.fetchOne<{
id: string;
email: string;
password: string;
role_id: number;
created_at: Date;
updated_at: Date;
}>(sql, [email]);
if (!result) {
return null;
}
return new AccountEntity(
result.id,
result.email,
result.password,
result.role_id,
result.created_at,
result.updated_at,
);
}
async save(account: AccountEntity): Promise<number> {
// Implémentation simple pour l'exemple
console.log(`Sauvegarde du compte: ${account.id}`);
return 1;
async save(account: AccountEntity): Promise<string> {
const sql = `
INSERT INTO accounts (id, email, password, role_id, created_at, updated_at)
VALUES ($1, $2, $3, $4, $5, $6)
ON CONFLICT (id) DO UPDATE SET
email = EXCLUDED.email,
password = EXCLUDED.password,
role_id = EXCLUDED.role_id,
updated_at = EXCLUDED.updated_at
RETURNING id
`;
const result = await this.database.fetchOne<{ id: string }>(sql, [
account.id,
account.email,
account.hashedPassword,
account.roleId,
account.createdAt,
account.updatedAt,
]);
return result!.id;
}
async findById(id: string): Promise<AccountEntity | null> {
// Implémentation simple pour l'exemple
console.log(`Recherche du compte avec ID: ${id}`);
return null;
const sql = `
SELECT id, email, password, role_id, created_at, updated_at
FROM accounts
WHERE id = $1
`;
const result = await this.database.fetchOne<{
id: string;
email: string;
password: string;
role_id: number;
created_at: Date;
updated_at: Date;
}>(sql, [id]);
if (!result) {
return null;
}
return new AccountEntity(
result.id,
result.email,
result.password,
result.role_id,
result.created_at,
result.updated_at,
);
}
}