A AfirmaJobs é uma plataforma de divulgação de vagas voltadas para a diversidade e inclusão. A aplicação foi desenvolvida como projeto final do curso bootcamp da Reprograma

Overview

Deploy on Heroku Database MongoDB Node version


AFIRMAJOBS



afirmajobs

Este projeto é resultado do Bootcamp Back-End - Todas em Tech - { reprograma }


Justificativa

Grupos historicamente minorizados – população negra, indígena, mulheres, pessoas LGBTQIAP+, pessoas com deficiência, em situação de vulnerabilidade, 50+ e refugiados – tendem a sofrer mais com a falta de oportunidades e a má distribuição de renda.

Segundo o IBGE, pessoas pretas ou pardas representem a maior parte da população (55,8%) e da força de trabalho brasileira (54,9%), porém apenas (29,9%) destas pessoas ocupavam cargos de gerência, segundo dados da Pesquisa Nacional por Amostra de Domicílios Contínua, em 2018.

No mercado de trabalho as ações afirmativas se apresentam como programas e políticas internas para tentar diminuir discrepâncias de equidade e inclusão no ambiente corporativo. As vagas afirmativas promovem alguma forma de reparação histórica, para combater a discriminação por meio de políticas sociais que promovem a inclusão destes grupos.

Mesmo com o aumento de programas e iniciativas que estimulam essas ações, ainda é árduo o processo de conexão entre as empresas e esses profissionais.


Solução

A AfirmaJobs é uma plataforma de divulgação de vagas voltadas para a diversidade e inclusão. A iniciativa consiste em encurtar o caminho entre empresas contratantes e profissionais pertencentes a grupos minorizados.


Objetivo

Por facilitar a conexão entre empresas e profissionais, a plataforma tem como objetivo principal estimular o aumento do índice de equidade corporativa, através de vagas afirmativas, utilizando a tecnologia para gerar impacto social.


Arquitetura

Esse projeto foi construído utilizando o padrão de arquitetura de software MVC, acrônimo para Model-View-Controller ou Modelo-Visão-Controle.

A separação em camadas faz com que a aplicação fique leve e funcione de forma independente, permitindo que uma mesma lógica de negócios possa ser acessada e visualizada através de várias interfaces.


  📁 afirmajobs
   |
   |---📁 assets
   |
   |---📁 src
   |    |
   |    |--📄 app.js
   |    |
   |    |--📁 config
   |    |    |--📄 database.js
   |    |
   |    |--📁 controllers
   |    |    |--📄 businessController.js
   |    |    |--📄 jobOpportunityController.js
   |    |    |--📄 loginController.js
   |    |    |--📄 signUpController.js
   |    |    |--📄 userController.js
   |    |
   |    |--📁 middlewares
   |         |- 📄 auth.js
   |
   |    |--📁 models
   |    |    |--📄 businessSchema.js
   |    |    |--📄 jobOpportunitySchema.js
   |    |    |--📄 signUpSchema.js
   |    |    |--📄 userSchema.js
   |    |
   |    |--📁 routes
   |    |    |--📄 businessRoutes.js
   |    |    |--📄 indexRoutes.js
   |    |    |--📄 jobOpportunityRoutes.js
   |    |    |--📄 signUpRoutes.js
   |    |    |--📄 userRoutes.js
   |
   |    |--📁 test
   |         |- 📄 api.test.js     
   |
   |- 📄 .env
   |- 📄 .env.example
   |- 📄 .gitignore
   |- 📄 package-lock,json
   |- 📄 package.json
   |- 📄 README.md
   |- 📄 server.js

Desenvolvimento

A plataforma Afirmajobs é uma API REST, usando Node.js e o banco de dados noSQL MongoDB. No projeto também foi implementado testes unitários utilizando o jest e o supertest.


🔸 SignUp

Para acessar as funcionalidades da plataforma é preciso que seja feito o cadastro do usuário, nesse momento é solicitado email, senha e escolha do tipo da conta (Usuário ou Empresa). No projeto foi utilizado o método de criptografia do tipo hash, bcrypt para gerar senhas criptografadas.

API deve retornar o seguinte Json caso o tipo da conta seja de Usuário:

    {
        "_id": "62e284bd59687d4d337a4131",
        "email": "[email protected]",
        "password": "$2b$10$JO1GlQWVsuj.jn7mC4Pgu.gBcRRktl7CxxlFouCiRhRamo.lQpDJe",
        "role": "user",
        "createdAt": "2022-07-28T12:42:16.054Z",
        "updatedAt": "2022-07-28T12:42:16.054Z",
        "__v": 0
    }

API deve retornar o seguinte Json caso o tipo da conta seja de Empresa:

    {
        "_id": "62e2843d59687d4d337a4128",
        "email": "[email protected]",
        "password": "$2b$10$EaR4ufku7F2j7em0C3VWNe.kuwYFJedsxrL8W6IgwYGe3rz1rKIrW",
        "role": "business",
        "createdAt": "2022-07-28T12:42:16.054Z",
        "updatedAt": "2022-07-28T12:42:16.054Z",
        "__v": 0
    }
signUp

🔸 Login

Após a fase de cadastro, o usuário terá que fazer login, que por sua vez gerará um token para o mesmo tenha acesso as funcionalidades da aplicação.

API deve retornar o seguinte Json caso o login seja autorizado:

{
    "message": "Authorized login",
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYyZTI4NDNkNTk2ODdkNGQzMzdhNDEyOCIsImlhdCI6MTY1OTA3NDgyMX0.rTEzMy5ue-0i-wVpraaWfIWxW398rMSar9gMXmBhjKk"
}
login

🔸 Perfil de Usuário

Com o login autorizado o usuário poderá criar, atualizar e deletar o seu perfil na plataforma.

API deve retornar o seguinte Json para o perfil do Usuário:

   {
        "_id": "62e28edcbd2736480b75876b",
        "userId": "62e284bd59687d4d337a4131",
        "name": "Geankre Souza",
        "pronoun": "Ela/Dela",
        "subTitle": [
            "JavaScript",
            "Node.js"
        ],
        "country": "Brasil",
        "city": "Recife",
        "resident": "São Paulo",
        "race": "Preta",
        "genderIdentity": "Mulher cis",
        "sexualOrientation": "Homossexual",
        "desability": false,
        "phone": 89886473643,
        "lookJob": true,
        "education": [
            {
                "institution": "Reprograma",
                "course": "Back-end Developer",
                "fieldOfStudy": "Desenvolvimento de Software",
                "status": "Completo",
                "start": "2011",
                "finish": "2015",
                "_id": "62e28edcbd2736480b75876c"
            }
        ],
        "workExperience": [
            {
                "title": "Diretora de arte",
                "typeOfContract": "PJ",
                "company": "Salobra Estúdio Criativo",
                "location": "Recife",
                "descriptionJob": "Lorem Impsum",
                "start": "2015",
                "finish": "2022",
                "_id": "62e28edcbd2736480b75876d"
            }
        ],
        "language": [
            {
                "language": "Inglês",
                "level": "Básico",
                "_id": "62e28edcbd2736480b75876e"
            }
        ],
        "description": "Lorem Impsum",
        "picture": "link.imagem",
        "otherSocialMedia": [
            "linklink"
        ],
        "interest": [
            "Tecnologia",
            "Criatividade",
            "Inovação"
        ],
        "createdAt": "2022-07-28T13:27:19.765Z",
        "updatedAt": "2022-07-28T13:27:19.765Z",
        "__v": 0
    }

🔸 Perfil de empresa

Com o login autorizado o usuário poderá criar, atualizar e deletar o seu perfil na plataforma.

PI deve retornar o seguinte Json para o perfil de Empresa:

    {
        "userId": "62e2843d59687d4d337a4128",
        "name": "{Reprograma}",
        "subTitle": "+ Mulheres Programando",
        "segment": "Organizações sem fins lucrativos",
        "site": "www.reprograma.com.br",
        "description": "A {reprograma} é uma iniciativa de impacto social que foca em ensinar programação para mulheres cis e trans como forma de reduzir o gap de gênero no setor de tecnologia por meio da educação.",
            "based": "São Paulo",
        "foundation": "2016",
        "picture": "https://reprograma.com.br/assets/img/reprograma-fundos-claros.png",
        "interest": ["Tecnologia", "Educação", "Inovação"],
         "createdAt": "2022-07-28T14:15:23.676Z",
        "updatedAt": "2022-07-28T14:15:23.676Z",
        "__v": 0
    }

🔸 Vagas

As vagas são postadas exclusivamente por um usuário do tipo empresa e podem ser consultadas tanto pelo usuário comum, quanto por outras empresas.

API deve retornar o seguinte Json para uma vaga cadastrada:

    {
        "_id": "62e299fbe06adce4f5d3efa3",
        "position": "Engenheiro de software",
        "company": "{Reprograma}",
        "level": "Pleno",
        "typeOfWorkingPlace": "Híbrido",
        "location": "São Paulo",
        "contractType": "PJ",
        "salaryRange": "Indisponível",
        "description": "Lorem ipsum dolor sit amet",
        "afirmativePolicies": "Racial",
        "attachment": "anexo.png",
        "createdAt": "2022-07-28T14:15:23.676Z",
        "updatedAt": "2022-07-28T14:15:23.676Z",
        "__v": 0
    }

Rotas


Métodos POST/GET/PUT/DELETE - SignUp/Login


Método Rota Descrição
POST https://afirmajobs.herokuapp.com/signUp/create Cadastra novos usuários
POST https://afirmajobs.herokuapp.com/signUp/login Permite acesso a usuários cadastrados
GET https://afirmajobs.herokuapp.com/signUp/all Lista de todos os usuários cadastrados
PUT https://afirmajobs.herokuapp.com/signUp/update_email/:id Atualiza o email do usuário buscando por ID
PUT https://afirmajobs.herokuapp.com/signUp/update_password/:id Atualizar senha do usuário buscando por ID
DELETE https://afirmajobs.herokuapp.com/signUp/delete/:id Deletar registro de usuário buscando por ID

Métodos POST/GET/PUT/DELETE - Perfil de usuário


Método Rota Descrição
POST https://afirmajobs.herokuapp.com/user/profile Cadastra perfil o usuário
GET https://afirmajobs.herokuapp.com/user/all Lista de todos usuários cadastrados
GET https://afirmajobs.herokuapp.com/user/by_name Busca por nome de usuário ou empresa
GET https://afirmajobs.herokuapp.com/user/by_interest Busca usuário ou empresa de acordo com as tags de interesses adicionadas pelo usuário.
PUT https://afirmajobs.herokuapp.com/user/update_profile/:id Atualiza informações do perfil do usuário buscando por ID
DELETE https://afirmajobs.herokuapp.com/user/delete_profile/:id Deleta perfil de usuário buscando por ID

Métodos POST/GET/PUT/DELETE - Perfil de empresa


Método Rota Descrição
POST https://afirmajobs.herokuapp.com/business/profile Cadastra perfil da empresa
GET https://afirmajobs.herokuapp.com/business/all Lista de todas as empresas cadastradas
GET https://afirmajobs.herokuapp.com/business/by_name Busca por nome de usuário ou empresa
GET https://afirmajobs.herokuapp.com/business/by_interest Busca usuário ou empresa de acordo com as tags de interesses adicionadas pelo usuário.
GET https://afirmajobs.herokuapp.com/business/profile_user Filtro de busca de perfis de usuários pela localidade, raça, identidade de gênero, orientação sexual e palavras-chave
PUT https://afirmajobs.herokuapp.com/business/update_profile/:id Atualiza informações do perfil da empresa buscando por ID
DELETE https://afirmajobs.herokuapp.com/business/delete_profile/:id Deleta perfil da empresa buscando por ID

Métodos POST/GET/PUT/DELETE - Vagas


Método Rota Descrição
POST https://afirmajobs.herokuapp.com/job/create Cadastra uma nova vaga
GET https://afirmajobs.herokuapp.com/job/all Lista todas as vagas cadastradas
GET https://afirmajobs.herokuapp.com/job/by_position_company Busca vagas pelo cargo ou empresa
GET https://afirmajobs.herokuapp.com/job/filter Filtro de busca de vagas de acordo com o nível do cargo, a localização da vaga, o tipo de contrato de trabalho, o formato de trabalho (Presencial, Híbrido ou Remoto) e o recorte ao qual a vaga é destinada
PUT https://afirmajobs.herokuapp.com/job/update_job_opportunity/:id Atualiza informações de uma vaga publicada buscando por ID
DELETE https://afirmajobs.herokuapp.com/job/delete_job_opportunity/:id Deleta uma vaga publicada buscando por ID

Tecnologias Utilizadas


Para que fosse possível a execução desse projeto, foi necessário a utilização de algumas dependências, descritas a seguir:

⚙️ Dependências do Projeto

Para que fosse possível a execução desse projeto, foi necessário a utilização de algumas dependências, descritas a seguir:

  • Express - Framework para aplicativo da web do Node.js;

  • Cors - Permite que um site acesse recursos de outro site mesmo estando em domínios diferentes.

  • Mongoose - É uma biblioteca de programação orientada a objetos JavaScript que cria uma conexão entre MongoDB e a estrutura de aplicativo da web Express.

  • Dotenv-safe - Carrega variáveis de ambiente de um arquivo .env para process.env.

- [Bcrypt](https://www.npmjs.com/package/bcryptjs) - Método de criptografia do tipo hash para senhas baseado no Blowfish.
  • Jsonwebtoken - É um método definido na RFC 7519 para autenticação remota entre duas partes. Ele é uma das formas mais utilizadas para autenticar usuários em APIs RESTful.

⚙️ Dependências de desenvolvimento

  • Nodemon - Ajuda no desenvolvimento de sistemas com o Node. js reiniciando automaticamente o servidor;

  • Jest - Framework de teste unitário de código aberto em JavaScript criado pelo Facebook a partir do framework Jasmine.

  • Supertest - É uma módulo que forja requisições visando testar webservers em Node.js e verifica o retorno das mesmas para automatizar testes desde tipo de infraestrutura, principalmente web APIs.

📑 Arquivos:


  • package.json - Arquivo de configuração utilizado para estipular e configurar dependências;

  • .gitignore - Arquivo que lista quais arquivos ou pastas o Git deve ignorar;

Instalação


  1. Entre na pasta onde você deseja clonar o repositório. Abra o git nela e digite:

    $ git clone https://github.com/Geankre/Reprograma-Afirmajobs
  2. Digite a linha abaixo para entrar na pasta correta:

     $ cd afirmajobs
  3. Escreva a seguinte linha para instalar as dependências utilizadas nesse projeto:

     $ npm install
  4. Inicie o servidor com o comando:

     $ npm run dev
  5. Para realizar a verificação dos testes da API utilize o comando:

    $ npm run test

Testando a API


Acesse através do Heroku:



Acesse através do Postman:


  • Importe a coleção para teste deste servidor clicando aqui!

  • Copie o link acima e, no Postman, clique em Import -> Link (cole o link) -> Continue -> Import.

  • Ou forke diretamente para o seu Postman através do link:

    Run in Postman


©️ Licença

Este projeto está sob a licença MIT.


Implementações futuras


  • Serviço de chat com WebSocket;
  • Postagens no feed do perfil tipo usuário ou empresa;
  • Função de adicionar usuário ou empresa à sua rede;
  • Alerta de vagas;
  • Sugestão de vagas de acordo com o perfil do usuário;
  • Adicionar um perfil de Recrutador;

Desenvolvedora

autora

Linkedin Badge

Também conhecida como Gel Souza, sou pernambucana, apaixonada por criação e inovação, desenvolvedora back-end pela {Reprograma} e musicista nas horas vagas. Desenvolvo APIs Rest ultilizando JavaScript e Node.js, integradas com o banco de dados NoSQL MongoDB e testes com Jest e Supertest. Utilizo o BCRYPT como método de criptografia do tipo hash e o JWT para autenticação e verificação do usuário. Me coloco aberta para novas possibilidades de aprender, fazer e existir no mundo.


Referências

O que são ações afirmativas

Desigualdades sociais no brasil - IBGE

Falta de orferta em educação de qualidade aumenta a desigualdade racial

A importância de ações afirmativas nas empresas

You might also like...

Uma aplicação back-end para consumo e envio de frases/mensagens semelhante ao twitter.

Tweteroo Uma aplicação back-end utilizando o nodemon para rodar o servidor e o express para consumo e envio de frases/mensagens. Rodar projeto Após cl

Feb 3, 2022

Uma aplicação criada para tirar dúvidas

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: ya

Apr 26, 2022

Uma aplicação pomodoro conectada com a API do Spotify, para tornar o seu estudo mais dinâmico. Topics Stars

Uma aplicação pomodoro conectada com a API do Spotify, para tornar o seu estudo mais dinâmico.  Topics Stars

Demo | Tecnologias | Iniciando | Projeto | Layout | Demo 🧪 Tecnologias Esse projeto foi feito com as seguintes tecnologias. NextJS Next Auth TypeScri

Aug 9, 2022

Projeto para fins didáticos de final de módulo 4 proposto por Resilia Educalção

Academia API_Academia Projeto para fins didáticos Resilia Educação - Projeto Final Módulo 4 Tem como objetivo criar uma API RESTful de uma academia, o

Jun 1, 2022

Criação, leitura, atualização e exclusão de usuários em uma plataforma

Criação, leitura, atualização e exclusão de usuários em uma plataforma

Teste Prático - Desenvolvedor Full Stack Pleno Tabela de Conteúdo Sobre o Projeto Feito Com Iniciando o Projeto Pre-Requisitos Instalação via Docker I

Apr 11, 2022

Projeto desenvolvido para o curso de desenvolvimento fullstack da escola de programação Driven.

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

Nov 11, 2022

Projeto desenvolvido para o curso de desenvolvimento fullstack da escola de programação Driven.

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

Nov 11, 2022

Projeto desenvolvido em Angular e Material, para conclusão do curso de extensão em Java

EmpresaFront This project was generated with Angular CLI version 13.0.4. Development server Run ng serve for a dev server. Navigate to http://localhos

Mar 18, 2022

Grupo de Trabalho para o projeto do Desafio Chefão do XP 41 do Curso de FullStck da Gama Academy

Bem Vindos a Tech Dental 👋 A Tech Dental é uma plataforma para gestão de prontuários de pacientes em clínicas odontológicas. Secretárias ou até mesmo

Jul 27, 2022
Owner
Geankre Souza
Desenvolvedora BackEnd Jr. (em formação) | JavaScript | Git e Github
Geankre Souza
Projeto de Final de Módulo da Resilia, curso de Web Dev Full Stack, utilizando como base Node.js e Javascript.

?? API Transportadora Projeto de encerramento do módulo 4 da Resilia Educação. O objetivo é desenvolver uma API Rest de uma transportadora. ?? Pré-req

null 5 Mar 26, 2022
O projeto MKS Sistemas tem como objetivo o desenvolvimento de uma aplicação em React que utilize endpoint da API de produtos fornecida pela própria MKS Sistemas.

MKS front-end Descrição O projeto MKS Sistemas tem como objetivo o desenvolvimento de uma aplicação em React que utilize endpoint da API de produtos f

Rodrigo William 4 Jul 21, 2022
Projeto desenvolvido como desafio técnico para uma vaga de estágio

Crud - Lista de Tarefas com React Sobre • Funcionalidades • Dependências • Como executar • Licença ?? Sobre o projeto Projeto desenvolvido como teste

Leonardo dos Santos Lima 3 Oct 14, 2022
Repositório criado para prática do dia 14/05 utilizando nodeJs, express, nodemon e MVC. Como base utilizamos o modelo ER criado para uma locadora de filmes fictícia.

gamabuster Repositório criado para prática do dia 14/05 utilizando nodeJs, express, nodemon e MVC. Como base utilizamos o modelo ER criado para uma lo

Délio Costa 3 May 18, 2022
Projeto de uma aplicação financeira pessoal para estudo de tecnologias.

This is a Next.js project bootstrapped with create-next-app. Getting Started First, run the development server: npm run dev # or yarn dev Open http://

Carlos Oliveira 2 Jun 8, 2022
Simple Notes é um projeto de uma plataforma de anotações

Resumo Simple Notes é um projeto de uma plataforma de anotações. O grande diferencial é que as anotações são públicas e os usuários podem anotar histó

otaviozin 2 Feb 8, 2022
Projeto Final - Web FullStack do curso Resilia

Amassa API As dependências utilizadas no projeto foram: ?? Iniciando o projeto Recomendamos que faça o download do Insomnia na sua maquina! download i

Matheus Germano 3 May 6, 2022
Ferramenta desenvolvida para migrar dados de um banco de dados Sqlite para Postgres.

Sqlite to Postgres Migration Ferramenta desenvolvida para migrar dados de um banco de dados Sqlite para Postgres. Atualmente você pode: Pegar os dados

Tulio Calil 5 Dec 15, 2022
Uma aplicação criada com react-native para armazenar as skills dos usuários cadastrados.

SkillsClass Aplicação focada no gerenciamento de skills dos usuários cadastrados. Uma aplicação desenvolvida no ignite da Rocketseat com alguns toques

Carlos Ferreira 1 Dec 25, 2021
Uma aplicação back-end para listar e verificar se o dia é um feriado de acordo com os feriados registrados no sistema

Holydayzer Sobre Uma aplicação back-end para listar e verificar se o dia é um feriado de acordo com os feriados registrados no sistema. Como rodar Exe

Vinícius 2 Mar 9, 2022