Categorygithub.com/bramca/gorm-odata-filtering
repositorypackage
0.1.0
Repository: https://github.com/bramca/gorm-odata-filtering.git
Documentation: pkg.go.dev

# README

🔎 gorm-odata-filtering

Go package GitHub GitHub go.mod Go version

This package provides a way to filter gorm objects with an OData filter. It builds the correct gorm query based on an odata filter string.
It creates a Syntax Tree based on the input query string using go-syntax-tree and uses that tree to build the correct gorm query.
To make sure that object expansion works (e.g. metadata/name eq 'some-value') it makes use of the following 2 dependencies:

📋 Example

package main

import (
	"gorm.io/driver/sqlite"
	"gorm.io/gorm"

	gormodata "github.com/bramca/gorm-odata-filtering"
)

type MockModel struct {
	ID        string
	Name      string
	TestValue string
	Metadata   *Metadata `gorm:"foreignKey:MetadataID"`
	MetadataID *uuid.UUID
}

type Metadata struct {
	ID   uuid.UUID
	Name string
}

func main() {
	db, _ := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
	db.AutoMigrate(&MockModel{}, &Metadata{})

	queryString := "name eq 'test' and (contains(testValue,'testvalue') or contains(metadata/name,'test-metadata'))"

	var result []MockModel
	dbQuery, err := gormodata.BuildQuery(queryString, db, gormodata.SQLite)

	if err != nil {
		panic(err)
	}

	dbQuery.Find(&result)
}