82 lines
1.8 KiB
Go
82 lines
1.8 KiB
Go
package broker
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"io"
|
|
"local/truckstop/config"
|
|
"time"
|
|
)
|
|
|
|
type NTGVision struct {
|
|
searcher interface {
|
|
search(states []config.State) (io.ReadCloser, error)
|
|
}
|
|
}
|
|
|
|
type ntgVisionJob struct {
|
|
ID int64 `json:"id"`
|
|
PickupDate string `json:"sDate"`
|
|
PickupCity string `json:"sCity"`
|
|
PickupState string `json:"sState"`
|
|
DropoffDate string `json:"cDate"`
|
|
DropoffCity string `json:"cCity"`
|
|
DropoffState string `json:"cState"`
|
|
Weight int `json:"weight"`
|
|
Equipment string `json:"equip"`
|
|
Temp string `json:"temp"`
|
|
}
|
|
|
|
func (ntgJob ntgVisionJob) Job() Job {
|
|
pickup, _ := time.ParseInLocation("01/02/06", ntgJob.PickupDate, time.Local)
|
|
dropoff, _ := time.ParseInLocation("01/02/06", ntgJob.DropoffDate, time.Local)
|
|
return Job{
|
|
ID: fmt.Sprintf("ntg-%d", ntgJob.ID),
|
|
Pickup: JobLocation{
|
|
Date: pickup,
|
|
City: ntgJob.PickupCity,
|
|
State: ntgJob.PickupState,
|
|
},
|
|
Dropoff: JobLocation{
|
|
Date: dropoff,
|
|
City: ntgJob.DropoffCity,
|
|
State: ntgJob.DropoffState,
|
|
},
|
|
Weight: ntgJob.Weight,
|
|
Meta: fmt.Sprintf("equipment:%s", ntgJob.Equipment),
|
|
}
|
|
}
|
|
|
|
func NewNTGVision() NTGVision {
|
|
ntgv := NTGVision{}
|
|
ntgv.searcher = ntgv
|
|
return ntgv
|
|
}
|
|
|
|
func (ntg NTGVision) WithMock() NTGVision {
|
|
ntg.searcher = NewNTGVisionMock()
|
|
return ntg
|
|
}
|
|
|
|
func (ntg NTGVision) search(states []config.State) (io.ReadCloser, error) {
|
|
return nil, errors.New("not impl: ntg.search")
|
|
}
|
|
|
|
func (ntg NTGVision) Search(states []config.State) ([]Job, error) {
|
|
rc, err := ntg.searcher.search(states)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rc.Close()
|
|
|
|
var ntgjobs []ntgVisionJob
|
|
err = json.NewDecoder(rc).Decode(&ntgjobs)
|
|
|
|
jobs := make([]Job, len(ntgjobs))
|
|
for i := range jobs {
|
|
jobs[i] = ntgjobs[i].Job()
|
|
}
|
|
return jobs, err
|
|
}
|