MCPcopy Index your code
hub / github.com/NdoleStudio/httpsms / DB

Method DB

api/pkg/di/container.go:335–418  ·  view source on GitHub ↗

DB creates an instance of gorm.DB if it has not been created already

()

Source from the content-addressed store, hash-verified

333
334// DB creates an instance of gorm.DB if it has not been created already
335func (container *Container) DB() (db *gorm.DB) {
336 if container.db != nil {
337 return container.db
338 }
339
340 container.logger.Debug(fmt.Sprintf("creating %T", db))
341
342 config := &gorm.Config{
343 TranslateError: true,
344 Logger: container.GormLogger(),
345 }
346
347 db, err := gorm.Open(postgres.Open(os.Getenv("DATABASE_URL")), config)
348 if err != nil {
349 container.logger.Fatal(err)
350 }
351 container.db = db
352
353 if err = db.Use(tracing.NewPlugin()); err != nil {
354 container.logger.Fatal(stacktrace.Propagate(err, "cannot use GORM tracing plugin"))
355 }
356
357 if os.Getenv("DATABASE_MIGRATION_SKIP") != "" {
358 container.logger.Debug(fmt.Sprintf("skipping migrations for [%T]", db))
359 return container.db
360 }
361
362 container.logger.Debug(fmt.Sprintf("Running migrations for %T", db))
363
364 // This prevents a bug in the Gorm AutoMigrate where it tries to delete this no existent constraints
365 // This is only applicable to PROD on cockroachDB
366 if os.Getenv("DATABASE_MIGRATION_CONSTRAINT_FIX") == "1" {
367 db.Exec(`
368ALTER TABLE users ADD CONSTRAINT IF NOT EXISTS uni_users_api_key CHECK (api_key IS NOT NULL);
369ALTER TABLE phone_api_keys ADD CONSTRAINT IF NOT EXISTS uni_phone_api_keys_api_key CHECK (api_key IS NOT NULL);
370ALTER TABLE discords ADD CONSTRAINT IF NOT EXISTS uni_discords_server_id CHECK (server_id IS NOT NULL);`)
371 }
372
373 if err = db.AutoMigrate(&entities.Message{}); err != nil {
374 container.logger.Fatal(stacktrace.Propagate(err, fmt.Sprintf("cannot migrate %T", &entities.Message{})))
375 }
376
377 if err = db.AutoMigrate(&entities.MessageThread{}); err != nil {
378 container.logger.Fatal(stacktrace.Propagate(err, fmt.Sprintf("cannot migrate %T", &entities.MessageThread{})))
379 }
380
381 if err = db.AutoMigrate(&entities.User{}); err != nil {
382 container.logger.Fatal(stacktrace.Propagate(err, fmt.Sprintf("cannot migrate %T", &entities.User{})))
383 }
384
385 if err = db.AutoMigrate(&entities.MessageSendSchedule{}); err != nil {
386 container.logger.Fatal(stacktrace.Propagate(err, fmt.Sprintf("cannot migrate %T", &entities.MessageSendSchedule{})))
387 }
388
389 if err = db.AutoMigrate(&entities.Phone{}); err != nil {
390 container.logger.Fatal(stacktrace.Propagate(err, fmt.Sprintf("cannot migrate %T", &entities.Phone{})))
391 }
392

Callers 11

MessageRepositoryMethod · 0.95
PhoneAPIKeyRepositoryMethod · 0.95
PhoneRepositoryMethod · 0.95
DiscordRepositoryMethod · 0.95
WebhookRepositoryMethod · 0.95
UserRepositoryMethod · 0.95

Calls 3

GormLoggerMethod · 0.95
DebugMethod · 0.65
FatalMethod · 0.65

Tested by

no test coverage detected