Skip to content

Commit

Permalink
Added confluence template api
Browse files Browse the repository at this point in the history
Took 2 hours 39 minutes
  • Loading branch information
Fank committed Sep 18, 2024
1 parent a8ccf40 commit 78b14fa
Show file tree
Hide file tree
Showing 5 changed files with 631 additions and 0 deletions.
2 changes: 2 additions & 0 deletions confluence/api_client_impl.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ func New(httpClient common.HTTPClient, site string) (*Client, error) {
client.Search = internal.NewSearchService(client)
client.LongTask = internal.NewTaskService(client)
client.Analytics = internal.NewAnalyticsService(client)
client.Template = internal.NewTemplateService(client)

return client, nil
}
Expand All @@ -74,6 +75,7 @@ type Client struct {
Search *internal.SearchService
LongTask *internal.TaskService
Analytics *internal.AnalyticsService
Template *internal.TemplateService
}

func (c *Client) NewRequest(ctx context.Context, method, urlStr, contentType string, body interface{}) (*http.Request, error) {
Expand Down
110 changes: 110 additions & 0 deletions confluence/internal/template_impl.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
package internal

Check warning

Code scanning / Revive (reported by Codacy)

should have a package comment Warning

should have a package comment

import (
"context"
"net/http"

"github.com/ctreminiom/go-atlassian/pkg/infra/models"
"github.com/ctreminiom/go-atlassian/service"
"github.com/ctreminiom/go-atlassian/service/confluence"
)

// NewTemplateService creates a new instance of TemplateService.
// It takes a service.Connector as inputs and returns a pointer to TemplateService.
func NewTemplateService(client service.Connector) *TemplateService {
return &TemplateService{
internalClient: &internalTemplateImpl{c: client},
}
}

// TemplateService provides methods to interact with template operations in Confluence.
type TemplateService struct {
// internalClient is the connector interface for content operations.
internalClient confluence.TemplateConnector
}

// Create creates a new template.
//
// POST /wiki/rest/api/template
//
// https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-template/#api-wiki-rest-api-template-post
func (t *TemplateService) Create(ctx context.Context, payload *models.CreateTemplateScheme) (*models.ContentTemplateScheme, *models.ResponseScheme, error) {
return t.internalClient.Create(ctx, payload)
}

// Update updates a template.
//
// PUT /wiki/rest/api/template
//
// https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-template/#api-wiki-rest-api-template-put
func (t *TemplateService) Update(ctx context.Context, payload *models.UpdateTemplateScheme) (*models.ContentTemplateScheme, *models.ResponseScheme, error) {
return t.internalClient.Update(ctx, payload)
}

// Get content template by ID.
//
// GET /wiki/rest/api/template/{id}
//
// https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-template/#api-wiki-rest-api-template-contenttemplateid-get
func (t *TemplateService) Get(ctx context.Context, templateID string) (*models.ContentTemplateScheme, *models.ResponseScheme, error) {
return t.internalClient.Get(ctx, templateID)
}

// internalTemplateImpl is the internal implementation of TemplateService.
type internalTemplateImpl struct {
c service.Connector
}

// Create implements TemplateService.Create.
func (i *internalTemplateImpl) Create(ctx context.Context, payload *models.CreateTemplateScheme) (*models.ContentTemplateScheme, *models.ResponseScheme, error) {
endpoint := "/wiki/rest/api/template"

request, err := i.c.NewRequest(ctx, http.MethodPost, endpoint, "", payload)
if err != nil {
return nil, nil, err
}

result := new(models.ContentTemplateScheme)
response, err := i.c.Call(request, result)
if err != nil {
return nil, response, err
}

return result, response, nil
}

// Update implements TemplateService.Update.
func (i *internalTemplateImpl) Update(ctx context.Context, payload *models.UpdateTemplateScheme) (*models.ContentTemplateScheme, *models.ResponseScheme, error) {
endpoint := "/wiki/rest/api/template"

request, err := i.c.NewRequest(ctx, http.MethodPut, endpoint, "", payload)
if err != nil {
return nil, nil, err
}

result := new(models.ContentTemplateScheme)
response, err := i.c.Call(request, result)
if err != nil {
return nil, response, err
}

return result, response, nil
}

// Get implements TemplateService.Get.
func (i *internalTemplateImpl) Get(ctx context.Context, templateID string) (*models.ContentTemplateScheme, *models.ResponseScheme, error) {
endpoint := "/wiki/rest/api/template/" + templateID

request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
if err != nil {
return nil, nil, err
}

result := new(models.ContentTemplateScheme)
response, err := i.c.Call(request, result)
if err != nil {
return nil, response, err
}

return result, response, nil
}
Loading

0 comments on commit 78b14fa

Please sign in to comment.