Skip to content

Commit

Permalink
Add resource document
Browse files Browse the repository at this point in the history
Signed-off-by: KeisukeYamashita <19yamashita15@gmail.com>
  • Loading branch information
KeisukeYamashita committed Nov 3, 2021
1 parent 6c6f037 commit 7c97e6a
Show file tree
Hide file tree
Showing 10 changed files with 170 additions and 4 deletions.
4 changes: 4 additions & 0 deletions examples/data-sources/typesense_document/data-source.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
data "typesense_document" "my_doc" {
name = "my-doc"
collection_name = "my-collection"
}
2 changes: 1 addition & 1 deletion examples/resources/typesense_collection_alias/import.sh
Original file line number Diff line number Diff line change
@@ -1 +1 @@
terraform import typesense_collection_alias.my_alias my-alias
terraform import typesense_collection_alias.my_alias my_collection.my-alias
2 changes: 1 addition & 1 deletion examples/resources/typesense_curation/import.sh
Original file line number Diff line number Diff line change
@@ -1 +1 @@
terraform import typesense_curation.my_curation my-curation
terraform import typesense_curation.my_curation my_collection.my-curation
1 change: 1 addition & 0 deletions examples/resources/typesense_document/import.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
terraform import typesense_document.my_doc my_collection.my-doc
10 changes: 10 additions & 0 deletions examples/resources/typesense_document/resource.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
resource "typesense_document" "doc" {
id = "doc"
collection_name = typesense_collection.my_collection.name

document = {
"company_name" = "Stark Industries"
"num_employees" = 5215
"country" = "USA"
}
}
2 changes: 1 addition & 1 deletion examples/resources/typesense_synonyms/import.sh
Original file line number Diff line number Diff line change
@@ -1 +1 @@
terraform import typesense_synonyms.my_synonyms my_synonyms
terraform import typesense_synonyms.my_synonyms my_collection.my_synonyms
33 changes: 33 additions & 0 deletions typesense/data_source_document.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package typesense

import (
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)

func dataSourceTypesenseDocument() *schema.Resource {
return &schema.Resource{
Description: "Item in a collection",
Schema: map[string]*schema.Schema{
"id": {
Type: schema.TypeString,
Description: "ID of the document",
Required: true,
},
"collection_name": {
Type: schema.TypeString,
Description: "Name of the collection",
Required: true,
},
"document": {
Type: schema.TypeMap,
Computed: true,
MaxItems: 1,
Description: "Document's body",
Elem: &schema.Schema{
Type: schema.TypeString,
},
},
},
ReadContext: resourceTypesenseDocumentRead,
}
}
2 changes: 2 additions & 0 deletions typesense/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,14 @@ func Provider() *schema.Provider {
"typesense_collection": dataSourceTypesenseCollection(),
"typesense_collection_alias": dataSourceTypesenseCollectionAlias(),
"typesense_curation": dataSourceTypesenseCuration(),
"typesense_document": dataSourceTypesenseDocument(),
"typesense_synonyms": dataSourceTypesenseSynonyms(),
},

ResourcesMap: map[string]*schema.Resource{
"typesense_collection": resourceTypesenseCollection(),
"typesense_collection_alias": resourceTypesenseCollectionAlias(),
"typesense_document": resourceTypesenseDocument(),
"typesense_curation": resourceTypesenseCuration(),
"typesense_synonyms": resourceTypesenseSynonyms(),
},
Expand Down
114 changes: 114 additions & 0 deletions typesense/resource_document.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
package typesense

import (
"context"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/typesense/typesense-go/typesense"
)

func resourceTypesenseDocument() *schema.Resource {
return &schema.Resource{
Description: "Item in a collection",
Schema: map[string]*schema.Schema{
"id": {
Type: schema.TypeString,
Description: "ID of the document",
Required: true,
},
"collection_name": {
Type: schema.TypeString,
Description: "Name of the collection",
Required: true,
},
"document": {
Type: schema.TypeMap,
Required: true,
MaxItems: 1,
Description: "Document's body",
Elem: &schema.Schema{
Type: schema.TypeString,
},
},
},
ReadContext: resourceTypesenseDocumentRead,
CreateContext: resourceTypesenseDocumentUpsert,
UpdateContext: resourceTypesenseDocumentUpsert,
DeleteContext: resourceTypesenseDocumentDelete,
Importer: &schema.ResourceImporter{
StateContext: schema.ImportStatePassthroughContext,
},
}
}

func resourceTypesenseDocumentUpsert(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
client := meta.(*typesense.Client)

var diags diag.Diagnostics

var collectionName string

if v, ok := d.GetOk("collection_name"); ok {
collectionName = v.(string)
}

var document map[string]interface{}

if v, ok := d.GetOk("document"); ok {
document = v.(map[string]interface{})
}

var id string
if v, ok := d.GetOk("id"); ok {
id = v.(string)
}

document["id"] = id

_, err := client.Collection(collectionName).Documents().Create(document)
if err != nil {
return diag.FromErr(err)
}

d.SetId(id)
return diags
}

func resourceTypesenseDocumentRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
client := meta.(*typesense.Client)

var diags diag.Diagnostics

id := d.Id()
collectionName := d.Get("collection_name").(string)

doc, err := client.Collection(collectionName).Document(id).Retrieve()
if err != nil {
d.SetId("")
return diag.FromErr(err)
}

if err := d.Set("document", doc); err != nil {
return diag.FromErr(err)
}

return diags
}

func resourceTypesenseDocumentDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
client := meta.(*typesense.Client)

var diags diag.Diagnostics

id := d.Id()
collectionName := d.Get("collection_name").(string)

_, err := client.Collection(collectionName).Document(id).Delete()
if err != nil {
return diag.FromErr(err)
}

d.SetId("")
return diags
}
4 changes: 3 additions & 1 deletion typesense/resource_synonyms.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,9 @@ func resourceTypesenseSynonyms() *schema.Resource {
Type: schema.TypeList,
Default: "Target collection names",
Required: true,
Elem: &schema.Resource{},
Elem: &schema.Schema{
Type: schema.TypeString,
},
},
"root": {
Type: schema.TypeString,
Expand Down

0 comments on commit 7c97e6a

Please sign in to comment.