Skip to content
This repository has been archived by the owner on Dec 21, 2023. It is now read-only.

Commit

Permalink
Second option: APIV2Interface with ...WithContext methods
Browse files Browse the repository at this point in the history
Signed-off-by: Arthur Pitman <[email protected]>
  • Loading branch information
arthurpitman committed May 6, 2022
1 parent 18b55c7 commit 5d35c95
Showing 1 changed file with 45 additions and 56 deletions.
101 changes: 45 additions & 56 deletions pkg/api/utils/apiUtils.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,38 +62,33 @@ type APIV2DeleteServiceOptions struct{}
type APIV2GetMetadataOptions struct{}

type APIV2Interface interface {
// SendEvent sends an event to Keptn.
SendEvent(ctx context.Context, event models.KeptnContextExtendedCE, opts APIV2SendEventOptions) (*models.EventContext, *models.Error)
// SendEventWithContext sends an event to Keptn.
SendEventWithContext(ctx context.Context, event models.KeptnContextExtendedCE, opts APIV2SendEventOptions) (*models.EventContext, *models.Error)

// TriggerEvaluation triggers a new evaluation.
TriggerEvaluation(ctx context.Context, project string, stage string, service string, evaluation models.Evaluation, opts APIV2TriggerEvaluationOptions) (*models.EventContext, *models.Error)
// TriggerEvaluationWithContext triggers a new evaluation.
TriggerEvaluationWithContext(ctx context.Context, project string, stage string, service string, evaluation models.Evaluation, opts APIV2TriggerEvaluationOptions) (*models.EventContext, *models.Error)

// CreateProject creates a new project.
CreateProject(ctx context.Context, project models.CreateProject, opts APIV2CreateProjectOptions) (string, *models.Error)
// CreateProjectWithContext creates a new project.
CreateProjectWithContext(ctx context.Context, project models.CreateProject, opts APIV2CreateProjectOptions) (string, *models.Error)

// UpdateProject updates a project.
UpdateProject(ctx context.Context, project models.CreateProject, opts APIV2UpdateProjectOptions) (string, *models.Error)
// UpdateProjectWithContext updates a project.
UpdateProjectWithContext(ctx context.Context, project models.CreateProject, opts APIV2UpdateProjectOptions) (string, *models.Error)

// DeleteProject deletes a project.
DeleteProject(ctx context.Context, project models.Project, opts APIV2DeleteProjectOptions) (*models.DeleteProjectResponse, *models.Error)
// DeleteProjectWithContext deletes a project.
DeleteProjectWithContext(ctx context.Context, project models.Project, opts APIV2DeleteProjectOptions) (*models.DeleteProjectResponse, *models.Error)

// CreateService creates a new service.
CreateService(ctx context.Context, project string, service models.CreateService, opts APIV2CreateServiceOptions) (string, *models.Error)
// CreateServiceWithContext creates a new service.
CreateServiceWithContext(ctx context.Context, project string, service models.CreateService, opts APIV2CreateServiceOptions) (string, *models.Error)

// DeleteService deletes a service.
DeleteService(ctx context.Context, project string, service string, opts APIV2DeleteServiceOptions) (*models.DeleteServiceResponse, *models.Error)
// DeleteServiceWithContext deletes a service.
DeleteServiceWithContext(ctx context.Context, project string, service string, opts APIV2DeleteServiceOptions) (*models.DeleteServiceResponse, *models.Error)

// GetMetadata retrieves Keptn metadata information.
GetMetadata(ctx context.Context, opts APIV2GetMetadataOptions) (*models.Metadata, *models.Error)
// GetMetadataWithContext retrieves Keptn metadata information.
GetMetadataWithContext(ctx context.Context, opts APIV2GetMetadataOptions) (*models.Metadata, *models.Error)
}

// APIHandler handles projects
type APIHandler struct {
APIV2Handler
}

// APIV2Handler handles projects
type APIV2Handler struct {
BaseURL string
AuthToken string
AuthHeader string
Expand All @@ -112,15 +107,9 @@ func NewAuthenticatedAPIHandler(baseURL string, authToken string, authHeader str
}

func createAuthenticatedAPIHandler(baseURL string, authToken string, authHeader string, httpClient *http.Client, scheme string) *APIHandler {
return &APIHandler{
APIV2Handler: *createAuthenticatedAPIV2Handler(baseURL, authToken, authHeader, httpClient, scheme),
}
}

func createAuthenticatedAPIV2Handler(baseURL string, authToken string, authHeader string, httpClient *http.Client, scheme string) *APIV2Handler {
baseURL = strings.TrimPrefix(baseURL, "http://")
baseURL = strings.TrimPrefix(baseURL, "https://")
return &APIV2Handler{
return &APIHandler{
BaseURL: baseURL,
AuthHeader: authHeader,
AuthToken: authToken,
Expand All @@ -129,29 +118,29 @@ func createAuthenticatedAPIV2Handler(baseURL string, authToken string, authHeade
}
}

func (a *APIV2Handler) getBaseURL() string {
func (a *APIHandler) getBaseURL() string {
return a.BaseURL
}

func (a *APIV2Handler) getAuthToken() string {
func (a *APIHandler) getAuthToken() string {
return a.AuthToken
}

func (a *APIV2Handler) getAuthHeader() string {
func (a *APIHandler) getAuthHeader() string {
return a.AuthHeader
}

func (a *APIV2Handler) getHTTPClient() *http.Client {
func (a *APIHandler) getHTTPClient() *http.Client {
return a.HTTPClient
}

// SendEvent sends an event to Keptn.
func (a *APIHandler) SendEvent(event models.KeptnContextExtendedCE) (*models.EventContext, *models.Error) {
return a.APIV2Handler.SendEvent(context.TODO(), event, APIV2SendEventOptions{})
return a.SendEventWithContext(context.TODO(), event, APIV2SendEventOptions{})
}

// SendEvent sends an event to Keptn.
func (a *APIV2Handler) SendEvent(ctx context.Context, event models.KeptnContextExtendedCE, opts APIV2SendEventOptions) (*models.EventContext, *models.Error) {
// SendEventWithContext sends an event to Keptn.
func (a *APIHandler) SendEventWithContext(ctx context.Context, event models.KeptnContextExtendedCE, opts APIV2SendEventOptions) (*models.EventContext, *models.Error) {
bodyStr, err := event.ToJSON()
if err != nil {
return nil, buildErrorResponse(err.Error())
Expand All @@ -161,11 +150,11 @@ func (a *APIV2Handler) SendEvent(ctx context.Context, event models.KeptnContextE

// TriggerEvaluation triggers a new evaluation.
func (a *APIHandler) TriggerEvaluation(project, stage, service string, evaluation models.Evaluation) (*models.EventContext, *models.Error) {
return a.APIV2Handler.TriggerEvaluation(context.TODO(), project, stage, service, evaluation, APIV2TriggerEvaluationOptions{})
return a.TriggerEvaluationWithContext(context.TODO(), project, stage, service, evaluation, APIV2TriggerEvaluationOptions{})
}

// TriggerEvaluation triggers a new evaluation.
func (a *APIV2Handler) TriggerEvaluation(ctx context.Context, project, stage, service string, evaluation models.Evaluation, opts APIV2TriggerEvaluationOptions) (*models.EventContext, *models.Error) {
// TriggerEvaluationWithContext triggers a new evaluation.
func (a *APIHandler) TriggerEvaluationWithContext(ctx context.Context, project, stage, service string, evaluation models.Evaluation, opts APIV2TriggerEvaluationOptions) (*models.EventContext, *models.Error) {
bodyStr, err := evaluation.ToJSON()
if err != nil {
return nil, buildErrorResponse(err.Error())
Expand All @@ -175,11 +164,11 @@ func (a *APIV2Handler) TriggerEvaluation(ctx context.Context, project, stage, se

// CreateProject creates a new project.
func (a *APIHandler) CreateProject(project models.CreateProject) (string, *models.Error) {
return a.APIV2Handler.CreateProject(context.TODO(), project, APIV2CreateProjectOptions{})
return a.CreateProjectWithContext(context.TODO(), project, APIV2CreateProjectOptions{})
}

// CreateProject creates a new project.
func (a *APIV2Handler) CreateProject(ctx context.Context, project models.CreateProject, opts APIV2CreateProjectOptions) (string, *models.Error) {
// CreateProjectWithContext creates a new project.
func (a *APIHandler) CreateProjectWithContext(ctx context.Context, project models.CreateProject, opts APIV2CreateProjectOptions) (string, *models.Error) {

bodyStr, err := project.ToJSON()
if err != nil {
Expand All @@ -190,11 +179,11 @@ func (a *APIV2Handler) CreateProject(ctx context.Context, project models.CreateP

// UpdateProject updates a project.
func (a *APIHandler) UpdateProject(project models.CreateProject) (string, *models.Error) {
return a.APIV2Handler.UpdateProject(context.TODO(), project, APIV2UpdateProjectOptions{})
return a.UpdateProjectWithContext(context.TODO(), project, APIV2UpdateProjectOptions{})
}

// UpdateProject updates a project.
func (a *APIV2Handler) UpdateProject(ctx context.Context, project models.CreateProject, opts APIV2UpdateProjectOptions) (string, *models.Error) {
// UpdateProjectWithContext updates a project.
func (a *APIHandler) UpdateProjectWithContext(ctx context.Context, project models.CreateProject, opts APIV2UpdateProjectOptions) (string, *models.Error) {
bodyStr, err := project.ToJSON()
if err != nil {
return "", buildErrorResponse(err.Error())
Expand All @@ -204,11 +193,11 @@ func (a *APIV2Handler) UpdateProject(ctx context.Context, project models.CreateP

// DeleteProject deletes a project.
func (a *APIHandler) DeleteProject(project models.Project) (*models.DeleteProjectResponse, *models.Error) {
return a.APIV2Handler.DeleteProject(context.TODO(), project, APIV2DeleteProjectOptions{})
return a.DeleteProjectWithContext(context.TODO(), project, APIV2DeleteProjectOptions{})
}

// DeleteProject deletes a project.
func (a *APIV2Handler) DeleteProject(ctx context.Context, project models.Project, opts APIV2DeleteProjectOptions) (*models.DeleteProjectResponse, *models.Error) {
// DeleteProjectWithContext deletes a project.
func (a *APIHandler) DeleteProjectWithContext(ctx context.Context, project models.Project, opts APIV2DeleteProjectOptions) (*models.DeleteProjectResponse, *models.Error) {
resp, err := delete(ctx, a.Scheme+"://"+a.getBaseURL()+"/"+shipyardControllerBaseURL+v1ProjectPath+"/"+project.ProjectName, a)
if err != nil {
return nil, err
Expand All @@ -225,11 +214,11 @@ func (a *APIV2Handler) DeleteProject(ctx context.Context, project models.Project

// CreateService creates a new service.
func (a *APIHandler) CreateService(project string, service models.CreateService) (string, *models.Error) {
return a.APIV2Handler.CreateService(context.TODO(), project, service, APIV2CreateServiceOptions{})
return a.CreateServiceWithContext(context.TODO(), project, service, APIV2CreateServiceOptions{})
}

// CreateService creates a new service.
func (a *APIV2Handler) CreateService(ctx context.Context, project string, service models.CreateService, opts APIV2CreateServiceOptions) (string, *models.Error) {
// CreateServiceWithContext creates a new service.
func (a *APIHandler) CreateServiceWithContext(ctx context.Context, project string, service models.CreateService, opts APIV2CreateServiceOptions) (string, *models.Error) {
bodyStr, err := service.ToJSON()
if err != nil {
return "", buildErrorResponse(err.Error())
Expand All @@ -239,11 +228,11 @@ func (a *APIV2Handler) CreateService(ctx context.Context, project string, servic

// DeleteService deletes a service.
func (a *APIHandler) DeleteService(project, service string) (*models.DeleteServiceResponse, *models.Error) {
return a.APIV2Handler.DeleteService(context.TODO(), project, service, APIV2DeleteServiceOptions{})
return a.DeleteServiceWithContext(context.TODO(), project, service, APIV2DeleteServiceOptions{})
}

// DeleteService deletes a service.
func (a *APIV2Handler) DeleteService(ctx context.Context, project, service string, opts APIV2DeleteServiceOptions) (*models.DeleteServiceResponse, *models.Error) {
// DeleteServiceWithContext deletes a service.
func (a *APIHandler) DeleteServiceWithContext(ctx context.Context, project, service string, opts APIV2DeleteServiceOptions) (*models.DeleteServiceResponse, *models.Error) {
resp, err := delete(ctx, a.Scheme+"://"+a.getBaseURL()+"/"+shipyardControllerBaseURL+v1ProjectPath+"/"+project+pathToService+"/"+service, a)
if err != nil {
return nil, err
Expand All @@ -260,11 +249,11 @@ func (a *APIV2Handler) DeleteService(ctx context.Context, project, service strin

// GetMetadata retrieves Keptn metadata information.
func (a *APIHandler) GetMetadata() (*models.Metadata, *models.Error) {
return a.APIV2Handler.GetMetadata(context.TODO(), APIV2GetMetadataOptions{})
return a.GetMetadataWithContext(context.TODO(), APIV2GetMetadataOptions{})
}

// GetMetadata retrieves Keptn metadata information.
func (a *APIV2Handler) GetMetadata(ctx context.Context, opts APIV2GetMetadataOptions) (*models.Metadata, *models.Error) {
// GetMetadataWithContext retrieves Keptn metadata information.
func (a *APIHandler) GetMetadataWithContext(ctx context.Context, opts APIV2GetMetadataOptions) (*models.Metadata, *models.Error) {
body, mErr := getAndExpectSuccess(ctx, a.Scheme+"://"+a.getBaseURL()+v1MetadataPath, a)
if mErr != nil {
return nil, mErr
Expand Down

0 comments on commit 5d35c95

Please sign in to comment.