Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jhonyrdesouza/taskflow
Este repositório foi desenvolvido para o processo seletivo de Desenvolvedor Fullstack Pleno na Zenvia. O desafio envolve a criação de um sistema de gerenciamento de tarefas, utilizando ReactJS, TypeScript, Styled-Components, React Hook Form, Zod, NestJS, JWT e Swagger.
https://github.com/jhonyrdesouza/taskflow
jwt nestjs react-hook-form reactjs swagger
Last synced: 7 days ago
JSON representation
Este repositório foi desenvolvido para o processo seletivo de Desenvolvedor Fullstack Pleno na Zenvia. O desafio envolve a criação de um sistema de gerenciamento de tarefas, utilizando ReactJS, TypeScript, Styled-Components, React Hook Form, Zod, NestJS, JWT e Swagger.
- Host: GitHub
- URL: https://github.com/jhonyrdesouza/taskflow
- Owner: jhonyrdesouza
- Created: 2024-09-11T20:54:46.000Z (22 days ago)
- Default Branch: master
- Last Pushed: 2024-09-16T08:13:21.000Z (17 days ago)
- Last Synced: 2024-09-21T11:02:56.232Z (12 days ago)
- Topics: jwt, nestjs, react-hook-form, reactjs, swagger
- Language: TypeScript
- Homepage:
- Size: 1.57 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
Awesome Lists containing this project
README
# TaskFlow - Sistema de Gerenciamento de Tarefas
## 🎯 **Descrição do projeto:**
![cover](./images/cover.png)
TaskFlow é um sistema intuitivo de gerenciamento de tarefas que permite aos usuários realizar operações de CRUD (Criar, Ler, Atualizar e Excluir) de maneira simples.O projeto é construído utilizando NestJS para fornecer uma API RESTful robusta, com validações de permissões e proteção contra a criação de tarefas duplicadas.
![architecture](./images/architecture.png)
## 🐛 **Como executar a aplicação:**
O projeto segue uma arquitetura monorepo, utilizando o Turborepo como auxiliar. Para rodar o sistema localmente, siga os passos abaixo:
1. Clone o repositório e acesse a pasta backend:
```bash
$ git clone https://github.com/jhonyrdesouza/taskflow
```2. Faça uma cópia do arquivo `.env.template` para `.env` em cada app (client e api) e configure as variáveis de ambiente necessárias.
3. Gerando Chaves JWT RSA 256 (Pública e Privada): O TaskFlow utiliza autenticação baseada em tokens JWT (JSON Web Tokens), assinados com o algoritmo RSA 256, garantindo maior segurança nas operações. Para que a aplicação possa assinar e verificar esses tokens, é necessário gerar um par de chaves: uma chave privada para assinar os tokens e uma chave pública para verificar as assinaturas.
Gerar a chave privada: A chave privada será usada para assinar os JWTs emitidos pela API do TaskFlow, Execute o comando abaixo no terminal para gerar a chave privada (private.pem).
```bash
$ openssl genrsa -out private.pem 2048
```Isso cria uma chave privada RSA de 2048 bits e a salva no arquivo private.pem. Essa chave deve ser mantida em segurança e nunca compartilhada publicamente.
Extrair a chave pública: A chave pública será usada para verificar a assinatura dos JWTs nos sistemas que consumirem a API. Ela pode ser compartilhada com outros serviços que precisem validar os tokens.
Execute o seguinte comando para extrair a chave pública (public.pem) a partir da chave privada:
```bash
$ openssl rsa -in private.pem -pubout -out public.pem
```> Referência: https://gist.github.com/Holger-Will/3edeea6855f1d69a5368871bce5ea926.
4. Instale as dependências do projeto, para esse projeto estamos utilizando o gerenciador de pacotes `pnpm`.
5. Certifique-se de ter um banco de dados PostgreSQL disponível. Você pode instalá-lo localmente ou rodá-lo via Docker (recomendado). Para configurar o Docker, consulte a seção abaixo. Uma vez que o PostgreSQL estiver rodando, prossiga para o próximo passo:
6. Para **executar as migrações** no banco de dados com a definições contidas em `schema.prisma`, execute na raiz do projeto `pnpm migrations` em seu terminal:
```bash
$ pnpm migrations
```7. Gere a instância do **client do prisma** (código Typescript, juntamente com as entidades definidas no `schema.prisma`), executando `pnpm generate` em seu terminal:
```bash
$ pnpm generate
```8. Execute a aplicação em modo dev:
```bash
$ pnpm dev
```**Nota:** As aplicações estarão disponíveis nas portas _3000_ e _3001_ (localhost:3000 e localhost:3001). Ambas serão iniciadas automaticamente pelo Turborepo.
## 🐳 **Docker:**
Para desenvolvimento local, com reload na aplicação, você pode usar o arquivo `docker-compose.yaml` para criar um container com o banco de dados Postgres. Execute o seguinte comando:
## 🚀 **Roadmap de desenvolvimento e publicação:**
### Desenvolvimento de uma nova feature:
1. Crie uma branch para a nova feature com o seguinte padrão: `feat/`
```bash
$ git checkout -b feat/
```2. Durante o desenvolvimento, faça commits nesta branch. Quando a feature estiver concluída, faça o merge na branch `develop`.
```bash
$ git checkout develop
``````bash
$ git merge feat/ --no-ff
```## 🔗 **Link da documentação da api no Swagger:**
A aplicação possui uma documentação detalhada da API no Swagger para obter informações abrangentes sobre os endpoints, parâmetros, autenticação e exemplos de solicitações e respostas:
![swagger](./images/swagger.png)
**Nota:** O acesso é em: `localhost:3000/api/docs`.