Ada Hack | Hackathon Ada Tech

No ano de 2023, enquanto buscava por uma oportunidade no mercado de trabalho, conheci a Ada Tech, e participei do processo seletivo para a formação Vem Ser Tech patrocinada pelo iFood.

Foi um processo seletivo muito concorrido, do qual participaram mais de 50 mil alunos no país inteiro, e estes alunos foram divididos em 4 trilhas, mas apenas um pouco mais de 5 mil passaram por todas as etapas do processo e tiveram a oportunidade de fazer o curso, e eu tenho orgulho de dizer que fui um deles.

Para saber mais sobre este curso e o processo seletivo, clique aqui.

Após o final dd curso no mês de Março de 2024, os alunos foram convidados a participar de mais um evento, um Hackathon, onde cerca de 200 alunos de todas as trilhas participaram.

Neste evento, todos os grupos receberam um problema, e tiveram que desenvolver uma solução baseada em sua respectiva trilha. O case que recebemos foi o seguinte:

Case Ada Hack

Com base nisso, cada grupo teve que desenvolver uma solução baseada  em sua respectiva trilha (Front End, Back End, DevOps ou dados). No meu caso, como eu fazia parte da trilha de Back End, a solução que tivemos que desenvolver foi a seguinte:

Desafio trilha Back End Ada Hack

Com o desafio em mãos, utilizamos o conhecimento adquirido no curso para desenvolver um , MVP da nossa solução, uma API que recebe além dos dados pessoais dos candidatos, recebe também vários dados referentes a diversidade daquele candidato (como etnia, identidade de gênero, orientação sexual, e se esse candidato é PcD ou não).

E mesmo após o candidato ser contratado e virar um funcionário, esses dados de diversidade seguirão no banco de dados da empresa, assim fornecendo a possibilidade de relatórios estatísticos de diversidade não apenas dos candidatos, mas também dos funcionários que já trabalham na empresa.

Funcionalidades do nosso MVP:

Além do projeto em si, que foi muito legal de fazer, tivemos também 2 mentorias com um professor da Ada Tech durante o curso, e posso dizer com certeza que essas mentorias foram essenciais para nosso grupo, pois nos ajudaram a dar o direcionamento pelo melhor caminho a ser seguido em função do curto espaço de tempo e da enorme quantidade de trabalho.

Encerramento do Hackathon

Tenho muito orgulho de dizer que ao final do evento, minha equipe foi declarada campeã da trilha de Back End onde haviam 5 equipes concorrendo nesta trilha.

Para quem quiser saber mais sobre este projeto, segue abaixo o link do repositório no GitHub, e também da documentação da API no deploy feito no Render.

ATENÇÃO: Ao entrar na documentação da API, você terá a possibilidade de cadastrar pessoas e fazer login com as pessoas que você cadastrou, mas não será capaz de acessar as demais rotas pois as pessoas que se cadastram no sistema recebem por padrão o nível de acesso 0, ou seja, não podem acessar as  demais rotas do sistema. Caso queira ter acesso a mais consultas, faça login com o email “[email protected]” e senha “1234”.

Essa certamente foi uma excelente experiência, tanto pelo aprendizado, quanto pelas amizades que fiz durante este evento.

Sistema de orçamentos de reserva

Minha família tem uma pequena pousada na Praia da Pinheira, e em Julho de 2023, meu pai, que administra os negócios, me pediu pra desenvolver um sistema que facilitasse na confecção de orçamentos para facilitar o seu trabalho, pois, até o momento, ele utilizava planilhas do Excel para fazer e enviar orçamentos para os clientes.

Com base na sua necessidade, desenvolvi um sistema para gerenciar os orçamentos. O controle vai desde a confecção do orçamento, a geração do contrato dos orçamentos aprovados, o controle dos pagamentos e despesas extras de cada reserva, e também o controle dos checkins, checkouts, e cronogramas de limpezas das acomodações.

Alguns requisitos do sistema

Além da nossa pousada, meu pai também administra a locação de outros dois imóveis de parceiros, portanto, um dos requisitos seria separar as acomodações em cada empreendimento que ela pertence, ou seja, o empreendimento da nossa pousada (Residencial Sol de Verão), outro empreendimento de que ele tem junto como parceiro (Moradas Pé na Areia), e o outro empreendimento que ele administra as reservas, que pertence a um amigo (Casas/Aptos do Léo). E também, ter a opção, caso, futuramente ele tenha novos empreendimentos. Portanto, primeiramente, pensei em fazer uma tabela de empreendimentos, onde, inicialmente tem esses três empreendimentos cadastrados, mas, fica aberta a possibilidade de cadastrar novos empreendimentos.

Abaixo, a lista das tabelas que utilizei para construção do sistema.

Cadastro das acomodações

Um cadastro básico das acomodações, informando a qual empreendimento elas pertencem, nome da acomodação, tipo de acomodação, número de quartos, valor base, limite ideal de ocupantes, limite adicional de ocupantes, se aceita pet, e uma descrição livre da acomodação.

Tela de cadastro de acomodações

Orçamentos de reserva

Esta é a principal entrada de dados do sistema, pois é através do orçamento, que futuramente, será gerado o contrato, caso o cliente aprove o orçamento.

O orçamento é feito em duas etapas, primeiramente, é informado o cliente, a acomodação, o número de ocupantes, uma observação opcional sobre os ocupantes, se será diária cheia, ou apenas pernoite, a data de entrada, o horário previsto para o checkin, a data de saída, o horário previsto para o checkout, e o período.

Na segunda etapa, é informado o valor da diária, o valor da taxa de limpeza, valor de descontos, valor de acréscimos, valor do pacote, e número de dias do pacote, então, é clicado em “Calcular” e o sistema faz o cálculo do orçamento.

Após isso, basta inserir as observações, e gerar o orçamento.

Tela onde o usuário vai selecionar o cliente para fazer um orçamento
Tela onde o usuário irá colocar as informações sobre a acomodação e as datas do orçamento
Tela onde ocorre o cálculo do orçamento, e é inserida as observações

PDF do orçamento

Após gerar o orçamento, já é possível gerar um PDF para envio ao cliente.

Para gerar esse PDF, utilizei a biblioteca do Reportlab.

Após enviado o PDF para o cliente,  basta aguardar a sua aprovação por parte do cliente (caso necessite alguma alteração, é possível também alterar o orçamento, mas será necessário informar o motivo da modificação. Neste caso, após a alteração, se houver, o orçamento ficará com uma flag indicando que ele foi modificado).

Tela onde o usuário vai gerar o PDF do orçamento, e enviar para o cliente
PDF do orçamento

Contrato simplificado

Após aprovado o orçamento pelo cliente, já é possível gerar um contrato, que basicamente, será gerado automaticamente usando os dados do orçamento que foi aprovado.

Para geração do contrato, será apenas solicitado que se inclua algumas observações e informações adicionais.

Tela onde o usuário vai gerar o contrato para posteriormente, enviar o PDF do contrato para o cliente
Tela onde o usuário deve informar basicamente a conta para o depósito, e algumas observações adicionais do contrato

PDF do contrato

Após gerar o contrato, já é possível gerar um PDF para envio ao cliente.

Após enviado o PDF para o cliente,  o orçamento mudará seu status para “contrato gerado”, e já será possível o lançamento de pagamentos e despesas extras.

Tela onde o usuário poderá selecionar o contrato que deseja gerar PDF para envio ao cliente
PDF do contrato

Lançamento de pagamentos e despesas extras

Após gerar o contrato,  já é possível lançar pagamentos e despesas extras para esse orçamento (normalmente, por padrão, já é pedido um pagamento para confirmação da reserva, mas tudo isso é combinado, e está descrito no contrato). Assim que o cliente faz o primeiro depósito para confirmar a reserva, o mesmo deve ser informado nessa seção, pois após lançar o primeiro pagamento, o orçamento recebe uma flag informando que o orçamento foi confirmado.

Além de informar a confirmação da reserva, também é possível informar todos os pagamentos recebidos, pois várias vezes, o pagamento é recebido em diversas parcelas, dependendo da negociação que é feita.

Em certos casos, existe a possibilidade de haver cobranças extras por algum serviço ou pessoa adicional que eventualmente não estava previsto no contrato, neste caso, utilizamos a função de informar acréscimo, pois essa função irá gerar um acréscimo para o orçamento, dando a possibilidade de incluir novos valores não previstos no momento do fechamento do contrato, de acordo com a necessidade.

Tela onde o usuário deve informar o pagamento de confirmação da reserva
Tela onde é informado o depósito de confirmação da reserva
Tela onde é possível, tanto selecionar a função de informar pagamentos, como também, informar despesas extras.
Tela onde será informado as despesas extras

Relatório financeiro da reserva

Nesta opção, é possível visualizar um PDF com todas as informações financeiras da reserva, tais como o valor da reserva acertado no contrato, os valores já pagos, os valores de extras lançados, e o saldo que ainda resta pagar.

Tela onde o usuário pode visualizar o relatório financeiro da reserva
PDF do relatório financeiro da reserva

Controle de checkins e checkouts

Nessa opção, criei três tipos de relatórios, são eles:

Relatório de checkins

Lista todas as reservas com entrada prevista em um intervalo de datas.

Esse relatório é útil para saber as acomodações que precisam ser preparadas e revisadas antes da entrada do hóspede.

Tela onde o usuário informa o intervalo de datas que deseja pesquisar
PDF da programação de checkins
Relatório de checkouts

Lista todas as reservas com saída prevista em um intervalo de datas.

Esse relatório é útil para saber as acomodações que estão desocupando e precisam ser limpas.

Tela onde o usuário informa o intervalo de datas que deseja pesquisar
PDF da programação de checkouts
Relatório de checkins/checkouts

Basicamente uma união dos dois relatórios acima, podendo ver as reservas com entrada e saída programadas para aquele intervalo de datas escolhido.

Tela onde o usuário informa o intervalo de datas que deseja pesquisar
PDF da programação de checkins e checkouts

API CEP e IBGE

Após o primeiro projeto de consumo de API que foi o das informações de filmes, o professor Wildson do Jovem Programador módulo 3 nos lançou um desafio de construirmos um novo projeto, onde ficaríamos livres para escolher a API que quiséssemos e deveríamos apresentar esse projeto para a classe.

O desafio consistia em pelo menos uma API, porém eu inicialmente optei por fazer um projeto utilizando uma API do IBGE, a API que eu escolhi para meu projeto foi a API de nomes, mas no decorrer do projeto, também achei muito legal e útil a API de CEPs do viacep, portanto resolvi fazer o meu projeto utilizando essas duas APIs.

Na tela inicial haverá dois ícones para o usuário escolher qual API quer ver.

API de nomes do IBGE

Essa é uma API muito legal que encontrei no site do IBGE,  ela traz diversas informações estatísticas sobre os nomes baseado nos censos do IBGE.

No momento essa API possui informações estatísticas até a década de 2010, sobre os nomes das pessoas.

Meu projeto nesta API constitui do seguinte:

Exemplo da tela do APP de nomes do IBGE

Ainda neste APP, tem um link para uma página de curiosidades sobre esta API, que basicamente traz algumas perguntas e respostas mais comuns sobre a API, e também um botão de Home para voltar a tela inicial.

API de CEPs

Sempre tive curiosidade de trabalhar com essa API, pois sempre achei que ela pode ser muito útil na prática para fazer cadastros, essa é a API de CEPs do viacep.

Exemplo da tela do APP de CEPs

O APP que desenvolvi basicamente consiste em:

Exemplo do retorno da consulta informando o CEP 88139427
Exemplo de retorno informando o estado SC, cidade "pal" e rua "patrício"

Podemos ver que nessa opção de consultas existe um botão de mais detalhes, e ao clicar nesse botão, o sistema vai retornar os detalhes do registro selecionado, que será basicamente os dados que aparecem na primeira consulta, onde informamos o CEP.

Conclusão

Fiquei muito satisfeito com o resultado do meu projeto, pois atingiu o objetivo proposto pelo desafio, e exercitei a lógica para o consumo de APIs.

Gostei tanto do resultado desse projeto, que resolvi fazer o deploy em minha VPS.

Vou deixar abaixo o link para este projeto no Github e também o link para o deploy em minha VPS.

Projeto Info Filmes

Uma das coisas que aprendi no módulo 3 do curso Jovem Programador Senac foi consumir dados de uma API através de requisições, baseado no que aprendemos, recebemos a missão de desenvolver um site de informações de filmes utilizando dados da API https://www.omdbapi.com/ 

Esta API possui um banco de dados com informações de vários filmes e séries, então tivemos que desenvolver um projeto com os seguintes requisitos:

Como eu desenvolvi meu projeto

Para fazer o Front End utilizei o Bootstrap, aproveitando suas facilidades e a responsividade.

Na página inicial coloquei um carrossel com algumas imagens de capas de filmes.

Ao clicar em “Fazer login” o usuário será redirecionado para a tela de login, onde ele pode se logar, ou se cadastrar caso não tenha cadastro.

Após logado, o usuário tem uma barra de pesquisa onde ele pode digitar um termo, e o sistema vai fazer a consulta na API de filmes e retornar os dados de filmes e séries que correspondem ao termo digitado.

Por exemplo: Ao digitar Star Wars, o sistema retornará uma lista com todos os títulos relacionados a Star Wars.

Exemplo da lista de filmes relacionados a Star Wars

Na lista vai aparecer a capa do título (caso a API retorne a imagem de capa), ou “sem imagem” caso a API não disponha da imagem de capa.

Vai aparecer também o título, o tipo (série, filme, etc, dependendo do que está na API) e o ano.

Além dessas informações, coloquei um botão de mais informações, que ao clicar, o sistema irá buscar na API detalhes sobre o título solicitado.

Coloquei também uma estrela para identificar se o usuário classificou aquele título como um de seus favoritos (apesar de não ser um critério solicitado no desafio do projeto). Se a estrela aparecer amarela é porque esse filme já foi marcado como favorito por esse usuário, se aparecer azul é porque ainda não foi marcado como favorito.

Exemplo da tela de informações para um filme não marcado como favorito
Exemplo da tela de informações para um filme marcado como favorito

Nesta tela de detalhes vão aparecer todas as informações do título que o sistema encontrar na API.

Algumas das informações disponíveis são:

OBS: Todas as informações serão em Inglês, pois é o idioma que a API retorna, dependendo do título podem vir mais, ou menos informações do que as citadas acima, pois o sistema trará todas as informações disponibilizadas pela API.

Se o usuário não tiver favoritado o título ainda, vai aparecer um botão logo abaixo da imagem de capa, permitindo que ele favorite o título, caso o título já esteja favoritado pelo usuário, vai aparecer um botão permitindo desfavoritar o título.

Ao clicar sobre o nome do usuário, vai ter a opção de verificar todos os seus favoritos, ou sair do sistema.

Exemplo da tela de filmes favoritos do usuário

Conclusões finais do projeto

Este projeto serviu para conhecer como funciona o consumo de uma API, e foi muito importante, pois sabemos que na prática isso é muito utilizado.

Foi minha primeira experiência com consumo de API.

Neste projeto utilizei basicamente os seguintes recursos:

OBS: O banco de dados foi utilizado apenas para os recursos necessários do Django e também para o sistema de favoritar os títulos para os usuários, mas as demais informações dos títulos vêm diretamente da API.