66 lines
1.9 KiB
PHP
66 lines
1.9 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use App\Config\Database;
|
|
|
|
class Personality
|
|
{
|
|
public static function findAll(): array
|
|
{
|
|
$db = Database::getInstance();
|
|
$stmt = $db->query('SELECT * FROM personalities ORDER BY id ASC');
|
|
return $stmt->fetchAll();
|
|
}
|
|
|
|
public static function findById(int $id): ?array
|
|
{
|
|
$db = Database::getInstance();
|
|
$stmt = $db->prepare('SELECT * FROM personalities WHERE id = :id');
|
|
$stmt->execute(['id' => $id]);
|
|
$result = $stmt->fetch();
|
|
return $result ?: null;
|
|
}
|
|
|
|
public static function create(array $data): array
|
|
{
|
|
$db = Database::getInstance();
|
|
$stmt = $db->prepare('INSERT INTO personalities (name, prompt, description, icon, is_preset, created_by) VALUES (:name, :prompt, :description, :icon, :is_preset, :created_by)');
|
|
$stmt->execute([
|
|
'name' => $data['name'],
|
|
'prompt' => $data['prompt'],
|
|
'description' => $data['description'] ?? null,
|
|
'icon' => $data['icon'] ?? null,
|
|
'is_preset' => $data['is_preset'] ?? 0,
|
|
'created_by' => $data['created_by'] ?? null,
|
|
]);
|
|
|
|
return self::findById((int) $db->lastInsertId());
|
|
}
|
|
|
|
public static function update(int $id, array $data): bool
|
|
{
|
|
$db = Database::getInstance();
|
|
|
|
$fields = [];
|
|
$params = ['id' => $id];
|
|
|
|
foreach ($data as $key => $value) {
|
|
$fields[] = "{$key} = :{$key}";
|
|
$params[$key] = $value;
|
|
}
|
|
|
|
$sql = 'UPDATE personalities SET ' . implode(', ', $fields) . ' WHERE id = :id';
|
|
$stmt = $db->prepare($sql);
|
|
|
|
return $stmt->execute($params);
|
|
}
|
|
|
|
public static function delete(int $id): bool
|
|
{
|
|
$db = Database::getInstance();
|
|
$stmt = $db->prepare('DELETE FROM personalities WHERE id = :id');
|
|
return $stmt->execute(['id' => $id]);
|
|
}
|
|
}
|