You've already forked agentic-coding-workflow
55 lines
1.6 KiB
Go
55 lines
1.6 KiB
Go
package docs
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
|
|
"github.com/yan1h/agent-coding-workflow/internal/infra/errs"
|
|
"github.com/yan1h/agent-coding-workflow/internal/jobs"
|
|
)
|
|
|
|
// Enqueuer is the subset of jobs.Repository the service needs.
|
|
type Enqueuer interface {
|
|
Enqueue(ctx context.Context, typ jobs.JobType, payload json.RawMessage, scheduledAt time.Time, maxAttempts int32) (*jobs.Job, error)
|
|
}
|
|
|
|
// Service is the docs application service.
|
|
type Service interface {
|
|
// EnqueueCommitSummary enqueues a docs.commit_summary job for the given
|
|
// commit. Idempotent at the data layer via UNIQUE(workspace, commit, kind).
|
|
EnqueueCommitSummary(ctx context.Context, wsID uuid.UUID, worktreeID *uuid.UUID, branch, commitSHA string) error
|
|
}
|
|
|
|
type service struct {
|
|
jobs Enqueuer
|
|
enabled bool
|
|
}
|
|
|
|
// NewService constructs the docs Service. When enabled is false, EnqueueCommitSummary
|
|
// is a no-op so the commit path stays free of doc-gen overhead.
|
|
func NewService(jobsRepo Enqueuer, enabled bool) Service {
|
|
return &service{jobs: jobsRepo, enabled: enabled}
|
|
}
|
|
|
|
func (s *service) EnqueueCommitSummary(ctx context.Context, wsID uuid.UUID, worktreeID *uuid.UUID, branch, commitSHA string) error {
|
|
if !s.enabled {
|
|
return nil
|
|
}
|
|
if commitSHA == "" {
|
|
return errs.New(errs.CodeInvalidInput, "commit_sha required")
|
|
}
|
|
payload, _ := json.Marshal(summaryPayload{
|
|
WorkspaceID: wsID,
|
|
WorktreeID: worktreeID,
|
|
Branch: branch,
|
|
CommitSHA: commitSHA,
|
|
})
|
|
if _, err := s.jobs.Enqueue(ctx, JobTypeCommitSummary, payload, time.Now(), 3); err != nil {
|
|
return errs.Wrap(err, errs.CodeInternal, "enqueue docs.commit_summary")
|
|
}
|
|
return nil
|
|
}
|