diff --git a/internal/api/controller/space/export.go b/internal/api/controller/space/export.go index 966377054..c0d0b27bf 100644 --- a/internal/api/controller/space/export.go +++ b/internal/api/controller/space/export.go @@ -7,6 +7,7 @@ package space import ( "context" "fmt" + apiauth "github.com/harness/gitness/internal/api/auth" "github.com/harness/gitness/internal/api/usererror" "github.com/harness/gitness/internal/auth" @@ -53,7 +54,7 @@ func (c *Controller) Export(ctx context.Context, session *auth.Session, spaceRef } err = dbtx.New(c.db).WithTx(ctx, func(ctx context.Context) error { - err = c.exporter.RunMany(ctx, space.ID, providerInfo, repos) + err = c.exporter.RunManyForSpace(ctx, space.ID, repos, providerInfo) if err != nil { return fmt.Errorf("failed to start export repository job: %w", err) } diff --git a/internal/api/controller/space/export_progress.go b/internal/api/controller/space/export_progress.go index 6bb4deacb..9de448f4a 100644 --- a/internal/api/controller/space/export_progress.go +++ b/internal/api/controller/space/export_progress.go @@ -4,6 +4,7 @@ import ( "context" apiauth "github.com/harness/gitness/internal/api/auth" + "github.com/harness/gitness/internal/api/usererror" "github.com/harness/gitness/internal/auth" "github.com/harness/gitness/types" "github.com/harness/gitness/types/enum" @@ -17,19 +18,24 @@ type ExportProgressOutput struct { func (c *Controller) ExportProgress(ctx context.Context, session *auth.Session, spaceRef string, -) (ExportProgressOutput, error) { +) (*ExportProgressOutput, error) { space, err := c.spaceStore.FindByRef(ctx, spaceRef) if err != nil { - return ExportProgressOutput{}, err + return nil, err } if err = apiauth.CheckSpace(ctx, c.authorizer, session, space, enum.PermissionSpaceView, false); err != nil { - return ExportProgressOutput{}, err + return nil, err } - progress, err := c.exporter.GetProgress(ctx, space) + progress, err := c.exporter.GetProgressForSpace(ctx, space.ID) if err != nil { - return ExportProgressOutput{}, err + return nil, err } - return ExportProgressOutput{Repos: progress}, nil + + if len(progress) == 0 { + return nil, usererror.NotFound("No ongoing export found for space.") + } + + return &ExportProgressOutput{Repos: progress}, nil } diff --git a/internal/api/usererror/usererror.go b/internal/api/usererror/usererror.go index 0ff596a65..ec95b96ca 100644 --- a/internal/api/usererror/usererror.go +++ b/internal/api/usererror/usererror.go @@ -121,6 +121,11 @@ func Forbidden(message string) *Error { return New(http.StatusForbidden, message) } +// NotFound returns a new user facing not found error. +func NotFound(message string) *Error { + return New(http.StatusNotFound, message) +} + // ConflictWithPayload returns a new user facing conflict error with payload. func ConflictWithPayload(message string, values ...map[string]any) *Error { return NewWithPayload(http.StatusConflict, message, values...) diff --git a/internal/services/exporter/repository.go b/internal/services/exporter/repository.go index bd03e3974..2fa882fca 100644 --- a/internal/services/exporter/repository.go +++ b/internal/services/exporter/repository.go @@ -9,14 +9,15 @@ import ( "encoding/base64" "encoding/json" "fmt" + "net/url" + "strings" + "time" + "github.com/harness/gitness/encrypt" "github.com/harness/gitness/internal/api/controller/repo" "github.com/harness/gitness/internal/sse" "github.com/harness/gitness/types/enum" "github.com/rs/zerolog/log" - "net/url" - "strings" - "time" "github.com/harness/gitness/gitrpc" "github.com/harness/gitness/internal/services/job" @@ -64,7 +65,12 @@ func (r *Repository) Register(executor *job.Executor) error { return executor.Register(jobType, r) } -func (r *Repository) RunMany(ctx context.Context, spaceId int64, harnessCodeInfo *HarnessCodeInfo, repos []*types.Repository) error { +func (r *Repository) RunManyForSpace( + ctx context.Context, + spaceId int64, + repos []*types.Repository, + harnessCodeInfo *HarnessCodeInfo, +) error { jobGroupId := getJobGroupId(spaceId) jobDefinitions := make([]job.Definition, len(repos)) for i, repository := range repos { @@ -190,14 +196,11 @@ func (r *Repository) getJobInput(data string) (Input, error) { return input, nil } -func (r *Repository) GetProgress(ctx context.Context, space *types.Space) ([]types.JobProgress, error) { - spaceId := getJobGroupId(space.ID) +func (r *Repository) GetProgressForSpace(ctx context.Context, spaceID int64) ([]types.JobProgress, error) { + spaceId := getJobGroupId(spaceID) progress, err := r.scheduler.GetJobProgressForGroup(ctx, spaceId) if err != nil { - return nil, err - } - if progress == nil || len(progress) == 0 { - return []types.JobProgress{job.FailProgress()}, nil + return nil, fmt.Errorf("failed to get job progress for group: %w", err) } return progress, nil } diff --git a/internal/store/database/job.go b/internal/store/database/job.go index b131aad73..50a1159e9 100644 --- a/internal/store/database/job.go +++ b/internal/store/database/job.go @@ -85,9 +85,10 @@ func (s *JobStore) ListByGroupID(ctx context.Context, groupId string) ([]*types. db := dbtx.GetAccessor(ctx, s.db) dst := make([]*types.Job, 0) - if err := db.GetContext(ctx, &dst, sqlQuery, groupId); err != nil { + if err := db.SelectContext(ctx, &dst, sqlQuery, groupId); err != nil { return nil, database.ProcessSQLErrorf(err, "Failed to find job by group id") } + return dst, nil }