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

Projeto Kanban FieldControl #392

Open
wants to merge 19 commits into
base: master
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
34 changes: 27 additions & 7 deletions PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -1,38 +1,55 @@
## Envio de solução

Gostariamos de entender como você pensa e as decisões que você tomou durante o desenvolvimento, detalhe um pouco mais sobre:

**Framework, linguagem e ferramentas**
O projeto foi estruturado com base em duas tabelas principais: uma destinada às colunas e outra para as tarefas, sendo que a tabela de tarefas contém um campo de referência para o ID da coluna correspondente. Inicialmente, foi desenvolvido um CRUD básico na API para suportar a implementação do front-end. Durante o avanço do desenvolvimento do front, ajustes necessários foram realizados na API para alinhar às regras de negócio definidas. Após a conclusão do desenvolvimento, foi elaborado o arquivo README para documentar o projeto.

**Framework, linguagem e ferramentas**
Descreva ferramentas e bibliotecas (libraries, framework, tools etc) você usou.

**Técnologias X e Y**
Utilizei Angular 19 e NestJS, seguindo as especificações do desafio. Na API, implementei GraphQL com Prisma ORM. Para o front-end, utilizei PrimeNG, Apollo Client e Angular CDK. Escolhi o SQLite como banco de dados para este projeto.

**Técnologias X e Y**
Justifique porque você optou pela tecnologia X e não a Y?

**Princípios de software**
Optei por utilizar GraphQL em vez de RESTful para oferecer um diferencial ao projeto, aproveitando minha experiência diária com essa tecnologia. O Prisma ORM foi escolhido por sua simplicidade de configuração e uso, sendo ideal para projetos menores que não demandam a robustez do TypeORM. Para o banco de dados, utilizei o SQLite devido à sua praticidade, já que não requer instalação, apenas configuração.

No front-end, escolhi o PrimeNG pelos componentes intuitivos, fáceis de implementar e estilizar, além de contar com uma biblioteca própria de ícones. Para a comunicação com a API GraphQL, utilizei o Apollo Client. Por fim, para implementar a funcionalidade de Drag and Drop, optei pelo Angular CDK, uma solução nativa e bem integrada ao Angular.

**Princípios de software**
Quais princípios da engenharia de software que você usou?

**Desafios e problemas**
Adotei os princípios de Clean Code para garantir um código claro e de fácil manutenção, promovendo legibilidade e simplicidade. Além disso, apliquei o padrão SOLID para estruturar o projeto, separando responsabilidades de forma eficiente em cada componente, o que facilita futuras alterações e expansões, tornando o sistema mais escalável.

**Desafios e problemas**
Conte um pouco sobre os desafios e problemas que você enfrentou e como você resolveu.

**Melhorias e próximas implementações**
No início, enfrentei algumas dificuldades para desenvolver o front-end, já que tenho bastante experiência em React.js, mas nunca havia trabalhado em um projeto com Angular. Para estruturar o projeto, consultei a documentação oficial do Angular e, para entender melhor sua funcionalidade, contei com o apoio de amigos desenvolvedores experientes, que também contribuíram com sugestões de melhorias na estrutura elaborada para o projeto.

**Melhorias e próximas implementações**
O que você entende que pode ser melhorado e como isso pode ser feito?

Testes Unitários: Desenvolver a cobertura de testes para garantir a qualidade e a confiabilidade do código, uma tarefa que não foi possível concluir devido ao tempo.
Validações de Duplicidade: Adicionar validações para evitar a criação de colunas e tarefas duplicadas, assegurando a integridade dos dados.
Drag and Drop entre Colunas: Implementar a funcionalidade de arrastar e soltar tarefas de uma coluna para outra, tornando a interação mais dinâmica e intuitiva.
Identificação por Cores: Aplicar cores para identificar as tarefas de acordo com a coluna em que estão. Por exemplo, tarefas na Coluna A serão verdes e na Coluna B, amarelas, facilitando a visualização e organização.

**Vídeo de apresentação**

Grave um vídeo do seu projeto rodando e envie o link:
<!-- Dica: você pode usar o https://jam.dev/ para facilitar sua gravação ;) -->
https://drive.google.com/file/d/1varNrRa1GNW7Bz-8l6l82WfriFpV6Ts4/view?usp=sharing

**Sobre você**

Queremos te conhecer um pouco melhor, conte um pouco sobre você.

Onde nasceu/De onde você é? Lugares que estudou, empresas que trabalhou, como você se envolveu com desenvolvimento de software.. enfim, Quem é você?

Meu nome é Weuller Camargo da Silva, nasci em Cassilândia - MS e atualmente resido em Santa Fé do Sul - SP. Realizei quase todo o ensino fundamental e médio em Cassilândia, concluindo apenas o último ano em Santa Fé do Sul. Possuo formação técnica em Administração pela ETEC e sempre tive uma afinidade natural com tecnologia, especialmente em compreender como sites, aplicativos e sistemas são desenvolvidos.

Me ingressei na faculdade UniFUNEC em Santa Fé do Sul no curso de Análise e Desenvolvimento de Sistemas (ADS) em 2018, formando-me em 2021. A colação de grau, inicialmente prevista para 2020, foi adiada devido à pandemia. Sou uma pessoa curiosa e determinada, valorizando um progresso constante e estruturado, sempre subindo um degrau de cada vez.

Atualmente, trabalho como desenvolvedor na Go4Digital, empresa que oferece dois produtos principais como serviço. O Manfrota, uma solução completa para gestão de frotas, abrangendo controle de combustível, pneus, estoque de peças, manutenção (ordens de serviço), horas trabalhadas de funcionários e equipamentos, entre outras funcionalidades. E o Go4Tracker, um sistema de geolocalização que monitora equipamentos como caminhões, carros, lanchas, jetskis, máquinas de linha amarela, entre outros.

**Outros detalhes**

Se quiser enviar alguma informação adicional sobre o desafio..
Expand All @@ -42,5 +59,8 @@ Se quiser enviar alguma informação adicional sobre o desafio..

Ah, deixe seu e-mail ou telefone para entrarmos em contato com você :)

Email: [email protected]
Telefone: 17 996683718 - Ligações e WhatsApp



25 changes: 25 additions & 0 deletions projeto/api-kanban/.eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
module.exports = {
parser: '@typescript-eslint/parser',
parserOptions: {
project: 'tsconfig.json',
tsconfigRootDir: __dirname,
sourceType: 'module',
},
plugins: ['@typescript-eslint/eslint-plugin'],
extends: [
'plugin:@typescript-eslint/recommended',
'plugin:prettier/recommended',
],
root: true,
env: {
node: true,
jest: true,
},
ignorePatterns: ['.eslintrc.js'],
rules: {
'@typescript-eslint/interface-name-prefix': 'off',
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-explicit-any': 'off',
},
};
56 changes: 56 additions & 0 deletions projeto/api-kanban/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# compiled output
/dist
/node_modules
/build

# Logs
logs
*.log
npm-debug.log*
pnpm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*

# OS
.DS_Store

# Tests
/coverage
/.nyc_output

# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace

# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json

# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local

# temp directory
.temp
.tmp

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
4 changes: 4 additions & 0 deletions projeto/api-kanban/.prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"singleQuote": true,
"trailingComma": "all"
}
64 changes: 64 additions & 0 deletions projeto/api-kanban/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@

# API - ClientKanban

A API do **ClientKanban** foi desenvolvida para gerenciar os dados relacionados às colunas e tarefas de um board interativo. Ela consiste em dois módulos principais e utiliza tecnologias modernas para oferecer um desempenho eficiente e flexível.

## 🚀 Módulos

### 📂 Coluna
- Gerencia as operações de criação, edição e exclusão de colunas.
- Permite o armazenamento e recuperação de informações estruturadas sobre as colunas do board.

### 🗂️ Tarefa
- Gerencia as operações de criação, edição, exclusão e movimentação de tarefas.
- Oferece suporte para alterar a ordem de prioridade das tarefas dentro de suas respectivas colunas.

---

## 🛠️ Tecnologias Utilizadas

### **NestJS**
- Framework utilizado para estruturar e organizar a API, garantindo modularidade e escalabilidade.

### **GraphQL**
- Proporciona uma comunicação eficiente e flexível entre o cliente e a API, permitindo consultas e mutações personalizadas.

### **Prisma ORM**
- Gerencia o acesso ao banco de dados com facilidade e eficiência, simplificando operações complexas e otimizando a produtividade.

### **SQLite**
- Banco de dados leve e simples, configurado para atender às necessidades do projeto sem a necessidade de instalação adicional.

---

## 🖥️ Como Executar

### 1️⃣ **Instalar dependências**
Antes de executar, certifique-se de instalar todas as dependências necessárias com o comando:

npm install

### 2️⃣ **Iniciar o servidor**
Para rodar o servidor da API, utilize:

npm run start:dev

A API estará disponível no endereço padrão: [http://localhost:3030/graphql](http://localhost:3030/graphql).

### 3️⃣ **Explorar a API**
Você pode explorar e testar os endpoints da API utilizando o playground do GraphQL acessível no endereço acima.

---

## 📖 Estrutura da API

O projeto foi desenvolvido com foco em modularidade e facilidade de manutenção. Ele inclui:
- **Módulos organizados:** Cada funcionalidade (coluna e tarefa) está encapsulada em um módulo independente.
- **Schemas bem definidos:** O uso de GraphQL assegura a clareza no design da API.
- **Integração com Prisma:** Simplifica as interações com o banco de dados SQLite, garantindo confiabilidade e desempenho.

Para mais informações sobre as tecnologias utilizadas, consulte suas respectivas documentações:
- [NestJS](https://nestjs.com/)
- [GraphQL](https://graphql.org/)
- [Prisma ORM](https://www.prisma.io/)
- [SQLite](https://sqlite.org/)
Binary file added projeto/api-kanban/database.sqlite
Binary file not shown.
8 changes: 8 additions & 0 deletions projeto/api-kanban/nest-cli.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"$schema": "https://json.schemastore.org/nest-cli",
"collection": "@nestjs/schematics",
"sourceRoot": "src",
"compilerOptions": {
"deleteOutDir": true
}
}
Loading