Skip to content

Commit 0ad9c1e

Browse files
committed
refactor: unify type system by using cloud types directly
- Remove redundant type definitions in AWS provider package - Update all operations to use cloud types directly instead of converting between types - Modify UI operation interfaces to use cloud types - Update model and UI handlers to work with cloud types - Simplify adapter pattern by removing unnecessary type conversions - Update tests to use cloud types instead of provider types - Improve code organization and reduce duplication
1 parent 04033c3 commit 0ad9c1e

16 files changed

+148
-283
lines changed

internal/providers/aws/aws.go

Lines changed: 3 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,6 @@ package aws
44
// The implementation of the provider methods has been moved to use the adapter pattern,
55
// delegating to the cloud layer through UI operation interfaces.
66

7-
// ApprovalAction represents a pending approval in a pipeline.
8-
// This type is kept for backward compatibility but should be phased out
9-
// in favor of using providers.ApprovalAction directly.
10-
type ApprovalAction struct {
11-
PipelineName string
12-
StageName string
13-
ActionName string
14-
Token string
15-
}
16-
17-
// PipelineStatus represents the status of a pipeline and its stages.
18-
// This type is kept for backward compatibility but should be phased out
19-
// in favor of using providers.PipelineStatus directly.
20-
type PipelineStatus struct {
21-
Name string
22-
Stages []StageStatus
23-
}
24-
25-
// StageStatus represents the status of a pipeline stage.
26-
// This type is kept for backward compatibility but should be phased out
27-
// in favor of using providers.StageStatus directly.
28-
type StageStatus struct {
29-
Name string
30-
Status string
31-
LastUpdated string
32-
}
7+
// Note: The redundant type definitions have been removed in favor of using
8+
// the cloud types directly. All code should now use the types defined in
9+
// internal/cloud/types.go instead.

internal/providers/aws/operations.go

Lines changed: 8 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"context"
55

66
"github.com/HenryOwenz/cloudgate/internal/cloud"
7-
"github.com/HenryOwenz/cloudgate/internal/providers"
87
)
98

109
// codePipelineManualApprovalOperation adapts a cloud.CodePipelineManualApprovalOperation to a providers.CodePipelineManualApprovalOperation
@@ -34,37 +33,13 @@ func (a *codePipelineManualApprovalOperation) IsUIVisible() bool {
3433
}
3534

3635
// GetPendingApprovals returns all pending manual approval actions
37-
func (a *codePipelineManualApprovalOperation) GetPendingApprovals(ctx context.Context) ([]providers.ApprovalAction, error) {
38-
cloudApprovals, err := a.operation.GetPendingApprovals(ctx)
39-
if err != nil {
40-
return nil, err
41-
}
42-
43-
// Convert cloud.ApprovalAction to providers.ApprovalAction
44-
providerApprovals := make([]providers.ApprovalAction, len(cloudApprovals))
45-
for i, approval := range cloudApprovals {
46-
providerApprovals[i] = providers.ApprovalAction{
47-
PipelineName: approval.PipelineName,
48-
StageName: approval.StageName,
49-
ActionName: approval.ActionName,
50-
Token: approval.Token,
51-
}
52-
}
53-
54-
return providerApprovals, nil
36+
func (a *codePipelineManualApprovalOperation) GetPendingApprovals(ctx context.Context) ([]cloud.ApprovalAction, error) {
37+
return a.operation.GetPendingApprovals(ctx)
5538
}
5639

5740
// ApproveAction approves or rejects an approval action
58-
func (a *codePipelineManualApprovalOperation) ApproveAction(ctx context.Context, action providers.ApprovalAction, approved bool, comment string) error {
59-
// Convert providers.ApprovalAction to cloud.ApprovalAction
60-
cloudAction := cloud.ApprovalAction{
61-
PipelineName: action.PipelineName,
62-
StageName: action.StageName,
63-
ActionName: action.ActionName,
64-
Token: action.Token,
65-
}
66-
67-
return a.operation.ApproveAction(ctx, cloudAction, approved, comment)
41+
func (a *codePipelineManualApprovalOperation) ApproveAction(ctx context.Context, action cloud.ApprovalAction, approved bool, comment string) error {
42+
return a.operation.ApproveAction(ctx, action, approved, comment)
6843
}
6944

7045
// pipelineStatusOperation adapts a cloud.PipelineStatusOperation to a providers.PipelineStatusOperation
@@ -94,32 +69,8 @@ func (a *pipelineStatusOperation) IsUIVisible() bool {
9469
}
9570

9671
// GetPipelineStatus returns the status of all pipelines
97-
func (a *pipelineStatusOperation) GetPipelineStatus(ctx context.Context) ([]providers.PipelineStatus, error) {
98-
cloudStatuses, err := a.operation.GetPipelineStatus(ctx)
99-
if err != nil {
100-
return nil, err
101-
}
102-
103-
// Convert cloud.PipelineStatus to providers.PipelineStatus
104-
providerStatuses := make([]providers.PipelineStatus, len(cloudStatuses))
105-
for i, status := range cloudStatuses {
106-
providerStatus := providers.PipelineStatus{
107-
Name: status.Name,
108-
Stages: make([]providers.StageStatus, len(status.Stages)),
109-
}
110-
111-
for j, stage := range status.Stages {
112-
providerStatus.Stages[j] = providers.StageStatus{
113-
Name: stage.Name,
114-
Status: stage.Status,
115-
LastUpdated: stage.LastUpdated,
116-
}
117-
}
118-
119-
providerStatuses[i] = providerStatus
120-
}
121-
122-
return providerStatuses, nil
72+
func (a *pipelineStatusOperation) GetPipelineStatus(ctx context.Context) ([]cloud.PipelineStatus, error) {
73+
return a.operation.GetPipelineStatus(ctx)
12374
}
12475

12576
// startPipelineOperation adapts a cloud.StartPipelineOperation to a providers.StartPipelineOperation
@@ -180,32 +131,6 @@ func (a *functionStatusOperation) IsUIVisible() bool {
180131
}
181132

182133
// GetFunctionStatus returns the status of all Lambda functions
183-
func (a *functionStatusOperation) GetFunctionStatus(ctx context.Context) ([]providers.FunctionStatus, error) {
184-
cloudFunctions, err := a.operation.GetFunctionStatus(ctx)
185-
if err != nil {
186-
return nil, err
187-
}
188-
189-
// Convert cloud.FunctionStatus to providers.FunctionStatus
190-
providerFunctions := make([]providers.FunctionStatus, len(cloudFunctions))
191-
for i, function := range cloudFunctions {
192-
providerFunctions[i] = providers.FunctionStatus{
193-
Name: function.Name,
194-
Runtime: function.Runtime,
195-
Memory: function.Memory,
196-
Timeout: function.Timeout,
197-
LastUpdate: function.LastUpdate,
198-
Role: function.Role,
199-
Handler: function.Handler,
200-
Description: function.Description,
201-
FunctionArn: function.FunctionArn,
202-
CodeSize: function.CodeSize,
203-
Version: function.Version,
204-
PackageType: function.PackageType,
205-
Architecture: function.Architecture,
206-
LogGroup: function.LogGroup,
207-
}
208-
}
209-
210-
return providerFunctions, nil
134+
func (a *functionStatusOperation) GetFunctionStatus(ctx context.Context) ([]cloud.FunctionStatus, error) {
135+
return a.operation.GetFunctionStatus(ctx)
211136
}

internal/providers/aws/provider.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ func (p *Provider) GetStartPipelineOperation() (providers.StartPipelineOperation
172172
}
173173

174174
// GetApprovals returns all pending approvals for the provider
175-
func (p *Provider) GetApprovals(ctx context.Context) ([]providers.ApprovalAction, error) {
175+
func (p *Provider) GetApprovals(ctx context.Context) ([]cloud.ApprovalAction, error) {
176176
if !p.IsAuthenticated() {
177177
return nil, fmt.Errorf("provider not authenticated")
178178
}
@@ -188,7 +188,7 @@ func (p *Provider) GetApprovals(ctx context.Context) ([]providers.ApprovalAction
188188
}
189189

190190
// ApproveAction approves or rejects an approval action
191-
func (p *Provider) ApproveAction(ctx context.Context, action providers.ApprovalAction, approved bool, comment string) error {
191+
func (p *Provider) ApproveAction(ctx context.Context, action cloud.ApprovalAction, approved bool, comment string) error {
192192
if !p.IsAuthenticated() {
193193
return fmt.Errorf("provider not authenticated")
194194
}
@@ -204,7 +204,7 @@ func (p *Provider) ApproveAction(ctx context.Context, action providers.ApprovalA
204204
}
205205

206206
// GetStatus returns the status of all pipelines
207-
func (p *Provider) GetStatus(ctx context.Context) ([]providers.PipelineStatus, error) {
207+
func (p *Provider) GetStatus(ctx context.Context) ([]cloud.PipelineStatus, error) {
208208
if !p.IsAuthenticated() {
209209
return nil, fmt.Errorf("provider not authenticated")
210210
}
@@ -215,7 +215,7 @@ func (p *Provider) GetStatus(ctx context.Context) ([]providers.PipelineStatus, e
215215
return nil, err
216216
}
217217

218-
// Use the operation to get pipeline status
218+
// Use the operation to get the pipeline status
219219
return operation.GetPipelineStatus(ctx)
220220
}
221221

internal/providers/factory.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import (
44
"context"
55
"fmt"
66
"sync"
7+
8+
"github.com/HenryOwenz/cloudgate/internal/cloud"
79
)
810

911
// Global registry for AWS provider replacement
@@ -96,16 +98,16 @@ func (p *awsProvider) Configure(config map[string]string) error {
9698
return nil
9799
}
98100

99-
func (p *awsProvider) GetApprovals(ctx context.Context) ([]ApprovalAction, error) {
100-
return []ApprovalAction{}, nil
101+
func (p *awsProvider) GetApprovals(ctx context.Context) ([]cloud.ApprovalAction, error) {
102+
return []cloud.ApprovalAction{}, nil
101103
}
102104

103-
func (p *awsProvider) ApproveAction(ctx context.Context, action ApprovalAction, approved bool, comment string) error {
105+
func (p *awsProvider) ApproveAction(ctx context.Context, action cloud.ApprovalAction, approved bool, comment string) error {
104106
return nil
105107
}
106108

107-
func (p *awsProvider) GetStatus(ctx context.Context) ([]PipelineStatus, error) {
108-
return []PipelineStatus{}, nil
109+
func (p *awsProvider) GetStatus(ctx context.Context) ([]cloud.PipelineStatus, error) {
110+
return []cloud.PipelineStatus{}, nil
109111
}
110112

111113
func (p *awsProvider) StartPipeline(ctx context.Context, pipelineName string, commitID string) error {

internal/providers/interfaces.go

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,9 @@ import (
44
"context"
55
"fmt"
66
"sync"
7-
)
8-
9-
// ApprovalAction represents a pending approval in a pipeline
10-
type ApprovalAction struct {
11-
PipelineName string
12-
StageName string
13-
ActionName string
14-
Token string
15-
}
167

17-
// StageStatus represents the status of a pipeline stage
18-
type StageStatus struct {
19-
Name string
20-
Status string
21-
LastUpdated string
22-
}
23-
24-
// PipelineStatus represents the status of a pipeline and its stages
25-
type PipelineStatus struct {
26-
Name string
27-
Stages []StageStatus
28-
}
8+
"github.com/HenryOwenz/cloudgate/internal/cloud"
9+
)
2910

3011
// Provider interface defines methods that all cloud providers must implement
3112
type Provider interface {
@@ -66,13 +47,13 @@ type Provider interface {
6647
Configure(config map[string]string) error
6748

6849
// GetApprovals returns all pending approvals for the provider
69-
GetApprovals(ctx context.Context) ([]ApprovalAction, error)
50+
GetApprovals(ctx context.Context) ([]cloud.ApprovalAction, error)
7051

7152
// ApproveAction approves or rejects an approval action
72-
ApproveAction(ctx context.Context, action ApprovalAction, approved bool, comment string) error
53+
ApproveAction(ctx context.Context, action cloud.ApprovalAction, approved bool, comment string) error
7354

7455
// GetStatus returns the status of all pipelines
75-
GetStatus(ctx context.Context) ([]PipelineStatus, error)
56+
GetStatus(ctx context.Context) ([]cloud.PipelineStatus, error)
7657

7758
// StartPipeline starts a pipeline execution
7859
StartPipeline(ctx context.Context, pipelineName string, commitID string) error

internal/providers/testutil/mock_aws_provider.go

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package testutil
33
import (
44
"context"
55

6+
"github.com/HenryOwenz/cloudgate/internal/cloud"
67
"github.com/HenryOwenz/cloudgate/internal/providers"
78
)
89

@@ -103,8 +104,8 @@ func (p *MockAWSProvider) Services() []providers.Service {
103104
}
104105

105106
// GetApprovals returns all pending approvals for the provider
106-
func (p *MockAWSProvider) GetApprovals(ctx context.Context) ([]providers.ApprovalAction, error) {
107-
return []providers.ApprovalAction{
107+
func (p *MockAWSProvider) GetApprovals(ctx context.Context) ([]cloud.ApprovalAction, error) {
108+
return []cloud.ApprovalAction{
108109
{
109110
PipelineName: "TestPipeline",
110111
StageName: "TestStage",
@@ -115,16 +116,16 @@ func (p *MockAWSProvider) GetApprovals(ctx context.Context) ([]providers.Approva
115116
}
116117

117118
// ApproveAction approves or rejects an approval action
118-
func (p *MockAWSProvider) ApproveAction(ctx context.Context, action providers.ApprovalAction, approved bool, comment string) error {
119+
func (p *MockAWSProvider) ApproveAction(ctx context.Context, action cloud.ApprovalAction, approved bool, comment string) error {
119120
return nil
120121
}
121122

122123
// GetStatus returns the status of all pipelines
123-
func (p *MockAWSProvider) GetStatus(ctx context.Context) ([]providers.PipelineStatus, error) {
124-
return []providers.PipelineStatus{
124+
func (p *MockAWSProvider) GetStatus(ctx context.Context) ([]cloud.PipelineStatus, error) {
125+
return []cloud.PipelineStatus{
125126
{
126127
Name: "TestPipeline",
127-
Stages: []providers.StageStatus{
128+
Stages: []cloud.StageStatus{
128129
{
129130
Name: "TestStage",
130131
Status: "Succeeded",
@@ -266,8 +267,8 @@ func (o *MockCodePipelineManualApprovalOperation) IsUIVisible() bool {
266267
}
267268

268269
// GetPendingApprovals returns the pending approvals
269-
func (o *MockCodePipelineManualApprovalOperation) GetPendingApprovals(ctx context.Context) ([]providers.ApprovalAction, error) {
270-
return []providers.ApprovalAction{
270+
func (o *MockCodePipelineManualApprovalOperation) GetPendingApprovals(ctx context.Context) ([]cloud.ApprovalAction, error) {
271+
return []cloud.ApprovalAction{
271272
{
272273
PipelineName: "TestPipeline",
273274
StageName: "TestStage",
@@ -278,7 +279,7 @@ func (o *MockCodePipelineManualApprovalOperation) GetPendingApprovals(ctx contex
278279
}
279280

280281
// ApproveAction approves or rejects an action
281-
func (o *MockCodePipelineManualApprovalOperation) ApproveAction(ctx context.Context, approval providers.ApprovalAction, approve bool, comment string) error {
282+
func (o *MockCodePipelineManualApprovalOperation) ApproveAction(ctx context.Context, approval cloud.ApprovalAction, approve bool, comment string) error {
282283
return nil
283284
}
284285

@@ -301,11 +302,11 @@ func (o *MockPipelineStatusOperation) IsUIVisible() bool {
301302
}
302303

303304
// GetPipelineStatus returns the pipeline status
304-
func (o *MockPipelineStatusOperation) GetPipelineStatus(ctx context.Context) ([]providers.PipelineStatus, error) {
305-
return []providers.PipelineStatus{
305+
func (o *MockPipelineStatusOperation) GetPipelineStatus(ctx context.Context) ([]cloud.PipelineStatus, error) {
306+
return []cloud.PipelineStatus{
306307
{
307308
Name: "TestPipeline",
308-
Stages: []providers.StageStatus{
309+
Stages: []cloud.StageStatus{
309310
{
310311
Name: "TestStage",
311312
Status: "Succeeded",
@@ -358,8 +359,8 @@ func (o *MockFunctionStatusOperation) IsUIVisible() bool {
358359
}
359360

360361
// GetFunctionStatus returns mock function status data
361-
func (o *MockFunctionStatusOperation) GetFunctionStatus(ctx context.Context) ([]providers.FunctionStatus, error) {
362-
return []providers.FunctionStatus{
362+
func (o *MockFunctionStatusOperation) GetFunctionStatus(ctx context.Context) ([]cloud.FunctionStatus, error) {
363+
return []cloud.FunctionStatus{
363364
{
364365
Name: "test-function",
365366
Runtime: "nodejs14.x",

0 commit comments

Comments
 (0)