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 ' =>
'[email protected] ' ],
27
+ 2 => [
'id ' =>
2 ,
'name ' =>
'Bob ' ,
'email ' =>
'[email protected] ' ],
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