Entrega do desafio do Kanban - Otavio Henrique Fachin #477
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Introdução
Agradecimento e Feedback do Desafio
Muito obrigado à Field por essa chance! O desafio foi difícil, mas muito prazeroso de realizar.
Embora já tivesse tido um contato inicial com o Angular no passado, sinto que evoluí muito mais agora. Durante o projeto, usei todos os recursos que pude, vídeos sobre, pesquisas e usei a ajuda de IAs. Sei que o resultado é simples e que ainda tenho muito o que melhorar tecnicamente, mas estou orgulhoso de ter saído do zero e terminado a tarefa em tão pouco tempo.
O Angular é uma ferramenta incrível. Agora, ele entrou de vez na minha lista de estudos. Espero ter a chance de continuar evoluindo e explorando esse mundo da tecnologia junto com o time de vocês!
Muito obrigado pela oportunidade!
🚀 Como Executar o Projeto
📦 Requisitos
📁 Clonar o projeto
git clone https://github.com/Otaviofachin/valinor.git cd kanban-field🌐 Instalação e Execução
1. Instalar o Angular CLI (caso não tenha)
2. Instalar as dependências
3. Executar o projeto
ou
Acesse em: http://localhost:4200
🧠 Tecnologias Utilizadas
📌 Frontend
📌 Armazenamento
❓ Por que escolhi essas tecnologias?
🧱 Princípios de Engenharia de Software Aplicados
✅ Separation of Concerns (SoC): Serviço centralizado (
KanbanService) para manipulação de colunas e cards.✅ Single Responsibility Principle (SRP): Cada componente possui uma única responsabilidade clara:
BoardComponent: Gerencia o quadro Kanban e coordena as interações.ColumnComponent: Representa uma coluna individual com suas funcionalidades.CardComponent: Representa um card individual com edição e exclusão.AddColumnDialogComponent: Dialog modal para adicionar novas colunas.✅ Clean Code: Nomes semânticos, código organizado, componentes reutilizáveis.
✅ Componentização: Frontend dividido em componentes modulares e reutilizáveis.
✅ Dependency Injection: Uso do sistema de injeção de dependências do Angular para gerenciar serviços.
✅ Reactive Programming: Uso de RxJS para gerenciamento de eventos e estado.
🏗️ Estrutura do Projeto
🎯 Funcionalidades Implementadas
✅ Gerenciamento de Colunas
✅ Gerenciamento de Cards
✅ Interface do Usuário
✅ Experiência do Usuário
🧩 Desafios e Como Resolvi
🔧 Desafio 1: Gerenciamento de estado centralizado
Problema: Manter sincronização entre múltiplos componentes (board, columns, cards).
Solução: Centralizei toda a lógica de manipulação no
KanbanService, garantindo uma única fonte de verdade. Os componentes apenas delegam ações ao serviço.🔧 Desafio 2: Implementação de Drag-and-Drop
Problema: Criar uma experiência fluida de arrastar e soltar cards entre colunas.
Solução: Utilizei o Angular CDK Drag-and-Drop, que oferece suporte nativo e performático. Implementei os eventos
cdkDropListDroppedpara detectar mudanças de coluna e atualizar o estado viaKanbanService.🔧 Desafio 3: Validação e Feedback ao Usuário
Problema: Garantir que o usuário não crie cards ou colunas vazias.
Solução: Implementei validações nos componentes e adicionei notificações toast usando TypeScript Toastify para feedback visual imediato.
✨ Melhorias Futuras
✅ Melhorias Simples
🚀 Melhorias Avançadas
🎯 Melhorias de UX/UI
🛡️ Segurança e Testes
Segurança
Testes
Para executar os testes unitários:
ng test📚 Scripts Disponíveis
🎨 Personalização
Estilos Globais
Os estilos globais estão em
src/styles.scss. Você pode personalizar:Componentes
Cada componente possui seu próprio arquivo SCSS para estilos específicos:
board.scss- Estilos do quadro principalcolumn.scss- Estilos das colunascard.scss- Estilos dos cards📖 Aprendizados
Durante o desenvolvimento deste projeto, aprendi:
📹 Video demonstrativo do projeto / Hospedagem do projeto
Video demonstrativo do projeto
Link do site hospedado (Utilizei Vercel para realizar a hospedagem, mas está gerando um bug na biblioteca toastify que estou utilizando no projeto. No video demonstrativo acima, você pode ver o projeto funcionando normalmente.)
🙏 Agradecimentos
📞 Contato
Para dúvidas ou sugestões, entre em contato através do GitHub.
Desenvolvido com muito aprendizado por Otavio Henrique Fachin