O objetivo do projeto é receber a localização do veículo com a sua velocidade atual. Caso a velocidade atual esteja acima do cadastrado, é enviado uma notificação para os sistemas cadastrados através de goroutines e http requests.
Primeiro, certifique-se de ter configurado $GOPATH.
# utilize o comando para força Go a se comportar da maneira $GOPATH, mesmo fora do $GOPATH.
export GO111MODULE=off
# Download do projeto
go get github.com/jordanfduarte/vehicle-tracking-system
# Download das dependências
go get -u github.com/jinzhu/inflection
go get -u github.com/jinzhu/now
go get -u gorm.io/gorm
go get -u github.com/jordanfduarte/mysql-driver-go
# Isso pode demorar alguns minutos
# Para correção de um problema com o drivr mysql onde esta retornando 404 no host "https://gorm.io/driver/mysql"
# e dificultando assim o download da dependência do projeto, executar os seguintes comandos
mv $GOPATH/src/gorm.io/driver/mysql/ $GOPATH/src/gorm.io/driver/_OLD_mysql/
cp -R $GOPATH/src/github.com/jordanfduarte/mysql-driver-go/ $GOPATH/src/gorm.io/driver/mysql/
Defina o ambiente do projeto e execute
# vá para o diretorio do projeto
cd $GOPATH/src/github.com/jordanfduarte/vehicle-tracking-system
# criar o container da ultima versão do mysql com o Docker
docker-compose up --detach
# ou utilizar o comando ambos fazem a mesma coisa
docker run --name mysql -e MYSQL_ROOT_PASSWORD=docker -p 3306:3306 -d mysql:latest
# Executar o comando docker ps para verificar se o container mysql está ativo
docker ps
# executa o projeto
go run main.go
# Endpoint da api:
http://localhost:8000/
# Executar inicialmente antes de qual quer request a url de migração de dados
http://localhost:8000/migration
# para realizar os testes dos endpoints exeutar o comando
go test -v
- Action
- Implementa os Handler dos endpoints
- database.go (DatabaseAction)
- fleet_alert.go (AlertsGetAction, AlertsPostAction)
- fleet.go (FleetsGetAction, FleetsPostAction)
- index.go (IndexAction)
- migration.go (MigrationAction)
- respond.go (Respond, Error, JSON) - Responsável pelo prepago do retorno JSON
- vehicle_position.go (PositionsGetAction, PositionsPostAction)
- vehicle.go (VehiclesGetAction, VehiclesPostAction)
- Implementa os Handler dos endpoints
- Application
- Escrever lógica de negócios
- fleet_alert.go (RemoveFleetAlertAll, GetAllFleetAlerts, AddFleetAlert)
- fleet.go (AddFleet, RemoveFleetAll, GetAllFleets, GetRowFleet)
- vehicle_position.go (RemoveVehiclePositionAll, GetAllPositionsByVehicles, AddPositionVehicle)
- vehicle.go (RemoveVehicleAll, AddVehicle, GetAllVehicles)
- Escrever lógica de negócios
- Domain
- Entity struct que representam o mapeamento para o modelo de dados
- factory.go - Factory de criação de objetos dos modelos de dados
- fleet_alert.go
- fleet.go
- site_goroutine.go - Implementação do goroutine
- vehicle_position.go
- vehicle.go
- Repository para infraestrutura
- Entity struct que representam o mapeamento para o modelo de dados
- Infrastructure
- Implementa a interface do repositório
- fleet_alert_repository.go
- fleet_repository.go
- vehicle_position_repository.go
- vehicle_repository.go
- Implementa a interface do repositório
- Interfaces
- Configuração das rotas e chamadas dos Handlers
GET
: Migra os dados iniciais da base de dados (Cria as tabelas e cria alguns registros iniciais)
GET
: Index da api
DELETE
: Limpa toda a base de dados inclusive os registros iniciais cadastrados no endpoint/migration
GET
: Lista todas as frotasPOST
: Cria uma frota
{id}
: ID da frotaGET
: Lista todas os alertas de uma frota)POST
: Cria uma alerta para frota
GET
: Lista todos os veículosPOST
: Cria uma veículo
{id}
: ID do veículoGET
: lista todos as posições de um veículoPOST
: Salva a posição do veículo
Postman https://documenter.getpostman.com/view/3003865/UVkiTync
Listagem de frotas, URL GET /fleets
curl --location --request GET 'localhost:8000/fleets'
Criação de frota, URL PUT /fleets
curl --location --request POST 'localhost:8000/fleets' \
--data-raw '{ "name": "Veículos de perseguição", "max_speed": 10 }'
Endpoint para recuperar todos os alertas cadastrados em uma frota, URL GET /fleets/1/alerts
curl --location --request GET 'localhost:8000/fleets/1/alerts'
Adicionar um novo alerta para uma frota, URL POST /fleets/1/alerts
curl --location --request POST 'localhost:8000/fleets/1/alerts' \
--data-raw '{ "webhook": "http://host:8080/dsds/dsds" }'
Recupera todos os veículos, URL GET /vehicles
curl --location --request GET 'localhost:8000/vehicles'
Adiciona um novo veículo, URL POST /vehicles
curl --location --request POST 'localhost:8000/vehicles' \
--data-raw '{"fleet_id": 2, "name": "veículo 3", "max_speed": null}'
Recupera as posições de um veículo, URL GET /vehicles/{id}/positions
curl --location --request GET 'localhost:8000/vehicles/1/positions' \
--data-raw ''
Adiciona uma nova posição para um veículo, URL POST /vehicles/{id}/positions
curl --location --request POST 'localhost:8000/vehicles/1/positions' \
--data-raw '{ "timestamp": "ISO-8601", "latitude": 0, "longitude": 0, "current_speed": 1000 }'
Cria a estrutura inicial do banco de dados, URL GET /migration
curl --location --request GET 'localhost:8000/migration'
Limpeza da base de dados, URL DELETE /database
curl --location --request DELETE 'localhost:8000/database'
- Obrigatório: Banco de dados Mysql
- Obrigatório: Criação dos endpoints
- DDD
- TDD
- Factory para criação de objetos
- WorkerPool
- Obrigatório: Testes
- Opcional: Deploy
- Opcional: Fluxograma
- Acessar o arquivo /interfaces/handler.go
- Trocar a porta padrão de 8000 para outra xxxx
- DDD Skeleton : https://github.com/takashabe/go-ddd-sample
- Httprouter : https://github.com/julienschmidt/httprouter
- GORM Documentation : https://gorm.io/
- Toml : https://github.com/BurntSushi/toml
- Docker : https://hub.docker.com/_/mysql
- Tests : https://medium.com/@sheimyrahman/golang-go-e-tdd-para-iniciantes-2418b6eadd92
- GO111MODULE=off : https://maelvls.dev/go111module-everywhere/