1+ <?php
2+
3+ /**
4+ * 🛣️ PivotPHP - Rotas Básicas
5+ *
6+ * Demonstra todos os métodos HTTP básicos no estilo Express.js
7+ *
8+ * 🚀 Como executar:
9+ * php -S localhost:8000 examples/01-basics/basic-routes.php
10+ *
11+ * 🧪 Como testar:
12+ * curl http://localhost:8000/
13+ * curl -X POST http://localhost:8000/users -H "Content-Type: application/json" -d '{"name":"John"}'
14+ * curl -X PUT http://localhost:8000/users/1 -H "Content-Type: application/json" -d '{"name":"Jane"}'
15+ * curl -X DELETE http://localhost:8000/users/1
16+ */
17+
18+ require_once dirname (__DIR__ , 2 ) . '/pivotphp-core/vendor/autoload.php ' ;
19+
20+ use PivotPHP \Core \Core \Application ;
21+
22+ $ app = new Application ();
23+
24+ // Simulação de banco de dados em memória
25+ $ users = [
26+ 1 => ['id ' => 1 , 'name ' => 'Alice ' , 'email ' => 'alice@example.com ' ],
27+ 2 => ['id ' => 2 , 'name ' => 'Bob ' , 'email ' => 'bob@example.com ' ],
28+ ];
29+ $ nextId = 3 ;
30+
31+ // 📋 GET - Listar todos os usuários
32+ $ app ->get ('/ ' , function ($ req , $ res ) use (&$ users ) {
33+ return $ res ->json ([
34+ 'users ' => array_values ($ users ),
35+ 'total ' => count ($ users ),
36+ 'endpoints ' => [
37+ 'GET / ' => 'Listar usuários ' ,
38+ 'GET /users/:id ' => 'Obter usuário específico ' ,
39+ 'POST /users ' => 'Criar usuário ' ,
40+ 'PUT /users/:id ' => 'Atualizar usuário ' ,
41+ 'DELETE /users/:id ' => 'Deletar usuário '
42+ ]
43+ ]);
44+ });
45+
46+ // 👤 GET - Obter usuário específico
47+ $ app ->get ('/users/:id ' , function ($ req , $ res ) use (&$ users ) {
48+ $ id = (int ) $ req ->param ('id ' );
49+
50+ if (!isset ($ users [$ id ])) {
51+ return $ res ->status (404 )->json (['error ' => 'Usuário não encontrado ' ]);
52+ }
53+
54+ return $ res ->json (['user ' => $ users [$ id ]]);
55+ });
56+
57+ // ➕ POST - Criar novo usuário
58+ $ app ->post ('/users ' , function ($ req , $ res ) use (&$ users , &$ nextId ) {
59+ $ body = $ req ->getBodyAsStdClass ();
60+
61+ // Validação básica
62+ if (empty ($ body ->name )) {
63+ return $ res ->status (400 )->json (['error ' => 'Nome é obrigatório ' ]);
64+ }
65+
66+ $ user = [
67+ 'id ' => $ nextId ++,
68+ 'name ' => $ body ->name ,
69+ 'email ' => $ body ->email ?? null ,
70+ 'created_at ' => date ('Y-m-d H:i:s ' )
71+ ];
72+
73+ $ users [$ user ['id ' ]] = $ user ;
74+
75+ return $ res ->status (201 )->json ([
76+ 'message ' => 'Usuário criado com sucesso ' ,
77+ 'user ' => $ user
78+ ]);
79+ });
80+
81+ // ✏️ PUT - Atualizar usuário
82+ $ app ->put ('/users/:id ' , function ($ req , $ res ) use (&$ users ) {
83+ $ id = (int ) $ req ->param ('id ' );
84+
85+ if (!isset ($ users [$ id ])) {
86+ return $ res ->status (404 )->json (['error ' => 'Usuário não encontrado ' ]);
87+ }
88+
89+ $ body = $ req ->getBodyAsStdClass ();
90+
91+ // Atualizar campos fornecidos
92+ if (isset ($ body ->name )) {
93+ $ users [$ id ]['name ' ] = $ body ->name ;
94+ }
95+ if (isset ($ body ->email )) {
96+ $ users [$ id ]['email ' ] = $ body ->email ;
97+ }
98+
99+ $ users [$ id ]['updated_at ' ] = date ('Y-m-d H:i:s ' );
100+
101+ return $ res ->json ([
102+ 'message ' => 'Usuário atualizado com sucesso ' ,
103+ 'user ' => $ users [$ id ]
104+ ]);
105+ });
106+
107+ // 🗑️ DELETE - Deletar usuário
108+ $ app ->delete ('/users/:id ' , function ($ req , $ res ) use (&$ users ) {
109+ $ id = (int ) $ req ->param ('id ' );
110+
111+ if (!isset ($ users [$ id ])) {
112+ return $ res ->status (404 )->json (['error ' => 'Usuário não encontrado ' ]);
113+ }
114+
115+ $ deletedUser = $ users [$ id ];
116+ unset($ users [$ id ]);
117+
118+ return $ res ->json ([
119+ 'message ' => 'Usuário deletado com sucesso ' ,
120+ 'deleted_user ' => $ deletedUser
121+ ]);
122+ });
123+
124+ // 🔍 GET - Buscar usuários
125+ $ app ->get ('/search ' , function ($ req , $ res ) use (&$ users ) {
126+ $ query = $ req ->get ('q ' , '' );
127+
128+ if (empty ($ query )) {
129+ return $ res ->status (400 )->json (['error ' => 'Parâmetro q é obrigatório ' ]);
130+ }
131+
132+ $ results = array_filter ($ users , function ($ user ) use ($ query ) {
133+ return stripos ($ user ['name ' ], $ query ) !== false ||
134+ stripos ($ user ['email ' ] ?? '' , $ query ) !== false ;
135+ });
136+
137+ return $ res ->json ([
138+ 'query ' => $ query ,
139+ 'results ' => array_values ($ results ),
140+ 'count ' => count ($ results )
141+ ]);
142+ });
143+
144+ $ app ->run ();
0 commit comments