From bf9e1fc667e9a3521163db5a1b0b8e5bf9700655 Mon Sep 17 00:00:00 2001 From: Kichiyaki Date: Wed, 6 Jan 2021 15:38:25 +0100 Subject: [PATCH] [WIP] update TribeHistoryFilter, add TribeHistoryRelationshipAndSortAppender --- models/tribe_history.go | 76 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 67 insertions(+), 9 deletions(-) diff --git a/models/tribe_history.go b/models/tribe_history.go index 56e3de5..851e7ad 100644 --- a/models/tribe_history.go +++ b/models/tribe_history.go @@ -1,6 +1,11 @@ package models -import "time" +import ( + "time" + + "github.com/go-pg/pg/v10" + "github.com/go-pg/pg/v10/orm" +) type TribeHistory struct { tableName struct{} `pg:"?SERVER.tribe_history,alias:tribe_history"` @@ -19,18 +24,71 @@ type TribeHistory struct { } type TribeHistoryFilter struct { - tableName struct{} `urlstruct:"tribe_history"` - - TribeID []int `json:"tribeID" gqlgen:"tribeID" xml:"tribeID"` - TribeIdNEQ []int `json:"tribeIDNEQ" gqlgen:"tribeIDNEQ" xml:"tribeIDNEQ"` + TribeID []int `json:"tribeID" gqlgen:"tribeID" xml:"tribeID"` + TribeIDNEQ []int `json:"tribeIDNEQ" gqlgen:"tribeIDNEQ" xml:"tribeIDNEQ"` + TribeFilter *TribeFilter `json:"tribeFilter" xml:"tribeFilter" gqlgen:"tribeFilter"` CreateDate time.Time `json:"createDate" gqlgen:"createDate" xml:"createDate"` CreateDateGT time.Time `json:"createDateGT" gqlgen:"createDateGT" xml:"createDateGT"` CreateDateGTE time.Time `json:"createDateGTE" gqlgen:"createDateGTE" xml:"createDateGTE"` CreateDateLT time.Time `json:"createDateLT" gqlgen:"createDateLT" xml:"createDateLT"` CreateDateLTE time.Time `json:"createDateLTE" gqlgen:"createDateLTE" xml:"createDateLTE"` - - Offset int `urlstruct:",nowhere" json:"offset" gqlgen:"offset" xml:"offset"` - Limit int `urlstruct:",nowhere" json:"limit" gqlgen:"limit" xml:"limit"` - Sort string `urlstruct:",nowhere" json:"sort" gqlgen:"sort" xml:"sort"` +} + +func (f *TribeHistoryFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Query, error) { + if !isZero(f.CreateDate) { + q = q.Where(buildConditionEquals(addAliasToColumnName("create_date", alias)), f.CreateDate) + } + if !isZero(f.CreateDateGT) { + q = q.Where(buildConditionGT(addAliasToColumnName("create_date", alias)), f.CreateDateGT) + } + if !isZero(f.CreateDateGTE) { + q = q.Where(buildConditionGTE(addAliasToColumnName("create_date", alias)), f.CreateDateGTE) + } + if !isZero(f.CreateDateLT) { + q = q.Where(buildConditionLT(addAliasToColumnName("create_date", alias)), f.CreateDateLT) + } + if !isZero(f.CreateDateLTE) { + q = q.Where(buildConditionLTE(addAliasToColumnName("create_date", alias)), f.CreateDateLTE) + } + + if !isZero(f.TribeID) { + q = q.Where(buildConditionArray(addAliasToColumnName("tribe_id", alias)), pg.Array(f.TribeID)) + } + if !isZero(f.TribeIDNEQ) { + q = q.Where(buildConditionNotInArray(addAliasToColumnName("tribe_id", alias)), pg.Array(f.TribeIDNEQ)) + } + + return q, nil +} + +func (f *TribeHistoryFilter) Where(q *orm.Query) (*orm.Query, error) { + return f.WhereWithAlias(q, "tribe_history") +} + +type TribeHistoryRelationshipAndSortAppender struct { + Filter *TribeHistoryFilter + Sort []string +} + +func (a *TribeHistoryRelationshipAndSortAppender) Append(q *orm.Query) (*orm.Query, error) { + var err error + tribeRequired := findStringWithPrefix(a.Sort, "tribe.") != "" + if a.Filter.TribeFilter != nil { + q, err = a.Filter.TribeFilter.WhereWithAlias(q, "tribe") + if err != nil { + return q, err + } + tribeRequired = true + } + + if !isZero(a.Sort) { + q = q.Order(a.Sort...) + } + + if tribeRequired { + q = q.Relation("Tribe._") + } + + return q, nil }