Aplicativo para leitura e cadastro de qrcodes.
Certifique-se de ter os seguintes softwares instalados em sua máquina:
-
Clone o repositório
git clone https://github.com/GravetoGeek/mobile-app-react-native-qrcode.git
-
Entre na pasta do projeto
cd mobile-app-react-native-qrcode/backend
-
Instale as dependências
npm install
-
Configure o arquivo .env
-
Suba os containers do docker
docker compose up
Serão iniciados os seguintes containers:
backend
: Servidor Node.js com o código do projeto.database
: Banco de dados PostgreSQL para armazenar os dados da aplicação.migrations
: Container temporário para executar as migrações do Prisma.
-
Inicie o Prisma Studio
npm run studio
O Prisma Studio será aberto em seu navegador padrão na porta 5555. Você pode visualizar e gerenciar os dados do banco de dados usando a interface do Prisma Studio.
-
Acessar a documentação da API localmente.
http://localhost:3000/docs
Versão hospedada no Google Cloud Run
https://backend-1097962137391.us-central1.run.app/docs
A documentação da API será aberta em seu navegador padrão. Você pode visualizar e testar os endpoints da API usando a interface do Swagger.
No diretório backend
, você pode executar os seguintes scripts:
npm run dev-all
: Executa as migrações do Prisma, inicia o servidor em modo de desenvolvimento e abre o Prisma Studio.npm run chown
: Altera a propriedade dos arquivos no caminho especificado.npm run dist
: Limpa a pastadist
enode_modules
.npm run migration
: Executa as migrações do Prisma dentro do container Docker.npm run studio
: Inicia o Prisma Studio dentro do container Docker na porta 5555.
-
Entre na pasta do projeto:
cd mobile-app-react-native-qrcode/frontend
-
Instale as dependências:
npm install
-
Configure o arquivo .env
-
Execute o projeto:
npm run start
-
Escolha a opção
Run on Android device/emulator
para rodar o aplicativo em um dispositivo ou emulador Android. É necessário que o Android Studio esteja configurado corretamente e o dispositivo/emulador esteja conectado. A variável de ambienteANDROID_HOME
deve estar configurada para o diretório do Android SDK.
Caso deseje rodar o aplicativo em um dispositivo físico, siga as instruções aqui.
A estrutura do projeto é a seguinte:
.nvmrc
.vscode/
extensions.json
api.http
backend/
📦src
┣ 📂barcode
┃ ┣ 📂core
┃ ┃ ┣ 📂application
┃ ┃ ┃ ┣ 📂ports
┃ ┃ ┃ ┗ 📂services
┃ ┃ ┃ ┃ ┗ 📜create-barcode.service.ts
┃ ┃ ┗ 📂domain
┃ ┃ ┃ ┣ 📂entities
┃ ┃ ┃ ┃ ┣ 📜barcode.entity.spec.ts
┃ ┃ ┃ ┃ ┗ 📜barcode.entity.ts
┃ ┃ ┃ ┗ 📂ports
┃ ┃ ┃ ┃ ┣ 📜barcode.repository.ts
┃ ┃ ┃ ┃ ┗ 📜create-barcode.usecase.ts
┃ ┣ 📂driven-adapters
┃ ┃ ┣ 📂config
┃ ┃ ┃ ┗ 📜swagger.config.ts
┃ ┃ ┗ 📂prisma
┃ ┃ ┃ ┗ 📜barcode-prisma-adapter.ts
┃ ┣ 📂driving-adapters
┃ ┃ ┣ 📂controllers
┃ ┃ ┃ ┣ 📜barcode.controller.spec.ts
┃ ┃ ┃ ┗ 📜barcode.controller.ts
┃ ┃ ┣ 📂dtos
┃ ┃ ┃ ┣ 📂validators
┃ ┃ ┃ ┃ ┗ 📜.gitkeep
┃ ┃ ┃ ┣ 📜barcode.dto.ts
┃ ┃ ┃ ┣ 📜create-barcode.dto.ts
┃ ┃ ┃ ┗ 📜update-barcode.dto.ts
┃ ┃ ┣ 📂gateways
┃ ┃ ┃ ┗ 📜.gitkeep
┃ ┃ ┗ 📂services
┃ ┃ ┃ ┣ 📜barcode.service.spec.ts
┃ ┃ ┃ ┗ 📜barcode.service.ts
┃ ┣ 📂providers
┃ ┃ ┗ 📜barcode.provider.ts
┃ ┗ 📜barcode.module.ts
┣ 📂common
┃ ┣ 📂core
┃ ┃ ┣ 📂application
┃ ┃ ┃ ┣ 📂in
┃ ┃ ┃ ┃ ┗ 📜.gitkeep
┃ ┃ ┃ ┗ 📂out
┃ ┃ ┃ ┃ ┗ 📜.gitkeep
┃ ┃ ┗ 📂domain
┃ ┃ ┃ ┣ 📂entities
┃ ┃ ┃ ┃ ┗ 📜.gitkeep
┃ ┃ ┃ ┣ 📂ports
┃ ┃ ┃ ┃ ┗ 📜.gitkeep
┃ ┃ ┃ ┗ 📂types
┃ ┃ ┃ ┃ ┣ 📜.gitkeep
┃ ┃ ┃ ┃ ┗ 📜json-or-string.type.ts
┃ ┣ 📂driven-adapters
┃ ┣ 📂driving-adapters
┃ ┃ ┣ 📂controllers
┃ ┃ ┃ ┣ 📜common.controller.spec.ts
┃ ┃ ┃ ┗ 📜common.controller.ts
┃ ┃ ┣ 📂dtos
┃ ┃ ┃ ┗ 📂validators
┃ ┃ ┗ 📂services
┃ ┃ ┃ ┣ 📜common.service.spec.ts
┃ ┃ ┃ ┗ 📜common.service.ts
┃ ┣ 📂providers
┃ ┃ ┣ 📜common.spec.ts
┃ ┃ ┗ 📜common.ts
┃ ┗ 📜common.module.ts
┣ 📂database
┃ ┣ 📂driven-adapters
┃ ┃ ┗ 📂prisma
┃ ┃ ┃ ┣ 📂migrations
┃ ┃ ┃ ┃ ┣ 📂20241222213734_init
┃ ┃ ┃ ┃ ┃ ┗ 📜migration.sql
┃ ┃ ┃ ┃ ┗ 📜migration_lock.toml
┃ ┃ ┃ ┣ 📜prisma.service.spec.ts
┃ ┃ ┃ ┣ 📜prisma.service.ts
┃ ┃ ┃ ┗ 📜schema.prisma
┃ ┗ 📜database.module.ts
┣ 📜app.controller.spec.ts
┣ 📜app.controller.ts
┣ 📜app.module.ts
┣ 📜app.service.ts
┗ 📜main.ts
frontend/
📦src
┣ 📂assets
┣ 📂components
┃ ┣ 📂atoms
┃ ┃ ┣ 📜Button.tsx
┃ ┃ ┣ 📜Icon.tsx
┃ ┃ ┣ 📜Image.tsx
┃ ┃ ┣ 📜InputField.tsx
┃ ┃ ┣ 📜Label.tsx
┃ ┃ ┗ 📜Text.tsx
┃ ┣ 📂molecules
┃ ┃ ┗ 📜.gitkeep
┃ ┗ 📂organisms
┃ ┃ ┣ 📜ContentWrapper.tsx
┃ ┃ ┗ 📜ShowQrcodeData.tsx
┣ 📂contexts
┣ 📂hooks
┃ ┣ 📜useCameraPermissions.test.tsx
┃ ┣ 📜useCameraPermissions.tsx
┃ ┣ 📜useQRScanner.test.tsx
┃ ┗ 📜useQRScanner.tsx
┣ 📂screens
┃ ┣ 📜Home.test.tsx
┃ ┣ 📜Home.tsx
┃ ┣ 📜QRCodeRegistration.test.tsx
┃ ┣ 📜QRCodeRegistration.tsx
┃ ┣ 📜QRCodeScanner.test.tsx
┃ ┗ 📜QRCodeScanner.tsx
┣ 📂services
┃ ┗ 📜qrcodeService.ts
┣ 📂store
┣ 📂styles
┃ ┣ 📂components
┃ ┃ ┣ 📂atoms
┃ ┃ ┃ ┗ 📜buttonStyle.tsx
┃ ┃ ┣ 📂molecules
┃ ┃ ┃ ┗ 📜.gitkeep
┃ ┃ ┗ 📂organisms
┃ ┃ ┃ ┣ 📜contentWrapperStyle.tsx
┃ ┃ ┃ ┗ 📜showQrcodeData.tsx
┃ ┣ 📂screens
┃ ┃ ┣ 📜homeStyle.tsx
┃ ┃ ┣ 📜qrCodeRegistrationStyle.ts
┃ ┃ ┗ 📜qrCodeScannerStyle.tsx
┃ ┣ 📜colors.tsx
┃ ┣ 📜globalStyles.tsx
┃ ┣ 📜spacing.tsx
┃ ┗ 📜typography.tsx
┣ 📂types
┃ ┗ 📜index.tsx
┗ 📂utils
...
LICENSE
README.md
Este projeto segue a arquitetura hexagonal (também conhecida como Arquitetura de Portas e Adaptadores), que promove a separação de preocupações e facilita a manutenção e evolução do software. A estrutura do projeto está organizada em camadas distintas:
- Domain: Contém as regras de negócio e entidades do domínio. Esta camada é independente de frameworks e bibliotecas externas.
- Application: Contém os casos de uso e serviços que orquestram a lógica de negócio. Esta camada depende apenas da camada de domínio.
- Infrastructure - Driven Adapters: Contém implementações específicas de infraestrutura, como repositórios de dados, serviços externos e configurações. Esta camada depende das camadas de domínio e aplicação.
- Interfaces - Driving Adapters: Contém as interfaces de entrada e saída, como controladores de API, interfaces de usuário e adaptadores de comunicação.
-
Isolamento de Dependências: A arquitetura hexagonal isola a lógica de negócio das dependências externas, facilitando a substituição de tecnologias e frameworks sem impactar o núcleo do sistema.
-
Testabilidade: A separação de preocupações permite testar cada camada de forma independente, aumentando a cobertura de testes e a confiabilidade do software.
-
Flexibilidade e Extensibilidade: A estrutura modular facilita a adição de novas funcionalidades e a adaptação do sistema a novos requisitos, promovendo a evolução contínua do software.
-
Manutenibilidade: A organização clara do código torna mais fácil entender e modificar o sistema, reduzindo o tempo e o esforço necessários para realizar manutenções.
-
Reutilização de Código: A lógica de negócio encapsulada na camada de domínio pode ser reutilizada em diferentes contextos, como interfaces de usuário, APIs e serviços de backend.
Ao seguir essas boas práticas, garantimos que o projeto seja robusto, escalável e fácil de manter, proporcionando uma base sólida para o desenvolvimento contínuo e a evolução do software.
- Faça um fork do projeto
- Crie uma nova branch (
git checkout -b feature/nova-feature
) - Faça commit das suas alterações (
git commit -am 'Adiciona nova feature'
) - Faça push para a branch (
git push origin feature/nova-feature
) - Abra um Pull Request
Este projeto está licenciado sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.