making changes to the dependency implementation like those in Commit 57c481e

This commit is contained in:
viljarb
2026-03-20 14:50:02 +01:00
parent c37dae9b1a
commit 85e20c58fe
3 changed files with 7 additions and 64 deletions

View File

@@ -54,8 +54,7 @@ type IssueService interface {
GetIssueComments(ctx context.Context, issueID string) ([]*Comment, error) GetIssueComments(ctx context.Context, issueID string) ([]*Comment, error)
GetCommentCounts(ctx context.Context, issueIDs []string) (map[string]int, error) GetCommentCounts(ctx context.Context, issueIDs []string) (map[string]int, error)
// Dependency management (thin wrappers over beads dependency API) AddDependency(ctx context.Context, dep *Dependency, actor string) error
AddDependency(ctx context.Context, issueID, dependsOnID string, depType DependencyType, actor string) error
RemoveDependency(ctx context.Context, issueID, dependsOnID string, actor string) error RemoveDependency(ctx context.Context, issueID, dependsOnID string, actor string) error
GetDependencies(ctx context.Context, issueID string) ([]*Issue, error) GetDependencies(ctx context.Context, issueID string) ([]*Issue, error)
GetDependents(ctx context.Context, issueID string) ([]*Issue, error) GetDependents(ctx context.Context, issueID string) ([]*Issue, error)

View File

@@ -53,64 +53,3 @@ func (s *BeadsService) DeleteIssues() error {
return nil return nil
} }
/////////////////////////////////////////////////////////////////////////////////////
// Dependency Management API wrappers over the underlying beads storage API
/////////////////////////////////////////////////////////////////////////////////////
// AddDependency creates a dependency edge between two issues.
// It is a thin wrapper over the underlying beads storage AddDependency API.
func (s *BeadsService) AddDependency(ctx context.Context, issueID, dependsOnID string, depType models.DependencyType, actor string) error {
dep := &beads.Dependency{
IssueID: issueID,
DependsOnID: dependsOnID,
Type: beads.DependencyType(depType),
}
return s.Storage.AddDependency(ctx, dep, actor)
}
// RemoveDependency removes a dependency edge between two issues.
func (s *BeadsService) RemoveDependency(ctx context.Context, issueID, dependsOnID string, actor string) error {
return s.Storage.RemoveDependency(ctx, issueID, dependsOnID, actor)
}
// GetDependencies returns issues that the given issue depends on.
func (s *BeadsService) GetDependencies(ctx context.Context, issueID string) ([]*models.Issue, error) {
issues, err := s.Storage.GetDependencies(ctx, issueID)
if err != nil {
return nil, err
}
if len(issues) == 0 {
return []*models.Issue{}, nil
}
// types.Issue is layout-compatible with models.Issue (alias to beads.Issue),
// so we can return the slice directly as []*models.Issue.
result := make([]*models.Issue, 0, len(issues))
for _, iss := range issues {
if iss == nil {
continue
}
casted := models.Issue(*iss)
result = append(result, &casted)
}
return result, nil
}
// GetDependents returns issues that depend on the given issue.
func (s *BeadsService) GetDependents(ctx context.Context, issueID string) ([]*models.Issue, error) {
issues, err := s.Storage.GetDependents(ctx, issueID)
if err != nil {
return nil, err
}
if len(issues) == 0 {
return []*models.Issue{}, nil
}
result := make([]*models.Issue, 0, len(issues))
for _, iss := range issues {
if iss == nil {
continue
}
casted := models.Issue(*iss)
result = append(result, &casted)
}
return result, nil
}

View File

@@ -298,8 +298,13 @@ func AddDependencyHandler(w http.ResponseWriter, r *http.Request) {
} }
depType := models.DepBlocks depType := models.DepBlocks
dep := &models.Dependency{
IssueID: issue.ID,
DependsOnID: dependsOnID,
Type: depType,
}
if err := app.Issues.AddDependency(r.Context(), issue.ID, dependsOnID, depType, "web"); err != nil { if err := app.Issues.AddDependency(r.Context(), dep, "web"); err != nil {
http.Error(w, "Failed to add dependency: "+err.Error(), http.StatusInternalServerError) http.Error(w, "Failed to add dependency: "+err.Error(), http.StatusInternalServerError)
return return
} }