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
|
/**
* auth.repository.ts
* Queries de banco exclusivas do módulo de autenticação.
*/
import { eq } from 'drizzle-orm';
import type { Database } from '@/db/connection.js';
import { users, type NewUser } from '@/db/schema.js';
// ─── Busca com senha (apenas para verificação no login) ───────────────────────
export async function findUserByEmail(db: Database, email: string) {
const [user] = await db
.select()
.from(users)
.where(eq(users.email, email))
.limit(1);
return user ?? null;
}
// ─── Busca segura (sem password) ──────────────────────────────────────────────
export async function findUserById(db: Database, id: number) {
const [user] = await db
.select({
id: users.id,
name: users.name,
email: users.email,
role: users.role,
isActive: users.isActive,
createdAt: users.createdAt,
updatedAt: users.updatedAt,
})
.from(users)
.where(eq(users.id, id))
.limit(1);
return user ?? null;
}
// ─── Criação de usuário ───────────────────────────────────────────────────────
export async function createUser(
db: Database,
data: Pick<NewUser, 'name' | 'email' | 'password' | 'role'>,
) {
const now = new Date().toISOString();
const [user] = await db
.insert(users)
.values({
...data,
isActive: true,
createdAt: now,
updatedAt: now,
})
.returning({
id: users.id,
name: users.name,
email: users.email,
role: users.role,
isActive: users.isActive,
createdAt: users.createdAt,
});
return user!;
}
|