timetable-extension #1

Open
fred.boniface wants to merge 160 commits from timetable-extension into main
4 changed files with 115 additions and 29 deletions
Showing only changes of commit 77eb22b837 - Show all commits

View File

@ -2,12 +2,14 @@ package dbAccess
import (
"context"
"fmt"
"strings"
"git.fjla.uk/owlboard/go-types/pkg/database"
"git.fjla.uk/owlboard/timetable-mgr/log"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"go.uber.org/zap"
)
// Puts an array of Corpus Documents into the database
@ -85,27 +87,76 @@ func CreateCorpusIndexes() error {
func GetTiplocFromCrs(crs string) (tiploc string, err error) {
// Return TIPLOC from CRS code
crs = strings.ToUpper(crs)
// PIPELINE:
/*
bson.A{
bson.D{{"$match", bson.D{{"3ALPHA", "BTH"}}}},
bson.D{
{"$project",
bson.D{
{"TIPLOC", 1},
{"STANOX", 1},
{"_id", 0},
},
},
},
}
*/
err = fmt.Errorf("not yet written")
return "", err
pipeline := bson.A{
bson.D{{"$match", bson.D{{"3ALPHA", crs}}}},
bson.D{
{"$project",
bson.D{
{"TIPLOC", 1},
{"_id", 0},
},
},
},
}
coll := MongoClient.Database(DatabaseName).Collection(StationsCollection)
cursor, err := coll.Aggregate(context.Background(), pipeline)
if err != nil {
return "", err
}
defer cursor.Close(context.Background())
var result struct {
TIPLOC string `bson:"TIPLOC"`
}
if cursor.Next(context.Background()) {
if err := cursor.Decode(&result); err != nil {
return "", err
}
return result.TIPLOC, nil
}
log.Warn("No TIPLOC Found", zap.String("CRS", crs))
return "", nil
}
func GetStanoxFromCrs(crs string) (stanox string, err error) {
// Return STANOX from CRS code
err = fmt.Errorf("not yet written")
return "", err
crs = strings.ToUpper(crs)
// PIPELINE:
pipeline := bson.A{
bson.D{{"$match", bson.D{{"3ALPHA", crs}}}},
bson.D{
{"$project",
bson.D{
{"STANOX", 1},
{"_id", 0},
},
},
},
}
coll := MongoClient.Database(DatabaseName).Collection(StationsCollection)
cursor, err := coll.Aggregate(context.Background(), pipeline)
if err != nil {
return "", err
}
defer cursor.Close(context.Background())
var result struct {
STANOX string `bson:"STANOX"`
}
if cursor.Next(context.Background()) {
if err := cursor.Decode(&result); err != nil {
return "", err
}
return result.STANOX, nil
}
log.Warn("No STANOX Found", zap.String("CRS", crs))
return "", nil
}

View File

@ -43,7 +43,7 @@ func SetStationsMetadata(time time.Time) bool {
database := MongoClient.Database(DatabaseName)
collection := database.Collection(MetaCollection)
options := options.Update().SetUpsert(true)
filter := bson.M{"type": Doctype}
filter := bson.M{"type": StationsMetaDoctype}
update := bson.M{
"$set": bson.M{
"type": StationsMetaDoctype,
@ -73,7 +73,6 @@ func PutManyNewStations(stationsData *[]database.Station) error {
return err
}
SetUpdateTime(StationsCollection)
return nil
}
@ -86,6 +85,26 @@ func convertNewStationsToInterfaceSlice(stationsData *[]database.Station) *[]int
return &interfaceSlice
}
func CreateStationIndeces() bool {
return false
func CreateStationIndeces() error {
coll := MongoClient.Database(DatabaseName).Collection(StationsCollection)
locationIndex := mongo.IndexModel{
Keys: bson.D{{"location", "2dsphere"}},
Options: nil,
}
crsIndex := mongo.IndexModel{
Keys: bson.D{{"3ALPHA", 1}},
}
tiplocIndex := mongo.IndexModel{
Keys: bson.D{{"TIPLOC", 1}},
}
_, err := coll.Indexes().CreateMany(context.Background(), []mongo.IndexModel{locationIndex, crsIndex, tiplocIndex})
if err != nil {
return err
}
return nil
}

View File

@ -1,7 +1,6 @@
package stations
import (
"fmt"
"time"
"git.fjla.uk/owlboard/timetable-mgr/dbAccess"
@ -33,23 +32,41 @@ func Check() {
func run() bool {
// Download
data, data2, err := download()
log.Info("Downloaded station data from two sources")
if err != nil {
fmt.Println(err)
log.Error("error downloading station data", zap.Error(err))
return false
}
// Parse
stations, err := parseData(data, data2)
log.Info("Parsed station data")
if err != nil {
fmt.Println(err)
log.Error("error parsing station data", zap.Error(err))
return false
}
// Drop
dbAccess.DropCollection("stations")
err = dbAccess.DropCollection("stations")
if err != nil {
log.Error("Error dropping stations collection", zap.Error(err))
}
// Push
dbAccess.PutManyNewStations(&stations)
err = dbAccess.PutManyNewStations(&stations)
if err != nil {
log.Error("Error putting new station data", zap.Error(err))
}
err = dbAccess.CreateStationIndeces()
if err != nil {
log.Error("Error creating station indeces", zap.Error(err))
}
ok := dbAccess.SetStationsMetadata(time.Now())
if !ok {
log.Warn("Error setting new metadata for Stations")
}
return true
}

View File

@ -29,7 +29,6 @@ func parseData(data ...[]byte) ([]database.Station, error) {
}
output = append(output, outputStation)
}
fmt.Println(output)
return output, nil
}