package database import ( "context" "fmt" zapLogger "fwh-toolbox-server/logger" "time" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "go.mongodb.org/mongo-driver/x/mongo/driver/connstring" ) var MongoClient *mongo.Client var MongoDb *mongo.Database func InitMongo(uri string) (*mongo.Client, error) { databaseName, err := parseMongoDatabaseName(uri) if err != nil { return nil, err } ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() client, err := mongo.Connect(ctx, options.Client().ApplyURI(uri)) if err != nil { zapLogger.Sugar.Errorln("Mongo connect error: ", err) return nil, err } if err := client.Ping(ctx, nil); err != nil { zapLogger.Sugar.Errorln("Mongo ping error: ", err) return nil, err } MongoClient = client MongoDb = client.Database(databaseName) zapLogger.Sugar.Infoln("MongoDB connected, database: ", databaseName) return client, nil } func parseMongoDatabaseName(uri string) (string, error) { cs, err := connstring.ParseAndValidate(uri) if err != nil { return "", fmt.Errorf("parse MongoDB URI: %w", err) } if cs.Database == "" { return "", fmt.Errorf("MongoDB URI must contain a database name") } return cs.Database, nil } func GetCollection(collName string) *mongo.Collection { return MongoDb.Collection(collName) }