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:
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user