Added Models

This commit is contained in:
julien
2026-03-09 12:22:50 +01:00
parent 18eabb0560
commit 4342751c70
7 changed files with 146 additions and 44 deletions

View File

@@ -4,6 +4,8 @@ declare(strict_types=1);
namespace App\Repositories;
use App\Models\Post;
/**
* Interface décrivant les opérations sur les posts.
*/
@@ -12,7 +14,7 @@ interface PostRepositoryInterface
/**
* Retourne tous les posts triés par id descendant.
*
* @return array<int, array{id:int, title:string, content:string}>
* @return Post[] Tableau d'objets Post
*/
public function allDesc(): array;
@@ -20,26 +22,26 @@ interface PostRepositoryInterface
* Trouve un post par son id.
*
* @param int $id
* @return array{id:int, title:string, content:string}|null
* @return Post|null
*/
public function find(int $id): ?array;
public function find(int $id): ?Post;
/**
* Crée un post.
*
* @param array{title:string,content:string} $data
* @param Post $post Instance contenant les données à insérer (id ignoré)
* @return int id inséré
*/
public function create(array $data): int;
public function create(Post $post): int;
/**
* Met à jour un post.
*
* @param int $id
* @param array{title:string,content:string} $data
* @param Post $post Données à mettre à jour (id ignoré)
* @return void
*/
public function update(int $id, array $data): void;
public function update(int $id, Post $post): void;
/**
* Supprime un post.

View File

@@ -5,10 +5,12 @@ declare(strict_types=1);
namespace App\Repositories;
use Medoo\Medoo;
use App\Models\Post;
/**
* Repository pour "post" basé sur Medoo.
* Retourne et consomme des tableaux associatifs.
*
* Cette implémentation convertit les lignes DB en objets App\Models\Post.
*/
class PostRepositoryMedoo implements PostRepositoryInterface
{
@@ -25,19 +27,23 @@ class PostRepositoryMedoo implements PostRepositoryInterface
public function allDesc(): array
{
$rows = $this->db->select('post', ['id', 'title', 'content'], ['ORDER' => ['id' => 'DESC']]);
return is_array($rows) ? array_map(function ($r) {
return [
'id' => (int)($r['id'] ?? 0),
'title' => (string)($r['title'] ?? ''),
'content' => (string)($r['content'] ?? ''),
];
}, $rows) : [];
if (!is_array($rows)) {
return [];
}
return array_map(function ($r) {
return new Post(
(int)($r['id'] ?? 0),
(string)($r['title'] ?? ''),
(string)($r['content'] ?? '')
);
}, $rows);
}
/**
* @inheritDoc
*/
public function find(int $id): ?array
public function find(int $id): ?Post
{
$row = $this->db->get('post', ['id', 'title', 'content'], ['id' => $id]);
@@ -45,34 +51,31 @@ class PostRepositoryMedoo implements PostRepositoryInterface
return null;
}
return [
'id' => (int)($row['id'] ?? 0),
'title' => (string)($row['title'] ?? ''),
'content' => (string)($row['content'] ?? ''),
];
return new Post(
(int)($row['id'] ?? 0),
(string)($row['title'] ?? ''),
(string)($row['content'] ?? '')
);
}
/**
* @inheritDoc
*/
public function create(array $data): int
public function create(Post $post): int
{
$this->db->insert('post', [
'title' => $data['title'] ?? '',
'content' => $data['content'] ?? '',
]);
$data = $post->toPersistableArray();
$this->db->insert('post', $data);
return (int)$this->db->id();
}
/**
* @inheritDoc
*/
public function update(int $id, array $data): void
public function update(int $id, Post $post): void
{
$this->db->update('post', [
'title' => $data['title'] ?? '',
'content' => $data['content'] ?? '',
], ['id' => $id]);
$data = $post->toPersistableArray();
$this->db->update('post', $data, ['id' => $id]);
}
/**