chore: initial commit
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
require_once __DIR__ . '/db.php';
|
||||
|
||||
try {
|
||||
match ($_SERVER['REQUEST_METHOD']) {
|
||||
'GET' => handle_get(),
|
||||
'POST' => handle_post(),
|
||||
'PUT' => handle_put(),
|
||||
'DELETE' => handle_delete(),
|
||||
default => error_out('Method not allowed', 405),
|
||||
};
|
||||
} catch (PDOException $e) {
|
||||
error_out('Database error: ' . $e->getMessage(), 500);
|
||||
}
|
||||
|
||||
// ─── GET /api/templates.php ───────────────────────────────────────────────────
|
||||
|
||||
function handle_get(): never
|
||||
{
|
||||
$rows = db()->query(
|
||||
'SELECT t.id, t.name, t.body, t.created_at, t.updated_at,
|
||||
COUNT(sr.id) AS scheduled_count
|
||||
FROM sms_templates t
|
||||
LEFT JOIN scheduled_rules sr ON sr.template_id = t.id
|
||||
GROUP BY t.id
|
||||
ORDER BY t.name'
|
||||
)->fetchAll();
|
||||
|
||||
json_out(['templates' => $rows]);
|
||||
}
|
||||
|
||||
// ─── POST /api/templates.php ──────────────────────────────────────────────────
|
||||
// Body: { "name": "...", "body": "..." }
|
||||
|
||||
function handle_post(): never
|
||||
{
|
||||
$body = json_body();
|
||||
$name = trim((string) ($body['name'] ?? ''));
|
||||
$text = trim((string) ($body['body'] ?? ''));
|
||||
|
||||
if ($name === '') {
|
||||
error_out('name is required');
|
||||
}
|
||||
if ($text === '') {
|
||||
error_out('body is required');
|
||||
}
|
||||
if (mb_strlen($text) > 160) {
|
||||
error_out('body must be 160 characters or fewer');
|
||||
}
|
||||
|
||||
$stmt = db()->prepare('INSERT INTO sms_templates (name, body) VALUES (:name, :body)');
|
||||
$stmt->execute([':name' => $name, ':body' => $text]);
|
||||
$id = (int) db()->lastInsertId();
|
||||
|
||||
json_out(['id' => $id, 'name' => $name, 'body' => $text], 201);
|
||||
}
|
||||
|
||||
// ─── PUT /api/templates.php?id=N ─────────────────────────────────────────────
|
||||
// Body: { "name": "...", "body": "..." }
|
||||
|
||||
function handle_put(): never
|
||||
{
|
||||
$id = (int) ($_GET['id'] ?? 0);
|
||||
if ($id <= 0) {
|
||||
error_out('Missing or invalid id');
|
||||
}
|
||||
|
||||
$body = json_body();
|
||||
$name = trim((string) ($body['name'] ?? ''));
|
||||
$text = trim((string) ($body['body'] ?? ''));
|
||||
|
||||
if ($name === '') {
|
||||
error_out('name is required');
|
||||
}
|
||||
if ($text === '') {
|
||||
error_out('body is required');
|
||||
}
|
||||
if (mb_strlen($text) > 160) {
|
||||
error_out('body must be 160 characters or fewer');
|
||||
}
|
||||
|
||||
$stmt = db()->prepare('UPDATE sms_templates SET name = :name, body = :body WHERE id = :id');
|
||||
$stmt->execute([':name' => $name, ':body' => $text, ':id' => $id]);
|
||||
|
||||
if ($stmt->rowCount() === 0) {
|
||||
error_out('Template not found', 404);
|
||||
}
|
||||
|
||||
json_out(['id' => $id, 'name' => $name, 'body' => $text]);
|
||||
}
|
||||
|
||||
// ─── DELETE /api/templates.php?id=N ──────────────────────────────────────────
|
||||
|
||||
function handle_delete(): never
|
||||
{
|
||||
$id = (int) ($_GET['id'] ?? 0);
|
||||
if ($id <= 0) {
|
||||
error_out('Missing or invalid id');
|
||||
}
|
||||
|
||||
$stmt = db()->prepare('DELETE FROM sms_templates WHERE id = :id');
|
||||
$stmt->execute([':id' => $id]);
|
||||
|
||||
if ($stmt->rowCount() === 0) {
|
||||
error_out('Template not found', 404);
|
||||
}
|
||||
|
||||
json_out(['deleted' => true]);
|
||||
}
|
||||
Reference in New Issue
Block a user