tenseleyflow/shithub / b4aa714

Browse files

S21: seed default labels + issue counter inside repo-create tx

Authored by mfwolffe <wolffemf@dukes.jmu.edu>
SHA
b4aa7140ac51afe64786766c3bb70f12e6be1c3e
Parents
5cbcc45
Tree
b31065a

1 changed file

StatusFile+-
M internal/repos/create.go 16 0
internal/repos/create.gomodified
@@ -19,6 +19,8 @@ import (
1919
 	"github.com/tenseleyFlow/shithub/internal/auth/throttle"
2020
 	"github.com/tenseleyFlow/shithub/internal/git/hooks"
2121
 	"github.com/tenseleyFlow/shithub/internal/infra/storage"
22
+	"github.com/tenseleyFlow/shithub/internal/issues"
23
+	issuesdb "github.com/tenseleyFlow/shithub/internal/issues/sqlc"
2224
 	repogit "github.com/tenseleyFlow/shithub/internal/repos/git"
2325
 	reposdb "github.com/tenseleyFlow/shithub/internal/repos/sqlc"
2426
 	"github.com/tenseleyFlow/shithub/internal/repos/templates"
@@ -182,6 +184,20 @@ func Create(ctx context.Context, deps Deps, p Params) (Result, error) {
182184
 		}
183185
 	}
184186
 
187
+	// Seed the issue subsystem state for the new repo: counter row +
188
+	// default label set. Runs inside the create tx so a failed seed
189
+	// rolls the whole repo back. Cheap (10 inserts), and folding it in
190
+	// here keeps the "fresh repo is fully usable" invariant. Issues
191
+	// orchestrator's SeedDefaultLabels swallows unique-violations so a
192
+	// re-run is a no-op (defensive against partially-seeded migrations).
193
+	iq := issuesdb.New()
194
+	if err := iq.EnsureRepoIssueCounter(ctx, tx, row.ID); err != nil {
195
+		return Result{}, fmt.Errorf("repos: issue counter: %w", err)
196
+	}
197
+	if err := issues.SeedDefaultLabels(ctx, tx, row.ID); err != nil {
198
+		return Result{}, fmt.Errorf("repos: seed labels: %w", err)
199
+	}
200
+
185201
 	var commitOID string
186202
 	if wantInit {
187203
 		commitWhen := p.InitialCommitWhen