cardoso / fluent-extended

Useful extensions for fluent

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

FluentExtended

Build Status Coverage Status

Handy extensions for Fluent

Features

Filter <-> Node

Filters can be converted to and from Node, allowing filters to be constructed from JSON and other formats

This allows for easily adding powerful filtering mechanism in resource routes:

Usage:

route
/// [GET] @ /users
/// Returns all users, optionally filtered by the request data.
func index(_ req: Request) throws -> ResponseRepresentable {
    if let filterString = req.query?["filter"]?.string {
        let filterJSON = try JSON(bytes: filterString.data(using: .utf8)?.makeBytes() ?? [])
        let filter = try Filter(node: Node(filterJSON))
        return try User.makeQuery().filter(filter).all().makeJSON()
    }
    
    return try User.all().makeJSON()
}
request
[GET]  /users?filter={"entity":"StalkrCloud.User","method":{"type":"compare","comparison":"equals", "field":"username","value":"admin"}}
response
[
  {
    "id": 1,
    "username": "admin",
    "password": "123456"
  }
]

Multiple Filters per Call

This avoids chaining of the filter method which adds noise to the code

Book.makeQuery().filter(("genre", .equals ,"scifi"),
                        ("target", .equals, "children"),
                        ("language", .equals, "en"))
Book.all(with: ("genre", .equals, "scifi"),
               ("target", .equals, "children"),
               ("language", .equals, "en"))
Book.first(with: ("genre", .equals, "scifi"),
                 ("target", .equals, "children"),
                 ("language", .equals, "en"))

About

Useful extensions for fluent


Languages

Language:Swift 100.0%