79 lines
2.5 KiB
TypeScript
79 lines
2.5 KiB
TypeScript
import { FastifyInstance } from "fastify";
|
|
|
|
export default async function meRoutes(server: FastifyInstance) {
|
|
server.get("/me", async (req, reply) => {
|
|
const authUser = req.user // kommt aus JWT (user_id + tenant_id)
|
|
|
|
if (!authUser) {
|
|
return reply.code(401).send({ error: "Unauthorized" })
|
|
}
|
|
|
|
const user_id = req.user.user_id
|
|
const tenant_id = req.user.tenant_id
|
|
|
|
// 1. User laden
|
|
const { data: user, error: userError } = await server.supabase
|
|
.from("auth_users")
|
|
.select("id, email, created_at, must_change_password")
|
|
.eq("id", authUser.user_id)
|
|
.single()
|
|
|
|
if (userError || !user) {
|
|
return reply.code(401).send({ error: "User not found" })
|
|
}
|
|
|
|
// 2. Tenants laden (alle Tenants des Users)
|
|
const { data: tenantLinks, error: tenantLinksError } = await server.supabase
|
|
.from("auth_users")
|
|
.select(`*, tenants!auth_tenant_users ( id, name,short, locked, extraModules, businessInfo, numberRanges, dokuboxkey, standardEmailForInvoices, standardPaymentDays )`)
|
|
.eq("id", authUser.user_id)
|
|
.single();
|
|
|
|
if (tenantLinksError) {
|
|
|
|
console.log(tenantLinksError)
|
|
|
|
return reply.code(401).send({ error: "Tenant Error" })
|
|
}
|
|
|
|
const tenants = tenantLinks?.tenants
|
|
|
|
// 3. Aktiven Tenant bestimmen
|
|
const activeTenant = authUser.tenant_id /*|| tenants[0].id*/
|
|
|
|
// 4. Profil für den aktiven Tenant laden
|
|
let profile = null
|
|
if (activeTenant) {
|
|
const { data: profileData } = await server.supabase
|
|
.from("auth_profiles")
|
|
.select("*")
|
|
.eq("user_id", user.id)
|
|
.eq("tenant_id", activeTenant)
|
|
.single()
|
|
|
|
profile = profileData
|
|
}
|
|
|
|
// 5. Permissions laden (über Funktion)
|
|
const { data: permissionsData, error: permissionsError } = await server.supabase
|
|
.rpc("auth_get_user_permissions", {
|
|
uid: user.id,
|
|
tid: activeTenant || null
|
|
})
|
|
|
|
if(permissionsError) {
|
|
console.log(permissionsError)
|
|
}
|
|
|
|
const permissions = permissionsData.map(i => i.permission) || []
|
|
|
|
// 6. Response zurückgeben
|
|
return {
|
|
user,
|
|
tenants,
|
|
activeTenant,
|
|
profile,
|
|
permissions
|
|
}
|
|
})
|
|
} |