53 lines
1.4 KiB
TypeScript
53 lines
1.4 KiB
TypeScript
import { Router } from "express";
|
|
import type { Request, Response } from "express";
|
|
import { tryCatch } from "../../../pkg/utils/tryCatch.js";
|
|
import { db } from "../../../pkg/db/db.js";
|
|
import { user } from "../../../pkg/db/schema/auth-schema.js";
|
|
import { userRoles } from "../../../pkg/db/schema/user_roles.js";
|
|
|
|
const router = Router();
|
|
|
|
router.post("/", async (req: Request, res: Response) => {
|
|
// should get all users
|
|
const { data: users, error: userError } = await tryCatch(
|
|
db.select().from(user)
|
|
);
|
|
|
|
if (userError) {
|
|
return res.status(500).json({
|
|
success: false,
|
|
message: "Failed to get users",
|
|
error: userError,
|
|
});
|
|
}
|
|
// should get all roles
|
|
|
|
const { data: userRole, error: userRoleError } = await tryCatch(
|
|
db.select().from(userRoles)
|
|
);
|
|
|
|
if (userRoleError) {
|
|
return res.status(500).json({
|
|
success: false,
|
|
message: "Failed to get userRoless",
|
|
error: userRoleError,
|
|
});
|
|
}
|
|
|
|
// add the roles and return
|
|
|
|
const usersWithRoles = users.map((user) => {
|
|
const roles = userRole
|
|
.filter((ur) => ur.userId === user.id)
|
|
.map((ur) => ({ module: ur.module, role: ur.role }));
|
|
|
|
return { ...user, roles };
|
|
});
|
|
|
|
return res
|
|
.status(200)
|
|
.json({ success: true, message: "User data", data: usersWithRoles });
|
|
});
|
|
|
|
export default router;
|