An open API service indexing awesome lists of open source software.

https://github.com/t0malexander/nlw-esports

Encontre seu duo para jogatinas online com esta aplicação fullstack e multiplataforma desenvolvida com React, React Native e Node.js
https://github.com/t0malexander/nlw-esports

axios babel expo express google-fonts nodejs phosphor-icons prisma radix-ui react react-native sqlite tailwind-css typescript vitejs

Last synced: 2 months ago
JSON representation

Encontre seu duo para jogatinas online com esta aplicação fullstack e multiplataforma desenvolvida com React, React Native e Node.js

Awesome Lists containing this project

README

        

# NLW eSports

> ### Descrição
> Essa é uma aplicação fullstack e multiplataforma (desktop e mobile) com o propósito de conectar jogadores em busca de parceiros para jogos multijogador online no qual foi desenvolvida utilizando majoritariamente React, React Native, Typescript, SQLite e Node.js. Também utiliza outras bibliotecas e ferramentas como Expo, Babel, Prisma e Tailwind CSS. Para utilizá-la, é necessário ter Expo CLI e Node.js instalados, além do Expo Go no smartphone

## Dependências e bibliotecas

- **React:** biblioteca JavaScript para construção de interfaces de usuário. É mantida pela Meta Incorporation e é uma das tecnologias mais populares em aplicações web modernas
- **React Native:** framework para construção de aplicativos móveis utilizando React. Permite o desenvolvimento de aplicativos para iOS e Android com uma única base de código, utilizando componentes nativos do sistema operacional
- **Typescript:** linguagem de programação que adiciona tipagem estática e outras funcionalidades ao JavaScript. Permite detectar erros em tempo de compilação e melhorar a qualidade do código em projetos grandes
- **Node.js:** ambiente de execução JavaScript baseado no motor V8 do Google Chrome. Permite que o JavaScript seja executado no lado do servidor, permitindo a construção de aplicações web escaláveis e de alta performance
- **SQLite:** banco de dados relacional que utiliza arquivos locais para armazenar dados. É uma opção leve e eficiente para aplicações que não exigem alta escalabilidade
- **Expo:** plataforma para desenvolvimento de aplicativos móveis utilizando React Native. Oferece diversas ferramentas para facilitar o desenvolvimento, como um conjunto de componentes pré-construídos e acesso a APIs nativas
- **Babel:** transcompilador que permite escrever código JavaScript utilizando recursos mais modernos e compatíveis com padrões recentes, mas que ainda não são suportados por todos os navegadores. O Babel transforma esse código em uma versão compatível para uso em produção
- **Google Fonts:** biblioteca de fontes gratuitas disponibilizada pelo Google. Permite que desenvolvedores utilizem fontes em seus projetos sem precisar armazenar os arquivos localmente
- **Phosphor Icons:** conjunto de ícones de código aberto criados pela equipe do GitHub. Os ícones são disponibilizados em formato SVG e podem ser utilizados em projetos web
- **Radix:** conjunto de componentes React desenvolvido pela equipe do Modulz. Oferece componentes para construção de interfaces de usuário acessíveis e com boa performance
- **Prisma:** ferramenta de mapeamento objeto-relacional (ORM) para Node.js e TypeScript. Permite que desenvolvedores trabalhem com banco de dados utilizando modelos de objetos em vez de escrever SQL diretamente
- **Express.js:** framework para construção de aplicações web em Node.js. Oferece uma camada de abstração sobre o protocolo HTTP e facilita a criação de rotas e manipulação de requisições e respostas
- **Axios HTTP:** biblioteca JavaScript para realização de requisições HTTP em navegadores e Node.js. Oferece uma API simples e fácil de usar para realizar chamadas a APIs externas
- **Tailwind CSS:** framework CSS que utiliza classes predefinidas para facilitar a criação de layouts responsivos e estilos personalizados. Permite a criação de interfaces de usuário sem a necessidade de escrever CSS do zero
- **Vite.js:** ferramenta de inicialização rápida para projetos JavaScript e TypeScript. Permite que o desenvolvimento seja realizado com um servidor de desenvolvimento integrado e oferece recursos como recarregamento veloz para acelerar o ciclo de desenvolvimento

## Pré-requisitos

- [**Expo CLI**](https://docs.expo.dev/archive/expo-cli/#installation) instalado na máquina com versão mínima 48.0.0 ou superior
- [**Node.js**](https://nodejs.org/en/download) instalado na máquina com versão mínima 17.0.0 ou superior
- [**Expo Go**](https://expo.dev/client) instalado em seu smartphone (disponível para iOs e Android)

## Instalação e uso local

1. Clone o repositório

```bash
gh repo clone T0mAlexander/NLW-eSports
```

2. Acesse os diretórios `mobile`, `server` e `web` e instale as dependências

```bash
cd && npm install
```

3. Após a instalação, inicie o servidor

```bash
npm run server
```

- 💡 O servidor estará sendo executado na porta `3000`

- **Dica de ouro:** caso queira ver a interface do banco de dados, digite o comando `npx prisma studio` no terminal

> **Lembrete:** certifique-se antes de navegar no diretório `server`

4. No diretório ``mobile``, troque o IP exemplar pelo IPV4 da sua máquina localizados nas linhas N°30 e N°37 do arquivo [src/screens/Game/index.tsx](https://github.com/T0mAlexander/NLW-eSports/blob/main/mobile/src/screens/Game/index.tsx#L30) e também na linha N° 24 do arquivo [src/screens/Home/index.tsx](https://github.com/T0mAlexander/NLW-eSports/blob/main/mobile/src/screens/Home/index.tsx#L24)

❓ **Para descobrir seu IPV4**

>**Linux**: abra o terminal e digite o comando

```bash
ifconfig | grep -m 1 inet
```

>**Windows:** abra o CMD e digite

```bash
ipconfig | findstr /R /C:"IPv4 Address"
```

5. Ao finalizar, vá até o diretório `mobile` e inicie a instância da aplicação para dispositivo móvel e em seguida, leia o QR Code gerado em seu terminal com o aplicativo do **Expo Go**

```bash
expo start
```

> ⚠️ Este processo poderá levar entre 5 até 10 minutos na primeira vez, pois o Expo estará fazendo a transcompilação do código para renderizar a aplicação. Após isso, você poderá interagir com a aplicação final

6. Para iniciar a aplicação web, vá até o diretório `web` e digite o comando abaixo

```bash
npm run dev
```

**Lembrete:** o Vite.js por padrão hospeda a prévia da aplicação desktop no endereço `http://localhost:5173`

## Modelagem do Banco de Dados

Este projeto utiliza o SQLite. A URL de conexão é determinada por uma variável de ambiente disponível no arquivo [.env.example](https://github.com/T0mAlexander/NLW-eSports/blob/main/server/src/.env.example) em que seu valor deverá ser o caminho relativo até o arquivo no formato **.sqlite** gerado na pasta [database](https://github.com/T0mAlexander/NLW-eSports/tree/main/server/src/database)

### Tabela Game 🎮

Representa um jogo na aplicação.

| Coluna | Descrição |
|--------------|------------------------------------------------------------|
| id | ID do jogo (UUID). |
| title | Título do jogo. |
| bannerUrl | URL da imagem do banner do jogo. |
| ads | Relação com os anúncios publicados para este jogo. |

### Tabela Ad 📢

Representa um anúncio de procura por parceiro.

| Coluna | Descrição |
|--------------|----------------------------------------------------------------------------------|
| id | ID do anúncio (UUID). |
| gameId | ID do jogo ao qual o anúncio está vinculado. |
| name | Nome do anunciante. |
| yearsPlaying | Quantidade de anos que o anunciante joga o jogo. |
| discord | Nome do usuário do Discord do anunciante. |
| weekDays | Dias da semana que o anunciante está disponível para jogar. Separados por vírgula.|
| hourStart | Horário de início em que o anunciante está disponível para jogar. |
| hourEnd | Horário de término em que o anunciante está disponível para jogar. |
| useVoip | Preferência do usuário do chat de voz durante o jogo. |
| createdAt | Data e hora em que o anúncio foi criado. |

### Relações

- O modelo `Ad` possui uma relação `game` com o modelo `Game`, onde `gameId` é um chave estrangeira que referencia o campo `id` do modelo `Game`.

## Termos de uso

Este projeto é de livre uso para outros sem nenhuma restrição para cópias ou forks 👍🏻

### Autor: Tom Alexander