Jobby
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.
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:
- O diretório aonde será armazenado o(s) nosso(s) arquivo(s)
- O nome e extensão do(s) arquivo(s)
- 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.
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:
- 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
oufalse
; - Campo nulo (null) precisa ser convertido para vazio;
- Campo enum salvar o literal da opção selecionada:
MASCULINO
ouFEMININO
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.
- 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:
Ordem | Campo | Tamanho | Tamanho Valor Original - Inserido sem padrão | Valor Formatado (People Job) | Observação |
---|---|---|---|---|---|
01 | Nome | 30 | Raimundo Nonato Loureiro Castelo Branco | RAIMUNDO NONATO LOUREIRO CASTE | Se o valor for superior ao tamanho máximo de caracteres, cortar o final do nome, caso inferior completar com espaços à esquerda |
02 | CPF | 11 | 135.217.791-18 | 13521779118 | Somente dígitos |
03 | Data | 08 | 16/04/1986 | 19860416 | |
04 | Sexo | 1 | M=Masculino / F=Feminino | M | |
05 | Lougradouro | 40 | Ruas das laranjeiras | RUAS DAS LARANJEIRAS | Se o valor for superior ao tamanho máximo de caracteres, cortar o final do nome, caso inferior completar com espaços à esquerda |
06 | Numero | 5 | 123 ou S/N | 00123 | Caso NÃO for S/N preencher formatar com 00000 |
07 | Complemento | 20 | Bl 03 ap 113 | BL 03 AP 113 | Se o valor for superior ao tamanho máximo de caracteres, cortar o final do nome, caso inferior completar com espaços à esquerda |
08 | Bairro | 30 | Vila Nazare | VILA NAZARE | Se o valor for superior ao tamanho máximo de caracteres, cortar o final do nome, caso inferior completar com espaços à esquerda |
09 | Cidade | 40 | Teresina | TERESINA | Se o valor for superior ao tamanho máximo de caracteres, cortar o final do nome, caso inferior completar com espaços à esquerda |
10 | Estado | 2 | Pi | PI | |
11 | 50 | raimundo.nonato@gmail.com | Garantir caracteres em mínúsculo | Se o valor for inferior completar com espaços à esquerda | |
12 | Telefone | 10 | (11) 3351-1010 | 1133511010 | Em caso de não ter telefone, preecher com 0000000000 |
13 | Celular | 11 | (11) 94565-2353 | 11945652353 | Em caso de não ter celular, preecher com 0000000000 |
14 | Celular é Whats? | 1 | T=true / F=false | T | Em caso de não ter celular, preecher com 0 |
15 | Profissão | 30 | Analista de sistemas | ANALISTA DE SISTEMAS | Aplicar regra do campo Nome e considerar caso não tenha experiência profissional preencher com espaços em branco |
16 | Empresa | 30 | Microsoft | MICROSOFT | Aplicar regra do campo Profissão |
17 | Salário | 10 | R$ 5.279,33 | 0000527933 | Remover os símbolos monetários e preencher com zeros à esquerda até conter 10 dígitos |
18 | Emprego Atual | 1 | T=true / F=false | T | Em caso de não ter experiência profissional, preecher com espaço em branco |
19 | Pretensão Mínima | 10 | R$ 5.279,33 | 0000527933 | Remover os símbolos monetários e preencher com zeros à esquerda até conter 10 dígitos |
20 | Pretensão Máxima | 10 | R$ 5.279,33 | 0000527933 | Remover os símbolos monetários e preencher com zeros à esquerda até conter 10 dígitos |
21 | Habilidades | 50 | Java, Vue3, Postgres, Spring | JAVA-VUE3-POSTGRES-SPRING | Se 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:
- Um cadastro onde o número seja igual a SN e sem complemento e sem telefone
- Um cadastro SEM experiência profissional (profissão, empresa, salario, emprego atual)
- Um cadastro informando todos os campos mencionados
- Crie um programa que permita o preenchimento dos dados via console (estudar Scanner)
- Crie um programa que permita o preenchimento dos dados via tela desktop (estudar Java Swing) plus+
- 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
- Ler o diretório que contém os arquivos
- Converter os arquivos em objetos (mas por quê?)
- Criar o banco de dados e a(s) tabela(s) necessária(s)
- Criar uma conexão do seu programa ao banco de dados
- Inserir todos os registros obetidos pelos arquivos processados
- Consultar os registros
- Localizar um candidato pelo cpf
- Localizar os candidatos que não estão trabalhando
- Localizar os candidatos que não possuem a profissão ANALISTA DE SISTEMAS
- Localizar os candidatos que mencionara o salário mínimo maior igual a 1.900 e menor que 3.000
- Localizar os candidatos que nasceram entre 01/01/1980 e 31/12/2023
- Localizar os candidatos da cidade SAO PAULO que nunca trabalharam
- Contar o número de candidatos que possuem a profissão ANALISTA DE SISTEMAS
- Identificar o menor salário mínimo dos candidatos com a profissão ANALISTA DE SISTEMAS
- 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.
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
- Remodelar toda a estrutura de banco de forma que atenda o diagrama apresentado acima
- Realizar cadastros prévios para a inserção dos candidatos como: Profissões, Cidades e Empresas
- Garantir que os cadastros sejam inseridos no banco de dados considerando a nova estrutura
- Contar quantos candidatos possuem a habilidade JAVA
- Identificar quais candidatos NÃO possuem habilidade relacionadas
- 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
- Agrupar por profissão e contar quantos profissionais que moram na cidade de nome SÃO PAULO
- Selecionar candidatos que registram experiências com data de contratação entre 01/01/202 a 31/12/2023
- Selecionar candidatos que trabalharam na empresa MICROSOFT
- Selecionar candidatos que AINDA trabalham na empresa MICROSOFT
- Selecionar candidatos que estão trabalhando atualmente
- Criar uma consulta que retorne todos os candidatos e nome da sua profissão correspondentemente
- 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
- Criar uma consulta que conte a quantidade de profissionais por profissão
- Criar uma consulta que retorne os candidatos ordenados por profissão e salário máximo de forma decrescente
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 😉.