From c232640363674ddfe9c683f96c3d64224b82a7c2 Mon Sep 17 00:00:00 2001 From: Radu Ioan Fericean Date: Mon, 25 Aug 2014 19:31:28 +0300 Subject: [PATCH] add pagination and search for resource ids --- apier/apier_local_test.go | 10 +++++----- apier/tpaccountactions.go | 9 ++++++--- apier/tpactions.go | 7 +++++-- apier/tpactiontimings.go | 7 +++++-- apier/tpactiontriggers.go | 7 +++++-- apier/tpcdrstats.go | 7 +++++-- apier/tpderivedcharges.go | 7 +++++-- apier/tpdestinationrates.go | 7 +++++-- apier/tpdestinations.go | 7 +++++-- apier/tprates.go | 7 +++++-- apier/tpratingplans.go | 7 +++++-- apier/tpratingprofiles.go | 9 ++++++--- apier/tpsharedgroups.go | 7 +++++-- apier/tptimings.go | 7 +++++-- engine/storage_interface.go | 2 +- engine/storage_sql.go | 17 ++++++++++++++++- utils/apitpdata.go | 16 ++++++++++++++++ 17 files changed, 105 insertions(+), 35 deletions(-) diff --git a/apier/apier_local_test.go b/apier/apier_local_test.go index 720e18ac9..936135f37 100644 --- a/apier/apier_local_test.go +++ b/apier/apier_local_test.go @@ -220,7 +220,7 @@ func TestApierTPTiming(t *testing.T) { // Test getIds var rplyTmIds []string expectedTmIds := []string{"ALWAYS", "ASAP"} - if err := rater.Call("ApierV1.GetTPTimingIds", AttrGetTPTimingIds{tmAlways.TPid}, &rplyTmIds); err != nil { + if err := rater.Call("ApierV1.GetTPTimingIds", AttrGetTPTimingIds{tmAlways.TPid, 0, 0, ""}, &rplyTmIds); err != nil { t.Error("Calling ApierV1.GetTPTimingIds, got error: ", err.Error()) } else if !reflect.DeepEqual(expectedTmIds, rplyTmIds) { t.Errorf("Calling ApierV1.GetTPTimingIds expected: %v, received: %v", expectedTmIds, rplyTmIds) @@ -274,7 +274,7 @@ func TestApierTPDestination(t *testing.T) { // Test getIds var rplyDstIds []string expectedDstIds := []string{"FS_USERS", "GERMANY", "GERMANY_MOBILE"} - if err := rater.Call("ApierV1.GetTPDestinationIds", AttrGetTPDestinationIds{dstDe.TPid}, &rplyDstIds); err != nil { + if err := rater.Call("ApierV1.GetTPDestinationIds", AttrGetTPDestinationIds{TPid: dstDe.TPid}, &rplyDstIds); err != nil { t.Error("Calling ApierV1.GetTPDestinationIds, got error: ", err.Error()) } else if !reflect.DeepEqual(expectedDstIds, rplyDstIds) { t.Errorf("Calling ApierV1.GetTPDestinationIds expected: %v, received: %v", expectedDstIds, rplyDstIds) @@ -328,7 +328,7 @@ func TestApierTPRate(t *testing.T) { // Test getIds var rplyRtIds []string expectedRtIds := []string{"RT_FS_USERS"} - if err := rater.Call("ApierV1.GetTPRateIds", AttrGetTPRateIds{rt.TPid}, &rplyRtIds); err != nil { + if err := rater.Call("ApierV1.GetTPRateIds", AttrGetTPRateIds{rt.TPid, 0, 0, ""}, &rplyRtIds); err != nil { t.Error("Calling ApierV1.GetTPRateIds, got error: ", err.Error()) } else if !reflect.DeepEqual(expectedRtIds, rplyRtIds) { t.Errorf("Calling ApierV1.GetTPDestinationIds expected: %v, received: %v", expectedRtIds, rplyRtIds) @@ -385,7 +385,7 @@ func TestApierTPDestinationRate(t *testing.T) { // Test getIds var rplyDrIds []string expectedDrIds := []string{"DR_FREESWITCH_USERS"} - if err := rater.Call("ApierV1.GetTPDestinationRateIds", AttrTPDestinationRateIds{dr.TPid}, &rplyDrIds); err != nil { + if err := rater.Call("ApierV1.GetTPDestinationRateIds", AttrTPDestinationRateIds{dr.TPid, 0, 0, ""}, &rplyDrIds); err != nil { t.Error("Calling ApierV1.GetTPDestinationRateIds, got error: ", err.Error()) } else if !reflect.DeepEqual(expectedDrIds, rplyDrIds) { t.Errorf("Calling ApierV1.GetTPDestinationRateIds expected: %v, received: %v", expectedDrIds, rplyDrIds) @@ -439,7 +439,7 @@ func TestApierTPRatingPlan(t *testing.T) { // Test getIds var rplyRpIds []string expectedRpIds := []string{"RETAIL1"} - if err := rater.Call("ApierV1.GetTPRatingPlanIds", AttrGetTPRatingPlanIds{rp.TPid}, &rplyRpIds); err != nil { + if err := rater.Call("ApierV1.GetTPRatingPlanIds", AttrGetTPRatingPlanIds{rp.TPid, 0, 0, ""}, &rplyRpIds); err != nil { t.Error("Calling ApierV1.GetTPRatingPlanIds, got error: ", err.Error()) } else if !reflect.DeepEqual(expectedRpIds, rplyRpIds) { t.Errorf("Calling ApierV1.GetTPRatingPlanIds expected: %v, received: %v", expectedRpIds, rplyRpIds) diff --git a/apier/tpaccountactions.go b/apier/tpaccountactions.go index c3cfd95ac..29849809d 100644 --- a/apier/tpaccountactions.go +++ b/apier/tpaccountactions.go @@ -105,7 +105,10 @@ func (self *ApierV1) GetTPAccountActions(attrs AttrGetTPAccountActions, reply *u } type AttrGetTPAccountActionIds struct { - TPid string // Tariff plan id + TPid string // Tariff plan id + Page int + ItemsPerPage int + SearchTerm string } // Queries AccountActions identities on specific tariff plan. @@ -113,7 +116,7 @@ func (self *ApierV1) GetTPAccountActionLoadIds(attrs AttrGetTPAccountActionIds, if missing := utils.MissingStructFields(&attrs, []string{"TPid"}); len(missing) != 0 { //Params missing return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing) } - if ids, err := self.StorDb.GetTPTableIds(attrs.TPid, utils.TBL_TP_ACCOUNT_ACTIONS, utils.TPDistinctIds{"loadid"}, nil); err != nil { + if ids, err := self.StorDb.GetTPTableIds(attrs.TPid, utils.TBL_TP_ACCOUNT_ACTIONS, utils.TPDistinctIds{"loadid"}, nil, &utils.TPPagination{Page: attrs.Page, ItemsPerPage: attrs.ItemsPerPage, SearchTerm: attrs.SearchTerm}); err != nil { return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) } else if ids == nil { return errors.New(utils.ERR_NOT_FOUND) @@ -128,7 +131,7 @@ func (self *ApierV1) GetTPAccountActionIds(attrs AttrGetTPAccountActionIds, repl if missing := utils.MissingStructFields(&attrs, []string{"TPid"}); len(missing) != 0 { //Params missing return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing) } - if ids, err := self.StorDb.GetTPTableIds(attrs.TPid, utils.TBL_TP_ACCOUNT_ACTIONS, utils.TPDistinctIds{"loadid", "direction", "tenant", "account"}, nil); err != nil { + if ids, err := self.StorDb.GetTPTableIds(attrs.TPid, utils.TBL_TP_ACCOUNT_ACTIONS, utils.TPDistinctIds{"loadid", "direction", "tenant", "account"}, nil, &utils.TPPagination{Page: attrs.Page, ItemsPerPage: attrs.ItemsPerPage, SearchTerm: attrs.SearchTerm}); err != nil { return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) } else if ids == nil { return errors.New(utils.ERR_NOT_FOUND) diff --git a/apier/tpactions.go b/apier/tpactions.go index 0737675a4..f51a1848f 100644 --- a/apier/tpactions.go +++ b/apier/tpactions.go @@ -67,7 +67,10 @@ func (self *ApierV1) GetTPActions(attrs AttrGetTPActions, reply *utils.TPActions } type AttrGetTPActionIds struct { - TPid string // Tariff plan id + TPid string // Tariff plan id + Page int + ItemsPerPage int + SearchTerm string } // Queries Actions identities on specific tariff plan. @@ -75,7 +78,7 @@ func (self *ApierV1) GetTPActionIds(attrs AttrGetTPActionIds, reply *[]string) e if missing := utils.MissingStructFields(&attrs, []string{"TPid"}); len(missing) != 0 { //Params missing return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing) } - if ids, err := self.StorDb.GetTPTableIds(attrs.TPid, utils.TBL_TP_ACTIONS, utils.TPDistinctIds{"id"}, nil); err != nil { + if ids, err := self.StorDb.GetTPTableIds(attrs.TPid, utils.TBL_TP_ACTIONS, utils.TPDistinctIds{"id"}, nil, &utils.TPPagination{Page: attrs.Page, ItemsPerPage: attrs.ItemsPerPage, SearchTerm: attrs.SearchTerm}); err != nil { return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) } else if ids == nil { return errors.New(utils.ERR_NOT_FOUND) diff --git a/apier/tpactiontimings.go b/apier/tpactiontimings.go index a55134c25..276514c85 100644 --- a/apier/tpactiontimings.go +++ b/apier/tpactiontimings.go @@ -65,7 +65,10 @@ func (self *ApierV1) GetTPActionPlan(attrs AttrGetTPActionPlan, reply *utils.TPA } type AttrGetTPActionPlanIds struct { - TPid string // Tariff plan id + TPid string // Tariff plan id + Page int + ItemsPerPage int + SearchTerm string } // Queries ActionPlan identities on specific tariff plan. @@ -73,7 +76,7 @@ func (self *ApierV1) GetTPActionPlanIds(attrs AttrGetTPActionPlanIds, reply *[]s if missing := utils.MissingStructFields(&attrs, []string{"TPid"}); len(missing) != 0 { //Params missing return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing) } - if ids, err := self.StorDb.GetTPTableIds(attrs.TPid, utils.TBL_TP_ACTION_PLANS, utils.TPDistinctIds{"id"}, nil); err != nil { + if ids, err := self.StorDb.GetTPTableIds(attrs.TPid, utils.TBL_TP_ACTION_PLANS, utils.TPDistinctIds{"id"}, nil, &utils.TPPagination{Page: attrs.Page, ItemsPerPage: attrs.ItemsPerPage, SearchTerm: attrs.SearchTerm}); err != nil { return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) } else if ids == nil { return errors.New(utils.ERR_NOT_FOUND) diff --git a/apier/tpactiontriggers.go b/apier/tpactiontriggers.go index 9d1db099f..c79d7d83c 100644 --- a/apier/tpactiontriggers.go +++ b/apier/tpactiontriggers.go @@ -63,7 +63,10 @@ func (self *ApierV1) GetTPActionTriggers(attrs AttrGetTPActionTriggers, reply *u } type AttrGetTPActionTriggerIds struct { - TPid string // Tariff plan id + TPid string // Tariff plan id + Page int + ItemsPerPage int + SearchTerm string } // Queries ActionTriggers identities on specific tariff plan. @@ -71,7 +74,7 @@ func (self *ApierV1) GetTPActionTriggerIds(attrs AttrGetTPActionTriggerIds, repl if missing := utils.MissingStructFields(&attrs, []string{"TPid"}); len(missing) != 0 { //Params missing return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing) } - if ids, err := self.StorDb.GetTPTableIds(attrs.TPid, utils.TBL_TP_ACTION_TRIGGERS, utils.TPDistinctIds{"id"}, nil); err != nil { + if ids, err := self.StorDb.GetTPTableIds(attrs.TPid, utils.TBL_TP_ACTION_TRIGGERS, utils.TPDistinctIds{"id"}, nil, &utils.TPPagination{Page: attrs.Page, ItemsPerPage: attrs.ItemsPerPage, SearchTerm: attrs.SearchTerm}); err != nil { return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) } else if ids == nil { return errors.New(utils.ERR_NOT_FOUND) diff --git a/apier/tpcdrstats.go b/apier/tpcdrstats.go index 82284362c..318436819 100644 --- a/apier/tpcdrstats.go +++ b/apier/tpcdrstats.go @@ -67,7 +67,10 @@ func (self *ApierV1) GetTPCdrStats(attrs AttrGetTPCdrStats, reply *utils.TPCdrSt } type AttrGetTPCdrStatIds struct { - TPid string // Tariff plan id + TPid string // Tariff plan id + Page int + ItemsPerPage int + SearchTerm string } // Queries CdrStats identities on specific tariff plan. @@ -75,7 +78,7 @@ func (self *ApierV1) GetTPCdrStatsIds(attrs AttrGetTPCdrStatIds, reply *[]string if missing := utils.MissingStructFields(&attrs, []string{"TPid"}); len(missing) != 0 { //Params missing return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing) } - if ids, err := self.StorDb.GetTPTableIds(attrs.TPid, utils.TBL_TP_CDR_STATS, utils.TPDistinctIds{"id"}, nil); err != nil { + if ids, err := self.StorDb.GetTPTableIds(attrs.TPid, utils.TBL_TP_CDR_STATS, utils.TPDistinctIds{"id"}, nil, &utils.TPPagination{Page: attrs.Page, ItemsPerPage: attrs.ItemsPerPage, SearchTerm: attrs.SearchTerm}); err != nil { return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) } else if ids == nil { return errors.New(utils.ERR_NOT_FOUND) diff --git a/apier/tpderivedcharges.go b/apier/tpderivedcharges.go index b2132375d..629b4b579 100644 --- a/apier/tpderivedcharges.go +++ b/apier/tpderivedcharges.go @@ -81,7 +81,10 @@ func (self *ApierV1) GetTPDerivedChargers(attrs AttrGetTPDerivedChargers, reply } type AttrGetTPDerivedChargeIds struct { - TPid string // Tariff plan id + TPid string // Tariff plan id + Page int + ItemsPerPage int + SearchTerm string } // Queries DerivedCharges identities on specific tariff plan. @@ -89,7 +92,7 @@ func (self *ApierV1) GetTPDerivedChargerIds(attrs AttrGetTPDerivedChargeIds, rep if missing := utils.MissingStructFields(&attrs, []string{"TPid"}); len(missing) != 0 { //Params missing return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing) } - if ids, err := self.StorDb.GetTPTableIds(attrs.TPid, utils.TBL_TP_DERIVED_CHARGERS, utils.TPDistinctIds{"loadid", "direction", "tenant", "category", "account", "subject"}, nil); err != nil { + if ids, err := self.StorDb.GetTPTableIds(attrs.TPid, utils.TBL_TP_DERIVED_CHARGERS, utils.TPDistinctIds{"loadid", "direction", "tenant", "category", "account", "subject"}, nil, &utils.TPPagination{Page: attrs.Page, ItemsPerPage: attrs.ItemsPerPage, SearchTerm: attrs.SearchTerm}); err != nil { return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) } else if ids == nil { return errors.New(utils.ERR_NOT_FOUND) diff --git a/apier/tpdestinationrates.go b/apier/tpdestinationrates.go index 3147f69bf..f74e1a60b 100644 --- a/apier/tpdestinationrates.go +++ b/apier/tpdestinationrates.go @@ -60,7 +60,10 @@ func (self *ApierV1) GetTPDestinationRate(attrs AttrGetTPDestinationRate, reply } type AttrTPDestinationRateIds struct { - TPid string // Tariff plan id + TPid string // Tariff plan id + Page int + ItemsPerPage int + SearchTerm string } // Queries DestinationRate identities on specific tariff plan. @@ -68,7 +71,7 @@ func (self *ApierV1) GetTPDestinationRateIds(attrs AttrGetTPRateIds, reply *[]st if missing := utils.MissingStructFields(&attrs, []string{"TPid"}); len(missing) != 0 { //Params missing return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing) } - if ids, err := self.StorDb.GetTPTableIds(attrs.TPid, utils.TBL_TP_DESTINATION_RATES, utils.TPDistinctIds{"id"}, nil); err != nil { + if ids, err := self.StorDb.GetTPTableIds(attrs.TPid, utils.TBL_TP_DESTINATION_RATES, utils.TPDistinctIds{"id"}, nil, &utils.TPPagination{Page: attrs.Page, ItemsPerPage: attrs.ItemsPerPage, SearchTerm: attrs.SearchTerm}); err != nil { return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) } else if ids == nil { return errors.New(utils.ERR_NOT_FOUND) diff --git a/apier/tpdestinations.go b/apier/tpdestinations.go index af4129bdb..26dee35c8 100644 --- a/apier/tpdestinations.go +++ b/apier/tpdestinations.go @@ -59,7 +59,10 @@ func (self *ApierV1) GetTPDestination(attrs AttrGetTPDestination, reply *utils.T } type AttrGetTPDestinationIds struct { - TPid string // Tariff plan id + TPid string // Tariff plan id + Page int + ItemsPerPage int + SearchTerm string } // Queries destination identities on specific tariff plan. @@ -67,7 +70,7 @@ func (self *ApierV1) GetTPDestinationIds(attrs AttrGetTPDestinationIds, reply *[ if missing := utils.MissingStructFields(&attrs, []string{"TPid"}); len(missing) != 0 { //Params missing return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing) } - if ids, err := self.StorDb.GetTPTableIds(attrs.TPid, utils.TBL_TP_DESTINATIONS, utils.TPDistinctIds{"id"}, nil); err != nil { + if ids, err := self.StorDb.GetTPTableIds(attrs.TPid, utils.TBL_TP_DESTINATIONS, utils.TPDistinctIds{"id"}, nil, &utils.TPPagination{Page: attrs.Page, ItemsPerPage: attrs.ItemsPerPage, SearchTerm: attrs.SearchTerm}); err != nil { return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) } else if ids == nil { return errors.New(utils.ERR_NOT_FOUND) diff --git a/apier/tprates.go b/apier/tprates.go index 83c8f44a6..883e95c35 100644 --- a/apier/tprates.go +++ b/apier/tprates.go @@ -60,7 +60,10 @@ func (self *ApierV1) GetTPRate(attrs AttrGetTPRate, reply *utils.TPRate) error { } type AttrGetTPRateIds struct { - TPid string // Tariff plan id + TPid string // Tariff plan id + Page int + ItemsPerPage int + SearchTerm string } // Queries rate identities on specific tariff plan. @@ -68,7 +71,7 @@ func (self *ApierV1) GetTPRateIds(attrs AttrGetTPRateIds, reply *[]string) error if missing := utils.MissingStructFields(&attrs, []string{"TPid"}); len(missing) != 0 { //Params missing return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing) } - if ids, err := self.StorDb.GetTPTableIds(attrs.TPid, utils.TBL_TP_RATES, utils.TPDistinctIds{"id"}, nil); err != nil { + if ids, err := self.StorDb.GetTPTableIds(attrs.TPid, utils.TBL_TP_RATES, utils.TPDistinctIds{"id"}, nil, &utils.TPPagination{Page: attrs.Page, ItemsPerPage: attrs.ItemsPerPage, SearchTerm: attrs.SearchTerm}); err != nil { return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) } else if ids == nil { return errors.New(utils.ERR_NOT_FOUND) diff --git a/apier/tpratingplans.go b/apier/tpratingplans.go index 8cb5ff03f..4b0998be9 100644 --- a/apier/tpratingplans.go +++ b/apier/tpratingplans.go @@ -60,7 +60,10 @@ func (self *ApierV1) GetTPRatingPlan(attrs AttrGetTPRatingPlan, reply *utils.TPR } type AttrGetTPRatingPlanIds struct { - TPid string // Tariff plan id + TPid string // Tariff plan id + Page int + ItemsPerPage int + SearchTerm string } // Queries RatingPlan identities on specific tariff plan. @@ -68,7 +71,7 @@ func (self *ApierV1) GetTPRatingPlanIds(attrs AttrGetTPRatingPlanIds, reply *[]s if missing := utils.MissingStructFields(&attrs, []string{"TPid"}); len(missing) != 0 { //Params missing return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing) } - if ids, err := self.StorDb.GetTPTableIds(attrs.TPid, utils.TBL_TP_RATING_PLANS, utils.TPDistinctIds{"id"}, nil); err != nil { + if ids, err := self.StorDb.GetTPTableIds(attrs.TPid, utils.TBL_TP_RATING_PLANS, utils.TPDistinctIds{"id"}, nil, &utils.TPPagination{Page: attrs.Page, ItemsPerPage: attrs.ItemsPerPage, SearchTerm: attrs.SearchTerm}); err != nil { return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) } else if ids == nil { return errors.New(utils.ERR_NOT_FOUND) diff --git a/apier/tpratingprofiles.go b/apier/tpratingprofiles.go index 0d3db485d..1516fdf8c 100644 --- a/apier/tpratingprofiles.go +++ b/apier/tpratingprofiles.go @@ -82,7 +82,7 @@ func (self *ApierV1) GetTPRatingProfileLoadIds(attrs utils.AttrTPRatingProfileId "tor": attrs.Category, "direction": attrs.Direction, "subject": attrs.Subject, - }); err != nil { + }, nil); err != nil { return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) } else if ids == nil { return errors.New(utils.ERR_NOT_FOUND) @@ -125,7 +125,10 @@ func (self *ApierV1) GetTPRatingProfiles(attrs AttrGetTPRatingProfiles, reply *u } type AttrGetTPRatingProfileIds struct { - TPid string // Tariff plan id + TPid string // Tariff plan id + Page int + ItemsPerPage int + SearchTerm string } // Queries RatingProfiles identities on specific tariff plan. @@ -133,7 +136,7 @@ func (self *ApierV1) GetTPRatingProfileIds(attrs AttrGetTPRatingProfileIds, repl if missing := utils.MissingStructFields(&attrs, []string{"TPid"}); len(missing) != 0 { //Params missing return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing) } - if ids, err := self.StorDb.GetTPTableIds(attrs.TPid, utils.TBL_TP_RATE_PROFILES, utils.TPDistinctIds{"loadid", "direction", "tenant", "category", "subject"}, nil); err != nil { + if ids, err := self.StorDb.GetTPTableIds(attrs.TPid, utils.TBL_TP_RATE_PROFILES, utils.TPDistinctIds{"loadid", "direction", "tenant", "category", "subject"}, nil, &utils.TPPagination{Page: attrs.Page, ItemsPerPage: attrs.ItemsPerPage, SearchTerm: attrs.SearchTerm}); err != nil { return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) } else if ids == nil { return errors.New(utils.ERR_NOT_FOUND) diff --git a/apier/tpsharedgroups.go b/apier/tpsharedgroups.go index 23b788f2c..6288e59d7 100644 --- a/apier/tpsharedgroups.go +++ b/apier/tpsharedgroups.go @@ -67,7 +67,10 @@ func (self *ApierV1) GetTPSharedGroups(attrs AttrGetTPSharedGroups, reply *utils } type AttrGetTPSharedGroupIds struct { - TPid string // Tariff plan id + TPid string // Tariff plan id + Page int + ItemsPerPage int + SearchTerm string } // Queries SharedGroups identities on specific tariff plan. @@ -75,7 +78,7 @@ func (self *ApierV1) GetTPSharedGroupIds(attrs AttrGetTPSharedGroupIds, reply *[ if missing := utils.MissingStructFields(&attrs, []string{"TPid"}); len(missing) != 0 { //Params missing return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing) } - if ids, err := self.StorDb.GetTPTableIds(attrs.TPid, utils.TBL_TP_SHARED_GROUPS, utils.TPDistinctIds{"id"}, nil); err != nil { + if ids, err := self.StorDb.GetTPTableIds(attrs.TPid, utils.TBL_TP_SHARED_GROUPS, utils.TPDistinctIds{"id"}, nil, &utils.TPPagination{Page: attrs.Page, ItemsPerPage: attrs.ItemsPerPage, SearchTerm: attrs.SearchTerm}); err != nil { return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) } else if ids == nil { return errors.New(utils.ERR_NOT_FOUND) diff --git a/apier/tptimings.go b/apier/tptimings.go index 26fd12d77..ddc1f7e1a 100644 --- a/apier/tptimings.go +++ b/apier/tptimings.go @@ -62,7 +62,10 @@ func (self *ApierV1) GetTPTiming(attrs AttrGetTPTiming, reply *utils.ApierTPTimi } type AttrGetTPTimingIds struct { - TPid string // Tariff plan id + TPid string // Tariff plan id + Page int + ItemsPerPage int + SearchTerm string } // Queries timing identities on specific tariff plan. @@ -70,7 +73,7 @@ func (self *ApierV1) GetTPTimingIds(attrs AttrGetTPTimingIds, reply *[]string) e if missing := utils.MissingStructFields(&attrs, []string{"TPid"}); len(missing) != 0 { //Params missing return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing) } - if ids, err := self.StorDb.GetTPTableIds(attrs.TPid, utils.TBL_TP_TIMINGS, utils.TPDistinctIds{"id"}, nil); err != nil { + if ids, err := self.StorDb.GetTPTableIds(attrs.TPid, utils.TBL_TP_TIMINGS, utils.TPDistinctIds{"id"}, nil, &utils.TPPagination{Page: attrs.Page, ItemsPerPage: attrs.ItemsPerPage, SearchTerm: attrs.SearchTerm}); err != nil { return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) } else if ids == nil { return errors.New(utils.ERR_NOT_FOUND) diff --git a/engine/storage_interface.go b/engine/storage_interface.go index 9247d1d19..8adaec5ce 100644 --- a/engine/storage_interface.go +++ b/engine/storage_interface.go @@ -136,7 +136,7 @@ type LoadStorage interface { // Apier functions RemTPData(string, string, ...string) error GetTPIds() ([]string, error) - GetTPTableIds(string, string, utils.TPDistinctIds, map[string]string) ([]string, error) + GetTPTableIds(string, string, utils.TPDistinctIds, map[string]string, *utils.TPPagination) ([]string, error) SetTPTiming(string, *utils.TPTiming) error GetTpTimings(string, string) (map[string]*utils.TPTiming, error) diff --git a/engine/storage_sql.go b/engine/storage_sql.go index 0fde5607a..87d4bc8b8 100644 --- a/engine/storage_sql.go +++ b/engine/storage_sql.go @@ -24,6 +24,7 @@ import ( "encoding/json" "fmt" "io/ioutil" + "log" "path" "strconv" "strings" @@ -109,13 +110,27 @@ func (self *SQLStorage) GetTPIds() ([]string, error) { return ids, nil } -func (self *SQLStorage) GetTPTableIds(tpid, table string, distinct utils.TPDistinctIds, filters map[string]string) ([]string, error) { +func (self *SQLStorage) GetTPTableIds(tpid, table string, distinct utils.TPDistinctIds, filters map[string]string, pagination *utils.TPPagination) ([]string, error) { + qry := fmt.Sprintf("SELECT DISTINCT %s FROM %s where tpid='%s'", distinct, table, tpid) for key, value := range filters { if key != "" && value != "" { qry += fmt.Sprintf(" AND %s='%s'", key, value) } } + if pagination.SearchTerm != "" { + qry += fmt.Sprintf(" AND (%s LIKE '%%%s%%'", distinct[0], pagination.SearchTerm) + for _, d := range distinct[1:] { + qry += fmt.Sprintf(" OR %s LIKE '%%%s%%'", d, pagination.SearchTerm) + } + qry += fmt.Sprintf(")") + log.Print("QUERY: ", qry) + } + if pagination != nil { + limLow, limHigh := pagination.GetLimit() + qry += fmt.Sprintf(" LIMIT %d,%d", limLow, limHigh) + } + rows, err := self.Db.Query(qry) if err != nil { return nil, err diff --git a/utils/apitpdata.go b/utils/apitpdata.go index 5064bc9d6..477cd9518 100644 --- a/utils/apitpdata.go +++ b/utils/apitpdata.go @@ -20,17 +20,33 @@ package utils import ( "fmt" + "math" "sort" "strings" "time" ) +// Used to extract ids from stordb type TPDistinctIds []string func (tpdi TPDistinctIds) String() string { return strings.Join(tpdi, ",") } +// To paginate stuff from stordb (e.g. ids) +type TPPagination struct { + Page int + ItemsPerPage int + SearchTerm string +} + +func (pag *TPPagination) GetLimit() (low, high int) { + if pag.ItemsPerPage == 0 { + return 0, math.MaxInt32 + } + return pag.Page * pag.ItemsPerPage, pag.ItemsPerPage +} + type TPDestination struct { TPid string // Tariff plan id DestinationId string // Destination id