feat(contacts): Kontakt- & Firmenverwaltung implementiert

Kontakte:
- CRUD mit Soft-Delete
- Suche, Filter, Pagination
- Bulk-Import (max 1000)
- DSGVO Export & Permanent Delete
- Duplikat-Erkennung (Email)
- Tags & Custom Fields
- Marketing Consent Tracking

Firmen:
- CRUD mit Stats (Kontakte, Deals, Wert)
- Branchen-Autocomplete
- Verknüpfung mit Kontakten

Task: #9 Kontakt- & Firmenverwaltung
This commit is contained in:
2026-02-11 11:02:55 +00:00
parent 3cef9111fc
commit 1725783404
5 changed files with 1319 additions and 155 deletions

View File

@@ -4,6 +4,7 @@ import "@std/dotenv/load";
// Routes
import { authRouter } from "./routes/auth.ts";
import { contactsRouter } from "./routes/contacts.ts";
import { companiesRouter } from "./routes/companies.ts";
import { dealsRouter } from "./routes/deals.ts";
import { activitiesRouter } from "./routes/activities.ts";
import { pipelinesRouter } from "./routes/pipelines.ts";
@@ -140,12 +141,23 @@ app.use(async (ctx, next) => {
},
contacts: {
"GET /api/v1/contacts": "List contacts",
"GET /api/v1/contacts/stats": "Contact statistics",
"GET /api/v1/contacts/export": "Export contacts (DSGVO)",
"GET /api/v1/contacts/:id": "Get contact",
"POST /api/v1/contacts": "Create contact",
"POST /api/v1/contacts/import": "Bulk import contacts",
"PUT /api/v1/contacts/:id": "Update contact",
"DELETE /api/v1/contacts/:id": "Delete contact",
"POST /api/v1/contacts/import": "Import contacts (CSV)",
"GET /api/v1/contacts/export": "Export contacts (DSGVO)",
"DELETE /api/v1/contacts/:id": "Soft delete contact",
"DELETE /api/v1/contacts/:id/permanent": "Permanent delete (DSGVO)",
},
companies: {
"GET /api/v1/companies": "List companies",
"GET /api/v1/companies/industries": "Get industries",
"GET /api/v1/companies/:id": "Get company",
"GET /api/v1/companies/:id/contacts": "Get company contacts",
"POST /api/v1/companies": "Create company",
"PUT /api/v1/companies/:id": "Update company",
"DELETE /api/v1/companies/:id": "Delete company",
},
deals: {
"GET /api/v1/deals": "List deals",
@@ -185,6 +197,9 @@ app.use(authRouter.allowedMethods());
app.use(contactsRouter.routes());
app.use(contactsRouter.allowedMethods());
app.use(companiesRouter.routes());
app.use(companiesRouter.allowedMethods());
app.use(dealsRouter.routes());
app.use(dealsRouter.allowedMethods());