package dbAccess import ( "git.fjla.uk/owlboard/timetable-mgr/helpers" "git.fjla.uk/owlboard/timetable-mgr/log" "context" "fmt" "time" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) const databaseName string = "owlboard" const CorpusCollection string = "corpus" const StationsCollection string = "stations" const metaCollection string = "meta" const TimetableCollection string = "timetable" // Provide the DB Connection to other functions var MongoClient (*mongo.Client) func getDbUri(cfg *helpers.Configuration) string { var uri = "mongodb://" + cfg.DbUser + ":" + cfg.DbPass + "@" + cfg.DbHost + ":" + cfg.DbPort return uri } // Configure bsonOpts var bsonOpts = &options.BSONOptions{ UseJSONStructTags: true, } // Initialise the DB Connection func InitDataAccess(cfg *helpers.Configuration) { uri := getDbUri(cfg) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() client, err := mongo.Connect(ctx, options.Client().ApplyURI(uri).SetBSONOptions(bsonOpts)) if err != nil { fmt.Println(err) log.Msg.Fatal("Error connecting to database: " + err.Error()) } else { log.Msg.Info("Database connection successful") } MongoClient = client } func CloseMongoClient() { if MongoClient != nil { ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() if err := MongoClient.Disconnect(ctx); err != nil { log.Msg.Warn("Error disconnecting MongoDB client: " + err.Error()) } else { log.Msg.Info("MongoDB client disconnected.") } } }