diff --git a/src/officesense_pi/src/api/mapper/mapper.controller.ts b/src/officesense_pi/src/api/mapper/mapper.controller.ts new file mode 100644 index 0000000..f6e9c2c --- /dev/null +++ b/src/officesense_pi/src/api/mapper/mapper.controller.ts @@ -0,0 +1,17 @@ +import type { NextFunction, Request, Response } from "express"; +import { generateMap } from "./mapper.repository.js"; + +export function checkSession(req: Request, res: Response, next: NextFunction) { + if (!(req.session as any)?.adminUser) { + return res.status(401).json({ error: 'Unauthorized' }) + } + next(); +} + +export async function getRedisMapping(req: Request, res: Response) { + try { + res.status(200).send(await generateMap()); + } catch (err) { + res.status(500).json({ error: 'Failed to fetch sessions' }) + } +} diff --git a/src/officesense_pi/src/api/mapper/mapper.repository.ts b/src/officesense_pi/src/api/mapper/mapper.repository.ts new file mode 100644 index 0000000..3a03969 --- /dev/null +++ b/src/officesense_pi/src/api/mapper/mapper.repository.ts @@ -0,0 +1,29 @@ +import { getRedis } from "../../redis/redis.js"; +import { prisma } from "../../lib/prisma.js"; + +export async function generateMap() { + const redis = getRedis(); + + const keys = await redis.keys('user:*') + + const sessions = await Promise.all(keys.map(async (key) => { + const raw = await redis.get(key) + const session = JSON.parse(raw!) + const realUserId = key.replace('user:', '') + + const user = await prisma.user.findUnique({ + where: { id: realUserId }, + select: { id: true, firstName: true, lastName: true } + }) + + return { + realUserId, + firstName: user?.firstName ?? 'Unknown', + lastName: user?.lastName ?? 'Unknown', + pseudoId: session.userID, + pseudoName: session.name + } + })) + + return sessions; +} diff --git a/src/officesense_pi/src/api/mapper/mapper.routes.ts b/src/officesense_pi/src/api/mapper/mapper.routes.ts new file mode 100644 index 0000000..1fa6965 --- /dev/null +++ b/src/officesense_pi/src/api/mapper/mapper.routes.ts @@ -0,0 +1,8 @@ +import express from "express"; +import { getRedisMapping, checkSession } from "./mapper.controller.js"; + +const router = express.Router(); + +router.get("/map", checkSession, getRedisMapping); + +export default router;