Giter Site home page Giter Site logo

rhsimulator-backend's Introduction

RH Simulator!

Olá! Esse é meu projeto da etapa de seleção para a vaga de dev full-stack da Reflow. Você consegue encontrar esse microsservidor hostado no heroku na seguinte url: https://rhsimulator-backend.herokuapp.com/

Estrutura do projeto

Decidi dividir a estrutura do projeto em dois repositórios diferentes: o back e o front-end. O back-end usa Flask, Auth0, SQLAlchemy e PostgreSQL. O front-end usa Angular.

Back-end

Arquivos

src/
    main.py
    auth.py
    entities/
	    entities.py
	    resume.py

O main.py contém todas as rotas do back-end e também a inicialização do servidor. Auth.py consta o tratamento de erros e a criação de decorators para acoplar autenticação de usuários e gestão de tipos de tais, tipo requerir que o usuário seja um admin para acesso a algumas rotas. (Pra fins da minha prova de conceito, só. Todo mundo que se logar já é um admin!) Entities.py inicializa a conexão com o banco de dados(que na verdade só consta uma tabela) e estabelece algumas colunas padrões que toda tabela criada deve ter: coluna de ID, quem modificou, quando criou e quando modificou. Resume.py estabelece as colunas extras que o programa irá usar: name, content e curriculum, todos eles strings.

Rotas do back-end

/resumes GET- Disponível para todos usuários, essa rota fornece todos os currículos dentro do database no seguinte formato JSON:

[{'name': string,
'content': string,
 'curriculum': string,
  'id': int,
  'created_at': datetime,
  'updated_at': datetime,
  'last_updated_by': string}, {...}, {...}]

POST- Disponível somente para usuários logados, é a rota de envio de um novo currículo ao banco de dados. Uma requisição de exemplo ficaria da seguinte forma:

Header: application/json,
    Authorization Bearer {token de segurança}
Body: {'name':string, 'content': string, 'curriculum': string}

DELETE- Disponível somente para usuários da classe admin. É uma requisição simples, direto da url: resumes/{id do currículo a ser deletado}.

/detalhes/{id do currículo} GET- Disponível para somente para usuários logados, retorna um JSON com o currículo inserido na url. O retorno:

{'name': string,
'content':string,
'curriculum': string}

POST- Também só para usuários logados. Atualiza a entrada do currículo no ID da URL, no mesmo formato que a requisição de novo currículo.

Desafios encontrados

  • Bugs
    • Ao menos nos testes manuais, nenhum encontrado no back-end!
  • Dificuldades
    • Implementar a API de autenticação de usuário do Auth0 foi um saco. Bibliotecas do python estavam desatualizadas, e fui obrigado a dar uma lida no código do python-jose-cryptodome pra descobrir como resolver um problema de instalação.
    • Fazer o deploy no heroku. O Procfile é bem inconsistente em relação a executar um servidor django para um servidor flask.
    • Limitações de programar em um notebook relativamente velho.
  • O que falta
    • Testes automatizados.
    • Implementar continuous deployment no heroku.
    • Criar colunas mais específicas na tabela e implementar de acordo no programa (coisa tipo 'cargo', 'formação', 'idade' e 'cidade'.
    • Armazenar profiles de cada usuário e lembrar preferências.

rhsimulator-backend's People

Contributors

dependabot[bot] avatar doctsteel avatar

Watchers

 avatar  avatar

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.