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/tripPointService.go

259 lines
5.3 KiB
Go
Raw Normal View History

2022-11-03 20:41:13 +00:00
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
}