FEAT: Init Discovery Service
Build, Push and Deploy Discovery / build-push-deploy (push) Successful in 1m45s
Deploy Infrastructure / pulumi-up (push) Successful in 2s

This commit is contained in:
FahdShalhoub
2026-08-27 22:03:41 +03:00
parent 0cfd89f200
commit 98950aba20
20 changed files with 719 additions and 6 deletions
+30
View File
@@ -0,0 +1,30 @@
package db
import (
"context"
"database/sql"
"fmt"
"log"
)
func CreateDBConnection(connectionString string) *sql.DB {
sqlDB, err := sql.Open("postgres", connectionString)
if err != nil {
panic(fmt.Errorf("db: cannot open connection: %w", err))
}
return sqlDB
}
func CloseConnection(SQLDB *sql.DB) {
err := SQLDB.Close()
if err != nil {
log.Fatalf("Error Closing DB Connection: %s", err)
}
}
func AssertSuccessfulConnection(ctx context.Context, SQLDB *sql.DB) {
if err := SQLDB.PingContext(ctx); err != nil {
panic(fmt.Errorf("db: cannot connect: %w", err))
}
}
+38
View File
@@ -0,0 +1,38 @@
package db
import (
"database/sql"
"embed"
"errors"
"fmt"
"github.com/golang-migrate/migrate/v4"
"github.com/golang-migrate/migrate/v4/database/postgres"
"github.com/golang-migrate/migrate/v4/source/iofs"
)
//go:embed migrations/*.sql
var migrationsFS embed.FS
func Migrate(sqlDB *sql.DB) error {
driver, err := postgres.WithInstance(sqlDB, &postgres.Config{})
if err != nil {
return fmt.Errorf("db: creating migration driver: %w", err)
}
source, err := iofs.New(migrationsFS, "migrations")
if err != nil {
return fmt.Errorf("db: loading embedded migrations: %w", err)
}
m, err := migrate.NewWithInstance("iofs", source, "postgres", driver)
if err != nil {
return fmt.Errorf("db: initializing migrator: %w", err)
}
if err := m.Up(); err != nil && !errors.Is(err, migrate.ErrNoChange) {
return fmt.Errorf("db: applying migrations: %w", err)
}
return nil
}
@@ -0,0 +1,2 @@
-- Nothing to undo: 0001 creates no objects.
SELECT 1;
@@ -0,0 +1,6 @@
-- Discovery's schema starts here. The service owns its own database — the
-- `discovery` role and same-named database provisioned by newServiceDatabase
-- in infrastructure/main.go — and shares no tables with cms, so nothing is
-- created yet. The file exists because internal/db/migrate.go embeds
-- migrations/*.sql: with no migration at all the package would not compile.
SELECT 1;
@@ -0,0 +1,7 @@
// Package repositories holds every SQL statement the service runs. A
// repository is a struct carrying the *sql.DB opened by db.CreateDBConnection
// and is assigned to a package-level var in main, the way cms wires VideoRepo
// and CatagoriesRepo, so handlers call through something substitutable.
//
// Empty until discovery has tables to read.
package repositories