All files / apps/web/src/handlers/admin users.ts

100% Statements 6/6
100% Branches 6/6
100% Functions 3/3
100% Lines 6/6

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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    6x             2x 2x     2x                             2x 4x                                
import { adminProcedure } from "~web/handlers/trpc";
 
export const procedure = adminProcedure
	.meta({
		title: "Get all users",
		description:
			"Returns all users other than the caller's, with the caller's matching peer for each (admin only).",
	})
	.query(async ({ ctx }) => {
		const { database } = ctx;
		const result = await database
			.selectFrom("users")
			.leftJoin("peers", (qb) =>
				qb
					.onRef("users.id", "=", "peers.connectedUserId")
					.on("peers.ownerUserId", "=", ctx.auth.userId),
			)
			.where("users.id", "!=", ctx.auth.userId)
			.orderBy("peers.name")
			.orderBy("users.email")
			.select([
				"peers.id as peerId",
				"peers.name",
				"users.id as userId",
				"users.avatarUrl",
				"users.email",
			])
			.execute();
		return {
			items: result.map((element) => ({
				user: {
					email: element.email,
					id: element.userId,
					avatarUrl: element.avatarUrl ?? undefined,
				},
				peer:
					element.peerId && element.name
						? {
								id: element.peerId,
								name: element.name,
							}
						: undefined,
			})),
		};
	});