Skip to content

Commit e20ff4f

Browse files
committed
add a update route for a book
1 parent 91d35cb commit e20ff4f

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

1316
use function Tempest\uri;
1417

@@ -25,4 +28,38 @@ public function store(RequestForValidationController $request): Response // @mag
2528
{
2629
return new Redirect(uri([self::class, 'get']));
2730
}
31+
32+
#[Get(uri: '/test-validation-responses-json/{book}')]
33+
public function book(Book $book): Response
34+
{
35+
$book->load('author');
36+
37+
return new Json([
38+
'id' => $book->id->id,
39+
'title' => $book->title,
40+
'author' => [
41+
'id' => $book->author->id->id,
42+
'name' => $book->author->name,
43+
],
44+
]);
45+
}
46+
47+
#[Post(uri: '/test-validation-responses-json/{book}')]
48+
public function updateBook(BookRequest $request, Book $book): Response
49+
{
50+
$book->load('author');
51+
52+
$book->update(title: $request->get('title'));
53+
54+
return new Json([
55+
'id' => $book->id->id,
56+
'title' => $book->title,
57+
'author' => [
58+
'id' => $book->author->id->id,
59+
'name' => $book->author->name,
60+
],
61+
'chapters' => $book->chapters,
62+
'isbn' => $book->isbn,
63+
]);
64+
}
2865
}
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)