Add three new services completing the final service layer: - WikiService: CRUD operations for repository wiki pages - MiscService: markdown rendering, licence/gitignore templates, nodeinfo, version - CommitService: commit statuses (list, create, combined) and git notes - PostRaw method on Client for endpoints returning raw text (e.g. /markdown) - Remove services_stub.go (all stubs now replaced with real implementations) - Wire Commits field into Forge struct Co-Authored-By: Virgil <virgil@lethean.io> Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
64 lines
2 KiB
Go
64 lines
2 KiB
Go
package forge
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"forge.lthn.ai/core/go-forge/types"
|
|
)
|
|
|
|
// WikiService handles wiki page operations for a repository.
|
|
// No Resource embedding — custom endpoints for wiki CRUD.
|
|
type WikiService struct {
|
|
client *Client
|
|
}
|
|
|
|
func newWikiService(c *Client) *WikiService {
|
|
return &WikiService{client: c}
|
|
}
|
|
|
|
// ListPages returns all wiki page metadata for a repository.
|
|
func (s *WikiService) ListPages(ctx context.Context, owner, repo string) ([]types.WikiPageMetaData, error) {
|
|
path := fmt.Sprintf("/api/v1/repos/%s/%s/wiki/pages", owner, repo)
|
|
var out []types.WikiPageMetaData
|
|
if err := s.client.Get(ctx, path, &out); err != nil {
|
|
return nil, err
|
|
}
|
|
return out, nil
|
|
}
|
|
|
|
// GetPage returns a single wiki page by name.
|
|
func (s *WikiService) GetPage(ctx context.Context, owner, repo, pageName string) (*types.WikiPage, error) {
|
|
path := fmt.Sprintf("/api/v1/repos/%s/%s/wiki/page/%s", owner, repo, pageName)
|
|
var out types.WikiPage
|
|
if err := s.client.Get(ctx, path, &out); err != nil {
|
|
return nil, err
|
|
}
|
|
return &out, nil
|
|
}
|
|
|
|
// CreatePage creates a new wiki page.
|
|
func (s *WikiService) CreatePage(ctx context.Context, owner, repo string, opts *types.CreateWikiPageOptions) (*types.WikiPage, error) {
|
|
path := fmt.Sprintf("/api/v1/repos/%s/%s/wiki/new", owner, repo)
|
|
var out types.WikiPage
|
|
if err := s.client.Post(ctx, path, opts, &out); err != nil {
|
|
return nil, err
|
|
}
|
|
return &out, nil
|
|
}
|
|
|
|
// EditPage updates an existing wiki page.
|
|
func (s *WikiService) EditPage(ctx context.Context, owner, repo, pageName string, opts *types.CreateWikiPageOptions) (*types.WikiPage, error) {
|
|
path := fmt.Sprintf("/api/v1/repos/%s/%s/wiki/page/%s", owner, repo, pageName)
|
|
var out types.WikiPage
|
|
if err := s.client.Patch(ctx, path, opts, &out); err != nil {
|
|
return nil, err
|
|
}
|
|
return &out, nil
|
|
}
|
|
|
|
// DeletePage removes a wiki page.
|
|
func (s *WikiService) DeletePage(ctx context.Context, owner, repo, pageName string) error {
|
|
path := fmt.Sprintf("/api/v1/repos/%s/%s/wiki/page/%s", owner, repo, pageName)
|
|
return s.client.Delete(ctx, path)
|
|
}
|