API RESTful em PHP e aplicação Frontend em React para agendamento de retirada de veículos.
O projeto foi construído utilizando um monorepo, separando claramente as responsabilidades do frontend e do backend.
- Backend: PHP puro (sem frameworks). Utiliza padrão arquitetural baseado em Controllers e Repositories, com roteamento através da biblioteca
bramus/routere acesso a dados via PDO (Prepared Statements). - Frontend: React + TypeScript + Vite. Gerenciamento de estado assíncrono com React Query e construção de interface padronizada com Material UI (MUI).
- Banco de Dados: MySQL com restrições de unicidade a nível de banco para garantir a consistência das regras de negócio (prevenção de double-booking).
- Mobile First: Interface 100% responsiva baseada em CSS Flexbox e Grid do Material UI.
- Wizard Interativo (SPA): Navegação fluida em três etapas (Calendário -> Formulário -> Sucesso) sem recarregar a página.
- Defesa em Profundidade (Validação): Validação de E-mail via Regex e máscara de Telefone dinâmica (fixo/celular) em tempo real.
- Regras de Negócio na UI: Bloqueio de datas retroativas, finais de semana e limite de agendamento de 30 dias diretamente no calendário visual.
- Calendário Horizontal Customizado: Paginação fluida de dias úteis com navegação por setas, garantindo uma experiência otimizada sem o uso de "pop-ups" nativos.
- Design: Refinamento visual da interface ('Pixel Perfect') emulando padrões de design com feedbacks visuais em todas as interações e estados de carregamento do React Query.
- PHP 8.1+: Download
- Composer: Download (Gerenciador de dependências do PHP)
- Node.js 18+: Download (Necessário para o ecossistema React/Vite)
- MySQL 8+: Gerenciador de banco de dados (Pode ser utilizado via MySQL Installer, XAMPP, Laragon ou Docker).
⚠️ Atenção: Configuração do PHP (Windows) Se você estiver configurando o PHP do zero no Windows, é necessário ativar a extensão de conexão com o banco de dados para evitar o Erro 500 na API:
- Na pasta de instalação do PHP, renomeie o arquivo
php.ini-developmentparaphp.ini.- Abra o arquivo
php.iniem um editor de texto.- Procure a linha
;extension_dir = "ext"e remova o;do início.- Procure a linha
;extension=pdo_mysqle remova o;do início.- Certifique-se de adicionar o diretório do PHP nas Variáveis de Ambiente (
PATH) do Windows.
- Acesse o seu gerenciador MySQL (ex: MySQL Workbench).
- Execute o script contido em
database/schema.sqlpara criar o bancoagendamentos_db, as tabelas necessárias e inserir o veículo de teste inicial.
A API roda por padrão na porta 8000.
Retorna os dados estáticos de um veículo específico.
Retorna os horários disponíveis para agendamento em uma data específica, subtraindo os horários já agendados no banco de dados.
Recebe os dados do usuário e do agendamento, validando duplicidade. Payload esperado (JSON):
{
"veiculo_id": 1,
"nome": "Nome do Cliente",
"email": "[email protected]",
"telefone": "11999999999",
"data_hora": "2026-03-22 10:00:00"
}- Acesse a pasta
/backend. - Renomeie o arquivo
.env.examplepara.enve configure suas credenciais de banco de dados. - Abra o arquivo
.envrecém-criado e preencha com as credenciais (usuário e senha) do MySQL da sua máquina local. - Rode
composer installpara instalar o roteador e dependências. - Inicie o servidor embutido do PHP apontando para a pasta public:
php -S localhost:8000 -t public
- Acesse a pasta
/frontend. - Renomeie o arquivo
.env.examplepara.enve configure suas credenciais de banco de dados. - Rode
npm install(ouyarn install). - Rode
npm run dev(ouyarn dev) para iniciar o servidor de desenvolvimento.