Skip to content

Commit 9a96463

Browse files
authored
Merge branch 'main' into haiderr510-patch-2
2 parents 49373e4 + 173352c commit 9a96463

19 files changed

Lines changed: 617 additions & 465 deletions

File tree

src/backend/routers/case_manager.test.ts

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,10 @@ test("getMyStudentsAndIepInfo - student does not have IEP", async (t) => {
6161
.executeTakeFirstOrThrow();
6262

6363
const myStudents = await trpc.case_manager.getMyStudentsAndIepInfo.query();
64-
t.is(myStudents.length, 1);
65-
t.is(myStudents[0].student_id, student.student_id);
66-
t.is(myStudents[0].iep_id, null);
67-
t.is(myStudents[0].end_date, null);
64+
t.is(myStudents.records.length, 1);
65+
t.is(myStudents.records[0].student_id, student.student_id);
66+
t.is(myStudents.records[0].iep_id, null);
67+
t.is(myStudents.records[0].end_date, null);
6868
});
6969

7070
test("getMyStudentsAndIepInfo - student has IEP", async (t) => {
@@ -81,8 +81,8 @@ test("getMyStudentsAndIepInfo - student has IEP", async (t) => {
8181

8282
const myStudentsBefore =
8383
await trpc.case_manager.getMyStudentsAndIepInfo.query();
84-
t.is(myStudentsBefore[0].iep_id, null);
85-
t.is(myStudentsBefore[0].end_date, null);
84+
t.is(myStudentsBefore.records[0].iep_id, null);
85+
t.is(myStudentsBefore.records[0].end_date, null);
8686

8787
const iep = await trpc.student.addIep.mutate({
8888
student_id: seed.student.student_id,
@@ -92,8 +92,8 @@ test("getMyStudentsAndIepInfo - student has IEP", async (t) => {
9292

9393
const myStudentsAfter =
9494
await trpc.case_manager.getMyStudentsAndIepInfo.query();
95-
t.is(myStudentsAfter[0].iep_id, iep.iep_id);
96-
t.deepEqual(myStudentsAfter[0].end_date, iep.end_date);
95+
t.is(myStudentsAfter.records[0].iep_id, iep.iep_id);
96+
t.deepEqual(myStudentsAfter.records[0].end_date, iep.end_date);
9797
});
9898

9999
test("getMyStudentsAndIepInfo - paras do not have access", async (t) => {
@@ -375,7 +375,7 @@ test("getMyParas", async (t) => {
375375
});
376376

377377
let myParas = await trpc.case_manager.getMyParas.query();
378-
t.is(myParas.length, 0);
378+
t.is(myParas.records.length, 0);
379379

380380
await db
381381
.insertInto("paras_assigned_to_case_manager")
@@ -386,7 +386,7 @@ test("getMyParas", async (t) => {
386386
.execute();
387387

388388
myParas = await trpc.case_manager.getMyParas.query();
389-
t.is(myParas.length, 1);
389+
t.is(myParas.records.length, 1);
390390
});
391391

392392
test("getMyParas - paras do not have access", async (t) => {
@@ -409,7 +409,7 @@ test("addStaff", async (t) => {
409409
});
410410

411411
const parasBeforeAdd = await trpc.case_manager.getMyParas.query();
412-
t.is(parasBeforeAdd.length, 0);
412+
t.is(parasBeforeAdd.records.length, 0);
413413

414414
const newParaData = {
415415
first_name: "Staffy",
@@ -420,9 +420,9 @@ test("addStaff", async (t) => {
420420
await trpc.case_manager.addStaff.mutate(newParaData);
421421

422422
const parasAfterAdd = await trpc.case_manager.getMyParas.query();
423-
t.is(parasAfterAdd.length, 1);
423+
t.is(parasAfterAdd.records.length, 1);
424424

425-
const createdPara = parasAfterAdd[0];
425+
const createdPara = parasAfterAdd.records[0];
426426
t.is(createdPara.first_name, newParaData.first_name);
427427
t.is(createdPara.last_name, newParaData.last_name);
428428
t.is(createdPara.email, newParaData.email);
@@ -452,14 +452,14 @@ test("addPara", async (t) => {
452452
});
453453

454454
let myParas = await trpc.case_manager.getMyParas.query();
455-
t.is(myParas.length, 0);
455+
t.is(myParas.records.length, 0);
456456

457457
await trpc.case_manager.addPara.mutate({
458458
para_id: seed.para.user_id,
459459
});
460460

461461
myParas = await trpc.case_manager.getMyParas.query();
462-
t.is(myParas.length, 1);
462+
t.is(myParas.records.length, 1);
463463
});
464464

465465
test("addPara - paras do not have access", async (t) => {
@@ -492,14 +492,14 @@ test("removePara", async (t) => {
492492
.execute();
493493

494494
let myParas = await trpc.case_manager.getMyParas.query();
495-
t.is(myParas.length, 1);
495+
t.is(myParas.records.length, 1);
496496

497497
await trpc.case_manager.removePara.mutate({
498498
para_id: seed.para.user_id,
499499
});
500500

501501
myParas = await trpc.case_manager.getMyParas.query();
502-
t.is(myParas.length, 0);
502+
t.is(myParas.records.length, 0);
503503
});
504504

505505
test("removePara - paras do not have access", async (t) => {

src/backend/routers/case_manager.ts

Lines changed: 88 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ export const case_manager = router({
2828
.input(
2929
z
3030
.object({
31+
page: z.number().min(1).optional(),
32+
pageSize: z.number().min(1).optional(),
3133
search: z.string().optional(),
3234
sort: z.string().optional(),
3335
sortAsc: z.coerce.boolean().optional(),
@@ -36,15 +38,28 @@ export const case_manager = router({
3638
)
3739
.query(async (req) => {
3840
const { userId } = req.ctx.auth;
39-
const { search, sort, sortAsc = true } = req.input ?? {};
41+
const {
42+
search,
43+
sort,
44+
sortAsc = true,
45+
page = 1,
46+
pageSize = 25,
47+
} = req.input ?? {};
4048

4149
let query = req.ctx.db
42-
.selectFrom("iep")
43-
.fullJoin("student", (join) =>
50+
.selectFrom("student")
51+
.leftJoin("iep", (join) =>
4452
join.onRef("student.student_id", "=", "iep.student_id")
4553
)
54+
.select([
55+
"student.student_id as student_id",
56+
"first_name",
57+
"last_name",
58+
"student.grade as grade",
59+
"iep.iep_id as iep_id",
60+
"iep.end_date as end_date",
61+
])
4662
.where("assigned_case_manager_id", "=", userId);
47-
4863
if (search) {
4964
query = query.where((eb) =>
5065
eb.or([
@@ -53,16 +68,9 @@ export const case_manager = router({
5368
])
5469
);
5570
}
56-
57-
const result = await query
58-
.select([
59-
"student.student_id as student_id",
60-
"first_name",
61-
"last_name",
62-
"student.grade as grade",
63-
"iep.iep_id as iep_id",
64-
"iep.end_date as end_date",
65-
])
71+
query = query
72+
.limit(pageSize)
73+
.offset((page - 1) * pageSize)
6674
.orderBy(
6775
(eb) => {
6876
switch (sort) {
@@ -77,10 +85,31 @@ export const case_manager = router({
7785
}
7886
},
7987
sortAsc ? "asc" : "desc"
80-
)
81-
.execute();
88+
);
89+
90+
let countQuery = req.ctx.db
91+
.selectFrom("student")
92+
.select(req.ctx.db.fn.countAll().as("count"))
93+
.where("assigned_case_manager_id", "=", userId);
94+
if (search) {
95+
countQuery = countQuery.where((eb) =>
96+
eb.or([
97+
eb("student.first_name", "ilike", `%${search}%`),
98+
eb("student.last_name", "ilike", `%${search}%`),
99+
])
100+
);
101+
}
102+
103+
const [records, totalCount] = await Promise.all([
104+
query.execute(),
105+
countQuery.executeTakeFirst(),
106+
]);
82107

83-
return result;
108+
return {
109+
records,
110+
totalCount: Number(totalCount?.count ?? 0),
111+
totalPages: Math.ceil(Number(totalCount?.count ?? 0) / pageSize),
112+
};
84113
}),
85114

86115
/**
@@ -193,6 +222,8 @@ export const case_manager = router({
193222
.input(
194223
z
195224
.object({
225+
page: z.number().min(1).optional(),
226+
pageSize: z.number().min(1).optional(),
196227
search: z.string().optional(),
197228
sort: z.string().optional(),
198229
sortAsc: z.coerce.boolean().optional(),
@@ -201,10 +232,17 @@ export const case_manager = router({
201232
)
202233
.query(async (req) => {
203234
const { userId } = req.ctx.auth;
204-
const { search, sort, sortAsc = true } = req.input ?? {};
235+
const {
236+
page = 1,
237+
pageSize = 25,
238+
search,
239+
sort,
240+
sortAsc = true,
241+
} = req.input ?? {};
205242

206243
let query = req.ctx.db
207244
.selectFrom("user")
245+
.selectAll()
208246
.innerJoin(
209247
"paras_assigned_to_case_manager",
210248
"user.user_id",
@@ -221,9 +259,7 @@ export const case_manager = router({
221259
])
222260
);
223261
}
224-
225-
const result = await query
226-
.selectAll()
262+
query = query
227263
.orderBy(
228264
(eb) => {
229265
switch (sort) {
@@ -237,9 +273,38 @@ export const case_manager = router({
237273
},
238274
sortAsc ? "asc" : "desc"
239275
)
240-
.execute();
276+
.limit(pageSize)
277+
.offset((page - 1) * pageSize);
278+
279+
let countQuery = req.ctx.db
280+
.selectFrom("user")
281+
.select(req.ctx.db.fn.countAll().as("count"))
282+
.innerJoin(
283+
"paras_assigned_to_case_manager",
284+
"user.user_id",
285+
"paras_assigned_to_case_manager.para_id"
286+
)
287+
.where("paras_assigned_to_case_manager.case_manager_id", "=", userId);
288+
if (search) {
289+
countQuery = countQuery.where((eb) =>
290+
eb.or([
291+
eb("user.first_name", "ilike", `%${search}%`),
292+
eb("user.last_name", "ilike", `%${search}%`),
293+
eb("user.email", "ilike", `%${search}%`),
294+
])
295+
);
296+
}
297+
298+
const [records, totalCount] = await Promise.all([
299+
query.execute(),
300+
countQuery.executeTakeFirst(),
301+
]);
241302

242-
return result;
303+
return {
304+
records,
305+
totalCount: Number(totalCount?.count ?? 0),
306+
totalPages: Math.ceil(Number(totalCount?.count ?? 0) / pageSize),
307+
};
243308
}),
244309

245310
/**

src/components/benchmarks/BenchmarkAssignmentModal.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,8 @@ export const BenchmarkAssignmentModal = (
177177
}}
178178
>
179179
<List sx={{ p: 0 }} className={$benchmark.staffListItemText}>
180-
{myParas
181-
?.filter((para): para is ParaProps => para !== undefined)
180+
{myParas?.records
181+
.filter((para): para is ParaProps => para !== undefined)
182182
.map((para) => (
183183
<ListItem
184184
key={para.user_id}

src/components/design_system/button/Button.module.css

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@
1414

1515
.button--small {
1616
border-radius: 0.5rem;
17-
font-size: var(--base-size);
17+
font-size: 1rem;
1818
line-height: 1.25;
1919
padding: 0.4375rem 0.4375rem;
2020
}
2121

2222
.button--large {
2323
border-radius: 0.5rem;
24-
font-size: var(--base-size);
24+
font-size: 1rem;
2525
line-height: 1.5;
2626
padding: 0.4375rem 1.4375rem;
2727
}

0 commit comments

Comments
 (0)