39235-vm/api/messages.php
2026-03-18 12:17:47 +00:00

74 lines
2.4 KiB
PHP

<?php
declare(strict_types=1);
require_once __DIR__ . '/_bootstrap.php';
ensure_schema();
$pdo = db();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$input = read_json();
$body = trim((string)($input['body'] ?? ''));
if ($body === '') json_response(['success' => false, 'error' => 'Empty body']);
$direction = $input['direction'] ?? 'out';
$contactId = (int)($input['contact_id'] ?? 0);
$phone = trim((string)($input['phone'] ?? ''));
if ($contactId <= 0 && $phone === '') {
json_response(['success' => false, 'error' => 'Missing contact']);
}
if ($contactId <= 0 && $phone !== '') {
$stmt = $pdo->prepare("SELECT id FROM contacts WHERE phone = ?");
$stmt->execute([$phone]);
$contactId = (int)($stmt->fetchColumn() ?: 0);
if ($contactId <= 0) {
$insert = $pdo->prepare("INSERT INTO contacts (phone, name, tags, status) VALUES (?, ?, ?, 'normal')");
$insert->execute([$phone, $input['name'] ?? null, $input['tags'] ?? null]);
$contactId = (int)$pdo->lastInsertId();
}
}
$stmt = $pdo->prepare("INSERT INTO messages (contact_id, direction, body, is_read) VALUES (?, ?, ?, ?)");
$stmt->execute([$contactId, $direction, $body, $direction === 'in' ? 0 : 1]);
json_response(['success' => true, 'contact_id' => $contactId]);
}
if (isset($_GET['all'])) {
$phoneFilter = trim((string)($_GET['phone'] ?? ''));
if ($phoneFilter !== '') {
$stmt = $pdo->prepare("
SELECT m.id, m.direction, m.body, m.created_at, c.phone
FROM messages m
JOIN contacts c ON c.id = m.contact_id
WHERE c.phone LIKE ?
ORDER BY m.created_at DESC
LIMIT 200
");
$stmt->execute(['%' . $phoneFilter . '%']);
$messages = $stmt->fetchAll();
} else {
$messages = $pdo->query("
SELECT m.id, m.direction, m.body, m.created_at, c.phone
FROM messages m
JOIN contacts c ON c.id = m.contact_id
ORDER BY m.created_at DESC
LIMIT 200
")->fetchAll();
}
json_response(['messages' => $messages]);
}
$contactId = (int)($_GET['contact_id'] ?? 0);
if ($contactId <= 0) {
json_response(['messages' => []]);
}
$stmt = $pdo->prepare("SELECT id, direction, body, created_at FROM messages WHERE contact_id = ? ORDER BY created_at ASC");
$stmt->execute([$contactId]);
$messages = $stmt->fetchAll();
$pdo->prepare("UPDATE messages SET is_read = 1 WHERE contact_id = ? AND direction = 'in'")->execute([$contactId]);
json_response(['messages' => $messages]);