GithubHelp home page GithubHelp logo

analuisams99 / drone-feeder Goto Github PK

View Code? Open in Web Editor NEW
1.0 1.0 0.0 128 KB

O projeto Drone Feeder consiste em uma API REST onde é possível gerenciar dados sobre entregas realizadas por drones, podendo realizar operações de criar, ler atualizar drones e entregas, associando uma entrega a um drone.

Java 100.00%
api-rest java java11 junit spring-boot

drone-feeder's Introduction

Projeto Drone Feeder

A FutuereH desenvolveu uma nova patente que permite a entrega de pacotes com drones e agora precisa criar um serviço de back-end, chamado Drone Feeder, que fornecerá informações aos drones.

O Drone Feeder é uma aplicação REST em que um sistema Front-end vai exibir algumas informações dos drones, tais como latitude e longitude, data e horário da entrega ou retirada do pacote. Essas informações serão armazenadas no banco de dados MySQL.

O drone, por sua vez, sincronizará informações com o Drone Feeder sempre que ele tiver uma conexão com a internet. O drone ainda vai informar se a entrega foi efetuada junto a data, horário do momento da entrega.

Stack utilizada

  • Java
  • MySQL
  • Maven
  • Spring
  • Docker

Funcionalidades

Drone

  • Criação de um drone
  • Listar todos os drones disponíveis
  • Buscar drone pelo seu identificador (ID)
  • Atualiação da posição geográfica do drone
  • Remoção de uma drone existente
  • Atribuição de uma entrega à um drone
  • Listar todas entregas atribuídas à um drone

Entrega

  • Criação de uma entrega
  • Edição dos dados da entrega
  • Listar todas as entregas criadas
  • Buscar drone responsável por uma entrega específica de acordo com o identificador da mesma (ID)
  • Busca entrega pelo seu identificador (ID)
  • Remoção de uma entrega criada

Rodando localmente

Clone o projeto

  git clone [email protected]:analuisams99/drone-feeder.git

Entre no diretório do projeto

  cd drone-feeder
  • Utilizando Docker:
docker-compose up -d
  • Rodando somente o servidor com Docker:
  docker run --name drone_feeder -e MYSQL_ROOT_PASSWORD=root 
    -p 3306:3306 -d mysql:5.7
 ./mvnw spring-boot:run
  • As requisições podem ser feitas na rota http://localhost:8080 após estar com a aplicação rodando

Documentação da API

Drone

Criar drone

  POST /drone
  • Request (application/json)

    • Body

        {
            "modelo": "Teste",
            "latitudeAtual": 0,
            "longitudeAtual": 0,
        }
      
  • Response 200 (application/json)

    • Body

        {
            "id": 3,
            "modelo": "DJI Mavick Pro",
            "latitudeAtual": 10.0,
            "longitudeAtual": 20.0,
            "entregas": []
        }
      
  • Se modelo estiver vazio

  • Response 400 (application/json)

    • Body

        {
             "message": "Insira um modelo para criar um Drone"
        }
      

Buscar drones

  GET /drone
  • Response 200 (application/json)
    • Body

        [
            {
                "id": "1",
                "modelo": "modelo de teste",
                "latitudeAtual": 0,
                "longitudeAtual": 0,
                "entregas": []
            },
            /* ... */
        ]
      

buscar drone pelo id

  GET /drone/{droneId}
Parametros Descrição
droneId Identificador do drone buscado
  • Response 200 (application/json)

    • Body

        {
            "id": 1,
            "modelo": "DJI Mavick Pro",
            "latitudeAtual": 10.0,
            "longitudeAtual": 20.0,
            "entregas": []
        }
      
  • Se não encontrar drone com o id buscado

  • Response 404 (application/json)

    • Body

       {
            "erorr": "Drone não encontrado"
       }
      

Atualizar localizacao drone

    PUT /drone/{droneId}
Parametros Descrição
droneId Identificador do drone a ser atualizado
  • Request (application/json)

    • Body

        {
            "latitudeAtual": 10,
            "longitudeAtual": 15,
        }
      
  • Response 200 (application/json)

    • Body

        {
            "id": 1,
            "modelo": "DJI Mavick Pro",
            "latitudeAtual": 10.0,
            "longitudeAtual": 15.0,
            "entregas": []
        }
      

Deletar drone

    DELETE /drone/{droneId}
Parametros Descrição
droneId Identificador do drone a ser excluído
  • Response 200 (text)
    • Body

        Drone deletado com sucesso!    
      

Adicionar entrega drone

    POST /drone/{droneId}/entrega/{entregaId}
Parametros Descrição
droneId Identificador do drone a ser atualizado
entregaId Identificador da entrega a ser indexada
  • Response 200 (application/json)

    • Body

        {
            "id": 1,
            "modelo": "DJI Mavick Pro",
            "latitudeAtual": 17.0,
            "longitudeAtual": 0.0,
            "entregas": [
                {
                    "id": 1,
                    "dataHoraRetirada": "11/04/2023 19:38",
                    "dataHoraEntrega": "15:21",
                    "statusDaEntrega": "EM_ANDAMENTO",
                    "latitudeDestino": 0.0,
                    "longitudeDestino": 0.0
                }
            ]
        }
      
  • Se nao encontrar drone

  • Response 404 (application/json)

  • Body

      {
          "message": "Drone não encontrado"
      }
    
  • Se não encontrar entrega

  • Response 404 (application/json)

  • Body

      {
          "message": "Entrega não encontrado"
      }
    

Listar entregas de um drone

    GET /drone/{droneId}/entregas
Parametros Descrição
droneId Identificador do drone a ser listado as entregas
  • Response 200 (application/json)

    • Body

        [
            {
                "id": 1,
                "dataHoraRetirada": "11/04/2023 19:38",
                "dataHoraEntrega": "15:21",
                "statusDaEntrega": "EM_ANDAMENTO",
                "latitudeDestino": 0.0,
                "longitudeDestino": 0.0
            },
            /.../
        ]
      
  • Se nao encontrar drone

  • Response 404 (application/json)

  • Body

      {
          "message": "Drone não encontrado"
      }
    

Entrega

Criar entrega

  POST /entrega
  • Request (application/json)

    • Body { "dataHoraRetirada": "10:52", "dataHoraEntrega": "15:21", "latitudeDestino": 4, "longitudeDestino": 15 }
  • Response 200 (application/json)

    • Body

        {
            "id": 1,
            "dataHoraRetirada": "10:52",
            "dataHoraEntrega": "15:21",
            "statusDaEntrega": "PENDENTE",
            "latitudeDestino": 4.0,
            "longitudeDestino": 15.0
        }
      
  • Se dataHoraRetirada estiver vazio

  • Response 400 (application/json)

    • Body

        {
             "message": "Não é possível criar uma entrega sem a data de retirada."
        }
      
  • Se latitudeDestino e/ou longitudeDestino estiverem vazias

  • Response 400 (application/json)

    • Body

        {
             "message": "Não é possível criar uma entrega sem as coordenadas de longitude e/ou latitude."
        }
      

Atualizar entrega

    PUT /entrega/{entregaId}
Parametros Descrição
droneId Identificador da entrega a ser atualizado
  • Request (application/json)

    • Body

        {
            "dataHoraRetirada": "10:52",
            "dataHoraEntrega": "15:21",
            "statusDaEntrega": "ENTREGUE"
            "latitudeDestino": 4,
            "longitudeDestino": 15
        }
      
  • Response 200 (application/json)

    • Body

        {
            "dataHoraRetirada": "10:52",
            "dataHoraEntrega": "15:21",
            "statusDaEntrega": "ENTREGUE"
            "latitudeDestino": 4,
            "longitudeDestino": 15
        }
      
  • Se não encontrar entrega

  • Response 404 (application/json)

  • Body

      {
          "message": "Entrega não encontrada"
      }
    

Buscar entregas

  GET /entrega
  • Response 200 (application/json)
    • Body

        [
            {
                "dataHoraRetirada": "10:52",
                "dataHoraEntrega": "15:21",
                "statusDaEntrega": "ENTREGUE"
                "latitudeDestino": 4,
                "longitudeDestino": 15
            }
            /* ... */
        ]
      

Buscar entrega pelo id

  GET /entrega/{entregaId}
Parametros Descrição
entregaId Identificador da entrega buscada
  • Response 200 (application/json)

    • Body

        {
            "dataHoraRetirada": "10:52",
            "dataHoraEntrega": "15:21",
            "statusDaEntrega": "ENTREGUE"
            "latitudeDestino": 4,
            "longitudeDestino": 15
        }
      
  • Se não encontrar entrega com o id buscado

  • Response 404 (application/json)

    • Body

       {
            "erorr": "Entrega não encontrada"
       }
      

Buscar drone entrega

  GET /entrega/{entregaId}/drone
Parametros Descrição
entregaId Identificador da entrega buscada
  • Response 200 (application/json)

    • Body

        {
            "id": 1,
            "modelo": "DJI Mavick Pro",
            "latitudeAtual": 17.0,
            "longitudeAtual": 0.0,
            "entregas": [
                {
                    "id": 1,
                    "dataHoraRetirada": "11/04/2023 19:38",
                    "dataHoraEntrega": "15:21",
                    "statusDaEntrega": "EM_ANDAMENTO",
                    "latitudeDestino": 0.0,
                    "longitudeDestino": 0.0
                },
                {
                    "id": 2,
                    "dataHoraRetirada": "11/04/2023 19:39",
                    "dataHoraEntrega": "15:21",
                    "statusDaEntrega": "CANCELADA",
                    "latitudeDestino": 0.0,
                    "longitudeDestino": 0.0
                },
                {
                    "id": 3,
                    "dataHoraRetirada": "11/04/2023 19:39",
                    "dataHoraEntrega": "15:21",
                    "statusDaEntrega": "ENTREGUE",
                    "latitudeDestino": 4.0,
                    "longitudeDestino": 15.0
                }
            ]
        }
      
  • Se não encontrar entrega com o id buscado

  • Response 404 (application/json)

    • Body

       {
            "erorr": "Entrega não encontrada"
       }
      

Deletar entrega

    DELETE /drone/{entregaId}
Parametros Descrição
entregaId Identificador da entrega a ser excluída
  • Response 200 (text)
    • Body

        Entrega deletada com sucesso!    
      

Desenvolvido por

drone-feeder's People

Contributors

analuisams99 avatar pedropereiradev avatar

Stargazers

 avatar

Watchers

 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.