@@ -32,12 +32,22 @@ composer require cafernandes/express-php-cycle-orm-extension
3232// bootstrap/app.php
3333use CAFernandes\ExpressPHP\CycleORM\CycleServiceProvider;
3434
35+ // Configure as variáveis de ambiente antes do registro
36+ $_ENV['DB_CONNECTION'] = 'sqlite';
37+ $_ENV['DB_DATABASE'] = __DIR__ . '/database/database.sqlite';
38+
39+ // Registre o provider
3540$app->register(new CycleServiceProvider($app));
3641```
3742
3843### 2. Configurar Variáveis de Ambiente
3944
4045``` env
46+ # SQLite (desenvolvimento)
47+ DB_CONNECTION=sqlite
48+ DB_DATABASE=/path/to/database.sqlite
49+
50+ # MySQL (produção)
4151DB_CONNECTION=mysql
4252DB_HOST=localhost
4353DB_PORT=3306
@@ -46,35 +56,86 @@ DB_USERNAME=your_username
4656DB_PASSWORD=your_password
4757```
4858
49- ### 3. Usar no Controller
59+ ### 3. Uso Básico - Acesso Direto ao Database
60+
61+ ``` php
62+ // Acesso direto para queries simples
63+ $app->get('/api/users', function ($req, $res) use ($app) {
64+ $database = $app->make('cycle.database');
65+ $users = $database->database()->query('SELECT * FROM users')->fetchAll();
66+
67+ return $res->json(['data' => $users]);
68+ });
69+
70+ // Inserção com query builder
71+ $app->post('/api/users', function ($req, $res) use ($app) {
72+ $database = $app->make('cycle.database');
73+ $data = $req->getParsedBody();
74+
75+ $database->database()->insert('users')->values([
76+ 'name' => $data['name'],
77+ 'email' => $data['email'],
78+ 'created_at' => date('Y-m-d H:i:s')
79+ ])->run();
80+
81+ return $res->json(['message' => 'User created']);
82+ });
83+ ```
84+
85+ ### 4. Uso Avançado - Arquitetura Limpa com Repositórios
5086
5187``` php
5288use CAFernandes\ExpressPHP\CycleORM\Http\CycleRequest;
5389
54- class UserController
90+ // Repository Interface
91+ interface UserRepositoryInterface
92+ {
93+ public function findById(int $id): ?User;
94+ public function findAll(): array;
95+ public function save(User $user): void;
96+ }
97+
98+ // Repository Implementation
99+ class UserRepository implements UserRepositoryInterface
55100{
56- public function index(CycleRequest $request): JsonResponse
101+ public function __construct(
102+ private DatabaseInterface $database
103+ ) {}
104+
105+ public function findById(int $id): ?User
57106 {
58- // Buscar usuários com paginação automática
59- $users = $request->paginate(
60- $request->repository(User::class)->select(),
61- page: 1,
62- perPage: 10
63- );
107+ $result = $this->database->query(
108+ 'SELECT * FROM users WHERE id = ?',
109+ [$id]
110+ )->fetch();
64111
65- return response()->json($users);
112+ return $result ? $this->mapToEntity($result) : null;
113+ }
114+
115+ private function mapToEntity(array $data): User
116+ {
117+ return new User(
118+ id: $data['id'],
119+ name: $data['name'],
120+ email: $data['email']
121+ );
66122 }
123+ }
124+
125+ // Controller com Injeção de Dependência
126+ class UserController
127+ {
128+ public function __construct(
129+ private UserRepositoryInterface $repository
130+ ) {}
67131
68- public function store(CycleRequest $request ): JsonResponse
132+ public function show(int $id ): JsonResponse
69133 {
70- // Criar entidade a partir dos dados da request
71- $user = $request->entity(User::class, [
72- 'name' => $request->input('name'),
73- 'email' => $request->input('email')
74- ]);
134+ $user = $this->repository->findById($id);
75135
76- $request->em->persist($user);
77- $request->em->run();
136+ if (!$user) {
137+ return response()->json(['error' => 'User not found'], 404);
138+ }
78139
79140 return response()->json($user);
80141 }
@@ -103,6 +164,49 @@ vendor/bin/phpunit --group integration
103164
104165## 🔧 Funcionalidades Avançadas
105166
167+ ### Sincronização de Schema
168+ ``` bash
169+ # Sincronizar schema do banco de dados
170+ php bin/console cycle:schema:sync
171+
172+ # Verificar status das migrações
173+ php bin/console cycle:status
174+ ```
175+
176+ ### Configuração Completa do Cycle ORM
177+ ``` php
178+ // config/cycle.php
179+ return [
180+ 'default' => env('DB_CONNECTION', 'sqlite'),
181+
182+ 'connections' => [
183+ 'sqlite' => [
184+ 'driver' => 'sqlite',
185+ 'database' => env('DB_DATABASE', ':memory:'),
186+ ],
187+ 'mysql' => [
188+ 'driver' => 'mysql',
189+ 'host' => env('DB_HOST', 'localhost'),
190+ 'port' => env('DB_PORT', 3306),
191+ 'database' => env('DB_DATABASE', 'express_php'),
192+ 'username' => env('DB_USERNAME', 'root'),
193+ 'password' => env('DB_PASSWORD', ''),
194+ ],
195+ ],
196+
197+ 'entities' => [
198+ 'directories' => [
199+ __DIR__ . '/../src/Domain/Entities',
200+ ],
201+ ],
202+
203+ 'cache' => [
204+ 'enabled' => env('CYCLE_CACHE_ENABLED', true),
205+ 'directory' => env('CYCLE_CACHE_DIR', __DIR__ . '/../storage/cache/cycle'),
206+ ],
207+ ];
208+ ```
209+
106210### Repository Factory com Cache
107211``` php
108212$factory = $app->get('cycle.repository');
@@ -112,18 +216,84 @@ $userRepo = $factory->getRepository(User::class); // Cached automatically
112216### Middleware de Transação
113217``` php
114218$app->use(new TransactionMiddleware($app));
219+
220+ // Transações automáticas em rotas
221+ $app->post('/api/users', function ($req, $res) {
222+ // Transação iniciada automaticamente
223+ // Commit automático em sucesso
224+ // Rollback automático em erro
225+ });
115226```
116227
117228### Sistema de Monitoramento
118229``` php
119230use CAFernandes\ExpressPHP\CycleORM\Monitoring\MetricsCollector;
120231
121- // Métricas automáticas de queries, cache, etc.
232+ // Ativar profiling de queries
233+ $_ENV['CYCLE_PROFILE_QUERIES'] = true;
234+ $_ENV['CYCLE_LOG_QUERIES'] = true;
235+
236+ // Coletar métricas
122237$metrics = MetricsCollector::getMetrics();
238+ // Exibe: queries executadas, tempo de execução, cache hits/misses
123239```
124240
241+ ### Container de Injeção de Dependência
242+ ``` php
243+ // Registrar repositórios no container
244+ $container->bind(UserRepositoryInterface::class, function ($container) {
245+ return new UserRepository(
246+ $container->get('cycle.database')
247+ );
248+ });
249+
250+ // Usar em controllers
251+ $userController = $container->get(UserController::class);
252+ ```
253+
254+ ## 📚 Exemplos de Implementação
255+
256+ ### API CRUD Completa
257+ ``` php
258+ // Estrutura de pastas recomendada
259+ ├── src/
260+ │ ├── Domain/
261+ │ │ ├── Entities/
262+ │ │ │ └── User.php
263+ │ │ └── Repositories/
264+ │ │ └── UserRepositoryInterface.php
265+ │ ├── Infrastructure/
266+ │ │ └── Repositories/
267+ │ │ └── UserRepository.php
268+ │ └── Application/
269+ │ ├── Controllers/
270+ │ │ └── UserController.php
271+ │ └── UseCases/
272+ │ └── CreateUserUseCase.php
273+ ```
274+
275+ ### Padrões de Implementação
276+
277+ A extensão suporta diferentes níveis de complexidade:
278+
279+ 1 . ** Nível Básico** : Acesso direto ao banco via Cycle Database
280+ - Ideal para MVPs e prototipagem rápida
281+ - Queries SQL diretas com segurança
282+ - Mínima configuração necessária
283+
284+ 2 . ** Nível Intermediário** : Padrão Repository
285+ - Organização do código em camadas
286+ - Facilita testes e manutenção
287+ - Reutilização de lógica de negócio
288+
289+ 3 . ** Nível Avançado** : Clean Architecture
290+ - Separação completa de responsabilidades
291+ - Use Cases e Value Objects
292+ - Máxima testabilidade e flexibilidade
293+
125294## 📚 Documentação Completa
126295
296+ - [ Guia Completo - Do Básico ao Avançado] ( docs/guia-completo.md )
127297- [ Documentação Principal] ( docs/index.md )
128298- [ Guia de Contribuição] ( CONTRIBUTING.md )
129299- [ Arquitetura Técnica] ( docs/techinical/ )
0 commit comments