Skip to content

Commit 044206a

Browse files
committed
add a update route for a book
1 parent 9549f3c commit 044206a

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

tests/Fixtures/Controllers/ValidationController.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,13 @@
55
namespace Tests\Tempest\Fixtures\Controllers;
66

77
use Tempest\Http\Response;
8+
use Tempest\Http\Responses\Json;
89
use Tempest\Http\Responses\Ok;
910
use Tempest\Http\Responses\Redirect;
1011
use Tempest\Router\Get;
1112
use Tempest\Router\Post;
13+
use Tests\Tempest\Fixtures\Modules\Books\Models\Book;
14+
use Tests\Tempest\Fixtures\Requests\BookRequest;
1215
use Tests\Tempest\Fixtures\Requests\ValidationRequest;
1316

1417
use function Tempest\uri;
@@ -26,4 +29,38 @@ public function store(ValidationRequest $request): Response // @mago-expect best
2629
{
2730
return new Redirect(uri([self::class, 'get']));
2831
}
32+
33+
#[Get(uri: '/test-validation-responses-json/{book}')]
34+
public function book(Book $book): Response
35+
{
36+
$book->load('author');
37+
38+
return new Json([
39+
'id' => $book->id->id,
40+
'title' => $book->title,
41+
'author' => [
42+
'id' => $book->author->id->id,
43+
'name' => $book->author->name,
44+
],
45+
]);
46+
}
47+
48+
#[Post(uri: '/test-validation-responses-json/{book}')]
49+
public function updateBook(BookRequest $request, Book $book): Response
50+
{
51+
$book->load('author');
52+
53+
$book->update(title: $request->get('title'));
54+
55+
return new Json([
56+
'id' => $book->id->id,
57+
'title' => $book->title,
58+
'author' => [
59+
'id' => $book->author->id->id,
60+
'name' => $book->author->name,
61+
],
62+
'chapters' => $book->chapters,
63+
'isbn' => $book->isbn,
64+
]);
65+
}
2966
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Tests\Tempest\Fixtures\Requests;
6+
7+
use Tempest\Database\HasOne;
8+
use Tempest\Http\IsRequest;
9+
use Tempest\Http\Request;
10+
use Tempest\Validation\Rules\Length;
11+
use Tests\Tempest\Fixtures\Modules\Books\Models\Author;
12+
use Tests\Tempest\Fixtures\Modules\Books\Models\Isbn;
13+
14+
final class BookRequest implements Request
15+
{
16+
use IsRequest;
17+
18+
#[Length(min: 1, max: 120)]
19+
public string $title;
20+
21+
public ?Author $author = null;
22+
23+
/** @var \Tests\Tempest\Fixtures\Modules\Books\Models\Chapter[] */
24+
public array $chapters = [];
25+
26+
#[HasOne]
27+
public ?Isbn $isbn = null;
28+
}

0 commit comments

Comments
 (0)