Giter VIP home page Giter VIP logo

gestaogastos's Introduction

Gestao de Gastos

Projeto para gestao de Gastos

Procedimentos que deverá efetuar para subir o ambiente

Na implementaçao deste projeto foi utilizado o seguinte stack tecnologico: Git, Ruby, Rails, PostgreSql.

Ambiente de desenvolvimento

Pre Requirements

Instalações dos pré-requisitos

  • Git

O primeiro passo que deverá efetuar será instalar o Git (https://git-scm.com). Caso ainda não o tenha, vide o tutorial abaixo para instalação:

https://git-scm.com/book/pt-br/v1/Primeiros-passos-Instalando-Git

Após a instalação do git, deverá configura-lo (https://git-scm.com/book/pt-br/v2/Começando-Configuração-Inicial-do-Git) e clonar este projeto ([email protected]:rrcosta/GestaoGastos.git).

  • Ruby

Para obter a versão 2.6.3 do Ruby, basta abrir um terminal em seu sistema e digitar um dos seguintes comandos:

  • Windows

Para instalar o Ruby no Windows, sugiro verificar os passos no seguinte site: https://rubyinstaller.org/downloads/

  • Mac
brew install ruby
  • Linux (Debian, Ubuntu e derivados)
sudo apt-get install ruby-full
  • Ruby on Rails

Após instalar o ruby (passo acima), deverá instalar o framework Rails, através do comando abaixo

gem install rails

Instalação e execução da aplicação

  1. Faça o clone deste projeto

  2. Vá ao diretório do projeto e execute

        $ bundle install
  1. Copie o conteúdo do arquivo .env.example para o arquivo .env e altere com as credenciais de seu ambiente local
    $ cp .env.example .env
  1. Abra o arquivo .env e coloque os seus dados de acesso do seu banco de dados Postgrsql

  2. Faça o setup do banco de dados: Criação do Banco de Dados

    $ bin/rails db:create
  1. Faça o setup do banco de dados: Criação das tabelas Banco de Dados
    $ bin/rails db:migrate
  1. Inicie a aplicação usando o servidor local (Irá iniciar na porta padrão que é a 3000)
    $ rails s

Rodar os testes da aplicação

Para rodar os testes automatizados deste projeto, basta entrar no pasta raiz do projeto e digitar:

    $ rspec

Autenticaçao da aplicação

Para a autenticaçao foi utilizado o JWT, que e um padrao (RFC-7519) de mercado que define como transmitir e armazenar objetos JSON de forma segura.

Ele e formado por 3 secoes: Header, Payload e Signature.

Carga Primária para utilizar o sistema

Usuario (User)

Para utilizar esta API é necessário fazer os seguintes passos:

  1. Criar um usuário, atraves do endpoint:
    POST /users
   {
	 "name": "teste",
	 "username": "teste",
	 "password": "123456",
	 "password_confirmation": "123456"
   }

response

  {
    "id": "dc0e72a0-33f3-40e1-aae8-66848b63f123",
    "name": "teste",
    "username": "teste",
    "password_digest": "$2a$10$CIYnpAox9X/ERyGSzJ0Ster/mD0JQKMx/yfjZtYgE7gwzyeKtIiwC"
  }
  1. Autenticar na API, atraves do endpoint:
  POST /auth/login
  {
  "username": "teste",
  "password": "123456"
  }

response:

  {
    "token": "eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiZGMwZTcyYTAtMzNmMy00MGUxLWFhZTgtNjY4NDhiNjNmMTIzIiwiZXhwIjoxNTYwMjExMjc1fQ",
    "exp": "10-06-2019 21:01",
    "username": "teste"
  }
  1. Efetuar o Login na API com o cabeçalho - Authorization com o token.
  GET /users/{username}
  
  GET /users/teste

header

|---------------|-----------------------------------------------------------------------------------------------------------------------|
| Authorization |Bearer eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiZGMwZTcyYTAtMzNmMy00MGUxLWFhZTgtNjY4NDhiNjNmMTIzIiwiZXhwIjoxNTYwMjExMjc1fQ |
|---------------|-----------------------------------------------------------------------------------------------------------------------|

Response:

  [
    {
        "id": "dc0e72a0-33f3-40e1-aae8-66848b63f123",
        "name": "teste",
        "username": "teste",
        "password_digest": "$2a$10$CIYnpAox9X/ERyGSzJ0Ster/mD0JQKMx/yfjZtYgE7gwzyeKtIiwC"
    }
  ]

OBS: Sempre sera necessario passar o token para acessar e manipular as informacoes na API.

Gastos (expenses)

O usuario poderar cadastrar seus gastos atraves do endpoint:

    POST /expenses

header

|---------------|-----------------------------------------------------------------------------------------------------------------------|
| Authorization |Bearer eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiZGMwZTcyYTAtMzNmMy00MGUxLWFhZTgtNjY4NDhiNjNmMTIzIiwiZXhwIjoxNTYwMjExMjc1fQ |
|---------------|-----------------------------------------------------------------------------------------------------------------------|

body

  {
    "descricao": "teste",
    "valor": 1250.10,
    "data": "2019-06-13"
  }

OBS: O campo "codigousuario" informado no teste sera considerado como "user_id", que sera obtido ao salvar o registro de gasto (expense), atraves do token informado no client (Postman, SoapUI ou Curl ).

Visualizar os gastos cadastrados pelo usuário logado na api:

    GET /expenses

header

|---------------|-----------------------------------------------------------------------------------------------------------------------|
| Authorization |Bearer eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiZGMwZTcyYTAtMzNmMy00MGUxLWFhZTgtNjY4NDhiNjNmMTIzIiwiZXhwIjoxNTYwMjExMjc1fQ |
|---------------|-----------------------------------------------------------------------------------------------------------------------|
  [
    {
        "id": "e30b2dab-05ce-4eb9-9502-fe747fc4be72",
        "descricao": "Pagamento do condominio ",
        "valor": "305.95",
        "data": "2019-06-03T00:00:00.000Z",
        "category": []
    },
    {
        "id": "b741547d-8412-4a6b-adee-8279cdc48250",
        "descricao": "Pagamento da parcela do carro ",
        "valor": "652.75",
        "data": "2019-06-12T00:00:00.000Z",
        "category": []
    },
    {
        "id": "8e397385-98df-484c-a737-b71454766222",
        "descricao": "teste",
        "valor": "1250.1",
        "data": "2019-06-13T00:00:00.000Z",
        "category": []
    }
]

Filtro de Gastos por dia.

A Api disponibiliza um endpoint de filtro para buscar os gasto de um determinado dia cadastrado pelo usuário logado na api.

exemplo:

  GET /gasto_por_dia?data=2019-06-03

Onde o data=2019-06-03 deverá ser a data desejada para fazer o filtro de gastos cadatrados através do usuário logado pelo Token.

header

|---------------|-----------------------------------------------------------------------------------------------------------------------|
| Authorization |Bearer eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiZGMwZTcyYTAtMzNmMy00MGUxLWFhZTgtNjY4NDhiNjNmMTIzIiwiZXhwIjoxNTYwMjExMjc1fQ |
|---------------|-----------------------------------------------------------------------------------------------------------------------|

Response:

[
  {
      "id": "e30b2dab-05ce-4eb9-9502-fe747fc4be72",
      "descricao": "Pagamento do condominio ",
      "valor": "305.95",
      "data": "2019-06-03T00:00:00.000Z",
      "category": []
  }
]

Categorias

Para cadastrar uma categoria basta fazer seguinte:

A Api disponibiliza um endpoint de criaçao de categorias por cada gasto cadastrado pelo usuario logado na api.

Acessar o detalhes do gasto desejado e utilizar POST /{id-do-gasto}/categoria.

Exemplo:

  POST /expenses/e30b2dab-05ce-4eb9-9502-fe747fc4be7/categoria

onde "e30b2dab-05ce-4eb9-9502-fe747fc4be7" sera o ui do gasto em que o usuario deseja adicionar a categoria

header

|---------------|-----------------------------------------------------------------------------------------------------------------------|
| Authorization |Bearer eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiZGMwZTcyYTAtMzNmMy00MGUxLWFhZTgtNjY4NDhiNjNmMTIzIiwiZXhwIjoxNTYwMjExMjc1fQ |
|---------------|-----------------------------------------------------------------------------------------------------------------------|

body

{
  "descricao": "Lazer"
}

responder

{
  "id": "d31dcc50-084a-4540-a9a4-699dfe7dd3b2",
  "descricao": "Lazer",
  "expense": {
      "id": "e30b2dab-05ce-4eb9-9502-fe747fc4be7"
  }
}

Para Verificar as já categorias já existentes:

A Api disponibiliza um endpoint para listar todas as categorias cadastradas na api.

OBS¹: É listado todas as categorias cadastradas na api, independentemente do usuario logado.

Exemplo:

  GET /categories

header

|---------------|-----------------------------------------------------------------------------------------------------------------------|
| Authorization |Bearer eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiZGMwZTcyYTAtMzNmMy00MGUxLWFhZTgtNjY4NDhiNjNmMTIzIiwiZXhwIjoxNTYwMjExMjc1fQ |
|---------------|-----------------------------------------------------------------------------------------------------------------------|

responder

[
  {
      "id": "b06be318-de6d-4132-8f9f-7adedacb3986",
      "descricao": "teste",
      "expense": {
          "id": "cc337360-2255-46b3-aabc-649918291c4f"
      }
  },
  {
      "id": "d31dcc50-084a-4540-a9a4-699dfe7dd3b2",
      "descricao": "Lazer",
      "expense": {
          "id": "e30b2dab-05ce-4eb9-9502-fe747fc4be7"
      }
  }
]

OBS² Conforme visto acima, no responder é indicado qual ID do gasto que esta vinculado a categoria(as)

..

gestaogastos's People

Contributors

dependabot[bot] avatar rrcosta avatar

Stargazers

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