This repository has been archived on 2022-11-03. You can view files and clone it, but cannot push or open issues or pull requests.
DevOpsOpenHack/apis/trips/tripsgo/routers.go
2022-11-03 16:41:13 -04:00

204 lines
3.2 KiB
Go

package tripsgo
import (
"flag"
"fmt"
"net/http"
"os"
"github.com/codemodus/swagui"
"github.com/codemodus/swagui/suidata3"
"github.com/gorilla/mux"
)
var (
du = flag.String("du", getEnv("DOCS_URI", "http://localhost:8080"), "docs endpoint")
wsbu = flag.String("wsbu", getEnv("WEB_SERVER_BASE_URI", "changeme"), "base portion of server uri")
)
// Route - object representing a route handler
type Route struct {
Name string
Method string
Pattern string
HandlerFunc http.HandlerFunc
}
// Routes - Route handler collection
type Routes []Route
// NewRouter - Constructor
func NewRouter() *mux.Router {
router := mux.NewRouter().StrictSlash(true)
for _, route := range routes {
CreateHandler(router, route)
}
// add docs route
CreateDocsHandler(router, docsRoute)
return router
}
// Index - Default route handler for service base uri
func Index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Trips Service")
}
// CreateHandler - Create router handler
func CreateHandler(router *mux.Router, route Route) {
var handler http.Handler
handler = route.HandlerFunc
handler = Logger(handler, route.Name)
router.
Methods(route.Method).
Path(route.Pattern).
Name(route.Name).
Handler(handler)
}
// CreateDocsHandler - Create route handler for docs using SwagUI
func CreateDocsHandler(router *mux.Router, route Route) {
var def = "/api/json/swagger.json"
var provider = suidata3.New()
ui, err := swagui.New(http.NotFoundHandler(), provider)
if err != nil {
Info.Println(err)
os.Exit(1)
}
router.
Methods(route.Method).
Name(route.Name).
Handler(ui.Handler(def))
router.
Methods(route.Method).
Path("/api/docs/trips/{dir}/{fileName}").
Name("*").
Handler(ui.Handler(def))
router.
Methods(route.Method).
Path("/api/docs/trips/{fileName}").
Name("Swagger UI JS").
Handler(ui.Handler(def))
}
var docsRoute = Route{
"swagger-ui",
"GET",
"/api/docs/trips/",
nil,
}
var routes = Routes{
Route{
"Index",
"GET",
"/api/",
Index,
},
Route{
"swagger-json",
"GET",
"/api/json/swagger.json",
swaggerDocsJSON,
},
Route{
"CreateTrip",
"POST",
"/api/trips",
createTrip,
},
Route{
"CreateTripPoint",
"POST",
"/api/trips/{tripID}/trippoints",
createTripPoint,
},
Route{
"DeleteTrip",
"DELETE",
"/api/trips/{tripID}",
deleteTrip,
},
Route{
"DeleteTripPoint",
"DELETE",
"/api/trips/{tripID}/trippoints/{tripPointID}",
deleteTripPoint,
},
Route{
"GetAllTrips",
"GET",
"/api/trips",
getAllTrips,
},
Route{
"GetAllTripsForUser",
"GET",
"/api/trips/user/{userID}",
getAllTripsForUser,
},
Route{
"GetTripById",
"GET",
"/api/trips/{tripID}",
getTripByID,
},
Route{
"GetTripPointByID",
"GET",
"/api/trips/{tripID}/trippoints/{tripPointID}",
getTripPointByID,
},
Route{
"GetTripPoints",
"GET",
"/api/trips/{tripID}/trippoints",
getTripPoints,
},
Route{
"HealthcheckGet",
"GET",
"/api/healthcheck/trips",
healthcheckGet,
},
Route{
"UpdateTrip",
"PATCH",
"/api/trips/{tripID}",
updateTrip,
},
Route{
"UpdateTripPoint",
"PATCH",
"/api/trips/{tripID}/trippoints/{tripPointID}",
updateTripPoint,
},
Route{
"VersionGet",
"GET",
"/api/version/trips",
versionGet,
},
}