GithubHelp home page GithubHelp logo

vagas_flutter_backend's Introduction

dart Backend - Projeto Vagas

codecov CII Best Practices OpenSSF Scorecard

💻 Equipe de DESENVOLVEDORES

Foto da Raquel Valgas
Raquel Valgas
Foto do Luan Fonseca Torralbo Gimenez
Luan F. T. Gimenez
Foto do Leonardo Gonzales
Leonardo Gonzalez

Projetos

Construção de um backend e uma API REST para controlar as informações do sistema Vagas.

⭐ Criação dos EndPoints

  • POST - /login
  • CRUD - /jobs
  • CRUD - /admin
  • CRUD - /users

⭐ Criação dos Serviços

  • Autenticação com JWT
  • Hash de para armazenar senha criptografada no banco de dados

Referências

vagas_flutter_backend's People

Contributors

leandrosimo avatar leozero3 avatar luanftg avatar raquelvalgas avatar valdirgiorgi avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

Forkers

brasizza

vagas_flutter_backend's Issues

Adição de middlewares

Criação da classe MiddlewareInterception

  • middleware responsável por adicionar middlewares globais a applicação.
  • Mime-Types
    content-type: application/json

Criação do contrato de Controller

  • Criação da interface de Controller - recebe uma lista de middlewares a serem implementados nas rotas e um parametro true ou false se necessita de verificação de token JWT no headers da requisição.

upload de imagem-base 64

Upload de Imagem no formato base64

História

  • Um Client para fazer upload de imagem no servidor deve enviar uma solicitação POST com o arquivo de imagem convertido para base64 juntamente do Id da empresa a que pertence a imagem.
  • Para obter a imagem do servidor o Client envia uma solicitação GET com o ID da empresa que deseja.

Atividades

  • Criar controlador seguro da rota /companies-images para o endpoint CompaniesImageController
  • Adicionar endpoint às rotas públicas
    • POST /companies-image - exige autenticação
    • GET /companies-image/id/<companyID> - rota pública que retorna um content-type: image/<extension> Ex. image/png.
  • Refatoração dos controladores que agora possuem optar por não retornar um content-type: application/json

Refatorar authenticação

Permissões

  • Lista de permissões
  • get-jobs
  • get-jobs-id
  • post-jobs
  • put-jobs
  • put-jobs-status
  • get-companies
  • get-companies-id
  • post-companies
  • put-companies
  • put-companies-status
  • get-users
  • get-users-id
  • post-users
  • put-users
  • put-users-status

Atividades

Image

  • Criar no banco de dados a tabela roles

  • Criar no banco de dados a tabela profile_roles

  • Criar role manualmente no banco para teste

  • Refatorar a interface serviço de segurança para que o método que gera o token receba uma String contendo a "role" do usuario que acessa a rota

  • Ajustar a implementação da interface para receber a lista como parametro do métdodo generateJWT(String userID, String profileID)

  • Refatorar middleware verifyJWT para verificar permissao do usuario para acessar a rota

Rota criar user

Criação do controlador da rota UserController

  • POST /user

Tela "Sobre": Opinião UI/UX

Descrição:

Como podemos perceber na imagem abaixo, ao rolar a tela "Sobre" até o fim, o número de versão está muito próximo do fim da tela.

Opinião:

Acredito que ficaria melhor visualmente, inserir um pouco mais de espaçamento entre eles.

Image

Rota Login

Criação da Rota Login

Criação do Controlador que responde a rota Login

  • POST '/login'

Referência

Criação da camada DAO

  • Criação do contrato de acesso aos dados - DAO (Data Access Object)
  • Implementação do contrato de DAO com mysql1

Criação do modelo de Administrador

Criação do modelo de admin

  • representa o Recrutador no contexto dessa api

Modelo com os campos:

  • id
  • perfil_id
  • nome
  • telefone
  • email
  • password
  • created_by
  • created_date
  • changed_by
  • changed_date

Image

Componentizar AppBar

  • Criar componente AppBar padrão;

  • Modificar todas as telas existentes para obter o appBar padrão.

Criação do modelo de jobs

Criação do Modelo Jobs

  • classe para representar um modelo de vaga
class JobModel {
  final int id;
  final int companyId;
  final String title;
  final String description;
  final double salary;
  final String local;
  final String seniority;
  final String regime;
  final String link;
  final String whatsappNumber;
  final String email;
  final String createdBy;
  final DateTime createdDate;
  final String changedBy;
  final DateTime changedDate;
}

models

refatorar paginação

Refatoração da paginação

O objeto Response da ação GET no endpoint /jobs deve retornar um objeto

{ "totalPages": 5, "data": [] }

Refatorações gerais - Review para publicação da versão 0.0.1

Refatorações gerais

  • Criar método para adicionar permissões automaticamente se elas não existirem
  • Criar classe para validações nos handlers
  • Verificar o timezone
  • Refatorar o uso da tabela que contem os status dos recursos
  • Conceder permissões gerais ao admin
  • Atualizar documentação

Implementação de feature de login

História

Um recrutador ao acessar o aplicativo Web é capaz de fazer login fornecendo

  • email
  • password

a requisição retorna, em caso de sucesso um token JWT - necessário para as chamadas

  • POST, PUT e DELETE para /jobs ;
  • PUT e GET para /companies;
  • PUT e GET para /users.

Atividades

  • Criação de AuthTO - Transfer Object
    • String email
    • String password
  • Criação de UserDAO - Data Access Object
    • implementação do método para retornar um usuário a partir do email
  • Criação do UserService
    • recebe uma implementação de UserDAO
    • implementa método de autenticação

Criação do contrato de serviço genérico

Criação da classe abstrata que define a implementação dos métodos:

abstract class GenericService<T> {

  Future<T> findOne(int id);
  Future<List<T>> findAll();
  Future<bool> save(T object);
  Future<bool> delete(int id);

}

refatorar edição de imagem da empresa

Permitir edição de imagem da empresa

  • POST para /companies-image enviando um id de company ja cadastrada deverá sobrescrever a imagem anterior.
  • Em caso de sobrescrita de arquivo deve retornar uma mensagem de Imagem alterada com sucesso.

refatoração da segurança

Refatoração dos Middlewares de segurança

Atualmente os controladores declarados seguros possuem em sua lista de middlewares, dois em especial: authorization e verifyJWT.

  • O Primeiro verifica a existência de um token no headers e inscreve o resultado da validação desse token na chave 'jwt' no context da requisição.
  • O segundo verifica o resultado da validação e se != de null , verifica permissão do token para acessar a rota pretendida através da chave 'role'.

Problema

Atualmente os middlewares de segurança estão sendo executados tantas vezes quanto o número de controladores declarados seguros.

Atividades

  • declarar passagem dos middlewares de segurança globalmente
  • criar validação para permitir acesso as rotas públicas
    • GET jobs
      • jobs?
      • jobs/id/
    • POST login
    • GET companies-image

Adicionar paginação para vagas

Adição de Paginação na busca por vagas

Se o client não especificar os parâmetros: page e limit como query parameter a busca por vagas deve retornar todos os registros da base de dados
Cada page contém, a princípio, 10 registros a menos que o cliente especifique um valor para limit

  • Exemplo da chamada
    • GET /jobs?page=1&limit=15 - deve retornar os 15 primeiros registros. [1,15]
    • GET /jobs?page=2&limit=10 - deve retornar 10 registros a partir do item 11 (inicio da pagina2). [21-30]

Atividades

  • Alteração do método getByQuery na camada DAO
    • inclusão das chaves: LIMIT start, end
  • Liberação das chaves page e limit para o filtro de /jobs

Denunciar vagas

Denúncia de vagas

História

Quando um usuário faz uma denúncia, armazenamos as informações relevantes em um banco de dados. Além disso, enviamos um e-mail para os administradores do sistema notificando-os da denúncia e fornecendo as informações relevantes para que possam tomar medidas apropriadas.

Quando os administradores recebem uma denúncia, eles devem processá-la adequadamente. Isso envolve

  • verificar as informações fornecidas pelo usuário e
  • entrar em contato com a empresa responsável pela vaga para investigar a denúncia.
    Se a denúncia for comprovada, a vaga deve ser removida do site.

Depois que a denúncia for processada, notificamos o usuário que fez a denúncia sobre o resultado da investigação. Isso envolve

  • informá-lo que a vaga foi removida ou que a denúncia foi descartada por falta de evidências.

Questões A SEREM RESOLVIDAS

  • implementar medidas de segurança adequadas para evitar que os usuários façam denúncias falsas ou usem a função de denúncia de maneira inadequada.
    • [PERGUNTA] Somente usuário logado pode fazer a denúncia ?
    • [PERGUNTA] Se não, como identificar quem fez a denúncia - idoneidade

Cenário adotado

  • Qualquer usuário pode denunciar uma vaga a parir de uma descrição da denúncia
  • Será criada uma tabela no banco de dados para armazenar as denúncia das vagas

Atividades

  • Criar tabela jobs_report na base de dados com os campos
    • int id
    • varchar job_id
    • varchar description
    • DateTime created_date
  • Criar modelo de Denúncia de Vagas JobsReportModel
  • Criar Objeto de acesso aos dados JobsReportDAO
  • Criar serviço para acessar a base de dados JobsReportService
  • Criar controlador com os endpoints de acesso as funcionalidades de denúncia JobsReportController
  • fazer liberação da rota em SecurityServiceImp
  • registrar a dependência no container de injeção
  • adicionar controlador a função principal - handler de Cascade()

upload da imagem em Companies

Upload de Imagem no Servidor

Para lidar com requisições de upload de arquivo, você precisará configurar o servidor para
aceitar requisições multipartes. Isso é feito através do uso de um middleware chamado shelf.multipartMiddleware().
O middleware shelf.multipartMiddleware() analisa o cabeçalho de uma requisição e verifica se a requisição é multipart/form-data. Em seguida, ele extrai e analisa os dados do corpo da requisição para obter os campos e arquivos enviados.

Atividades

  • Configurar o servidor para aceitar requisições multipartes.
    • Adicionar o middleware shelf.multipartMiddleware() para aceitar requisições multipartes.
  • Criar um handler para lidar com as requisições de upload de imagens.
  • Ler o corpo da requisição para obter o nome e o conteúdo do arquivo de imagem.
  • Armazenar o arquivo de imagem em um diretório na raiz da aplicação.
  • Retornar a URL da imagem para acesso público.

Criar Filtro na Api

  • Cria Filtros por queryParams
  • Cria Modelos para retornos com campos específicos
  • Refatora findOne(String id) para retornar JobDetails

Implementação da feature companies

CRUD para companies

  • Um recrutador logado pode realizar o CRUD completo das empresas que ele criou na base de dados
  • Ao cadastrar uma vaga o recrutador tem acesso a lista de empresas cadastradas por ele

Implementações

  • Criação da classe CompanyModel
    • id
    • name
    • location
    • photo_url
    • description
    • created_by
    • created_date
    • updated_by
    • updated_date
  • Criação da classe para acesso aos dados CompaniesDAO
  • Criação do serviço de acesso aos dados CompaniesService
  • Criação do controlador da rota CompaniesController
    • GET /companies
    • GET /companies/id/<id>
    • GET /companies?<key>=<value>
    • POST /companies
    • PUT /companies
    • PUT/companies-status

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.