Skip to content

Commit

Permalink
Added TimeRangeFilter
Browse files Browse the repository at this point in the history
  • Loading branch information
Ashish Bhat committed Jul 18, 2019
1 parent 7689521 commit de5366b
Showing 1 changed file with 41 additions and 0 deletions.
41 changes: 41 additions & 0 deletions repository/Repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ package repository
import (
"net/http"
"strconv"
"time"

"github.com/islax/microapp/web"

"github.com/jinzhu/gorm"
uuid "github.com/satori/go.uuid"
Expand Down Expand Up @@ -124,6 +127,44 @@ func PaginateForWeb(w http.ResponseWriter, r *http.Request) QueryProcessor {
}
}

// TimeRangeForWeb will take limit and offset parameters from URL and will set X-Total-Count header in response
func TimeRangeForWeb(r *http.Request, fieldName string) QueryProcessor {
queryParams := r.URL.Query()
startParam, okStart := queryParams["start"]
endParam, okEnd := queryParams["end"]

var startTime, endTime time.Time
var err error
if okStart {
startTime, err = time.Parse(time.RFC3339, startParam[0])
if err != nil {
err = web.NewValidationError("Key_InvalidFields", map[string]string{"start": "Key_InvalidValue"})
}
}

if err == nil && okEnd {
endTime, err = time.Parse(time.RFC3339, endParam[0])
if err != nil {
err = web.NewValidationError("Key_InvalidFields", map[string]string{"end": "Key_InvalidValue"})
}
}

return func(db *gorm.DB, out interface{}) (*gorm.DB, error) {
if err != nil {
return db, err
}

if okStart {
db = db.Where(fieldName+" >= ?", startTime)
}
if okEnd {
db = db.Where(fieldName+" <= ?", endTime)
}

return db, nil
}
}

// Filter will filter the results
func Filter(condition string, args ...interface{}) QueryProcessor {
return func(db *gorm.DB, out interface{}) (*gorm.DB, error) {
Expand Down

0 comments on commit de5366b

Please sign in to comment.