Add TestDatabase function to databases service

This commit is contained in:
Luis Eduardo Jeréz Girón
2024-07-23 20:44:20 -06:00
parent 9680956b6a
commit 23fa0bb786
5 changed files with 41 additions and 2 deletions

View File

@@ -9,6 +9,11 @@ import (
func (s *Service) CreateDatabase(
ctx context.Context, params dbgen.DatabasesServiceCreateDatabaseParams,
) (dbgen.Database, error) {
err := s.TestDatabase(ctx, params.PgVersion, params.ConnectionString)
if err != nil {
return dbgen.Database{}, err
}
params.EncryptionKey = *s.env.PBW_ENCRYPTION_KEY
return s.dbgen.DatabasesServiceCreateDatabase(ctx, params)
}

View File

@@ -3,16 +3,21 @@ package databases
import (
"github.com/eduardolat/pgbackweb/internal/config"
"github.com/eduardolat/pgbackweb/internal/database/dbgen"
"github.com/eduardolat/pgbackweb/internal/integration"
)
type Service struct {
env *config.Env
dbgen *dbgen.Queries
ints *integration.Integration
}
func New(env *config.Env, dbgen *dbgen.Queries) *Service {
func New(
env *config.Env, dbgen *dbgen.Queries, ints *integration.Integration,
) *Service {
return &Service{
env: env,
dbgen: dbgen,
ints: ints,
}
}

View File

@@ -0,0 +1,22 @@
package databases
import (
"context"
"fmt"
)
func (s *Service) TestDatabase(
ctx context.Context, version, connString string,
) error {
pgVersion, err := s.ints.PGDumpClient.ParseVersion(version)
if err != nil {
return fmt.Errorf("error parsing PostgreSQL version: %w", err)
}
err = s.ints.PGDumpClient.Ping(pgVersion, connString)
if err != nil {
return fmt.Errorf("error pinging database: %w", err)
}
return nil
}

View File

@@ -10,6 +10,13 @@ import (
func (s *Service) UpdateDatabase(
ctx context.Context, params dbgen.DatabasesServiceUpdateDatabaseParams,
) (dbgen.Database, error) {
err := s.TestDatabase(
ctx, params.PgVersion.String, params.ConnectionString.String,
)
if err != nil {
return dbgen.Database{}, err
}
params.EncryptionKey = *s.env.PBW_ENCRYPTION_KEY
return s.dbgen.DatabasesServiceUpdateDatabase(ctx, params)
}

View File

@@ -27,7 +27,7 @@ func New(
cr *cron.Cron, ints *integration.Integration,
) *Service {
authService := auth.New(env, dbgen)
databasesService := databases.New(env, dbgen)
databasesService := databases.New(env, dbgen, ints)
destinationsService := destinations.New(env, dbgen)
executionsService := executions.New(env, dbgen, ints)
usersService := users.New(dbgen)