Skip to content
Snippets Groups Projects
Commit 351ef802 authored by Simao Gomes Viana's avatar Simao Gomes Viana :rainbow:
Browse files

Refactor postgres-specific part out of generator

parent 6fb6462b
No related branches found
No related tags found
No related merge requests found
package database
import (
"reflect"
"github.com/graphql-go/graphql"
)
type SchemaSyncOptions struct {
// Whether to remove columns from the database
// that can't be found in models.
......@@ -19,4 +25,5 @@ type Adapter interface {
Insert(obj interface{}) error
Update(obj interface{}) error
Delete(obj interface{}) error
DataFromDatabaseUsingResolveParams(objArr interface{}, modelType reflect.Type, p graphql.ResolveParams) error
}
package generator
import (
"errors"
"reflect"
"strings"
"gitlab.com/xdevs23/goqlorm/postgres"
"gitlab.com/xdevs23/goqlorm/reflectutil"
"github.com/graphql-go/graphql"
......@@ -24,41 +21,8 @@ func AutoResolve(db database.Adapter, model interface{}, returnList bool) graphq
modelType := *prepareAutoResolve(model)
return func(p graphql.ResolveParams) (interface{}, error) {
objArr := reflectutil.NewFromType(reflect.SliceOf(modelType))
// TODO: refactor this to use the adapter interface
q := db.(postgres.Database).PgDB.Model(objArr)
for i := 0; i < modelType.NumField(); i++ {
field := modelType.Field(i)
fieldNameLowerCase := strings.ToLower(field.Name)
if value := p.Args[fieldNameLowerCase]; value != nil {
switch field.Type.Kind() {
case
reflect.Array,
reflect.Slice:
q.WhereIn(fieldNameLowerCase+" @> [?]", value)
case
reflect.Complex128,
reflect.Complex64,
reflect.Float64,
reflect.Float32,
reflect.Bool,
reflect.Int8,
reflect.Uint,
reflect.Uint8,
reflect.Uint16,
reflect.Uint64,
reflect.Uint32,
reflect.Int16,
reflect.Int64,
reflect.Int32,
reflect.Int,
reflect.String:
q.Where(fieldNameLowerCase+" = ?", value)
case reflect.Map:
return nil, errors.New("maps are not supported yet")
}
}
}
if err := q.Select(); err != nil {
err := db.DataFromDatabaseUsingResolveParams(objArr, modelType, p)
if err != nil {
return nil, err
}
if returnList {
......
package postgres
import (
"errors"
"reflect"
"strings"
"github.com/graphql-go/graphql"
)
func (db Database) DataFromDatabaseUsingResolveParams(
objArr interface{},
modelType reflect.Type,
p graphql.ResolveParams) error {
q := db.PgDB.Model(objArr)
for i := 0; i < modelType.NumField(); i++ {
field := modelType.Field(i)
fieldNameLowerCase := strings.ToLower(field.Name)
if value := p.Args[fieldNameLowerCase]; value != nil {
switch field.Type.Kind() {
case
reflect.Array,
reflect.Slice:
q.WhereIn(fieldNameLowerCase+" @> [?]", value)
case
reflect.Complex128,
reflect.Complex64,
reflect.Float64,
reflect.Float32,
reflect.Bool,
reflect.Int8,
reflect.Uint,
reflect.Uint8,
reflect.Uint16,
reflect.Uint64,
reflect.Uint32,
reflect.Int16,
reflect.Int64,
reflect.Int32,
reflect.Int,
reflect.String:
q.Where(fieldNameLowerCase+" = ?", value)
case reflect.Map:
return errors.New("maps are not supported yet")
}
}
}
if err := q.Select(); err != nil {
return err
}
return nil
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment