Skip to content

Commit fad8b32

Browse files
AchoArnoldCopilot
andcommitted
refactor: pass *mongo.Database directly to repository constructors
- NewMongoDB now returns *mongo.Database instead of (*mongo.Client, dbName) - Repository constructors accept *mongo.Database instead of client + dbName - DI container caches the *mongo.Database singleton directly - Removes MongoDBName() helper - no longer needed Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 6a92f6c commit fad8b32

4 files changed

Lines changed: 26 additions & 40 deletions

File tree

api/pkg/di/container.go

Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,7 @@ type Container struct {
8383
projectID string
8484
db *gorm.DB
8585
dedicatedDB *gorm.DB
86-
mongoClient *mongoDriver.Client
87-
mongoDBName string
86+
mongoDB *mongoDriver.Database
8887
version string
8988
app *fiber.App
9089
eventDispatcher *services.EventDispatcher
@@ -294,30 +293,21 @@ func (container *Container) DedicatedDB() (db *gorm.DB) {
294293
return container.dedicatedDB
295294
}
296295

297-
// MongoDB creates a *mongo.Client connection to MongoDB Atlas
298-
func (container *Container) MongoDB() *mongoDriver.Client {
299-
if container.mongoClient != nil {
300-
return container.mongoClient
296+
// MongoDB creates a *mongo.Database connection to MongoDB Atlas
297+
func (container *Container) MongoDB() *mongoDriver.Database {
298+
if container.mongoDB != nil {
299+
return container.mongoDB
301300
}
302301

303-
container.logger.Debug("creating MongoDB *mongo.Client connection")
302+
container.logger.Debug("creating MongoDB *mongo.Database connection")
304303

305-
client, dbName, err := repositories.NewMongoDB(os.Getenv("MONGODB_URI"))
304+
db, err := repositories.NewMongoDB(os.Getenv("MONGODB_URI"))
306305
if err != nil {
307306
container.logger.Fatal(err)
308307
}
309308

310-
container.mongoClient = client
311-
container.mongoDBName = dbName
312-
return container.mongoClient
313-
}
314-
315-
// MongoDBName returns the MongoDB database name derived from the connection URI appName
316-
func (container *Container) MongoDBName() string {
317-
if container.mongoClient == nil {
318-
container.MongoDB()
319-
}
320-
return container.mongoDBName
309+
container.mongoDB = db
310+
return container.mongoDB
321311
}
322312

323313
// HedgingFailureCounter creates an OTel counter for hedging secondary write failures
@@ -938,15 +928,14 @@ func (container *Container) HeartbeatMonitorRepository() (repository repositorie
938928
container.Logger(),
939929
container.Tracer(),
940930
container.MongoDB(),
941-
container.MongoDBName(),
942931
)
943932
case "hedging":
944933
container.logger.Debug("creating hedging repositories.HeartbeatMonitorRepository")
945934
return repositories.NewHedgingHeartbeatMonitorRepository(
946935
container.Logger(),
947936
container.Tracer(),
948937
repositories.NewGormHeartbeatMonitorRepository(container.Logger(), container.Tracer(), container.DedicatedDB()),
949-
repositories.NewMongoHeartbeatMonitorRepository(container.Logger(), container.Tracer(), container.MongoDB(), container.MongoDBName()),
938+
repositories.NewMongoHeartbeatMonitorRepository(container.Logger(), container.Tracer(), container.MongoDB()),
950939
container.HedgingFailureCounter(),
951940
)
952941
default:
@@ -1777,15 +1766,14 @@ func (container *Container) HeartbeatRepository() repositories.HeartbeatReposito
17771766
container.Logger(),
17781767
container.Tracer(),
17791768
container.MongoDB(),
1780-
container.MongoDBName(),
17811769
)
17821770
case "hedging":
17831771
container.logger.Debug("creating hedging repositories.HeartbeatRepository")
17841772
return repositories.NewHedgingHeartbeatRepository(
17851773
container.Logger(),
17861774
container.Tracer(),
17871775
repositories.NewGormHeartbeatRepository(container.Logger(), container.Tracer(), container.DedicatedDB()),
1788-
repositories.NewMongoHeartbeatRepository(container.Logger(), container.Tracer(), container.MongoDB(), container.MongoDBName()),
1776+
repositories.NewMongoHeartbeatRepository(container.Logger(), container.Tracer(), container.MongoDB()),
17891777
container.HedgingFailureCounter(),
17901778
)
17911779
default:

api/pkg/repositories/mongo_heartbeat_monitor_repository.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,12 @@ type mongoHeartbeatMonitorRepository struct {
2525
func NewMongoHeartbeatMonitorRepository(
2626
logger telemetry.Logger,
2727
tracer telemetry.Tracer,
28-
client *mongo.Client,
29-
dbName string,
28+
db *mongo.Database,
3029
) HeartbeatMonitorRepository {
3130
return &mongoHeartbeatMonitorRepository{
3231
logger: logger.WithService(fmt.Sprintf("%T", &mongoHeartbeatMonitorRepository{})),
3332
tracer: tracer,
34-
collection: client.Database(dbName).Collection(collectionHeartbeatMonitors),
33+
collection: db.Collection(collectionHeartbeatMonitors),
3534
}
3635
}
3736

api/pkg/repositories/mongo_heartbeat_repository.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,12 @@ type mongoHeartbeatRepository struct {
2424
func NewMongoHeartbeatRepository(
2525
logger telemetry.Logger,
2626
tracer telemetry.Tracer,
27-
client *mongo.Client,
28-
dbName string,
27+
db *mongo.Database,
2928
) HeartbeatRepository {
3029
return &mongoHeartbeatRepository{
3130
logger: logger.WithService(fmt.Sprintf("%T", &mongoHeartbeatRepository{})),
3231
tracer: tracer,
33-
collection: client.Database(dbName).Collection(collectionHeartbeats),
32+
collection: db.Collection(collectionHeartbeats),
3433
}
3534
}
3635

api/pkg/repositories/mongodb.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,12 @@ func newMongoRegistry() *bson.Registry {
4848
return rb
4949
}
5050

51-
// NewMongoDB creates a new *mongo.Client connection to MongoDB Atlas and ensures indexes.
51+
// NewMongoDB creates a new *mongo.Database connection to MongoDB Atlas and ensures indexes.
5252
// The database name is derived from the appName query parameter in the URI.
53-
func NewMongoDB(uri string) (*mongo.Client, string, error) {
53+
func NewMongoDB(uri string) (*mongo.Database, error) {
5454
dbName, err := parseMongoDBName(uri)
5555
if err != nil {
56-
return nil, "", stacktrace.Propagate(err, "cannot parse database name from MongoDB URI")
56+
return nil, stacktrace.Propagate(err, "cannot parse database name from MongoDB URI")
5757
}
5858

5959
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
@@ -65,18 +65,20 @@ func NewMongoDB(uri string) (*mongo.Client, string, error) {
6565

6666
client, err := mongo.Connect(opts)
6767
if err != nil {
68-
return nil, "", stacktrace.Propagate(err, "cannot connect to MongoDB Atlas")
68+
return nil, stacktrace.Propagate(err, "cannot connect to MongoDB Atlas")
6969
}
7070

7171
if err = client.Ping(ctx, nil); err != nil {
72-
return nil, "", stacktrace.Propagate(err, fmt.Sprintf("cannot ping MongoDB with URI [%s]", uri))
72+
return nil, stacktrace.Propagate(err, fmt.Sprintf("cannot ping MongoDB with URI [%s]", uri))
7373
}
7474

75-
if err = createMongoIndexes(ctx, client, dbName); err != nil {
76-
return nil, "", stacktrace.Propagate(err, "cannot create MongoDB indexes")
75+
db := client.Database(dbName)
76+
77+
if err = createMongoIndexes(ctx, db); err != nil {
78+
return nil, stacktrace.Propagate(err, "cannot create MongoDB indexes")
7779
}
7880

79-
return client, dbName, nil
81+
return db, nil
8082
}
8183

8284
// parseMongoDBName extracts the appName query parameter from the MongoDB URI to use as the database name
@@ -94,9 +96,7 @@ func parseMongoDBName(uri string) (string, error) {
9496
return appName, nil
9597
}
9698

97-
func createMongoIndexes(ctx context.Context, client *mongo.Client, dbName string) error {
98-
db := client.Database(dbName)
99-
99+
func createMongoIndexes(ctx context.Context, db *mongo.Database) error {
100100
// Heartbeats indexes
101101
heartbeatsCol := db.Collection(collectionHeartbeats)
102102
_, err := heartbeatsCol.Indexes().CreateMany(ctx, []mongo.IndexModel{

0 commit comments

Comments
 (0)