Skip to content

Commit 5006d4b

Browse files
committed
refactor(employees): wrap database queries in transactions
This commit wraps database queries for employee data retrieval within transactions to ensure data consistency and prevent partial updates. This improves the reliability of the application.
1 parent a753607 commit 5006d4b

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)