feat: link end customers directly to companies
All checks were successful
Staging Build / build (push) Successful in 3m37s

This commit is contained in:
DanielS
2026-07-04 15:17:04 +02:00
parent d3bf4b1db9
commit 5f65f890ee
5 changed files with 110 additions and 72 deletions

View File

@@ -59,25 +59,11 @@ export async function assignCompanyToUser(userId: string, companyId: string | nu
export async function getEndCustomersByCompany(companyId: string) {
const admin = createAdminClient()
// 1. Get all partners of this company
const { data: partners, error: partnersError } = await admin
.from('users')
.select('id')
.eq('company_id', companyId)
if (partnersError) throw partnersError
if (!partners || partners.length === 0) return []
const partnerIds = partners.map((p) => p.id)
// 2. Get all end customers belonging to these partners
const { data: customers, error: customersError } = await admin
.from('end_customers')
.select('*')
.in('partner_id', partnerIds)
.eq('partner_id', companyId)
if (customersError) throw customersError
return customers || []
}
@@ -91,44 +77,24 @@ export async function getCompanyDetails(companyId: string) {
export async function getEndCustomersByCompanyWithPartners(companyId: string) {
const admin = createAdminClient()
// 1. Get all partners of this company
const { data: partners, error: partnersError } = await admin
.from('users')
.select('id')
.eq('company_id', companyId)
if (partnersError) throw partnersError
if (!partners || partners.length === 0) return []
const partnerIds = partners.map((p) => p.id)
// 2. Get all end customers belonging to these partners
const { data: customers, error: customersError } = await admin
.from('end_customers')
.select('*')
.in('partner_id', partnerIds)
.eq('partner_id', companyId)
if (customersError) throw customersError
// 3. Get profiles of all these partners to resolve their names
const { data: profiles, error: profilesError } = await admin
.from('profiles')
.select('id, first_name, last_name')
.in('id', partnerIds)
if (profilesError) throw profilesError
const { data: company } = await admin
.from('companies')
.select('name')
.eq('id', companyId)
.single()
// Get user emails
const { data: { users }, error: authError } = await admin.auth.admin.listUsers()
const emailMap = new Map((users || []).map(u => [u.id, u.email || '']))
const companyName = company?.name || 'Unbekannt'
const profileMap = new Map((profiles || []).map((p) => [p.id, p]))
return customers.map((c) => {
const prof = profileMap.get(c.partner_id)
return {
...c,
partner_name: prof ? `${prof.first_name || ''} ${prof.last_name || ''}`.trim() || emailMap.get(c.partner_id) || 'Unbekannt' : emailMap.get(c.partner_id) || 'Unbekannt',
}
})
return customers.map((c) => ({
...c,
partner_name: companyName,
}))
}
export async function getCompanyPartners(companyId: string) {