diff --git a/apier/v1/aliases.go b/apier/v1/aliases.go
index a94bddfff..e17798433 100644
--- a/apier/v1/aliases.go
+++ b/apier/v1/aliases.go
@@ -18,6 +18,12 @@ along with this program. If not, see
package v1
+import (
+ "errors"
+ "github.com/cgrates/cgrates/engine"
+ "github.com/cgrates/cgrates/utils"
+)
+
type AttrAddRatingSubjectAliases struct {
Tenant, Category, Subject string
Aliases []string
@@ -28,7 +34,6 @@ type AttrAddAccountAliases struct {
Aliases []string
}
-/*
// Add aliases configured for a rating profile subject
func (self *ApierV1) AddRatingSubjectAliases(attrs AttrAddRatingSubjectAliases, reply *string) error {
if missing := utils.MissingStructFields(&attrs, []string{"Tenant", "Subject", "Aliases"}); len(missing) != 0 {
@@ -44,8 +49,9 @@ func (self *ApierV1) AddRatingSubjectAliases(attrs AttrAddRatingSubjectAliases,
var ignr string
for _, alias := range attrs.Aliases {
if err := aliases.SetAlias(
- engine.Alias{Direction: utils.META_OUT, Tenant: attrs.Tenant, Category: attrs.Category, Account: alias, Subject: alias, Context: utils.ALIAS_GROUP_RP,
- Values: engine.AliasValues{&engine.AliasValue{DestinationId: utils.META_ANY, Alias: attrs.Subject, Weight: 10.0}}}, &ignr); err != nil {
+ engine.Alias{Direction: utils.META_OUT, Tenant: attrs.Tenant, Category: attrs.Category, Account: alias, Subject: alias, Context: utils.ALIAS_CONTEXT_RATING,
+ Values: engine.AliasValues{&engine.AliasValue{DestinationId: utils.META_ANY,
+ Pairs: engine.AliasPairs{"Subject": map[string]string{alias: attrs.Subject}}, Weight: 10.0}}}, &ignr); err != nil {
return utils.NewErrServerError(err)
}
}
@@ -63,7 +69,7 @@ func (self *ApierV1) RemRatingSubjectAliases(tenantRatingSubject engine.TenantRa
return errors.New("ALIASES_NOT_ENABLED")
}
var reverseAliases map[string][]*engine.Alias
- if err := aliases.GetReverseAlias(engine.AttrReverseAlias{Alias: tenantRatingSubject.Subject, Context: utils.ALIAS_GROUP_RP}, &reverseAliases); err != nil {
+ if err := aliases.GetReverseAlias(engine.AttrReverseAlias{Target: "Subject", Alias: tenantRatingSubject.Subject, Context: utils.ALIAS_CONTEXT_RATING}, &reverseAliases); err != nil {
return utils.NewErrServerError(err)
}
var ignr string
@@ -95,8 +101,9 @@ func (self *ApierV1) AddAccountAliases(attrs AttrAddAccountAliases, reply *strin
var ignr string
for _, alias := range attrs.Aliases {
if err := aliases.SetAlias(
- engine.Alias{Direction: utils.META_OUT, Tenant: attrs.Tenant, Category: attrs.Category, Account: alias, Subject: utils.META_ANY, Context: utils.ALIAS_GROUP_ACC,
- Values: engine.AliasValues{&engine.AliasValue{DestinationId: utils.META_ANY, Alias: attrs.Account, Weight: 10.0}}}, &ignr); err != nil {
+ engine.Alias{Direction: utils.META_OUT, Tenant: attrs.Tenant, Category: attrs.Category, Account: alias, Subject: alias, Context: utils.ALIAS_CONTEXT_RATING,
+ Values: engine.AliasValues{&engine.AliasValue{DestinationId: utils.META_ANY,
+ Pairs: engine.AliasPairs{"Account": map[string]string{alias: attrs.Account}}, Weight: 10.0}}}, &ignr); err != nil {
return utils.NewErrServerError(err)
}
}
@@ -114,7 +121,7 @@ func (self *ApierV1) RemAccountAliases(tenantAccount engine.TenantAccount, reply
return errors.New("ALIASES_NOT_ENABLED")
}
var reverseAliases map[string][]*engine.Alias
- if err := aliases.GetReverseAlias(engine.AttrReverseAlias{Alias: tenantAccount.Account, Context: utils.ALIAS_GROUP_ACC}, &reverseAliases); err != nil {
+ if err := aliases.GetReverseAlias(engine.AttrReverseAlias{Target: "Account", Alias: tenantAccount.Account, Context: utils.ALIAS_CONTEXT_RATING}, &reverseAliases); err != nil {
return utils.NewErrServerError(err)
}
var ignr string
@@ -131,4 +138,3 @@ func (self *ApierV1) RemAccountAliases(tenantAccount engine.TenantAccount, reply
*reply = utils.OK
return nil
}
-*/
diff --git a/data/storage/mysql/create_tariffplan_tables.sql b/data/storage/mysql/create_tariffplan_tables.sql
index bfebe9b8a..0678da19a 100644
--- a/data/storage/mysql/create_tariffplan_tables.sql
+++ b/data/storage/mysql/create_tariffplan_tables.sql
@@ -367,11 +367,14 @@ CREATE TABLE tp_aliases (
`category` varchar(64) NOT NULL,
`account` varchar(64) NOT NULL,
`subject` varchar(64) NOT NULL,
- `group` varchar(64) NOT NULL,
`destination_id` varchar(64) NOT NULL,
+ `context` varchar(64) NOT NULL,
+ `target` varchar(64) NOT NULL,
+ `original` varchar(64) NOT NULL,
`alias` varchar(64) NOT NULL,
`weight` decimal(8,2) NOT NULL,
`created_at` TIMESTAMP,
PRIMARY KEY (`id`),
- KEY `tpid` (`tpid`)
+ KEY `tpid` (`tpid`),
+ UNIQUE KEY `unique_tp_aliases` (`tpid`,`direction`,`tenant`,`category`,`account`,`subject`,`context`, `target`)
);
diff --git a/data/storage/postgres/create_tariffplan_tables.sql b/data/storage/postgres/create_tariffplan_tables.sql
index 33bc64170..004a53e36 100644
--- a/data/storage/postgres/create_tariffplan_tables.sql
+++ b/data/storage/postgres/create_tariffplan_tables.sql
@@ -357,17 +357,19 @@ CREATE INDEX tpusers_idx ON tp_users (tpid,tenant,user_name);
DROP TABLE IF EXISTS tp_aliases;
CREATE TABLE tp_aliases (
"id" SERIAL PRIMARY KEY,
- "tpid" VARCHAR(64) NOT NULL,
- "direction" VARCHAR(8) NOT NULL,
- "tenant" VARCHAR(64) NOT NULL,
- "category" VARCHAR(32) NOT NULL,
- "account" VARCHAR(64) NOT NULL,
- "subject" VARCHAR(64) NOT NULL,
- "group" VARCHAR(64) NOT NULL,
- "destination_id" VARCHAR(64) NOT NULL,
- "alias" VARCHAR(64) NOT NULL,
+ "tpid" varchar(64) NOT NULL,
+ "direction" varchar(8) NOT NULL,
+ "tenant" varchar(64) NOT NULL,
+ "category" varchar(64) NOT NULL,
+ "account" varchar(64) NOT NULL,
+ "subject" varchar(64) NOT NULL,
+ "destination_id" varchar(64) NOT NULL,
+ "context" varchar(64) NOT NULL,
+ "target" varchar(64) NOT NULL,
+ "original" varchar(64) NOT NULL,
+ "alias" varchar(64) NOT NULL,
"weight" NUMERIC(8,2) NOT NULL,
"created_at" TIMESTAMP
);
CREATE INDEX tpaliases_tpid_idx ON tp_aliases (tpid);
-CREATE INDEX tpaliases_idx ON tp_aliases ("tpid","direction","tenant","category","account","subject","group");
+CREATE INDEX tpaliases_idx ON tp_aliases ("tpid","direction","tenant","category","account","subject","context","target");
diff --git a/data/tariffplans/prepaid1centpsec/LcrRules.csv b/data/tariffplans/prepaid1centpsec/LcrRules.csv
new file mode 100644
index 000000000..e69de29bb
diff --git a/data/tariffplans/tutorial/Actions.csv b/data/tariffplans/tutorial/Actions.csv
index cb3537311..a3c6bd659 100644
--- a/data/tariffplans/tutorial/Actions.csv
+++ b/data/tariffplans/tutorial/Actions.csv
@@ -1,10 +1,10 @@
#ActionsTag[0],Action[1],ExtraParameters[2],BalanceTag[3],BalanceType[4],Direction[5],Category[6],DestinationTag[7],RatingSubject[8],SharedGroup[9],ExpiryTime[10],TimingTags[11],Units[12],BalanceWeight[13],BalanceDisabled[14],Weight[15]
-TOPUP_RST_10,*topup_reset,,,*monetary,*out,,*any,,,*unlimited,,10,10,,false,10
-TOPUP_RST_5,*topup_reset,,,*monetary,*out,,*any,,,*unlimited,,5,20,,false,10
-TOPUP_RST_5,*topup_reset,,,*voice,*out,,DST_1002,SPECIAL_1002,,*unlimited,,90,20,,false,10
-TOPUP_120_DST1003,*topup_reset,,,*voice,*out,,DST_1003,,,*unlimited,,120,20,,false,10
-TOPUP_RST_SHARED_5,*topup,,,*monetary,*out,,*any,,SHARED_A,*unlimited,,5,10,,false,10
-SHARED_A_0,*topup_reset,,,*monetary,*out,,*any,,SHARED_A,*unlimited,,0,10,,false,10
-LOG_WARNING,*log,,,,,,,,,,,,,,false,10
-DISABLE_AND_LOG,*log,,,,,,,,,,,,,,false,10
-DISABLE_AND_LOG,*disable_account,,,,,,,,,,,,,,false,10
+TOPUP_RST_10,*topup_reset,,,*monetary,*out,,*any,,,*unlimited,,10,10,false,10
+TOPUP_RST_5,*topup_reset,,,*monetary,*out,,*any,,,*unlimited,,5,20,false,10
+TOPUP_RST_5,*topup_reset,,,*voice,*out,,DST_1002,SPECIAL_1002,,*unlimited,,90,20,false,10
+TOPUP_120_DST1003,*topup_reset,,,*voice,*out,,DST_1003,,,*unlimited,,120,20,false,10
+TOPUP_RST_SHARED_5,*topup,,,*monetary,*out,,*any,,SHARED_A,*unlimited,,5,10,false,10
+SHARED_A_0,*topup_reset,,,*monetary,*out,,*any,,SHARED_A,*unlimited,,0,10,false,10
+LOG_WARNING,*log,,,,,,,,,,,,,false,10
+DISABLE_AND_LOG,*log,,,,,,,,,,,,,false,10
+DISABLE_AND_LOG,*disable_account,,,,,,,,,,,,,false,10
diff --git a/data/tariffplans/tutorial/Aliases.csv b/data/tariffplans/tutorial/Aliases.csv
index 411504160..7b966debf 100644
--- a/data/tariffplans/tutorial/Aliases.csv
+++ b/data/tariffplans/tutorial/Aliases.csv
@@ -1,3 +1,3 @@
-#Direction,Tenant,Category,Account,Subject,DestinationId,Context,Target,Original,Alias,Weight
-*out,cgrates.org,call,1006,1006,*any,*rating,Subject,1006,1001,10
-*out,cgrates.org,call,1006,1006,*any,*rating,Account,1006,1002,10
+#Direction,Tenant,Category,Account,Subject,DestinationId,Context,Target,Original,Alias,Weight
+*out,cgrates.org,call,1006,1006,*any,*rating,Subject,1006,1001,10
+*out,cgrates.org,call,1006,1006,*any,*rating,Account,1006,1002,10
diff --git a/general_tests/tutorial_local_test.go b/general_tests/tutorial_local_test.go
index 59b014f94..27ee9d836 100644
--- a/general_tests/tutorial_local_test.go
+++ b/general_tests/tutorial_local_test.go
@@ -117,7 +117,7 @@ func TestTutLocalCacheStats(t *testing.T) {
}
var rcvStats *utils.CacheStats
- expectedStats := &utils.CacheStats{Destinations: 4, RatingPlans: 3, RatingProfiles: 8, Actions: 7, SharedGroups: 1, Aliases: 2,
+ expectedStats := &utils.CacheStats{Destinations: 4, RatingPlans: 3, RatingProfiles: 8, Actions: 7, SharedGroups: 1, Aliases: 1,
DerivedChargers: 1, LcrProfiles: 5, CdrStats: 6, Users: 3, LastLoadId: loadInst.LoadId, LastLoadTime: loadInst.LoadTime.Format(time.RFC3339)}
var args utils.AttrCacheStats
if err := tutLocalRpc.Call("ApierV1.GetCacheStats", args, &rcvStats); err != nil {