Este projeto foi desenvolvido para a etapa "Desafio de Programação" do processo seletivo para desenvolvedor full-stack da Delta Global Serviços e Tecnologia S/A. Trata-se de um sistema CRUD para gerenciamento de informações de alunos.
Atendendo aos requisitos técnicos especificados, o sistema foi desenvolvido:
- Utilizando a biblioteca React para o front-end 1, o framework CodeIgniter 4 para back-end, e sistema de gerenciamento de banco de dados MySQL;
- Implementando a arquitetura RESTful para comunicação entre front-end e back-end;
- Implementando um sistema de autenticação de usuário e senha para acessar o sistema.
Por não possuir no momento um ambiente de desenvolvimento local bem configurado, optei por utilizar o GitHub Codespaces como ambiente de desenvolvimento.
O projeto é estruturado da seguinte forma:
./
├─ app/
│ ├─ mysql-db/
│ │ ├─ Dockerfile
│ │ ├─ .env
│ │ └─ ...
│ ├─ php-backend/
│ │ ├─ .env
│ │ └─ ...
│ ├─ react-frontend/
│ │ ├─ (.env.local)
│ │ └─ ...
│ └─ docker-compose.yml
├─ .gitignore
├─ README.en-US.md
└─ README.pt-BR.md
O diretório app/
é composto pelos seguintes subdiretórios:
mysql-db/
, responsável pelo serviço de banco de dados;php-backend/
, responsável pelo serviço de back-end;react-frontend/
, responsável pelo serviço de front-end.
mysql-db/
├─ .env
├─ Dockerfile
├─ init.sql
└─ my.cnf
php-backend/
├─ public/
├─ app/
│ ├─ Config/
│ │ ├─ ...
│ │ ├─ Database.php
│ │ ├─ Filters.php
│ │ └─ Routes.php
│ ├─ Controller/
│ │ ├─ Home.php
│ │ ├─ Students.php
│ │ ├─ StudentsPortraits.php
│ │ └─ Users.php
│ ├─ Filters/
│ │ └─ Cors.php
│ ├─ Models/
│ │ ├─ StudentsModel.php
│ │ ├─ StudentsPortraitsModel.php
│ │ └─ UsersModel.php
│ └─ ...
├─ .env
├─ builds
├─ composer.json
├─ composer.lock
└─ ...
react-frontend/
├─ public/
├─ src/
│ ├─ api/
│ ├─ auth/
│ ├─ components/
│ ├─ routes/
│ │ ├─ pages/
│ │ │ ├─ Home.tsx
│ │ │ ├─ SignIn.tsx
│ │ │ ├─ SignUp.tsx
│ │ │ └─ Start.tsx
│ │ └─ Root.tsx
│ ├─ theme/
│ ├─ App.tsx
│ └─ index.tsx
├─ .env.local
├─ builds
├─ package-lock.json
├─ package.json
├─ tsconfig.json
└─ ...
Recomendo utilizar as mesmas configurações utilizadas para o desenvolvimento:
- Node.js 20.8.1
- npm 10.1.0
- PHP 7.4
- Composer 2.6.5
- Módulos:
- MySQL: pdo, pdo_mysql, mysqli, mysqlnd
- XML: xml, xmlreader, xmlwriter, simplexml, xsl
- Manipulação de imagens: gd
- Outros arquivos requeridos pelo CI4: intl, json, mbstring, curl
Caso utilize versões diferentes, confira se há compatibilidade com as versões aqui listadas.
- Faça o download do repositório para seu ambiente local.
- Configure as dependências do back-end acessando o diretório
php-backend/
e executando o comandocomposer install
. - Configure as dependências do front-end acessando o diretório
react-frontend/
e executando o comandonpm install
.2
Execute cada camada de serviços em separado, conforme a seguinte ordem:
- Serviço de banco de dados: acesse o diretório
app/
e execute o comandodocker-compose up --build
. O serviço estará disponível no porto3306
. - Back-end: acesse o diretório
php-backend/
e execute o comandophp spark serve
. O serviço estará disponível no porto8080
.34 - Front-end: acesse o diretório
react-frontend/
e execute o comandonpm start
. O serviço estará disponível no porto3000
.
Algumas melhorias que poderiam ser implementadas:
- Melhor interface de usuário;
- Melhor tratamento de exceções;
- Melhor validação de inputs;
- Cache de sessão de autenticação.
Footnotes
-
Para o desenvolvimento do front-end, além da biblioteca React, optei por utilizar "Create React App", React Router, TypeScript, e a biblioteca de componentes MUI (Material UI). ↩
-
Caso opte por utilizar o GitHub Codespaces, adicione um arquivo
.env.local
no diretórioreact-frontend/
, adicionando ao arquivo o domínio do seu codespace à variável de ambienteREACT_APP_BASE_URL
. ↩ -
Faça as alterações necessárias caso queira utilizar um servidor Apache ou NGINX. ↩
-
Caso utilize o GitHub Codespaces, devido a limitações da plataforma, será necessário mudar a visibilidade do servidor back-end. ↩