Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reeimplementação do projeto utilizando Typescript + DDD #2

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 46 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,65 +1,86 @@
# Sorteio Websocket - Código Fonte TV

Uma aplicação simples de sorteio em tempo real utilizando WebSockets, desenvolvida para a o canal Código Fonte TV no YouTube.
Uma aplicação simples de sorteio em tempo real utilizando WebSockets, agora com suporte a TypeScript, desenvolvida para o canal Código Fonte TV no YouTube.

## Descrição

Esta aplicação consiste em duas partes principais:
Esta aplicação foi aprimorada para incluir uma funcionalidade de contagem regressiva e validação de arquivo `.env` usando Zod.
A mesma consiste em duas partes principais:

1. **Admin**: Uma interface para realizar o sorteio e visualizar a quantidade de participantes conectados.
2. **Cliente**: Uma interface para os usuários se conectarem e participarem do sorteio. Quando o sorteio é realizado, a interface do cliente muda de cor e mostra um código se o usuário ganhar.
1. **Admin**: Uma interface para realizar o sorteio, visualizar a quantidade de participantes conectados e iniciar a contagem regressiva para o sorteio.
2. **Cliente**: Uma interface para os usuários se conectarem e participarem do sorteio. Durante a contagem regressiva e o sorteio, a interface do cliente muda de cor e mostra um código se o usuário ganhar.

## Tecnologias Utilizadas
## Tecnologias Atualizadas

- **Node.js** para o backend.
- **TypeScript** para uma base de código mais robusta e segura.
- **ts-node** para executar aplicações TypeScript diretamente.
- **Zod** para validar o arquivo `.env`, garantindo que todas as variáveis de ambiente necessárias estejam presentes e corretas.
- **Express** para servir a aplicação web.
- **WebSocket** para comunicação em tempo real entre o servidor e os clientes.

## Dependências

- `@types/express`: ^4.17.21
- `@types/node`: ^20.11.20
- `@types/ws`: ^8.5.10
- `express`: ^4.18.2
- `ts-node`: ^10.9.2
- `typescript`: ^5.3.3
- `ws`: ^8.16.0
- `zod`: ^3.22.4

## Configuração e Instalação

### Pré-requisitos

- Node.js e yarn instalados. [Veja como instalar aqui](https://classic.yarnpkg.com/en/docs/install/).
- Node.js e npm (ou yarn) instalados. [Veja como instalar Node.js](https://nodejs.org/en/download/).

### Passos para configuração

1.**Clonar o Repositório**
1. **Clonar o Repositório**

```bash
git clone https://github.com/gabrielfroes/sorteio-websocket
cd sorteio-websocket
```

2.**Instalar dependências**
2. **Instalar dependências**

Usando npm:

```bash
yarn install
npm install
```

3.**Iniciar o Servidor**
Ou, se preferir usar yarn:

```bash
yarn start
yarn install
```

4.**Configuração do WebSocket**
3. **Iniciar o Servidor com TypeScript**

Para rodar a aplicação em desenvolvimento com suporte ao TypeScript, execute:

```bash
npm run dev
```

Para habilitar a comunicação em tempo real, usamos WebSockets. O servidor `server.js` cuida de aceitar conexões de clientes e admin. A lógica de sorteio e comunicação de resultados é tratada aqui.
4. **Configuração do WebSocket**

- `client.js`: Cada cliente conecta-se ao servidor usando WebSockets. Eles recebem atualizações em tempo real quando um sorteio é realizado.
- `admin.js`: A interface do administrador se conecta ao servidor como um cliente especial. A partir daqui, o admin pode iniciar um sorteio.
A lógica de comunicação e sorteio foi aprimorada para utilizar TypeScript, proporcionando uma base de código mais segura e fácil de manter.

5.**Estilização e Feedback Visual**
5. **Funcionalidade de Contagem Regressiva**

O arquivo `styles.css` fornece a estilização necessária para as páginas do cliente e do admin. Durante e depois de um sorteio, a interface do cliente muda de cor para indicar se ganharam ou perderam. O código de confirmação (para vencedores) é exibido em um estilo que se assemelha a um ticket, com um fundo branco, fonte preta e grossa, e bordas arredondadas.
A interface do administrador agora inclui uma funcionalidade de contagem regressiva para o sorteio, melhorando a experiência do usuário e aumentando a expectativa.

6.**Feedback Tátil**
6. **Validação de `.env` com Zod**

Se o dispositivo suportar, ele vibrará após o resultado do sorteio ser anunciado, dando um feedback tátil ao usuário.
Antes de iniciar a aplicação, certifique-se de que todas as variáveis de ambiente necessárias estão definidas corretamente, utilizando Zod para validar o arquivo `.env`.

7.**Como Executar o Sorteio**
7. **Como Executar o Sorteio**

- Abra a página de administração em `http://localhost:3000/admin`.
- Verifique quantos clientes estão conectados através do contador de participantes.
- Clique no botão "Realizar Sorteio" para iniciar o sorteio. Um código de confirmação será gerado.
- Todos os clientes receberão o resultado em tempo real. O vencedor verá o código de confirmação em sua tela.
- Acesse a página de administração em `http://localhost:3000/admin`.
- O contador de participantes mostra quantos clientes estão conectados.
- Inicie a contagem regressiva e clique no botão "Realizar Sorteio" para iniciar o sorteio. Um código de confirmação será gerado automaticamente.
- Todos os clientes conectados receberão os resultados do sorteio em tempo real. O vencedor verá o código de confirmação em sua tela.
Loading