diff --git a/backend/src/routes/admin.ts b/backend/src/routes/admin.ts index e0ac8df..1cf30d8 100644 --- a/backend/src/routes/admin.ts +++ b/backend/src/routes/admin.ts @@ -255,19 +255,19 @@ admin.get("/users", async ({ headers, query, status }) => { const searchIsNumeric = search && /^\d+$/.test(search); const searchCondition = search ? or( - ...(searchIsNumeric ? [eq(usersTable.id, parseInt(search))] : []), - sql`${usersTable.username} ILIKE ${"%" + search + "%"}`, - sql`${usersTable.email} ILIKE ${"%" + search + "%"}`, - sql`${usersTable.slackId} ILIKE ${"%" + search + "%"}`, - ) + ...(searchIsNumeric ? [eq(usersTable.id, parseInt(search))] : []), + sql`${usersTable.username} ILIKE ${"%" + search + "%"}`, + sql`${usersTable.email} ILIKE ${"%" + search + "%"}`, + sql`${usersTable.slackId} ILIKE ${"%" + search + "%"}`, + ) : undefined; // Sort ID exact matches first, then by created date const orderClause = searchIsNumeric ? [ - sql`CASE WHEN ${usersTable.id} = ${parseInt(search)} THEN 0 ELSE 1 END`, - desc(usersTable.createdAt), - ] + sql`CASE WHEN ${usersTable.id} = ${parseInt(search)} THEN 0 ELSE 1 END`, + desc(usersTable.createdAt), + ] : [desc(usersTable.createdAt)]; const [userIds, countResult] = await Promise.all([ @@ -738,12 +738,12 @@ admin.get("/reviews/:id", async ({ params, headers }) => { hackatimeUserId, user: projectUser[0] ? { - id: projectUser[0].id, - username: projectUser[0].username, - email: isAdmin ? projectUser[0].email : undefined, - avatar: projectUser[0].avatar, - internalNotes: projectUser[0].internalNotes, - } + id: projectUser[0].id, + username: projectUser[0].username, + email: isAdmin ? projectUser[0].email : undefined, + avatar: projectUser[0].avatar, + internalNotes: projectUser[0].internalNotes, + } : null, reviews: visibleReviews.map((r) => { const reviewer = reviewers.find((rv) => rv.id === r.reviewerId); @@ -1196,12 +1196,12 @@ admin.get("/second-pass/:id", async ({ params, headers }) => { hackatimeUserId, user: projectUser[0] ? { - id: projectUser[0].id, - username: projectUser[0].username, - email: projectUser[0].email, - avatar: projectUser[0].avatar, - internalNotes: projectUser[0].internalNotes, - } + id: projectUser[0].id, + username: projectUser[0].username, + email: projectUser[0].email, + avatar: projectUser[0].avatar, + internalNotes: projectUser[0].internalNotes, + } : null, reviews: reviews.map((r) => { const reviewer = reviewers.find((rv) => rv.id === r.reviewerId); @@ -1951,6 +1951,7 @@ admin.get("/orders", async ({ headers, query, status }) => { itemImage: shopItemsTable.image, userId: usersTable.id, username: usersTable.username, + slackId: usersTable.slackId, }) .from(shopOrdersTable) .innerJoin( @@ -2214,9 +2215,9 @@ admin.get("/export/review-json", async ({ headers, status }) => { return projects.map((p) => { const hackatimeProjects = p.hackatimeProject ? p.hackatimeProject - .split(",") - .map((n: string) => n.trim()) - .filter((n: string) => n.length > 0) + .split(",") + .map((n: string) => n.trim()) + .filter((n: string) => n.length > 0) : []; return { @@ -2646,9 +2647,9 @@ admin.post("/sync-ysws", async ({ headers, set }) => { const users = userIds.length > 0 ? await db - .select({ id: usersTable.id, email: usersTable.email }) - .from(usersTable) - .where(inArray(usersTable.id, userIds)) + .select({ id: usersTable.id, email: usersTable.email }) + .from(usersTable) + .where(inArray(usersTable.id, userIds)) : []; const emailMap = new Map(users.map((u) => [u.id, u.email])); diff --git a/frontend/src/routes/admin/orders/+page.svelte b/frontend/src/routes/admin/orders/+page.svelte index c7f6d21..95cc451 100644 --- a/frontend/src/routes/admin/orders/+page.svelte +++ b/frontend/src/routes/admin/orders/+page.svelte @@ -1,7 +1,19 @@