68 lines
2.4 KiB
Go
68 lines
2.4 KiB
Go
package forge
|
|
|
|
import (
|
|
"context"
|
|
|
|
"dappco.re/go/core/forge/types"
|
|
)
|
|
|
|
// WikiService handles wiki page operations for a repository.
|
|
// No Resource embedding — custom endpoints for wiki CRUD.
|
|
//
|
|
// Usage:
|
|
//
|
|
// f := forge.NewForge("https://forge.lthn.ai", "token")
|
|
// _, err := f.Wiki.ListPages(ctx, "core", "go-forge")
|
|
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 := ResolvePath("/api/v1/repos/{owner}/{repo}/wiki/pages", pathParams("owner", owner, "repo", 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 := ResolvePath("/api/v1/repos/{owner}/{repo}/wiki/page/{pageName}", pathParams("owner", owner, "repo", repo, "pageName", 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 := ResolvePath("/api/v1/repos/{owner}/{repo}/wiki/new", pathParams("owner", owner, "repo", 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 := ResolvePath("/api/v1/repos/{owner}/{repo}/wiki/page/{pageName}", pathParams("owner", owner, "repo", repo, "pageName", 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 := ResolvePath("/api/v1/repos/{owner}/{repo}/wiki/page/{pageName}", pathParams("owner", owner, "repo", repo, "pageName", pageName))
|
|
return s.client.Delete(ctx, path)
|
|
}
|