Story: There are over 100,000 flights a day, with millions of people and cargo being transferred around the world. With so many people and different carrier/agency groups, it can be hard to track where a person might be. In order to determine the flight path of a person, we must sort through all of their flight records.
Goal: To create a simple microservice API that can help us understand and track how a particular person's flight path may be queried. The API should accept a request that includes a list of flights, which are defined by a source and destination airport code. These flights may not be listed in order and will need to be sorted to find the total flight paths starting and ending airports.
- gvm Go 1.23
gvm install go1.23 --prefer-binary --with-build-tools --with-protobuf gvm use go1.23 --default
- nmv Node 19.9.0
nvm install 19.9.0 nvm use 19.9.0 npm install yarn --global npm install npm --global npm install -g pnpm pnpm add -g pnpm
- Newman (a CLI to run Postman/Newman collections)
npm install --location=global newman
- GolangCI lint
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.59.1
Usage: make COMMAND
Commands :
help - List available tasks
deps - Download and install dependencies
api-docs - Build source code for swagger api reference
test - Run tests
build - Build REST API server's binary
run - Run REST API locally
release - Create and push a new tag
update - Update dependencies to latest versions
open-swagger - Open browser with Swagger docs pointing to localhost
test-case-one - Test case 1 [["SFO", "EWR"]]
test-case-two - Test case 2 [["ATL", "EWR"], ["SFO", "ATL"]]
test-case-three - Test case 3 [["IND", "EWR"], ["SFO", "ATL"], ["GSO", "IND"], ["ATL", "GSO"]]
e2e - Run Postman/Newman end-to-end tests
make run
make test-case-one
make test-case-two
make test-case-three
Take a look at autogenerated REST API Documentation
Swagger API documentation - http://localhost:8080/swagger/index.html
"/calculate": {
"post": {
"description": "get the flight path of a person.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"FlightCalculate"
],
"summary": "Determine the flight path of a person.",
"operationId": "flightCalculate-get",
"parameters": [
{
"description": "Flight segments",
"name": "flightSegments",
"in": "body",
"required": true,
"schema": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"additionalProperties": true
}
}
}
}
}
GitHub CI has following steps:
- Checkout
- Set up Node.js (needed to run Postman/Newman end-to-end tests)
- Install dependencies
- Install Newman
- Set up Go
- Test
- Build
- Run
- Wait for REST API
- Run Postman/Newman end-to-end tests
Utilized Postman collection exported to JSON file
and executes same use cases as Makefile targets test-case-one
test-case-two
test-case-three