params consolidation, fixed numeric params
This commit is contained in:
193
api/repo/data.go
193
api/repo/data.go
@ -49,38 +49,31 @@ type DataPriceQuery struct {
|
||||
To float64
|
||||
}
|
||||
|
||||
type DataListParams struct {
|
||||
Start int
|
||||
Limit int
|
||||
Sort string
|
||||
|
||||
Name bool
|
||||
Address bool
|
||||
Location bool
|
||||
Age bool
|
||||
Price bool
|
||||
|
||||
NameQuery DataNameQuery
|
||||
AddressQuery DataAddressQuery
|
||||
LocationQuery DataLocationQuery
|
||||
AgeQuery DataAgeQuery
|
||||
PriceQuery DataPriceQuery
|
||||
// bool
|
||||
type DataEnabledQuery struct {
|
||||
Query bool
|
||||
}
|
||||
|
||||
type DataGetParams struct {
|
||||
Id bool
|
||||
type DataParams struct {
|
||||
Start int // list only
|
||||
Limit int // list only
|
||||
Sort string // list only
|
||||
|
||||
Id bool // get only
|
||||
Name bool
|
||||
Address bool
|
||||
Location bool
|
||||
Age bool
|
||||
Price bool
|
||||
Enabled bool
|
||||
|
||||
IdQuery DataIdQuery
|
||||
IdQuery DataIdQuery // get only
|
||||
NameQuery DataNameQuery
|
||||
AddressQuery DataAddressQuery
|
||||
LocationQuery DataLocationQuery
|
||||
AgeQuery DataAgeQuery
|
||||
PriceQuery DataPriceQuery
|
||||
EnabledQuery DataEnabledQuery
|
||||
}
|
||||
|
||||
type DataRepository struct {
|
||||
@ -102,12 +95,10 @@ func (r *DataRepository) Close() {
|
||||
r.ms.Close()
|
||||
}
|
||||
|
||||
func (r *DataRepository) List(p *DataListParams) ([]*model.Data, error) {
|
||||
func (r *DataRepository) List(p *DataParams) ([]*model.Data, error) {
|
||||
ms := r.ms.Copy()
|
||||
defer ms.Close()
|
||||
|
||||
c := ms.DB(r.database).C(r.collection)
|
||||
|
||||
q := bson.M{}
|
||||
|
||||
// string
|
||||
@ -130,6 +121,16 @@ func (r *DataRepository) List(p *DataListParams) ([]*model.Data, error) {
|
||||
}
|
||||
}
|
||||
|
||||
// string
|
||||
if p.Location {
|
||||
switch p.LocationQuery.Operation {
|
||||
case "eq":
|
||||
q["address"] = p.LocationQuery.Query
|
||||
case "regex":
|
||||
q["address"] = bson.RegEx{Pattern: p.LocationQuery.Query, Options: p.LocationQuery.Options}
|
||||
}
|
||||
}
|
||||
|
||||
// int64
|
||||
if p.Age {
|
||||
switch p.AgeQuery.Operation {
|
||||
@ -143,34 +144,46 @@ func (r *DataRepository) List(p *DataListParams) ([]*model.Data, error) {
|
||||
q["age"] = bson.M{"$gte": p.AgeQuery.From, "$lt": p.AgeQuery.To}
|
||||
case "gt-lte":
|
||||
q["age"] = bson.M{"$gt": p.AgeQuery.From, "$lte": p.AgeQuery.To}
|
||||
case "gt":
|
||||
q["age"] = bson.M{"$gt": p.AgeQuery.From}
|
||||
case "gte":
|
||||
q["age"] = bson.M{"$gte": p.AgeQuery.From}
|
||||
case "lt":
|
||||
q["age"] = bson.M{"$lt": p.AgeQuery.To}
|
||||
case "lte":
|
||||
q["age"] = bson.M{"$lte": p.AgeQuery.To}
|
||||
}
|
||||
}
|
||||
|
||||
// string
|
||||
if p.Location {
|
||||
switch p.LocationQuery.Operation {
|
||||
case "eq":
|
||||
q["address"] = p.LocationQuery.Query
|
||||
case "regex":
|
||||
q["address"] = bson.RegEx{Pattern: p.LocationQuery.Query, Options: p.LocationQuery.Options}
|
||||
}
|
||||
}
|
||||
|
||||
// float64
|
||||
if p.Price {
|
||||
switch p.PriceQuery.Operation {
|
||||
case "eq":
|
||||
q["age"] = p.PriceQuery.From
|
||||
q["price"] = p.PriceQuery.From
|
||||
case "gt":
|
||||
q["price"] = bson.M{"$gt": p.PriceQuery.From}
|
||||
case "gte":
|
||||
q["price"] = bson.M{"$gte": p.PriceQuery.From}
|
||||
case "lt":
|
||||
q["price"] = bson.M{"$lt": p.PriceQuery.To}
|
||||
case "lte":
|
||||
q["price"] = bson.M{"$lte": p.PriceQuery.To}
|
||||
case "gt-lt":
|
||||
q["age"] = bson.M{"$gt": p.PriceQuery.From, "$lt": p.PriceQuery.To}
|
||||
q["price"] = bson.M{"$gt": p.PriceQuery.From, "$lt": p.PriceQuery.To}
|
||||
case "gte-lte":
|
||||
q["age"] = bson.M{"$gte": p.PriceQuery.From, "$lte": p.PriceQuery.To}
|
||||
q["price"] = bson.M{"$gte": p.PriceQuery.From, "$lte": p.PriceQuery.To}
|
||||
case "gte-lt":
|
||||
q["age"] = bson.M{"$gte": p.PriceQuery.From, "$lt": p.PriceQuery.To}
|
||||
q["price"] = bson.M{"$gte": p.PriceQuery.From, "$lt": p.PriceQuery.To}
|
||||
case "gt-lte":
|
||||
q["age"] = bson.M{"$gt": p.PriceQuery.From, "$lte": p.PriceQuery.To}
|
||||
q["price"] = bson.M{"$gt": p.PriceQuery.From, "$lte": p.PriceQuery.To}
|
||||
}
|
||||
}
|
||||
|
||||
// bool
|
||||
if p.Enabled {
|
||||
q["enabled"] = p.EnabledQuery.Query
|
||||
}
|
||||
|
||||
var m []*model.Data
|
||||
rq := c.Find(q)
|
||||
|
||||
@ -193,7 +206,7 @@ func (r *DataRepository) List(p *DataListParams) ([]*model.Data, error) {
|
||||
return m, nil
|
||||
}
|
||||
|
||||
func (r *DataRepository) Get(p *DataGetParams) (*model.Data, error) {
|
||||
func (r *DataRepository) Get(p *DataParams) (*model.Data, error) {
|
||||
ms := r.ms.Copy()
|
||||
defer ms.Close()
|
||||
|
||||
@ -226,6 +239,16 @@ func (r *DataRepository) Get(p *DataGetParams) (*model.Data, error) {
|
||||
}
|
||||
}
|
||||
|
||||
// string
|
||||
if p.Location {
|
||||
switch p.LocationQuery.Operation {
|
||||
case "eq":
|
||||
q["address"] = p.LocationQuery.Query
|
||||
case "regex":
|
||||
q["address"] = bson.RegEx{Pattern: p.LocationQuery.Query, Options: p.LocationQuery.Options}
|
||||
}
|
||||
}
|
||||
|
||||
// int64
|
||||
if p.Age {
|
||||
switch p.AgeQuery.Operation {
|
||||
@ -242,16 +265,7 @@ func (r *DataRepository) Get(p *DataGetParams) (*model.Data, error) {
|
||||
}
|
||||
}
|
||||
|
||||
// string
|
||||
if p.Location {
|
||||
switch p.LocationQuery.Operation {
|
||||
case "eq":
|
||||
q["address"] = p.LocationQuery.Query
|
||||
case "regex":
|
||||
q["address"] = bson.RegEx{Pattern: p.LocationQuery.Query, Options: p.LocationQuery.Options}
|
||||
}
|
||||
}
|
||||
|
||||
// float64
|
||||
if p.Price {
|
||||
switch p.PriceQuery.Operation {
|
||||
case "eq":
|
||||
@ -267,6 +281,11 @@ func (r *DataRepository) Get(p *DataGetParams) (*model.Data, error) {
|
||||
}
|
||||
}
|
||||
|
||||
// bool
|
||||
if p.Enabled {
|
||||
q["enabled"] = p.EnabledQuery.Query
|
||||
}
|
||||
|
||||
m := new(model.Data)
|
||||
rq := c.Find(q)
|
||||
|
||||
@ -277,84 +296,6 @@ func (r *DataRepository) Get(p *DataGetParams) (*model.Data, error) {
|
||||
return m, nil
|
||||
}
|
||||
|
||||
func (r *DataRepository) GetCount(p *DataGetParams) (int, error) {
|
||||
ms := r.ms.Copy()
|
||||
defer ms.Close()
|
||||
|
||||
c := ms.DB(r.database).C(r.collection)
|
||||
|
||||
q := bson.M{}
|
||||
|
||||
// id
|
||||
if p.Id {
|
||||
q["_id"] = bson.ObjectIdHex(p.IdQuery.Id)
|
||||
}
|
||||
|
||||
// string
|
||||
if p.Name {
|
||||
switch p.NameQuery.Operation {
|
||||
case "eq":
|
||||
q["name"] = p.NameQuery.Query
|
||||
case "regex":
|
||||
q["name"] = bson.RegEx{Pattern: p.NameQuery.Query, Options: p.NameQuery.Options}
|
||||
}
|
||||
}
|
||||
|
||||
// string
|
||||
if p.Address {
|
||||
switch p.AddressQuery.Operation {
|
||||
case "eq":
|
||||
q["address"] = p.AddressQuery.Query
|
||||
case "regex":
|
||||
q["address"] = bson.RegEx{Pattern: p.AddressQuery.Query, Options: p.AddressQuery.Options}
|
||||
}
|
||||
}
|
||||
|
||||
// int64
|
||||
if p.Age {
|
||||
switch p.AgeQuery.Operation {
|
||||
case "eq":
|
||||
q["age"] = p.AgeQuery.From
|
||||
case "gt-lt":
|
||||
q["age"] = bson.M{"$gt": p.AgeQuery.From, "$lt": p.AgeQuery.To}
|
||||
case "gte-lte":
|
||||
q["age"] = bson.M{"$gte": p.AgeQuery.From, "$lte": p.AgeQuery.To}
|
||||
case "gte-lt":
|
||||
q["age"] = bson.M{"$gte": p.AgeQuery.From, "$lt": p.AgeQuery.To}
|
||||
case "gt-lte":
|
||||
q["age"] = bson.M{"$gt": p.AgeQuery.From, "$lte": p.AgeQuery.To}
|
||||
}
|
||||
}
|
||||
|
||||
// string
|
||||
if p.Location {
|
||||
switch p.LocationQuery.Operation {
|
||||
case "eq":
|
||||
q["address"] = p.LocationQuery.Query
|
||||
case "regex":
|
||||
q["address"] = bson.RegEx{Pattern: p.LocationQuery.Query, Options: p.LocationQuery.Options}
|
||||
}
|
||||
}
|
||||
|
||||
if p.Price {
|
||||
switch p.PriceQuery.Operation {
|
||||
case "eq":
|
||||
q["age"] = p.PriceQuery.From
|
||||
case "gt-lt":
|
||||
q["age"] = bson.M{"$gt": p.PriceQuery.From, "$lt": p.PriceQuery.To}
|
||||
case "gte-lte":
|
||||
q["age"] = bson.M{"$gte": p.PriceQuery.From, "$lte": p.PriceQuery.To}
|
||||
case "gte-lt":
|
||||
q["age"] = bson.M{"$gte": p.PriceQuery.From, "$lt": p.PriceQuery.To}
|
||||
case "gt-lte":
|
||||
q["age"] = bson.M{"$gt": p.PriceQuery.From, "$lte": p.PriceQuery.To}
|
||||
}
|
||||
}
|
||||
|
||||
rq := c.Find(q)
|
||||
return rq.Count()
|
||||
}
|
||||
|
||||
func (r *DataRepository) Create(m *model.Data) error {
|
||||
ms := r.ms.Copy()
|
||||
defer ms.Close()
|
||||
|
Reference in New Issue
Block a user