Exercite

Jobby

Projeto Prático

Para refletir

Que tal direcionar seus estudos em programação canalizando todos os seus esforços para aprender uma ou mais linguagens, seus frameworks e as tecnologias necessárias para desenvolver um sistema de gestão de cadastros e contas correntes?

Não existe maneira mais produtiva de aprender programação quando se há o intuito de adquirir habilidades de raciocínio lógico e dominar as tecnologias necessárias com a finalidade de solucionar uma necessidade real em automatização de processos.

Acreditamos que hoje, a maior barreira pra se tornar um programador preparado para o mercado, é identificar o que é necessário estudar, definir um plano de estudos e como explorar tais tecnologias de forma produtiva.

É necessário que você tenha ciência de uma jornada constante de estudos, realização de muitos exercícios de raciocínio lógico e programação, pois é somente desta maneira que você se tornará um profissional preparado para o mercado.

🏆 Sucesso
Para te auxiliar quanto a uma trilha das tecnologias que você mais possa se identificar, segue Link do nosso vídeo explicativo.

O Projeto

Jobby - Ao seu dispor

Vamos desenvolver uma plataforma destinada ao armazenamento de dados pessoais e profissionais para em seguida proporcionar uma listagem de profissionais, suas experiências e habilidades destinadas para auxilar no processo de recrutamento e seleção de uma empresa de tecnologia.

Lógica

Estamos em 1950, período em que a tecnologia ainda era algo futurista, mas que já apresentava no mercado linguagens de programação capazes de automatizar processos através da computação. Nesta época, banco de dados relacionais ainda não era tão comum de ser ver. E foi neste cenário "limitado" que nossa empresa Digytal recebeu sua primeira demanda como fábrica de softwares de desenvolver uma solução capaz de permitir que pessoas elaborassem o seu currículo vitae para que pudessem enviar via e-mail e estar disponível em banco de dados centralizado de uma das maiores empresas de recrutamento e seleção de profissionais de TI conhecida como People Job.

O escopo inicial do projeto contempla a elaboração de um programa simples onde é possível que o candidato preencha via console seus dados pessoais, endereço, contato e experiência profissional mencionando uma faixa salarial pretendida. Este registro deverá ser coletado pelo sistema e gerar dois arquivos com os layouts delimitado e posicional respectivamente considerando as informações abaixo.

  • Dados Pessoais: Nome, CPF, Data Nascimento, Sexo
  • Dados Endereço: Logradouro, Número, Complemento, Bairro, Cidade, Estado
  • Dados Contato: E-mail, Telefone, Celular, Se celular for WhatsApp
  • Dados Profissionais: Profissão, Empresa, Salário, Emprego Atual
  • Habilidades: Uma lista de habilidades
  • Pretensão Salarial: Valor Mínimo, Valor Máximo

Serialização

Quando se é mencionado a necessidade de ler ou escrever conteúdos em arquivos, nós devemos levar em consideração três aspectos:

  1. O diretório aonde será armazenado o(s) nosso(s) arquivo(s)
  2. O nome e extensão do(s) arquivo(s)
  3. O conteúdo do arquivo e o mais importante, a representação estrutural deste conteúdo

Existem dois tipos mais comuns quanto a representação de arquivos nas aplicações convencionais, que são:

  • Delimitado: Separado por um delimitador que pode se representado por: ; , | e etc.
  • Posicional: Deteminada o comprimento máximo para cada campo/coluna que representa um dado de alguma informação ou registro.
📌 Para fixar
Hoje é muito comum a necessidade de manipular arquivos contendo uma estrutura JSON e XML. Este tema será abordado nos próximos capítulos 😉.

Conforme requisitos de nosso software, será necessário a geração de dois arquivos de acordo com as especificações abaixo:

  1. Nome: cadastro.csv - Destino: c:\jobby\files - Layout: delimitado por ;

A ordem dos campos deve estar conforme imagem acima considerando os ajustes abaixo:

  • Campo data precisa estar no formato YYYY-MM-DD (Y=Ano, M=Mes, D=Dia);
  • Campo decimal (double) precisa estar no formato 00.00, exemplo: 1234.56;
  • Campo lógico (boolean) precisa salvar o valor literal true ou false;
  • Campo nulo (null) precisa ser convertido para vazio;
  • Campo enum salvar o literal da opção selecionada: MASCULINO ou FEMININO
✔️ Conclusão
Este arquivo possui única e exclusivamente a finalidade de armazenar temporariamente os dados do candidato até que sinta-se seguro para enviar o arquivo a empresa People Job. Ver requisito arquivo posicional.
  1. Nome: cadastro-{CPF}.txt - Destino: c:\jobby\files - Layout: posicional

A empresa People Job espera receber dos candidatos o arquivo cadastro-{CPF}.txt para que ela possa processar e armazenar em seu banco de dados central.

Este aquivo deverá seguir a estrutura posicional conforme posição e comprimento dos campos mencionados na tabela abaixo:

OrdemCampoTamanhoTamanho Valor Original - Inserido sem padrãoValor Formatado (People Job)Observação
01Nome30Raimundo Nonato Loureiro Castelo BrancoRAIMUNDO NONATO LOUREIRO CASTESe o valor for superior ao tamanho máximo de caracteres, cortar o final do nome, caso inferior completar com espaços à esquerda
02CPF11135.217.791-1813521779118Somente dígitos
03Data0816/04/198619860416
04Sexo1M=Masculino / F=FemininoM
05Lougradouro40Ruas das laranjeirasRUAS DAS LARANJEIRASSe o valor for superior ao tamanho máximo de caracteres, cortar o final do nome, caso inferior completar com espaços à esquerda
06Numero5123 ou S/N00123Caso NÃO for S/N preencher formatar com 00000
07Complemento20Bl 03 ap 113BL 03 AP 113Se o valor for superior ao tamanho máximo de caracteres, cortar o final do nome, caso inferior completar com espaços à esquerda
08Bairro30Vila NazareVILA NAZARESe o valor for superior ao tamanho máximo de caracteres, cortar o final do nome, caso inferior completar com espaços à esquerda
09Cidade40TeresinaTERESINASe o valor for superior ao tamanho máximo de caracteres, cortar o final do nome, caso inferior completar com espaços à esquerda
10Estado2PiPI
11E-mail50raimundo.nonato@gmail.comGarantir caracteres em mínúsculoSe o valor for inferior completar com espaços à esquerda
12Telefone10(11) 3351-10101133511010Em caso de não ter telefone, preecher com 0000000000
13Celular11(11) 94565-235311945652353Em caso de não ter celular, preecher com 0000000000
14Celular é Whats?1T=true / F=falseTEm caso de não ter celular, preecher com 0
15Profissão30Analista de sistemasANALISTA DE SISTEMASAplicar regra do campo Nome e considerar caso não tenha experiência profissional preencher com espaços em branco
16Empresa30MicrosoftMICROSOFTAplicar regra do campo Profissão
17Salário10R$ 5.279,330000527933Remover os símbolos monetários e preencher com zeros à esquerda até conter 10 dígitos
18Emprego Atual1T=true / F=falseTEm caso de não ter experiência profissional, preecher com espaço em branco
19Pretensão Mínima10R$ 5.279,330000527933Remover os símbolos monetários e preencher com zeros à esquerda até conter 10 dígitos
20Pretensão Máxima10R$ 5.279,330000527933Remover os símbolos monetários e preencher com zeros à esquerda até conter 10 dígitos
21Habilidades50Java, Vue3, Postgres, SpringJAVA-VUE3-POSTGRES-SPRINGSe o valor for superior ao tamanho máximo de caracteres, cortar o final do nome, caso inferior completar com espaços à esquerda

Cenários para preenchimento:

  1. Um cadastro onde o número seja igual a SN e sem complemento e sem telefone
  2. Um cadastro SEM experiência profissional (profissão, empresa, salario, emprego atual)
  3. Um cadastro informando todos os campos mencionados
  4. Crie um programa que permita o preenchimento dos dados via console (estudar Scanner)
  5. Crie um programa que permita o preenchimento dos dados via tela desktop (estudar Java Swing) plus+
  6. Com o terminal via console ou tela desktop desenvolvido, leia o arquivo .csv para realizar possível alterações no cadastro.

Persistência

Alguns anos se passaram e a tecnologia conseguiu conquistar um feito histórico capaz de mudar completamente a forma de se armazenar dados e suportar inúmeras transações e cruzamento de informações de forma centralizada. Esse fenômeno é conhecido até hoje como modelo e estrutura de dados relacionais.

O grupo People Job deu um grando salto para um avanço tecnológico em sua empresa que foi a aquisição de um SGBD ou Sistema de Gerenciamento de Banco de Dados. Com esta novidade, o time de desenvolvimento agora terá um enorme desafio de migrar todos os arquivos recebidos pelos candidatos e armazenar no banco de dados da empresa.

Estratégia

  1. Ler o diretório que contém os arquivos
  2. Converter os arquivos em objetos (mas por quê?)
  3. Criar o banco de dados e a(s) tabela(s) necessária(s)
  4. Criar uma conexão do seu programa ao banco de dados
  5. Inserir todos os registros obetidos pelos arquivos processados
  6. Consultar os registros
  7. Localizar um candidato pelo cpf
  8. Localizar os candidatos que não estão trabalhando
  9. Localizar os candidatos que não possuem a profissão ANALISTA DE SISTEMAS
  10. Localizar os candidatos que mencionara o salário mínimo maior igual a 1.900 e menor que 3.000
  11. Localizar os candidatos que nasceram entre 01/01/1980 e 31/12/2023
  12. Localizar os candidatos da cidade SAO PAULO que nunca trabalharam
  13. Contar o número de candidatos que possuem a profissão ANALISTA DE SISTEMAS
  14. Identificar o menor salário mínimo dos candidatos com a profissão ANALISTA DE SISTEMAS
  15. Identificar a média do salário máximo dos candidatos com a profissão ANALISTA DE SISTEMAS

Modernização

Nos últimos anos o processo de recrutamento e seleção aplicados pela empresa People Job conseguiu chegar a um nível de eficiência reconhecido no mercado, e algumas ações de modernização começavam a se tornar essencias para manter o nível dos resultados apresentados.

Foi ai que os gestores da empresa decidiriam investir em modernização da sua plataforma Jobby e claro, a Digytal foi a fábrica de software convidada para conduzir este projeto.

Especificações
Dos requisitos apresentados à nossa fábrica, a mais relevante foi a necessidade de normalizar o nosso modelo de dados que antes continha uma estrutura de registros com informações redundantes e com crescimento exponencial da sua necessidade de armazenamento dos dados.

ℹ️ Informação
O diagrama acima é uma das motivações que incentivaram a metodologia de persistência de dados baseada no paradigma do ORM ou Mapeamento Objeto Relacional, ver Wikipedia
  1. Remodelar toda a estrutura de banco de forma que atenda o diagrama apresentado acima
  2. Realizar cadastros prévios para a inserção dos candidatos como: Profissões, Cidades e Empresas
  3. Garantir que os cadastros sejam inseridos no banco de dados considerando a nova estrutura
  4. Contar quantos candidatos possuem a habilidade JAVA
  5. Identificar quais candidatos NÃO possuem habilidade relacionadas
  6. Selecionar os candidatos que são do sexo FEMININO e que moram nas cidades do estado sigla SP informando o nome, cpf, dados de endereço e nome da cidade
  7. Agrupar por profissão e contar quantos profissionais que moram na cidade de nome SÃO PAULO
  8. Selecionar candidatos que registram experiências com data de contratação entre 01/01/202 a 31/12/2023
  9. Selecionar candidatos que trabalharam na empresa MICROSOFT
  10. Selecionar candidatos que AINDA trabalham na empresa MICROSOFT
  11. Selecionar candidatos que estão trabalhando atualmente
  12. Criar uma consulta que retorne todos os candidatos e nome da sua profissão correspondentemente
  13. Criar uma consulta que retorne todos os candidatos e nome da sua profissão onde o id da profissão corresponda ao registro ANALISTA DE SISTEMAS
  14. Criar uma consulta que conte a quantidade de profissionais por profissão
  15. Criar uma consulta que retorne os candidatos ordenados por profissão e salário máximo de forma decrescente
🏆 Sucesso
Em um mundo real, após a criação da nova base de dados, seria desenvolver uma lógica de migração dos dados da estrutura atual para a nova estrutura considerando a integridade e consitência dos dados. Não demore a se desafiar 😉.