Entrega do desafio do Kanban - Otavio Henrique Fachin #477
Open
Otaviofachin wants to merge 4 commits intoFieldControl:masterfrom
Open
Entrega do desafio do Kanban - Otavio Henrique Fachin #477Otaviofachin wants to merge 4 commits intoFieldControl:masterfrom
Otaviofachin wants to merge 4 commits intoFieldControl:masterfrom
Conversation
b4afdb1 to
a3c4ae2
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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