feat: initial setup with WhatsApp CRM apps and sync services
This commit is contained in:
126
apps/whatsapp-crm/src/app/api/contacts/route.ts
Normal file
126
apps/whatsapp-crm/src/app/api/contacts/route.ts
Normal file
@@ -0,0 +1,126 @@
|
||||
import { NextRequest, NextResponse } from 'next/server'
|
||||
import { initDB, createContact, getContactById, getContactByPhone, getContactsByStage, getAllContacts, updateContact, deleteContact, searchContacts, getContactsByPaymentStatus, getTaskCountByContactId } from '@/lib/db'
|
||||
import { STAGES } from '@/lib/types'
|
||||
|
||||
export async function GET(request: NextRequest) {
|
||||
const searchParams = request.nextUrl.searchParams
|
||||
const id = searchParams.get('id')
|
||||
const phone = searchParams.get('phone')
|
||||
const stage = searchParams.get('stage')
|
||||
const search = searchParams.get('search')
|
||||
const payment_status = searchParams.get('payment_status')
|
||||
|
||||
try {
|
||||
await initDB()
|
||||
|
||||
let contacts: any[] = []
|
||||
|
||||
if (id) {
|
||||
const contact = getContactById(parseInt(id))
|
||||
if (!contact) {
|
||||
return NextResponse.json({ error: 'Contact not found' }, { status: 404 })
|
||||
}
|
||||
const taskCount = getTaskCountByContactId(contact.id)
|
||||
return NextResponse.json({ ...contact, taskCount })
|
||||
}
|
||||
|
||||
if (phone) {
|
||||
const contact = getContactByPhone(phone)
|
||||
if (!contact) {
|
||||
return NextResponse.json({ error: 'Contact not found' }, { status: 404 })
|
||||
}
|
||||
return NextResponse.json(contact)
|
||||
}
|
||||
|
||||
if (stage) {
|
||||
contacts = getContactsByStage(stage as any)
|
||||
} else if (search) {
|
||||
contacts = searchContacts(search)
|
||||
} else if (payment_status) {
|
||||
contacts = getContactsByPaymentStatus(payment_status as any)
|
||||
} else {
|
||||
contacts = getAllContacts()
|
||||
}
|
||||
|
||||
if (!Array.isArray(contacts)) {
|
||||
contacts = []
|
||||
}
|
||||
|
||||
return NextResponse.json(contacts)
|
||||
} catch (error: any) {
|
||||
console.error('API Error:', error)
|
||||
return NextResponse.json({ error: error.message }, { status: 500 })
|
||||
}
|
||||
}
|
||||
|
||||
export async function POST(request: NextRequest) {
|
||||
try {
|
||||
await initDB()
|
||||
const body = await request.json()
|
||||
|
||||
const { name, phone, notes, schedule_date, follow_up_date } = body
|
||||
|
||||
if (!name || !phone) {
|
||||
return NextResponse.json(
|
||||
{ error: 'Name and phone are required' },
|
||||
{ status: 400 }
|
||||
)
|
||||
}
|
||||
|
||||
const existingContact = getContactByPhone(phone)
|
||||
if (existingContact) {
|
||||
return NextResponse.json(
|
||||
{ error: 'Contact with this phone already exists' },
|
||||
{ status: 409 }
|
||||
)
|
||||
}
|
||||
|
||||
const contact = createContact({ name, phone, notes, schedule_date, follow_up_date })
|
||||
return NextResponse.json(contact, { status: 201 })
|
||||
} catch (error: any) {
|
||||
return NextResponse.json({ error: error.message }, { status: 500 })
|
||||
}
|
||||
}
|
||||
|
||||
export async function PUT(request: NextRequest) {
|
||||
try {
|
||||
await initDB()
|
||||
const body = await request.json()
|
||||
|
||||
const { id, name, stage, notes, schedule_date, follow_up_date, payment_status } = body
|
||||
|
||||
if (!id) {
|
||||
return NextResponse.json({ error: 'Contact ID is required' }, { status: 400 })
|
||||
}
|
||||
|
||||
if (stage && !Object.values(STAGES).includes(stage)) {
|
||||
return NextResponse.json({ error: 'Invalid stage' }, { status: 400 })
|
||||
}
|
||||
|
||||
const updated = updateContact(id, { name, stage, notes, schedule_date, follow_up_date, payment_status })
|
||||
if (!updated) {
|
||||
return NextResponse.json({ error: 'Contact not found' }, { status: 404 })
|
||||
}
|
||||
|
||||
return NextResponse.json(updated)
|
||||
} catch (error: any) {
|
||||
return NextResponse.json({ error: error.message }, { status: 500 })
|
||||
}
|
||||
}
|
||||
|
||||
export async function DELETE(request: NextRequest) {
|
||||
try {
|
||||
await initDB()
|
||||
const searchParams = request.nextUrl.searchParams
|
||||
const id = searchParams.get('id')
|
||||
|
||||
if (!id) {
|
||||
return NextResponse.json({ error: 'Contact ID is required' }, { status: 400 })
|
||||
}
|
||||
|
||||
deleteContact(parseInt(id))
|
||||
return NextResponse.json({ success: true })
|
||||
} catch (error: any) {
|
||||
return NextResponse.json({ error: error.message }, { status: 500 })
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user