Skip to content

Commit df8b9af

Browse files
authored
Merge pull request #14 from drewpayment/feat/fix-login-and-registration
refactor(employees): wrap database queries in transactions
2 parents 26f9eb2 + 5006d4b commit df8b9af

File tree

2 files changed

+54
-50
lines changed

2 files changed

+54
-50
lines changed

src/lib/drizzle/mysql/models/employees.ts

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,28 +16,30 @@ export const getLegacyEmployees = async (): Promise<SelectLegacyEmployee[]> => {
1616

1717
export const searchLegacyEmployees = async (page: number, take: number, search: string | undefined): Promise<{ data: SelectLegacyEmployee[], count: number }> => {
1818
try {
19-
const data = (await legacyDb.query.legacyEmployees.findMany({
20-
where: (legacyEmployees, { and, eq, like }) => search !== undefined
21-
? and(
22-
eq(legacyEmployees.isActive, 1),
23-
like(legacyEmployees.name, `%${search}%`)
24-
)
25-
: eq(legacyEmployees.isActive, 1),
26-
orderBy: (legacyEmployees, { asc }) => asc(legacyEmployees.name),
27-
offset: (page - 1) * take,
28-
limit: take,
29-
})) as SelectLegacyEmployee[];
30-
31-
const count = (await legacyDb.query.legacyEmployees.findMany({
32-
where: (legacyEmployees, { and, eq, like }) => search !== undefined
33-
? and(
34-
eq(legacyEmployees.isActive, 1),
35-
like(legacyEmployees.name, `%${search}%`)
36-
)
37-
: eq(legacyEmployees.isActive, 1),
38-
})).length;
39-
40-
return { data, count };
19+
return await legacyDb.transaction(async (tx) => {
20+
const data = (await tx.query.legacyEmployees.findMany({
21+
where: (legacyEmployees, { and, eq, like }) => search?.length
22+
? and(
23+
eq(legacyEmployees.isActive, 1),
24+
like(legacyEmployees.name, `%${search}%`)
25+
)
26+
: eq(legacyEmployees.isActive, 1),
27+
orderBy: (legacyEmployees, { asc }) => asc(legacyEmployees.name),
28+
offset: (page - 1) * take,
29+
limit: take,
30+
})) as SelectLegacyEmployee[];
31+
32+
const count = (await tx.query.legacyEmployees.findMany({
33+
where: (legacyEmployees, { and, eq, like }) => search?.length
34+
? and(
35+
eq(legacyEmployees.isActive, 1),
36+
like(legacyEmployees.name, `%${search}%`)
37+
)
38+
: eq(legacyEmployees.isActive, 1),
39+
})).length;
40+
41+
return { data, count };
42+
});
4143
} catch (err) {
4244
console.error(err);
4345
return { data: [] as SelectLegacyEmployee[], count: 0 };

src/lib/drizzle/postgres/models/employees.ts

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -86,35 +86,37 @@ export const searchEmployees = async (clientId: string, page: number, take: numb
8686
const offset = (page - 1) * take;
8787

8888
try {
89-
const data = await db.query.employee.findMany({
90-
with: {
91-
employeeProfile: true,
92-
employeeCodes: {
93-
where: (code, { eq }) => eq(code.isActive, true),
89+
return await db.transaction(async (tx) => {
90+
const data = await tx.query.employee.findMany({
91+
with: {
92+
employeeProfile: true,
93+
employeeCodes: {
94+
where: (code, { eq }) => eq(code.isActive, true),
95+
},
9496
},
95-
},
96-
where: (employee, { eq, and, like, or }) => search !== undefined
97-
? and(
98-
or(like(employee.firstName, search), like(employee.lastName, search)),
99-
eq(employee.clientId, clientId),
100-
eq(employee.isCommissionable, true)
101-
)
102-
: and(eq(employee.clientId, clientId), eq(employee.isCommissionable, true)),
103-
offset,
104-
limit: take,
105-
}) as Employee[];
106-
107-
const count = (await db.query.employee.findMany({
108-
where: (employee, { eq, and, like, or }) => search !== undefined
109-
? and(
110-
or(like(employee.firstName, search), like(employee.lastName, search)),
111-
eq(employee.clientId, clientId),
112-
eq(employee.isCommissionable, true)
113-
)
114-
: and(eq(employee.clientId, clientId), eq(employee.isCommissionable, true)),
115-
})).length;
116-
117-
return { data, count };
97+
where: (employee, { eq, and, ilike, or }) => search != null
98+
? and(
99+
or(ilike(employee.firstName, `%${search}%`), ilike(employee.lastName, `%${search}%`)),
100+
eq(employee.clientId, clientId),
101+
eq(employee.isCommissionable, true)
102+
)
103+
: and(eq(employee.clientId, clientId), eq(employee.isCommissionable, true)),
104+
offset,
105+
limit: take,
106+
}) as Employee[];
107+
108+
const count = (await tx.query.employee.findMany({
109+
where: (employee, { eq, and, ilike, or }) => search != null
110+
? and(
111+
or(ilike(employee.firstName, `%${search}%`), ilike(employee.lastName, `%${search}%`)),
112+
eq(employee.clientId, clientId),
113+
eq(employee.isCommissionable, true)
114+
)
115+
: and(eq(employee.clientId, clientId), eq(employee.isCommissionable, true)),
116+
})).length;
117+
118+
return { data, count };
119+
});
118120
} catch (ex) {
119121
console.error(ex);
120122
return { data: [] as Employee[], count: 0 };

0 commit comments

Comments
 (0)