Skip to content

Commit 0620bd5

Browse files
committed
chore: Adds example of wrapping resource classes
1 parent 04cef66 commit 0620bd5

File tree

4 files changed

+83
-7
lines changed

4 files changed

+83
-7
lines changed

internal/config/resource_base.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,17 @@ type ProviderMeta struct {
2525
ScriptLocation types.String `tfsdk:"script_location"`
2626
}
2727

28+
func AnalyticsResource(name string, resource resource.ResourceWithImportState) resource.Resource {
29+
return &RSCommon{
30+
ResourceName: name,
31+
Resource: resource,
32+
}
33+
}
34+
2835
type RSCommon struct {
2936
Client *MongoDBClient
3037
ResourceName string
38+
Resource resource.ResourceWithImportState
3139
}
3240

3341
func (r *RSCommon) ReadProviderMetaCreate(ctx context.Context, req *resource.CreateRequest, diags *diag.Diagnostics) ProviderMeta {
@@ -64,6 +72,34 @@ func (r *RSCommon) Metadata(ctx context.Context, req resource.MetadataRequest, r
6472
resp.TypeName = fmt.Sprintf("%s_%s", req.ProviderTypeName, r.ResourceName)
6573
}
6674

75+
func (r *RSCommon) Schema(ctx context.Context, req resource.SchemaRequest, resp *resource.SchemaResponse) {
76+
r.Resource.Schema(ctx, req, resp)
77+
}
78+
79+
func (r *RSCommon) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) {
80+
meta := r.ReadProviderMetaCreate(ctx, &req, &resp.Diagnostics)
81+
ctx = AddUserAgentExtra(ctx, UserAgentExtra{
82+
ModuleName: meta.ModuleName.ValueString(),
83+
ModuleVersion: meta.ModuleVersion.ValueString(),
84+
Name: r.ResourceName,
85+
Operation: "create",
86+
})
87+
r.Resource.Create(ctx, req, resp) // Call original create
88+
}
89+
90+
func (r *RSCommon) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) {
91+
r.Resource.Read(ctx, req, resp)
92+
}
93+
func (r *RSCommon) Update(ctx context.Context, req resource.UpdateRequest, resp *resource.UpdateResponse) {
94+
r.Resource.Update(ctx, req, resp)
95+
}
96+
func (r *RSCommon) ImportState(ctx context.Context, req resource.ImportStateRequest, resp *resource.ImportStateResponse) {
97+
r.Resource.ImportState(ctx, req, resp)
98+
}
99+
func (r *RSCommon) Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.DeleteResponse) {
100+
r.Resource.Delete(ctx, req, resp)
101+
}
102+
67103
func (r *RSCommon) Configure(ctx context.Context, req resource.ConfigureRequest, resp *resource.ConfigureResponse) {
68104
client, err := configureClient(req.ProviderData)
69105
if err != nil {

internal/provider/provider_sdk2.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,49 @@ func providerConfigure(provider *schema.Provider) func(ctx context.Context, d *s
327327
}
328328
}
329329

330+
func NewAnalyticsResource(d *schema.Resource) *schema.Resource {
331+
analyticsResource := AnalyticsResource{
332+
resource: d,
333+
}
334+
return &schema.Resource{
335+
// Original field mapping
336+
Schema: d.Schema,
337+
SchemaFunc: d.SchemaFunc,
338+
// Overriding the CRUDI methods
339+
CreateContext: analyticsResource.CreateContext,
340+
ReadContext: analyticsResource.ReadContext,
341+
UpdateContext: analyticsResource.UpdateContext,
342+
DeleteContext: analyticsResource.DeleteContext,
343+
344+
}
345+
}
346+
347+
type AnalyticsResource struct {
348+
resource *schema.Resource
349+
}
350+
351+
func (a *AnalyticsResource) CreateContext(ctx context.Context, r *schema.ResourceData, m interface{}) diag.Diagnostics {
352+
// TODO: Add analytics
353+
return a.resource.CreateContext(ctx, r, m)
354+
}
355+
356+
// See Resource documentation.
357+
func (a *AnalyticsResource) ReadContext(ctx context.Context, r *schema.ResourceData, m interface{}) diag.Diagnostics {
358+
return a.resource.ReadContext(ctx, r, m)
359+
}
360+
361+
// See Resource documentation.
362+
func (a *AnalyticsResource) UpdateContext(ctx context.Context, r *schema.ResourceData, m interface{}) diag.Diagnostics {
363+
return a.resource.UpdateContext(ctx, r, m)
364+
}
365+
366+
// See Resource documentation.
367+
func (a *AnalyticsResource) DeleteContext(ctx context.Context, r *schema.ResourceData, m interface{}) diag.Diagnostics {
368+
return a.resource.DeleteContext(ctx, r, m)
369+
}
370+
371+
372+
330373
func setDefaultsAndValidations(d *schema.ResourceData) diag.Diagnostics {
331374
diagnostics := []diag.Diagnostic{}
332375

internal/service/federateddatabaseinstance/resource_federated_database_instance.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/mongodb/terraform-provider-mongodbatlas/internal/common/conversion"
1414
"github.com/mongodb/terraform-provider-mongodbatlas/internal/common/validate"
1515
"github.com/mongodb/terraform-provider-mongodbatlas/internal/config"
16+
"github.com/mongodb/terraform-provider-mongodbatlas/internal/provider"
1617
)
1718

1819
const (
@@ -24,7 +25,7 @@ const (
2425
)
2526

2627
func Resource() *schema.Resource {
27-
return &schema.Resource{
28+
return provider.NewAnalyticsResource(&schema.Resource{
2829
CreateContext: resourceCreate,
2930
ReadContext: resourceRead,
3031
UpdateContext: resourceUpdate,
@@ -113,7 +114,7 @@ func Resource() *schema.Resource {
113114
"storage_databases": schemaFederatedDatabaseInstanceDatabases(),
114115
"storage_stores": schemaFederatedDatabaseInstanceStores(),
115116
},
116-
}
117+
})
117118
}
118119

119120
func schemaFederatedDatabaseInstanceDatabases() *schema.Schema {

internal/service/project/resource_project.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,7 @@ var _ resource.ResourceWithConfigure = &projectRS{}
3737
var _ resource.ResourceWithImportState = &projectRS{}
3838

3939
func Resource() resource.Resource {
40-
return &projectRS{
41-
RSCommon: config.RSCommon{
42-
ResourceName: projectResourceName,
43-
},
44-
}
40+
return config.AnalyticsResource(projectResourceName, &projectRS{})
4541
}
4642

4743
type projectRS struct {

0 commit comments

Comments
 (0)