hugegraph-client-go/api/v1/propertykey/propertykey.go (404 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 propertykey import ( "context" "encoding/json" "errors" "fmt" "github.com/apache/incubator-hugegraph-toolchain/hugegraph-client-go/api" "github.com/apache/incubator-hugegraph-toolchain/hugegraph-client-go/internal/model" "io" "io/ioutil" "net/http" "net/url" "strings" ) type PropertyKey struct { Create DeleteByName GetAll GetByName UpdateUserdata } func New(t api.Transport) *PropertyKey { return &PropertyKey{ // Create https://hugegraph.apache.org/docs/clients/restful-api/propertykey/#121-create-a-propertykey Create: newCreateFunc(t), // DeleteByName https://hugegraph.apache.org/docs/clients/restful-api/propertykey/#125-delete-propertykey-according-to-name DeleteByName: newDeleteByNameFunc(t), // GetAll https://hugegraph.apache.org/docs/clients/restful-api/propertykey/#123-get-all-propertykeys GetAll: newGetAllFunc(t), // GetByName https://hugegraph.apache.org/docs/clients/restful-api/propertykey/#124-get-propertykey-according-to-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), } } 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 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) type CreateRequest struct { Body io.Reader ctx context.Context reqData CreateRequestData } type CreateRequestData struct { Name string `json:"name"` DataType model.PropertyDataType `json:"data_type"` Cardinality model.PropertyCardinality `json:"cardinality"` } type CreateResponse struct { StatusCode int `json:"-"` Header http.Header `json:"-"` Body io.ReadCloser `json:"-"` Data CreateResponseData `json:"versions"` } type CreateResponseData struct { PropertyKey struct { ID int `json:"id"` Name string `json:"name"` DataType string `json:"data_type"` Cardinality string `json:"cardinality"` AggregateType string `json:"aggregate_type"` WriteType string `json:"write_type"` Properties []interface{} `json:"properties"` Status string `json:"status"` UserData struct { CreateTime string `json:"~create_time"` } `json:"user_data"` } `json:"property_key"` TaskID int `json:"task_id"` } 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:"-"` Data 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 { Propertykeys []struct { ID int `json:"id"` Name string `json:"name"` DataType string `json:"data_type"` Cardinality string `json:"cardinality"` Properties []interface{} `json:"properties"` UserData struct { } `json:"user_data"` } `json:"propertykeys"` } 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"` DataType string `json:"data_type"` Cardinality string `json:"cardinality"` AggregateType string `json:"aggregate_type"` WriteType string `json:"write_type"` Properties []interface{} `json:"properties"` Status string `json:"status"` UserData struct { Min int `json:"min"` Max int `json:"max"` 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"` UserData struct { Min int `json:"min"` Max int `json:"max"` } `json:"user_data"` } type UpdateUserdataResponse struct { StatusCode int `json:"-"` Header http.Header `json:"-"` Body io.ReadCloser `json:"-"` Data UpdateUserdataResponseData `json:"-"` } type UpdateUserdataResponseData struct { PropertyKey struct { ID int `json:"id"` Name string `json:"name"` DataType string `json:"data_type"` Cardinality string `json:"cardinality"` AggregateType string `json:"aggregate_type"` WriteType string `json:"write_type"` Properties []interface{} `json:"properties"` Status string `json:"status"` UserData struct { Min int `json:"min"` Max int `json:"max"` CreateTime string `json:"~create_time"` } `json:"user_data"` } `json:"property_key"` TaskID int `json:"task_id"` } 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.DataType) <= 0 { return nil, errors.New("create property must set dataType") } if len(r.reqData.Cardinality) <= 0 { return nil, errors.New("create property must set cardinality") } 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/propertykeys", 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/propertykeys/%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 := &DeleteByNameResponse{} respData := DeleteByNameResponseData{} 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 GetAllRequest) Do(ctx context.Context, transport api.Transport) (*GetAllResponse, error) { req, err := api.NewRequest("GET", fmt.Sprintf("/graphs/%s/schema/propertykeys", 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("get_by_name must set name") } req, err := api.NewRequest("GET", fmt.Sprintf("/graphs/%s/schema/propertykeys/%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/propertykeys/%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 (r GetByName) WithName(name string) func(request *GetByNameRequest) { return func(r *GetByNameRequest) { r.name = name } } func (r UpdateUserdata) WithReqData(reqData UpdateUserdataRequestData) func(request *UpdateUserdataRequest) { return func(r *UpdateUserdataRequest) { r.reqData = reqData } }