diff --git a/app/store/database/infra_provider_resource.go b/app/store/database/infra_provider_resource.go index de6c7b7b6..c08155f22 100644 --- a/app/store/database/infra_provider_resource.go +++ b/app/store/database/infra_provider_resource.go @@ -293,14 +293,16 @@ var _ store.InfraProviderResourceView = (*InfraProviderResourceView)(nil) // NewInfraProviderResourceView returns a new InfraProviderResourceView. // It's used by the infraprovider resource cache. -func NewInfraProviderResourceView(db *sqlx.DB) *InfraProviderResourceView { +func NewInfraProviderResourceView(db *sqlx.DB, spaceStore store.SpaceStore) *InfraProviderResourceView { return &InfraProviderResourceView{ - db: db, + db: db, + spaceStore: spaceStore, } } type InfraProviderResourceView struct { - db *sqlx.DB + db *sqlx.DB + spaceStore store.SpaceStore } func (i InfraProviderResourceView) Find(ctx context.Context, id int64) (*types.InfraProviderResource, error) { @@ -316,9 +318,41 @@ func (i InfraProviderResourceView) Find(ctx context.Context, id int64) (*types.I dst := new(infraProviderResource) db := dbtx.GetAccessor(ctx, i.db) if err := db.GetContext(ctx, dst, sql, args...); err != nil { - return nil, database.ProcessSQLErrorf(ctx, err, "Failed to find infraprovider resource %d", id) + return nil, database.ProcessSQLErrorf(ctx, err, "Failed to find infraprovider providerResource %d", id) } - return mapToInfraProviderResource(ctx, dst) + providerResource, err := mapToInfraProviderResource(ctx, dst) + if err != nil { + return nil, err + } + providerConfig, err := i.findInfraProviderConfig(ctx, providerResource.InfraProviderConfigID) + if err == nil && providerConfig != nil { + providerResource.InfraProviderConfigIdentifier = providerConfig.Identifier + } + resourceSpace, err := i.spaceStore.Find(ctx, providerResource.SpaceID) + if err == nil { + providerResource.SpacePath = resourceSpace.Path + } + return providerResource, err +} + +func (i InfraProviderResourceView) findInfraProviderConfig( + ctx context.Context, + id int64, +) (*infraProviderConfig, error) { + stmt := database.Builder. + Select(infraProviderConfigSelectColumns). + From(infraProviderConfigTable). + Where(infraProviderConfigIDColumn+" = $1", id) //nolint:goconst + sql, args, err := stmt.ToSql() + if err != nil { + return nil, errors.Wrap(err, "Failed to convert squirrel builder to sql") + } + dst := new(infraProviderConfig) + db := dbtx.GetAccessor(ctx, i.db) + if err := db.GetContext(ctx, dst, sql, args...); err != nil { + return nil, database.ProcessSQLErrorf(ctx, err, "Failed to find infraprovider config %d", id) + } + return dst, nil } func (i InfraProviderResourceView) FindMany(ctx context.Context, ids []int64) ([]*types.InfraProviderResource, error) { diff --git a/app/store/database/wire.go b/app/store/database/wire.go index 22cbfd8ee..543687c59 100644 --- a/app/store/database/wire.go +++ b/app/store/database/wire.go @@ -117,8 +117,9 @@ func ProvidePrincipalInfoView(db *sqlx.DB) store.PrincipalInfoView { } // ProvideInfraProviderResourceView provides a principal info store. -func ProvideInfraProviderResourceView(db *sqlx.DB) store.InfraProviderResourceView { - return NewInfraProviderResourceView(db) +func ProvideInfraProviderResourceView(db *sqlx.DB, spaceStore store.SpaceStore, +) store.InfraProviderResourceView { + return NewInfraProviderResourceView(db, spaceStore) } // ProvideSpacePathStore provides a space path store. diff --git a/cmd/gitness/wire_gen.go b/cmd/gitness/wire_gen.go index 5f0335cd4..c1c18a546 100644 --- a/cmd/gitness/wire_gen.go +++ b/cmd/gitness/wire_gen.go @@ -288,7 +288,7 @@ func initSystem(ctx context.Context, config *types.Config) (*server.System, erro if err != nil { return nil, err } - infraProviderResourceView := database.ProvideInfraProviderResourceView(db) + infraProviderResourceView := database.ProvideInfraProviderResourceView(db, spaceStore) infraProviderResourceCache := cache.ProvideInfraProviderResourceCache(infraProviderResourceView) gitspaceConfigStore := database.ProvideGitspaceConfigStore(db, principalInfoCache, infraProviderResourceCache) gitspaceInstanceStore := database.ProvideGitspaceInstanceStore(db)