Skip to content

gopher1980/dynql

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dynql

DynQL is has one enpoint for query and tranform the Entities.

Example POST -> 127.0.0.1:9090/dql

Input:

{
    "query1": {
        "method": "demo",
        "input": {
            "name": "Pedro Martinez",
            "age": 59,
            "position": {
                "name": "manager"
            }
        },
        "output": {
            "first_name": "$.name",
            "age": "$.age",
            "level": "$.position.name"
        }
    },
    "query2": {
        "method": "demo",
        "input": {
            "name": "Marcela Perez",
            "age": 31
        }
    }
}

Output

{
    "query1": {
        "age": 59,
        "first_name": "Pedro Martinez",
        "level": "manager"
    },
    "query2": {
        "age": 31,
        "name": "Marcela Perez",
        "position": {
            "name": ""
        }
    }
}
package main

import (
	"github.com/gopher1980/dynql"
	"github.com/gorilla/mux"
	"log"
	"net/http"
)
type Position struct {
	Name string `json:"name"`
}
type Persona struct {
	Name     string   `json:"name"`
	Age      int      `json:"age"`
	Position Position `json:"position"`
}
func demo(name string, ptr interface{}, r *http.Request,payload interface{}, parent interface{}) interface{} {
	p := ptr.(*Persona)
	return p

}
func main() {
	dql := dynql.NewDQL()
	dql.Put("demo", demo, Persona{})
	r := mux.NewRouter()
	r.HandleFunc("/dql", dql.Run).Methods(http.MethodPost)
	http.Handle("/", r)
	log.Fatal(http.ListenAndServe(":9090", nil))
}

Example without strictic struct:

package main

import (
	"github.com/gopher1980/dynql"
	"github.com/gorilla/mux"
	"log"
	"net/http"
)

func demo(name string, ptr interface{}, r *http.Request,payload interface{}, parent interface{}) interface{} {
	return ptr

}
func main() {
	dql := dynql.NewDQL()
	dql.Put("demo", demo, make(map[string]interface{}))
	r := mux.NewRouter()
	r.HandleFunc("/dql", dql.Run).Methods(http.MethodPost)
	http.Handle("/", r)
	log.Fatal(http.ListenAndServe(":9090", nil))
}