Meu primeiro projeto REAL
Tags: webdev, programming, learning, development
Published: 2024-07-11 18:15:39

## Como tudo começou...

Ano passado conheci a FCamara por um evento que eles organizaram junto ao GDG Santos. Descobri que toda quinta feira eles abrem o escritório para pessoas que quiserem estudar e trabalhar de lá. Desde então, toda semana estou por lá e numa dessas idas conheci o Lucas Batista, coordenador do projeto que vou falar sobre hoje.

A partir do Lucas, tive contato com a Ariane, que tinha uma demanda de um sistema para cadastro de vendas que era feito manualmente, e impossibilitava ou pelo menos dificultava muito a análise dos dados e as tomadas de decisão. 

Temos reuniões semanais e a partir disso a Ariane

## Sobre o projeto

Pensando nisso, o Lucas me perguntou como eu preferiria fazer o projeto e optamos pelas tecnologias que eu tinha mais familiaridade. Utilizamos Nest.JS para o backend, com Prisma. No frontend, utilizamos React, mais especificamente a biblioteca de componentes React Mantine, que utiliza Typescript nos componentes.

## Funcionalidades

Atualmente, as funções de registrar, ver e deletar vendas estão implementadas. Estamos trabalhando com a parte de editar (que vou falar mais na seção de desafios) e posteriormente faremos a geração dos relatórios e autenticação.

Esse é um vídeo do fluxo de adição, visualização e deleção dos registros e vendas.
![GIF do sistema demonstrando o cadastro, visualizando e deletando um registro](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nmsfbfqzlp7tb0zfsjro.gif)

## Desafios

### Backend e uso de ORM
Por mais que eu estivesse familiarizado com o Nest, não foi tão natural escrever um projeto do zero. Demorei algum tempo a entender como validar as requisições do backend e como usar o Prisma, coisa que nunca havia feito.

### Dados e formas normais
No início, pensar nas tabelas, como elas se comunicariam, porque elas se comunicariam, foi algo que demorou um tempo, alguns testes e vários migrations. 
 
### React e Typescript

Agora no frontend as coisas ficaram mais complicadas. Fazia bastante tempo que não mexia com react e lembrar como funcionava demorou um pouco. O typescript foi bem desafiador de implementar, mas fui obrigado devido a melhor funcionalidade das ferramentas que havia escolhido, então tive que estudar mais sobre o conceito de interfaces e tipos.

### React - Passagem de dados entre componentes
Porém tive e estou tento alguns problemas para comunicar entre os componentes, por exemplo, como mandar os dados de um componente filho para o pai, para que ele atualize quantas vendas tem, por exemplo.

### Versionamento
Como faço o projeto sozinho é mais fácil, porém entender o fluxo de trabalho é algo que ainda tenho algumas dificuldades, criação de branchs para funcionalidades e correção de bugs, merge das branchs, resolução de conflitos é uma coisa que estou melhorando.

## Aprendizados

### Comunicação e Gestão de Projetos
O trabalho no projeto me ajudou a melhorar minha capacidade de comunicação e a gestão de expectativas com o cliente. Alinhar as expectativas com o cliente e traduzir isso em código.

### Melhoria Técnica
Aprendi bastante sobre a utilização de ORM com Prisma e como hospedar serviços na Vercel. Também melhorei minha habilidade de criar e gerenciar CRUDs no backend e frontend.

### Trabalho com Ferramentas Modernas
Implementar Typescript no projeto, mesmo com a curva de aprendizado, trouxe muitos benefícios em termos de segurança e qualidade do código. Aprendi a importância das interfaces e tipos, o que me ajudou a escrever um código mais robusto e certamente será mais fácil de mantê-lo.

### Gestão de Versionamento
Entender e implementar um fluxo de trabalho com Git foi um grande aprendizado. Agora, consigo criar branches para novas funcionalidades, corrigir bugs e resolver conflitos de código com mais eficiência, o que facilita o desenvolvimento contínuo e colaborativo.

### Próximos Passos
Pretendo continuar aprimorando minhas habilidades técnicas, especialmente em áreas que ainda sinto dificuldade, a comunicação entre os componentes do React, a elaboração de testes, o versionamento de código. Além disso, quero explorar mais ferramentas e práticas como subir o banco de dados na nuvem.

## Agradecimentos

Algumas pessoas foram fundamentais para esse processo, especificamente com tecnologia, por me ajudarem de N formas a aprender algo novo:

[Lucas Viana
](https://www.linkedin.com/in/mechamobau)[Leonardo Santos
](https://www.linkedin.com/in/leonardossev)[Lucas Batista
](https://www.linkedin.com/in/lucas-febatis)[Gabriel Sanzone](https://www.linkedin.com/in/gabrielsanzone)

Não menos importantes, minha família, Leticia, por acreditarem em mim e no meu projeto de vida e tornarem a jornada mais fácil de seguir.