aboutsummaryrefslogtreecommitdiff
path: root/api/src/modules/users/users.service.ts
blob: a0fda4073f81cd432f1c9d88583c4690f26de1b3 (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
import { eq } from 'drizzle-orm';
import { db } from '@/db/client';
import { users } from '@/db/schema';
import type { CreateUserInput, UpdateUserInput } from './users.schema';

export async function findAllUsers() {
  return db.select().from(users);
}

export async function findUserById(id: number) {
  const result = await db.select().from(users).where(eq(users.id, id)).limit(1);
  return result[0] ?? null;
}

export async function createUser(data: CreateUserInput) {
  const [created] = await db
    .insert(users)
    .values({
      name: data.name,
      gross_salary: data.gross_salary,
      net_salary_override: data.net_salary_override ?? null,
    })
    .returning();
  return created;
}

export async function updateUser(id: number, data: UpdateUserInput) {
  const now = new Date().toISOString();

  const [updated] = await db
    .update(users)
    .set({
      ...(data.name !== undefined && { name: data.name }),
      ...(data.gross_salary !== undefined && { gross_salary: data.gross_salary }),
      // Permite setar null explicitamente (para remover o override)
      ...(data.net_salary_override !== undefined && {
        net_salary_override: data.net_salary_override,
      }),
      updated_at: now,
    })
    .where(eq(users.id, id))
    .returning();

  return updated ?? null;
}

export async function deleteUser(id: number) {
  const [deleted] = await db
    .delete(users)
    .where(eq(users.id, id))
    .returning();
  return deleted ?? null;
}