259 lines
5.3 KiB
Go
259 lines
5.3 KiB
Go
package tripsgo
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"net/http"
|
|
|
|
"github.com/gorilla/mux"
|
|
)
|
|
|
|
// TripPoint Service Methods
|
|
|
|
func getTripPoints(w http.ResponseWriter, r *http.Request) {
|
|
params := mux.Vars(r)
|
|
|
|
var tripID = params["tripID"]
|
|
|
|
var query = selectTripPointsForTripQuery(tripID)
|
|
|
|
statement, err := ExecuteQuery(query)
|
|
|
|
if err != nil {
|
|
var msg = "Error while retrieving trip points from database"
|
|
logError(err, msg)
|
|
fmt.Fprintf(w, SerializeError(err, msg))
|
|
return
|
|
}
|
|
|
|
tripPointRows := []TripPoint{}
|
|
|
|
for statement.Next() {
|
|
var tp TripPoint
|
|
err := statement.Scan(
|
|
&tp.ID,
|
|
&tp.TripID,
|
|
&tp.Latitude,
|
|
&tp.Longitude,
|
|
&tp.Speed,
|
|
&tp.RecordedTimeStamp,
|
|
&tp.Sequence,
|
|
&tp.RPM,
|
|
&tp.ShortTermFuelBank,
|
|
&tp.LongTermFuelBank,
|
|
&tp.ThrottlePosition,
|
|
&tp.RelativeThrottlePosition,
|
|
&tp.Runtime,
|
|
&tp.DistanceWithMalfunctionLight,
|
|
&tp.EngineLoad,
|
|
&tp.EngineFuelRate,
|
|
&tp.VIN)
|
|
|
|
if err != nil {
|
|
var msg = "Error scanning Trip Points"
|
|
logError(err, msg)
|
|
fmt.Fprintf(w, SerializeError(err, msg))
|
|
return
|
|
}
|
|
|
|
tripPointRows = append(tripPointRows, tp)
|
|
}
|
|
|
|
serializedReturn, _ := json.Marshal(tripPointRows)
|
|
|
|
fmt.Fprintf(w, string(serializedReturn))
|
|
}
|
|
|
|
func getTripPointByID(w http.ResponseWriter, r *http.Request) {
|
|
params := mux.Vars(r)
|
|
|
|
tripPointID := params["tripPointID"]
|
|
|
|
var query = selectTripPointsForTripPointIDQuery(tripPointID)
|
|
|
|
row, err := FirstOrDefault(query)
|
|
|
|
if err != nil {
|
|
var msg = "Error while retrieving trip point from database"
|
|
logError(err, msg)
|
|
fmt.Fprintf(w, SerializeError(err, msg))
|
|
return
|
|
}
|
|
|
|
var tripPoint TripPoint
|
|
|
|
err = row.Scan(
|
|
&tripPoint.ID,
|
|
&tripPoint.TripID,
|
|
&tripPoint.Latitude,
|
|
&tripPoint.Longitude,
|
|
&tripPoint.Speed,
|
|
&tripPoint.RecordedTimeStamp,
|
|
&tripPoint.Sequence,
|
|
&tripPoint.RPM,
|
|
&tripPoint.ShortTermFuelBank,
|
|
&tripPoint.LongTermFuelBank,
|
|
&tripPoint.ThrottlePosition,
|
|
&tripPoint.RelativeThrottlePosition,
|
|
&tripPoint.Runtime,
|
|
&tripPoint.DistanceWithMalfunctionLight,
|
|
&tripPoint.EngineLoad,
|
|
&tripPoint.EngineFuelRate,
|
|
&tripPoint.VIN)
|
|
|
|
if err != nil {
|
|
var msg = "Failed to scan a trip point"
|
|
logError(err, msg)
|
|
fmt.Fprintf(w, SerializeError(err, msg))
|
|
return
|
|
}
|
|
|
|
serializedTripPoint, _ := json.Marshal(tripPoint)
|
|
|
|
fmt.Fprintf(w, string(serializedTripPoint))
|
|
}
|
|
|
|
func createTripPoint(w http.ResponseWriter, r *http.Request) {
|
|
params := mux.Vars(r)
|
|
|
|
tripID := params["tripID"]
|
|
|
|
body, err := ioutil.ReadAll(r.Body)
|
|
|
|
var tripPoint TripPoint
|
|
|
|
err = json.Unmarshal(body, &tripPoint)
|
|
|
|
if err != nil {
|
|
var msg = "Error while decoding json for trip point"
|
|
logError(err, msg)
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
fmt.Fprintf(w, SerializeError(err, msg))
|
|
return
|
|
}
|
|
|
|
var query = createTripPointQuery(tripPoint, tripID)
|
|
|
|
result, err := ExecuteQuery(query)
|
|
|
|
if err != nil {
|
|
var msg = "Error while inserting Trip Point into database"
|
|
logError(err, msg)
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
fmt.Fprintf(w, SerializeError(err, msg))
|
|
return
|
|
}
|
|
|
|
for result.Next() {
|
|
err = result.Scan(&tripPoint.ID)
|
|
|
|
if err != nil {
|
|
var msg = "Error retrieving trip point id"
|
|
logError(err, msg)
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
fmt.Fprintf(w, SerializeError(err, msg))
|
|
}
|
|
}
|
|
|
|
serializedTripPoint, _ := json.Marshal(tripPoint)
|
|
|
|
fmt.Fprintf(w, string(serializedTripPoint))
|
|
}
|
|
|
|
func updateTripPoint(w http.ResponseWriter, r *http.Request) {
|
|
params := mux.Vars(r)
|
|
|
|
tripPointID := params["tripPointID"]
|
|
|
|
body, err := ioutil.ReadAll(r.Body)
|
|
|
|
defer r.Body.Close()
|
|
|
|
if err != nil {
|
|
var msg = "Error while decoding json for trip point"
|
|
logError(err, msg)
|
|
fmt.Fprintf(w, SerializeError(err, msg))
|
|
return
|
|
}
|
|
|
|
var tripPoint TripPoint
|
|
|
|
err = json.Unmarshal(body, &tripPoint)
|
|
|
|
if err != nil {
|
|
var msg = "Error while decoding json"
|
|
logError(err, msg)
|
|
fmt.Fprintf(w, SerializeError(err, msg))
|
|
return
|
|
}
|
|
|
|
tripPoint.ID = tripPointID
|
|
|
|
var query = updateTripPointQuery(tripPoint)
|
|
|
|
result, err := ExecuteNonQuery(query)
|
|
|
|
if err != nil {
|
|
var msg = "Error while patching Trip Point on the database"
|
|
logError(err, msg)
|
|
fmt.Fprintf(w, SerializeError(err, msg))
|
|
return
|
|
}
|
|
|
|
fmt.Fprintf(w, string(result))
|
|
}
|
|
|
|
func deleteTripPoint(w http.ResponseWriter, r *http.Request) {
|
|
params := mux.Vars(r)
|
|
|
|
tripPointID := params["tripPointID"]
|
|
|
|
var query = deleteTripPointQuery(tripPointID)
|
|
|
|
result, err := ExecuteNonQuery(query)
|
|
|
|
if err != nil {
|
|
var msg = "Error while deleting trip point from database"
|
|
logError(err, msg)
|
|
fmt.Fprintf(w, SerializeError(err, msg))
|
|
return
|
|
}
|
|
|
|
serializedResult, _ := json.Marshal(result)
|
|
|
|
fmt.Fprintf(w, string(serializedResult))
|
|
}
|
|
|
|
// func getMaxSequence(w http.ResponseWriter, r *http.Request) {
|
|
// tripID := r.FormValue("id")
|
|
|
|
// query := fmt.Sprintf("SELECT MAX(Sequence) as MaxSequence FROM TripPoints where tripid = '%s'", tripID)
|
|
|
|
// row, err := FirstOrDefault(query)
|
|
|
|
// if err != nil {
|
|
// var msg = "Error while querying Max Sequence"
|
|
// logError(err, msg)
|
|
// fmt.Fprintf(w, SerializeError(err, msg))
|
|
// return
|
|
// }
|
|
|
|
// var MaxSequence string
|
|
|
|
// err = row.Scan(&MaxSequence)
|
|
|
|
// if err != nil {
|
|
// var msg = "Error while obtaining max sequence"
|
|
// logError(err, msg)
|
|
// fmt.Fprintf(w, SerializeError(err, msg))
|
|
// return
|
|
// }
|
|
|
|
// fmt.Fprintf(w, MaxSequence)
|
|
// }
|
|
|
|
type newTripPoint struct {
|
|
ID string
|
|
}
|