@@ -13,9 +13,11 @@ import { scrollTo } from "@/lib/utils.ts";
1313import {
1414 Blocks ,
1515 Cog ,
16+ Command ,
1617 Database ,
1718 Download ,
1819 Github ,
20+ Network ,
1921 Package ,
2022 Server ,
2123 Shield ,
@@ -78,44 +80,44 @@ const Constructo = () => {
7880 const useCases = [
7981 {
8082 icon : < Server className = "w-8 h-8 text-constructo-foreground" /> ,
81- title : "APIs REST/GraphQL " ,
83+ title : "Endpoints e Workers " ,
8284 description :
8385 "Ideal para construção de APIs modernas com serialização automática e validação robusta" ,
8486 benefits : [ "Serialização automática" , "Validação de entrada" , "Configuração flexível" ] ,
8587 } ,
8688 {
8789 icon : < Users className = "w-8 h-8 text-constructo-foreground" /> ,
88- title : "Aplicações Enterprise " ,
90+ title : "Sistemas de gestão " ,
8991 description :
90- "Perfeito para sistemas complexos que precisam de arquitetura sólida e manutenível " ,
92+ "Perfeito para usar a própria estrutura do projeto para poder testar os limites da aplicação " ,
9193 benefits : [ "Injeção de dependências" , "Configuração centralizada" , "Testes facilitados" ] ,
9294 } ,
9395 {
94- icon : < Zap className = "w-8 h-8 text-constructo-foreground" /> ,
95- title : "Microserviços " ,
96+ icon : < Network className = "w-8 h-8 text-constructo-foreground" /> ,
97+ title : "Microsserviços " ,
9698 description :
97- "Construa microserviços PHP com configuração padronizada e comunicação eficiente" ,
98- benefits : [ "Configuração unificada" , "Serialização consistente" , "Performance otimizada " ] ,
99+ "Construa microsserviços PHP com configuração padronizada e comunicação eficiente" ,
100+ benefits : [ "Configuração unificada" , "Serialização consistente" , "Desempenho otimizado " ] ,
99101 } ,
100102 ] ;
101103
102104 const codeExamples = [
103105 {
104- id : "container " ,
106+ id : "serialization " ,
105107 title : "Serialização" ,
106108 description :
107109 "Apenas defina os tipos dos argumentos do construtor que sua classe deve receber e deixa o resto com o Builder" ,
108110 code : `use Constructo\\Core\\Serialize\\Builder;
109111use Constructo\\Support\\Set;
110- use Constructo\\Type\\Timestamp ;
112+ use DateTime ;
111113
112114// Defina sua entidade informando os valores das propriedades no construtor
113115readonly class User
114116{
115117 public function __construct(
116118 public int $id,
117119 public string $name,
118- public Timestamp $birthDate,
120+ public DateTime $birthDate,
119121 public bool $isActive = true,
120122 public array $tags = [],
121123 ) {}
@@ -148,22 +150,20 @@ echo sprintf(" Data de Nascimento: %s\\n", $user->birthDate->format('Y-m-d'));
148150# Data de Nascimento: 1981-08-13` ,
149151 } ,
150152 {
151- id : "serialization " ,
153+ id : "deserialization " ,
152154 title : "Desserialização" ,
153155 description :
154156 "Passe uma instância de objeto e converta-a em um objeto facilmente convertível para em array associativo ou JSON" ,
155- code : `
156- use Constructo\\Core\\Deserialize\\Demolisher;
157- use Constructo\\Support\\Set;
158- use Constructo\\Type\\Timestamp;
157+ code : `use Constructo\\Core\\Deserialize\\Demolisher;
158+ use DateTime;
159159
160160// Defina sua entidade informando os valores das propriedades no construtor
161161readonly class User
162162{
163163 public function __construct(
164164 public int $id,
165165 public string $name,
166- public Timestamp $birthDate,
166+ public DateTime $birthDate,
167167 public bool $isActive = true,
168168 public array $tags = [],
169169 ) {}
@@ -173,21 +173,20 @@ readonly class User
173173$user = new User(
174174 id: 1,
175175 name: 'João Silva',
176- birthDate: new Timestamp ('1981-08-13'),
176+ birthDate: new DateTime ('1981-08-13'),
177177 isActive: true,
178178 tags: ['nice', 'welcome'],
179179);
180180
181181// Crie um novo demolisher e use-o para destruir o objeto
182182$object = (new Demolisher())->demolish($user);
183183
184- $set = Set::createFrom((array) $object);
185184echo "# Usuário: \\n";
186- echo sprintf("# ID: %s\\n", $set->get('id') );
187- echo sprintf("# Nome: %s\\n", $set->get(' name') );
188- echo sprintf("# Ativo: %s\\n", $set->get(' is_active') ? 'Sim' : 'Não');
189- echo sprintf("# Tags: %s\\n", implode(', ', $set->get(' tags') ));
190- echo sprintf("# Data de Nascimento: %s\\n", $set->get(' birth_date') );
185+ echo sprintf("# ID: %s\\n", $object->id );
186+ echo sprintf("# Nome: %s\\n", $object-> name);
187+ echo sprintf("# Ativo: %s\\n", $object-> is_active ? 'Sim' : 'Não');
188+ echo sprintf("# Tags: %s\\n", implode(', ', $object-> tags));
189+ echo sprintf("# Data de Nascimento: %s\\n", $object-> birth_date);
191190
192191# Usuário:
193192# ID: 1
@@ -202,7 +201,7 @@ echo sprintf("# Data de Nascimento: %s\\n", $set->get('birth_date'));
202201 description :
203202 "Simplesmente utilize as propriedades da classe que receberá os dados para gerar as regras de validação para sua `action`" ,
204203 code : `use Constructo\\Factory\\ReflectorFactory;
205- use Constructo\\Type\\Timestamp ;
204+ use DateTime ;
206205
207206use function array_export;
208207
@@ -212,7 +211,7 @@ readonly class User
212211 public function __construct(
213212 public int $id,
214213 public string $name,
215- public Timestamp $birthDate,
214+ public DateTime $birthDate,
216215 public bool $isActive = true,
217216 public array $tags = [],
218217 ) {
@@ -226,7 +225,7 @@ echo "# Regras de validação \\n";
226225echo array_export($schema->rules(), 1);
227226echo "\\n";
228227
229- # Regras de validação
228+ # Regras de validação geradas:
230229[
231230 'id' => ['required', 'integer'],
232231 'name' => ['required', 'string'],
@@ -239,32 +238,36 @@ echo "\\n";
239238 {
240239 id : "testing" ,
241240 title : "Testes" ,
242- description : "Use Faker para gerar dados realistas baseados nas suas classes" ,
243- code : `<?php
244- use Devitools\\Constructo\\Testing\\Factory;
245-
246- class UserFactory extends Factory
241+ description :
242+ "Combine alguns recursos para gerar dados de forma dinâmica a partir da estrutura das classes envolvidas na rotina de teste" ,
243+ code : `use App\\Domain\\Entity\\User;
244+ use App\\Infrastructure\\Persistence\\Postgres\\PostgresUserRepository;
245+ use Constructo\\Testing\\BuilderExtension;
246+ use Constructo\\Testing\\FakerExtension;
247+ use Constructo\\Testing\\MakeExtension;
248+ use Illuminate\\Foundation\\Testing\\TestCase;
249+
250+ class UserRepositoryTest extends TestCase
247251{
248- protected string $model = User::class;
249-
250- public function definition(): array
251- {
252- return [
253- 'name' => $this->faker->name(),
254- 'email' => $this->faker->email(),
255- 'createdAt' => $this->faker->dateTime()
256- ];
257- }
258- }
252+ use MakeExtension;
253+ use FakerExtension;
254+ use BuilderExtension;
259255
260- // Gerar um usuário fake
261- $user = UserFactory::make();
256+ final public function test_create_user_successfully(): void
257+ {
258+ // Assert
259+ $values = $this->faker()->fake(User::class);
260+ $user = $this->builder()->build(User::class, $values);
261+ $userRepository = $this->make(PostgresUserRepository::class);
262262
263- // Gerar múltiplos usuários
264- $users = UserFactory::times(10)->make( );
263+ // Act
264+ $result = $this->userRepository->create($user );
265265
266- // Persistir no banco (se configurado)
267- $user = UserFactory::create();` ,
266+ // Assert
267+ $this->assertNotNull($result);
268+ $this->assertDatabaseHas('users', ['email' => $user->email]);
269+ }
270+ }` ,
268271 } ,
269272 ] ;
270273
@@ -274,12 +277,12 @@ $user = UserFactory::create();`,
274277 description : "Totalmente compatível com PSR-11, PSR-4 e outros padrões" ,
275278 } ,
276279 {
277- title : "Type Safety " ,
278- description : "Aproveite ao máximo o PHP 8.0+ com tipagem forte" ,
280+ title : "Tipagem Forte " ,
281+ description : "Aproveite ao máximo o PHP 8.0+ os recursos de tipagem forte" ,
279282 } ,
280283 {
281284 title : "Performance" ,
282- description : "Otimizado para alta performance em produção" ,
285+ description : "Otimizado para alto desempenho em produção" ,
283286 } ,
284287 {
285288 title : "Flexibilidade" ,
0 commit comments