Files
bot_palmas/services/CompanyRepository.php
T
2026-06-12 12:18:21 -05:00

83 lines
2.8 KiB
PHP

<?php
declare(strict_types=1);
class CompanyRepository
{
public static function findByPhoneNumberId(string $phoneNumberId): ?array
{
$stmt = db()->prepare("SELECT * FROM companies WHERE phone_number_id = ? AND is_active = 1 LIMIT 1");
$stmt->execute([$phoneNumberId]);
$row = $stmt->fetch();
return $row ?: null;
}
public static function findById(int $id): ?array
{
$stmt = db()->prepare("SELECT * FROM companies WHERE id = ? LIMIT 1");
$stmt->execute([$id]);
$row = $stmt->fetch();
return $row ?: null;
}
public static function findByApiKey(string $apiKey): ?array
{
$stmt = db()->prepare("SELECT * FROM companies WHERE api_key = ? AND is_active = 1 LIMIT 1");
$stmt->execute([$apiKey]);
$row = $stmt->fetch();
return $row ?: null;
}
public static function findAll(bool $includeInactive = false): array
{
$where = $includeInactive ? '1=1' : 'is_active = 1';
return db()->query("SELECT * FROM companies WHERE {$where} ORDER BY name")->fetchAll();
}
public static function save(array $data): int
{
$db = db();
$id = (int)($data['id'] ?? 0);
$fields = ['name', 'display_name', 'phone_number_id', 'display_phone', 'api_base_url', 'api_key', 'bot_type', 'requires_approval', 'is_active', 'config_json'];
$params = [];
$sets = [];
foreach ($fields as $f) {
if (array_key_exists($f, $data)) {
$sets[] = "{$f} = ?";
$params[] = is_array($data[$f]) || is_object($data[$f]) ? json_encode($data[$f]) : $data[$f];
}
}
if ($id > 0) {
$params[] = $id;
$stmt = $db->prepare("UPDATE companies SET " . implode(', ', $sets) . " WHERE id = ?");
$stmt->execute($params);
return $id;
} else {
// Ensure required fields
$required = ['name', 'phone_number_id', 'api_base_url'];
$insertData = [];
foreach ($required as $r) {
$insertData[$r] = $data[$r] ?? '';
}
foreach ($fields as $f) {
if (array_key_exists($f, $data)) {
$insertData[$f] = $data[$f];
}
}
$cols = implode(', ', array_keys($insertData));
$vals = implode(', ', array_fill(0, count($insertData), '?'));
$stmt = $db->prepare("INSERT INTO companies ({$cols}) VALUES ({$vals})");
$stmt->execute(array_values($insertData));
return (int)$db->lastInsertId();
}
}
public static function delete(int $id): bool
{
$stmt = db()->prepare("DELETE FROM companies WHERE id = ?");
$stmt->execute([$id]);
return $stmt->rowCount() > 0;
}
}