[WIP] add a new helper function - isZero

This commit is contained in:
Dawid Wysokiński 2021-01-06 14:22:24 +01:00
parent 1f0f74693e
commit fb43f82924
4 changed files with 55 additions and 19 deletions

View File

@ -2,6 +2,7 @@ package models
import (
"strings"
"time"
)
func addAliasToColumnName(column, prefix string) string {
@ -52,3 +53,38 @@ func buildConditionArray(column string) string {
func buildConditionNotInArray(column string) string {
return "NOT (" + buildConditionArray(column) + ")"
}
func isZero(v interface{}) bool {
switch c := v.(type) {
case string:
return c == ""
case *string:
return c == nil
case []string:
return c == nil || len(c) == 0
case int:
return c == 0
case *int:
return c == nil
case []int:
return c == nil || len(c) == 0
case float64:
return c == 0
case *float64:
return c == nil
case float32:
return c == 0
case *float32:
return c == nil
case bool:
return !c
case *bool:
return c == nil
case time.Time:
return c.IsZero()
case *time.Time:
return c == nil
default:
return false
}
}

View File

@ -83,30 +83,30 @@ type ServerFilter struct {
}
func (f *ServerFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Query, error) {
if len(f.Key) > 0 {
if !isZero(f.Key) {
q = q.Where(buildConditionArray(addAliasToColumnName("key", alias)), pg.Array(f.Key))
}
if len(f.KeyNEQ) > 0 {
if !isZero(f.KeyNEQ) {
q = q.Where(buildConditionNotInArray(addAliasToColumnName("key", alias)), pg.Array(f.KeyNEQ))
}
if f.KeyMATCH != "" {
if !isZero(f.KeyMATCH) {
q = q.Where(buildConditionMatch(addAliasToColumnName("key", alias)), f.KeyMATCH)
}
if f.KeyIEQ != "" {
if !isZero(f.KeyIEQ) {
q = q.Where(buildConditionIEQ(addAliasToColumnName("key", alias)), f.KeyIEQ)
}
if len(f.Status) > 0 {
if !isZero(f.Status) {
q = q.Where(buildConditionArray(addAliasToColumnName("status", alias)), pg.Array(f.Status))
}
if len(f.StatusNEQ) > 0 {
if !isZero(f.StatusNEQ) {
q = q.Where(buildConditionNotInArray(addAliasToColumnName("status", alias)), pg.Array(f.StatusNEQ))
}
if len(f.VersionCode) > 0 {
if !isZero(f.VersionCode) {
q = q.Where(buildConditionArray(addAliasToColumnName("version_code", alias)), pg.Array(f.VersionCode))
}
if len(f.VersionCodeNEQ) > 0 {
if !isZero(f.VersionCodeNEQ) {
q = q.Where(buildConditionNotInArray(addAliasToColumnName("version_code", alias)), pg.Array(f.VersionCodeNEQ))
}

View File

@ -40,19 +40,19 @@ type ServerStatsFilter struct {
}
func (f *ServerStatsFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Query, error) {
if !f.CreateDate.IsZero() {
if !isZero(f.CreateDate) {
q = q.Where(buildConditionEquals(addAliasToColumnName("create_date", alias)), f.CreateDate)
}
if !f.CreateDateGT.IsZero() {
if !isZero(f.CreateDateGT) {
q = q.Where(buildConditionGT(addAliasToColumnName("create_date", alias)), f.CreateDateGT)
}
if !f.CreateDateGTE.IsZero() {
if !isZero(f.CreateDateGTE) {
q = q.Where(buildConditionGTE(addAliasToColumnName("create_date", alias)), f.CreateDateGTE)
}
if !f.CreateDateLT.IsZero() {
if !isZero(f.CreateDateLT) {
q = q.Where(buildConditionLT(addAliasToColumnName("create_date", alias)), f.CreateDateLT)
}
if !f.CreateDateLTE.IsZero() {
if !isZero(f.CreateDateLTE) {
q = q.Where(buildConditionLTE(addAliasToColumnName("create_date", alias)), f.CreateDateLTE)
}

View File

@ -102,23 +102,23 @@ type VersionFilter struct {
}
func (f *VersionFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Query, error) {
if len(f.Code) > 0 {
if !isZero(f.Code) {
q = q.Where(buildConditionArray(addAliasToColumnName("code", alias)), pg.Array(f.Code))
}
if len(f.CodeNEQ) > 0 {
if !isZero(f.CodeNEQ) {
q = q.Where(buildConditionNotInArray(addAliasToColumnName("code", alias)), pg.Array(f.CodeNEQ))
}
if len(f.Host) > 0 {
if !isZero(f.Host) {
q = q.Where(buildConditionArray(addAliasToColumnName("host", alias)), pg.Array(f.Host))
}
if len(f.HostNEQ) > 0 {
if !isZero(f.HostNEQ) {
q = q.Where(buildConditionNotInArray(addAliasToColumnName("host", alias)), pg.Array(f.HostNEQ))
}
if f.HostMATCH != "" {
if !isZero(f.HostMATCH) {
q = q.Where(buildConditionMatch(addAliasToColumnName("host", alias)), f.HostMATCH)
}
if f.HostIEQ != "" {
if !isZero(f.HostIEQ) {
q = q.Where(buildConditionIEQ(addAliasToColumnName("host", alias)), f.HostIEQ)
}