Giter Club home page Giter Club logo

vagas_flutter_backend's Introduction

💙 Elite37 💙 Flutter / Dart - Brasil

Comunidade de desenvolvedores Flutter. 🚀Venha fazer parte!

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

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

Criar Filtro na Api

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

Rota Login

Criação da Rota Login

Criação do Controlador que responde a rota Login

  • POST '/login'

Referência

Componentizar AppBar

  • Criar componente AppBar padrão;

  • Modificar todas as telas existentes para obter o appBar padrã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 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

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.

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.

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

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.

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

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

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

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);

}

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 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

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": [] }

Rota criar user

Criação do controlador da rota UserController

  • POST /user

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()

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

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

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

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.