aboutsummaryrefslogtreecommitdiff
path: root/api/src/modules/auth/auth.repository.ts
blob: 25a931b88ec83c8858fb7a8500b885955a9d4b19 (plain)
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!;
}