Added Backend
This commit is contained in:
117
backend/src/routes/admin.ts
Normal file
117
backend/src/routes/admin.ts
Normal file
@@ -0,0 +1,117 @@
|
||||
import { FastifyInstance } from "fastify";
|
||||
import { eq } from "drizzle-orm";
|
||||
|
||||
import {
|
||||
authTenantUsers,
|
||||
authUsers,
|
||||
tenants,
|
||||
} from "../../db/schema";
|
||||
|
||||
export default async function adminRoutes(server: FastifyInstance) {
|
||||
|
||||
// -------------------------------------------------------------
|
||||
// POST /admin/add-user-to-tenant
|
||||
// -------------------------------------------------------------
|
||||
server.post("/admin/add-user-to-tenant", async (req, reply) => {
|
||||
try {
|
||||
const body = req.body as {
|
||||
user_id: string;
|
||||
tenant_id: number;
|
||||
role?: string;
|
||||
mode?: "single" | "multi";
|
||||
};
|
||||
|
||||
if (!body.user_id || !body.tenant_id) {
|
||||
return reply.code(400).send({
|
||||
error: "user_id and tenant_id required"
|
||||
});
|
||||
}
|
||||
|
||||
const mode = body.mode ?? "multi";
|
||||
|
||||
// ----------------------------
|
||||
// SINGLE MODE → alte Verknüpfungen löschen
|
||||
// ----------------------------
|
||||
if (mode === "single") {
|
||||
await server.db
|
||||
.delete(authTenantUsers)
|
||||
.where(eq(authTenantUsers.user_id, body.user_id));
|
||||
}
|
||||
|
||||
// ----------------------------
|
||||
// Neue Verknüpfung hinzufügen
|
||||
// ----------------------------
|
||||
|
||||
await server.db
|
||||
.insert(authTenantUsers)
|
||||
// @ts-ignore
|
||||
.values({
|
||||
user_id: body.user_id,
|
||||
tenantId: body.tenant_id,
|
||||
role: body.role ?? "member",
|
||||
});
|
||||
|
||||
return { success: true, mode };
|
||||
|
||||
} catch (err) {
|
||||
console.error("ERROR /admin/add-user-to-tenant:", err);
|
||||
return reply.code(500).send({ error: "Internal Server Error" });
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// -------------------------------------------------------------
|
||||
// GET /admin/user-tenants/:user_id
|
||||
// -------------------------------------------------------------
|
||||
server.get("/admin/user-tenants/:user_id", async (req, reply) => {
|
||||
try {
|
||||
const { user_id } = req.params as { user_id: string };
|
||||
|
||||
if (!user_id) {
|
||||
return reply.code(400).send({ error: "user_id required" });
|
||||
}
|
||||
|
||||
// ----------------------------
|
||||
// 1) User existiert?
|
||||
// ----------------------------
|
||||
const [user] = await server.db
|
||||
.select()
|
||||
.from(authUsers)
|
||||
.where(eq(authUsers.id, user_id))
|
||||
.limit(1);
|
||||
|
||||
if (!user) {
|
||||
return reply.code(400).send({ error: "faulty user_id presented" });
|
||||
}
|
||||
|
||||
// ----------------------------
|
||||
// 2) Tenants Join über auth_tenant_users
|
||||
// ----------------------------
|
||||
const tenantRecords = await server.db
|
||||
.select({
|
||||
id: tenants.id,
|
||||
name: tenants.name,
|
||||
short: tenants.short,
|
||||
locked: tenants.locked,
|
||||
numberRanges: tenants.numberRanges,
|
||||
extraModules: tenants.extraModules,
|
||||
})
|
||||
.from(authTenantUsers)
|
||||
.innerJoin(
|
||||
tenants,
|
||||
eq(authTenantUsers.tenant_id, tenants.id)
|
||||
)
|
||||
.where(eq(authTenantUsers.user_id, user_id));
|
||||
|
||||
return {
|
||||
user_id,
|
||||
tenants: tenantRecords,
|
||||
};
|
||||
|
||||
} catch (err) {
|
||||
console.error("ERROR /admin/user-tenants:", err);
|
||||
return reply.code(500).send({ error: "Internal Server Error" });
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user