diff --git a/cmd/pm/runner.go b/cmd/pm/runner.go index 656424b..1229efa 100644 --- a/cmd/pm/runner.go +++ b/cmd/pm/runner.go @@ -36,7 +36,7 @@ func runStartCmd(cmd *cobra.Command, args []string) error { var continueWithoutSubmitting bool for { - db, err := storage.NewMongoStorageInteractive(app.Config.MongoURI) + db, err := storage.NewMongoStorageInteractive(cmd.Context(), app.Config.MongoURI) if err == nil { mongoStorage = db break diff --git a/internal/commands/survey/submit.go b/internal/commands/survey/submit.go index a6b61c3..3da9356 100644 --- a/internal/commands/survey/submit.go +++ b/internal/commands/survey/submit.go @@ -17,7 +17,7 @@ var SubmitCmd = &cobra.Command{ return fmt.Errorf("application context not initialized") } - db, err := storage.NewMongoStorageInteractive(app.Config.MongoURI) + db, err := storage.NewMongoStorageInteractive(cmd.Context(), app.Config.MongoURI) if err != nil { return fmt.Errorf("failed to connect to database: %w", err) } diff --git a/internal/storage/mongo.go b/internal/storage/mongo.go index 37ce520..dd58464 100644 --- a/internal/storage/mongo.go +++ b/internal/storage/mongo.go @@ -18,27 +18,27 @@ type MongoStorage struct { client *mongo.Client } -func NewMongoStorage(uri, username, password string) (*MongoStorage, error) { +func NewMongoStorage(ctx context.Context, uri, username, password string) (*MongoStorage, error) { credentials := options.Credential{ Username: username, Password: password, } - client, err := mongo.Connect(context.Background(), + client, err := mongo.Connect(ctx, options.Client().ApplyURI(uri).SetAuth(credentials)) if err != nil { return nil, fmt.Errorf("failed to connect to MongoDB: %v", err) } - if err := client.Ping(context.Background(), nil); err != nil { + if err := client.Ping(ctx, nil); err != nil { return nil, fmt.Errorf("cannot reach MongoDB: %v", err) } return &MongoStorage{client: client}, nil } -func NewMongoStorageInteractive(uri string) (*MongoStorage, error) { +func NewMongoStorageInteractive(ctx context.Context, uri string) (*MongoStorage, error) { var username, password string if os.Getenv("DB_USER") == "" { if err := huh.NewInput(). @@ -72,7 +72,7 @@ func NewMongoStorageInteractive(uri string) (*MongoStorage, error) { } - mongoClient, err := NewMongoStorage(uri, username, password) + mongoClient, err := NewMongoStorage(ctx, uri, username, password) if err != nil { return nil, fmt.Errorf("failed to connect to database: %w", err) }