hugegraph-client-go/api/v1/vertexlabel/vertexlabel.go (401 lines of code) (raw):
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with this
* work for additional information regarding copyright ownership. The ASF
* licenses this file to You under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package vertexlabel
import (
"context"
"encoding/json"
"errors"
"fmt"
"io"
"io/ioutil"
"net/http"
"net/url"
"strings"
"github.com/apache/incubator-hugegraph-toolchain/hugegraph-client-go/api"
"github.com/apache/incubator-hugegraph-toolchain/hugegraph-client-go/internal/model"
)
type VertexLabel struct {
Create
DeleteByName
GetAll
GetByName
UpdateUserdata
}
func New(t api.Transport) *VertexLabel {
return &VertexLabel{
// Create https://hugegraph.apache.org/docs/clients/restful-api/vertexlabel/#131-create-a-vertexlabel
Create: newCreateFunc(t),
// DeleteByName https://hugegraph.apache.org/docs/clients/restful-api/vertexlabel/#135-delete-vertexlabel-by-name
DeleteByName: newDeleteByNameFunc(t),
// GetAll https://hugegraph.apache.org/docs/clients/restful-api/vertexlabel/#133-get-all-vertexlabels
GetAll: newGetAllFunc(t),
// GetByName https://hugegraph.apache.org/docs/clients/restful-api/vertexlabel/#134-get-vertexlabel-by-name
GetByName: newGetByNameFunc(t),
// UpdateUserdata https://hugegraph.apache.org/docs/clients/restful-api/propertykey/#122-add-or-remove-userdata-for-an-existing-propertykey
UpdateUserdata: newUpdateUserdataFunc(t),
}
}
type Create func(o ...func(*CreateRequest)) (*CreateResponse, error)
type DeleteByName func(o ...func(*DeleteByNameRequest)) (*DeleteByNameResponse, error)
type GetAll func(o ...func(*GetAllRequest)) (*GetAllResponse, error)
type GetByName func(o ...func(*GetByNameRequest)) (*GetByNameResponse, error)
type UpdateUserdata func(o ...func(*UpdateUserdataRequest)) (*UpdateUserdataResponse, error)
func newCreateFunc(t api.Transport) Create {
return func(o ...func(*CreateRequest)) (*CreateResponse, error) {
var r = CreateRequest{}
for _, f := range o {
f(&r)
}
return r.Do(r.ctx, t)
}
}
func newDeleteByNameFunc(t api.Transport) DeleteByName {
return func(o ...func(*DeleteByNameRequest)) (*DeleteByNameResponse, error) {
var r = DeleteByNameRequest{}
for _, f := range o {
f(&r)
}
return r.Do(r.ctx, t)
}
}
func newGetAllFunc(t api.Transport) GetAll {
return func(o ...func(*GetAllRequest)) (*GetAllResponse, error) {
var r = GetAllRequest{}
for _, f := range o {
f(&r)
}
return r.Do(r.ctx, t)
}
}
func newGetByNameFunc(t api.Transport) GetByName {
return func(o ...func(*GetByNameRequest)) (*GetByNameResponse, error) {
var r = GetByNameRequest{}
for _, f := range o {
f(&r)
}
return r.Do(r.ctx, t)
}
}
func newUpdateUserdataFunc(t api.Transport) UpdateUserdata {
return func(o ...func(*UpdateUserdataRequest)) (*UpdateUserdataResponse, error) {
var r = UpdateUserdataRequest{}
for _, f := range o {
f(&r)
}
return r.Do(r.ctx, t)
}
}
type CreateRequest struct {
Body io.Reader
ctx context.Context
reqData CreateRequestData
}
type CreateRequestData struct {
Name string `json:"name"`
IDStrategy model.IDStrategy `json:"id_strategy"`
Properties []string `json:"properties"`
PrimaryKeys []string `json:"primary_keys"`
NullableKeys []string `json:"nullable_keys"`
EnableLabelIndex bool `json:"enable_label_index"`
}
type CreateResponse struct {
StatusCode int `json:"-"`
Header http.Header `json:"-"`
Body io.ReadCloser `json:"-"`
Data CreateResponseData `json:"-"`
}
type CreateResponseData struct {
ID int `json:"id"`
PrimaryKeys []string `json:"primary_keys"`
IDStrategy model.IDStrategy `json:"id_strategy"`
Name string `json:"name"`
IndexNames []string `json:"index_names"`
Properties []string `json:"properties"`
NullableKeys []string `json:"nullable_keys"`
EnableLabelIndex bool `json:"enable_label_index"`
UserData struct {
} `json:"user_data"`
}
type DeleteByNameRequest struct {
Body io.Reader
ctx context.Context
name string
}
type DeleteByNameResponse struct {
StatusCode int `json:"-"`
Header http.Header `json:"-"`
Body io.ReadCloser `json:"-"`
DeleteByNames DeleteByNameResponseData `json:"versions"`
}
type DeleteByNameResponseData struct {
TaskID int `json:"task_id"`
}
type GetAllRequest struct {
Body io.Reader
ctx context.Context
}
type GetAllResponse struct {
StatusCode int `json:"-"`
Header http.Header `json:"-"`
Body io.ReadCloser `json:"-"`
Data GetAllResponseData `json:"-"`
}
type GetAllResponseData struct {
Vertexlabels []struct {
ID int `json:"id"`
PrimaryKeys []string `json:"primary_keys"`
IDStrategy string `json:"id_strategy"`
Name string `json:"name"`
IndexNames []interface{} `json:"index_names"`
Properties []string `json:"properties"`
NullableKeys []string `json:"nullable_keys"`
EnableLabelIndex bool `json:"enable_label_index"`
UserData struct {
Super string `json:"super"`
} `json:"user_data,omitempty"`
} `json:"vertexlabels"`
}
type GetByNameRequest struct {
Body io.Reader
ctx context.Context
name string
}
type GetByNameResponse struct {
StatusCode int `json:"-"`
Header http.Header `json:"-"`
Body io.ReadCloser `json:"-"`
Data GetByNameResponseData `json:"-"`
}
type GetByNameResponseData struct {
ID int `json:"id"`
Name string `json:"name"`
IDStrategy string `json:"id_strategy"`
PrimaryKeys []string `json:"primary_keys"`
NullableKeys []interface{} `json:"nullable_keys"`
IndexLabels []string `json:"index_labels"`
Properties []string `json:"properties"`
Status string `json:"status"`
TTL int `json:"ttl"`
EnableLabelIndex bool `json:"enable_label_index"`
UserData struct {
CreateTime string `json:"~create_time"`
} `json:"user_data"`
}
type UpdateUserdataRequest struct {
Body io.Reader
ctx context.Context
reqData UpdateUserdataRequestData
}
type UpdateUserdataRequestData struct {
Action model.Action `json:"-"`
Name string `json:"name"`
Properties []string `json:"properties"`
NullableKeys []string `json:"nullable_keys"`
UserData struct {
Super string `json:"super"`
} `json:"user_data"`
}
type UpdateUserdataResponse struct {
StatusCode int `json:"-"`
Header http.Header `json:"-"`
Body io.ReadCloser `json:"-"`
Data UpdateUserdataResponseData `json:"-"`
}
type UpdateUserdataResponseData struct {
ID int `json:"id"`
PrimaryKeys []string `json:"primary_keys"`
IDStrategy string `json:"id_strategy"`
Name string `json:"name"`
IndexNames []interface{} `json:"index_names"`
Properties []string `json:"properties"`
NullableKeys []string `json:"nullable_keys"`
EnableLabelIndex bool `json:"enable_label_index"`
UserData struct {
Super string `json:"super"`
} `json:"user_data"`
}
func (r CreateRequest) Do(ctx context.Context, transport api.Transport) (*CreateResponse, error) {
if len(r.reqData.Name) <= 0 {
return nil, errors.New("create property must set name")
}
if len(r.reqData.IDStrategy) <= 0 {
return nil, errors.New("create property must set id_strategy")
}
if len(r.reqData.Properties) <= 0 {
return nil, errors.New("create property must set properties")
}
byteBody, err := json.Marshal(&r.reqData)
if err != nil {
return nil, err
}
reader := strings.NewReader(string(byteBody))
req, err := api.NewRequest("POST", fmt.Sprintf("/graphs/%s/schema/vertexlabels", transport.GetConfig().Graph), nil, reader)
if err != nil {
return nil, err
}
if ctx != nil {
req = req.WithContext(ctx)
}
res, err := transport.Perform(req)
if err != nil {
return nil, err
}
resp := &CreateResponse{}
respData := CreateResponseData{}
bytes, err := ioutil.ReadAll(res.Body)
if err != nil {
return nil, err
}
err = json.Unmarshal(bytes, &respData)
if err != nil {
return nil, err
}
resp.StatusCode = res.StatusCode
resp.Header = res.Header
resp.Body = res.Body
resp.Data = respData
return resp, nil
}
func (r DeleteByNameRequest) Do(ctx context.Context, transport api.Transport) (*DeleteByNameResponse, error) {
if len(r.name) <= 0 {
return nil, errors.New("delete by name ,please set name")
}
req, err := api.NewRequest("DELETE", fmt.Sprintf("/graphs/%s/schema/vertexlabels/%s", transport.GetConfig().Graph, r.name), nil, r.Body)
if err != nil {
return nil, err
}
if ctx != nil {
req = req.WithContext(ctx)
}
res, err := transport.Perform(req)
if err != nil {
return nil, err
}
versionResp := &DeleteByNameResponse{}
bytes, err := ioutil.ReadAll(res.Body)
if err != nil {
return nil, err
}
err = json.Unmarshal(bytes, versionResp)
if err != nil {
return nil, err
}
versionResp.StatusCode = res.StatusCode
versionResp.Header = res.Header
versionResp.Body = res.Body
return versionResp, nil
}
func (r GetAllRequest) Do(ctx context.Context, transport api.Transport) (*GetAllResponse, error) {
req, err := api.NewRequest("GET", fmt.Sprintf("/graphs/%s/schema/vertexlabels", transport.GetConfig().Graph), nil, r.Body)
if err != nil {
return nil, err
}
if ctx != nil {
req = req.WithContext(ctx)
}
res, err := transport.Perform(req)
if err != nil {
return nil, err
}
resp := &GetAllResponse{}
bytes, err := ioutil.ReadAll(res.Body)
if err != nil {
return nil, err
}
respData := GetAllResponseData{}
err = json.Unmarshal(bytes, &respData)
if err != nil {
return nil, err
}
resp.StatusCode = res.StatusCode
resp.Header = res.Header
resp.Body = res.Body
resp.Data = respData
return resp, nil
}
func (r GetByNameRequest) Do(ctx context.Context, transport api.Transport) (*GetByNameResponse, error) {
if len(r.name) <= 0 {
return nil, errors.New("GetByNameRequest must set name")
}
req, err := api.NewRequest("GET", fmt.Sprintf("/graphs/%s/schema/vertexlabels/%s", transport.GetConfig().Graph, r.name), nil, r.Body)
if err != nil {
return nil, err
}
if ctx != nil {
req = req.WithContext(ctx)
}
res, err := transport.Perform(req)
if err != nil {
return nil, err
}
resp := &GetByNameResponse{}
bytes, err := ioutil.ReadAll(res.Body)
if err != nil {
return nil, err
}
respData := GetByNameResponseData{}
err = json.Unmarshal(bytes, &respData)
if err != nil {
return nil, err
}
resp.StatusCode = res.StatusCode
resp.Header = res.Header
resp.Body = res.Body
resp.Data = respData
return resp, nil
}
func (r UpdateUserdataRequest) Do(ctx context.Context, transport api.Transport) (*UpdateUserdataResponse, error) {
params := &url.Values{}
if len(r.reqData.Action) <= 0 {
return nil, errors.New("property update userdata must set action")
} else {
params.Add("action", string(r.reqData.Action))
}
if len(r.reqData.Name) <= 0 {
return nil, errors.New("property update userdata must set name")
}
byteBody, err := json.Marshal(&r.reqData)
if err != nil {
return nil, err
}
reader := strings.NewReader(string(byteBody))
req, err := api.NewRequest("PUT", fmt.Sprintf("/graphs/%s/schema/vertexlabels/%s", transport.GetConfig().Graph, r.reqData.Name), params, reader)
if err != nil {
return nil, err
}
if ctx != nil {
req = req.WithContext(ctx)
}
res, err := transport.Perform(req)
if err != nil {
return nil, err
}
resp := &UpdateUserdataResponse{}
bytes, err := ioutil.ReadAll(res.Body)
if err != nil {
return nil, err
}
respData := UpdateUserdataResponseData{}
err = json.Unmarshal(bytes, &respData)
if err != nil {
return nil, err
}
resp.StatusCode = res.StatusCode
resp.Header = res.Header
resp.Body = res.Body
resp.Data = respData
return resp, nil
}
func (r Create) WithReqData(reqData CreateRequestData) func(request *CreateRequest) {
return func(r *CreateRequest) {
r.reqData = reqData
}
}
func (p DeleteByName) WithName(name string) func(request *DeleteByNameRequest) {
return func(r *DeleteByNameRequest) {
r.name = name
}
}
func (v GetByName) WithName(name string) func(r *GetByNameRequest) {
return func(r *GetByNameRequest) {
r.name = name
}
}
func (r UpdateUserdata) WithReqData(reqData UpdateUserdataRequestData) func(request *UpdateUserdataRequest) {
return func(r *UpdateUserdataRequest) {
r.reqData = reqData
}
}