46 lines
1.4 KiB
TypeScript
46 lines
1.4 KiB
TypeScript
// modules/helpdesk/helpdesk.contact.service.ts
|
|
import { FastifyInstance } from 'fastify'
|
|
import { and, eq, or } from "drizzle-orm";
|
|
import { helpdesk_contacts } from "../../../db/schema";
|
|
|
|
export async function getOrCreateContact(
|
|
server: FastifyInstance,
|
|
tenant_id: number,
|
|
{ email, phone, display_name, customer_id, contact_id }: { email?: string; phone?: string; display_name?: string; customer_id?: number; contact_id?: number }
|
|
) {
|
|
if (!email && !phone) throw new Error('Contact must have at least an email or phone')
|
|
|
|
// Bestehenden Kontakt prüfen
|
|
const matchConditions = []
|
|
if (email) matchConditions.push(eq(helpdesk_contacts.email, email))
|
|
if (phone) matchConditions.push(eq(helpdesk_contacts.phone, phone))
|
|
|
|
const existing = await server.db
|
|
.select()
|
|
.from(helpdesk_contacts)
|
|
.where(
|
|
and(
|
|
eq(helpdesk_contacts.tenantId, tenant_id),
|
|
or(...matchConditions)
|
|
)
|
|
)
|
|
.limit(1)
|
|
|
|
if (existing[0]) return existing[0]
|
|
|
|
// Anlegen
|
|
const created = await server.db
|
|
.insert(helpdesk_contacts)
|
|
.values({
|
|
tenantId: tenant_id,
|
|
email,
|
|
phone,
|
|
displayName: display_name,
|
|
customerId: customer_id,
|
|
contactId: contact_id
|
|
})
|
|
.returning()
|
|
|
|
return created[0]
|
|
}
|