mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-25 09:08:45 +05:00
@@ -167,62 +167,58 @@ func NewAliasHandler(accountingDb AccountingStorage) *AliasHandler {
|
||||
}
|
||||
}
|
||||
|
||||
func (am *AliasHandler) SetAlias(al *Alias, reply *string) error {
|
||||
am.mu.Lock()
|
||||
defer am.mu.Unlock()
|
||||
|
||||
if err := am.accountingDb.SetAlias(al); err != nil {
|
||||
*reply = err.Error()
|
||||
return err
|
||||
} //add to cache
|
||||
|
||||
aliasesChanged := []string{utils.ALIASES_PREFIX + al.GetId()}
|
||||
if err := am.accountingDb.CacheAccountingPrefixValues(map[string][]string{utils.ALIASES_PREFIX: aliasesChanged}); err != nil {
|
||||
return utils.NewErrServerError(err)
|
||||
}
|
||||
*reply = utils.OK
|
||||
return nil
|
||||
type AttrAddAlias struct {
|
||||
Alias *Alias
|
||||
Overwrite bool
|
||||
}
|
||||
|
||||
func (am *AliasHandler) UpdateAlias(al *Alias, reply *string) error {
|
||||
func (am *AliasHandler) SetAlias(attr *AttrAddAlias, reply *string) error {
|
||||
am.mu.Lock()
|
||||
defer am.mu.Unlock()
|
||||
// get previous value
|
||||
oldAlias, err := am.accountingDb.GetAlias(al.GetId(), false)
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
var oldAlias *Alias
|
||||
if !attr.Overwrite { // get previous value
|
||||
oldAlias, _ = am.accountingDb.GetAlias(attr.Alias.GetId(), false)
|
||||
}
|
||||
for _, value := range al.Values {
|
||||
found := false
|
||||
if value.DestinationId == "" {
|
||||
value.DestinationId = utils.ANY
|
||||
|
||||
if attr.Overwrite || oldAlias == nil {
|
||||
if err := am.accountingDb.SetAlias(attr.Alias); err != nil {
|
||||
*reply = err.Error()
|
||||
return err
|
||||
}
|
||||
for _, oldValue := range oldAlias.Values {
|
||||
if oldValue.DestinationId == value.DestinationId {
|
||||
for target, origAliasMap := range value.Pairs {
|
||||
for orig, alias := range origAliasMap {
|
||||
if oldValue.Pairs[target] == nil {
|
||||
oldValue.Pairs[target] = make(map[string]string)
|
||||
} else {
|
||||
for _, value := range attr.Alias.Values {
|
||||
found := false
|
||||
if value.DestinationId == "" {
|
||||
value.DestinationId = utils.ANY
|
||||
}
|
||||
for _, oldValue := range oldAlias.Values {
|
||||
if oldValue.DestinationId == value.DestinationId {
|
||||
for target, origAliasMap := range value.Pairs {
|
||||
for orig, alias := range origAliasMap {
|
||||
if oldValue.Pairs[target] == nil {
|
||||
oldValue.Pairs[target] = make(map[string]string)
|
||||
}
|
||||
oldValue.Pairs[target][orig] = alias
|
||||
}
|
||||
oldValue.Pairs[target][orig] = alias
|
||||
}
|
||||
oldValue.Weight = value.Weight
|
||||
found = true
|
||||
break
|
||||
}
|
||||
oldValue.Weight = value.Weight
|
||||
found = true
|
||||
break
|
||||
}
|
||||
if !found {
|
||||
oldAlias.Values = append(oldAlias.Values, value)
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
oldAlias.Values = append(oldAlias.Values, value)
|
||||
if err := am.accountingDb.SetAlias(oldAlias); err != nil {
|
||||
*reply = err.Error()
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if err := am.accountingDb.SetAlias(oldAlias); err != nil {
|
||||
*reply = err.Error()
|
||||
return err
|
||||
} //add to cache
|
||||
|
||||
aliasesChanged := []string{utils.ALIASES_PREFIX + al.GetId()}
|
||||
//add to cache
|
||||
aliasesChanged := []string{utils.ALIASES_PREFIX + attr.Alias.GetId()}
|
||||
if err := am.accountingDb.CacheAccountingPrefixValues(map[string][]string{utils.ALIASES_PREFIX: aliasesChanged}); err != nil {
|
||||
return utils.NewErrServerError(err)
|
||||
}
|
||||
|
||||
@@ -47,18 +47,21 @@ func TestAliasesGetMatchingAlias(t *testing.T) {
|
||||
|
||||
func TestAliasesSetters(t *testing.T) {
|
||||
var out string
|
||||
if err := aliasService.Call("AliasesV1.SetAlias", &Alias{
|
||||
Direction: "*out",
|
||||
Tenant: "cgrates.org",
|
||||
Category: "call",
|
||||
Account: "set",
|
||||
Subject: "set",
|
||||
Context: "*rating",
|
||||
Values: AliasValues{&AliasValue{
|
||||
DestinationId: utils.ANY,
|
||||
Pairs: AliasPairs{"Account": map[string]string{"1234": "1235"}},
|
||||
Weight: 10,
|
||||
}},
|
||||
if err := aliasService.Call("AliasesV1.SetAlias", &AttrAddAlias{
|
||||
Alias: &Alias{
|
||||
Direction: "*out",
|
||||
Tenant: "cgrates.org",
|
||||
Category: "call",
|
||||
Account: "set",
|
||||
Subject: "set",
|
||||
Context: "*rating",
|
||||
Values: AliasValues{&AliasValue{
|
||||
DestinationId: utils.ANY,
|
||||
Pairs: AliasPairs{"Account": map[string]string{"1234": "1235"}},
|
||||
Weight: 10,
|
||||
}},
|
||||
},
|
||||
Overwrite: true,
|
||||
}, &out); err != nil || out != utils.OK {
|
||||
t.Error("Error setting alias: ", err, out)
|
||||
}
|
||||
@@ -74,18 +77,21 @@ func TestAliasesSetters(t *testing.T) {
|
||||
t.Errorf("Error getting alias: %+v", r)
|
||||
}
|
||||
|
||||
if err := aliasService.Call("AliasesV1.UpdateAlias", &Alias{
|
||||
Direction: "*out",
|
||||
Tenant: "cgrates.org",
|
||||
Category: "call",
|
||||
Account: "set",
|
||||
Subject: "set",
|
||||
Context: "*rating",
|
||||
Values: AliasValues{&AliasValue{
|
||||
DestinationId: utils.ANY,
|
||||
Pairs: AliasPairs{"Subject": map[string]string{"1234": "1235"}},
|
||||
Weight: 10,
|
||||
}},
|
||||
if err := aliasService.Call("AliasesV1.SetAlias", &AttrAddAlias{
|
||||
Alias: &Alias{
|
||||
Direction: "*out",
|
||||
Tenant: "cgrates.org",
|
||||
Category: "call",
|
||||
Account: "set",
|
||||
Subject: "set",
|
||||
Context: "*rating",
|
||||
Values: AliasValues{&AliasValue{
|
||||
DestinationId: utils.ANY,
|
||||
Pairs: AliasPairs{"Subject": map[string]string{"1234": "1235"}},
|
||||
Weight: 10,
|
||||
}},
|
||||
},
|
||||
Overwrite: false,
|
||||
}, &out); err != nil || out != utils.OK {
|
||||
t.Error("Error updateing alias: ", err, out)
|
||||
}
|
||||
@@ -103,18 +109,21 @@ func TestAliasesSetters(t *testing.T) {
|
||||
r.Values[0].Pairs["Account"]["1234"] != "1235" {
|
||||
t.Errorf("Error getting alias: %+v", r.Values[0])
|
||||
}
|
||||
if err := aliasService.Call("AliasesV1.UpdateAlias", &Alias{
|
||||
Direction: "*out",
|
||||
Tenant: "cgrates.org",
|
||||
Category: "call",
|
||||
Account: "set",
|
||||
Subject: "set",
|
||||
Context: "*rating",
|
||||
Values: AliasValues{&AliasValue{
|
||||
DestinationId: utils.ANY,
|
||||
Pairs: AliasPairs{"Subject": map[string]string{"1111": "2222"}},
|
||||
Weight: 10,
|
||||
}},
|
||||
if err := aliasService.Call("AliasesV1.SetAlias", &AttrAddAlias{
|
||||
Alias: &Alias{
|
||||
Direction: "*out",
|
||||
Tenant: "cgrates.org",
|
||||
Category: "call",
|
||||
Account: "set",
|
||||
Subject: "set",
|
||||
Context: "*rating",
|
||||
Values: AliasValues{&AliasValue{
|
||||
DestinationId: utils.ANY,
|
||||
Pairs: AliasPairs{"Subject": map[string]string{"1111": "2222"}},
|
||||
Weight: 10,
|
||||
}},
|
||||
},
|
||||
Overwrite: false,
|
||||
}, &out); err != nil || out != utils.OK {
|
||||
t.Error("Error updateing alias: ", err, out)
|
||||
}
|
||||
@@ -128,18 +137,21 @@ func TestAliasesSetters(t *testing.T) {
|
||||
}, r); err != nil || len(r.Values) != 1 || len(r.Values[0].Pairs) != 2 || r.Values[0].Pairs["Subject"]["1111"] != "2222" {
|
||||
t.Errorf("Error getting alias: %+v", r.Values[0].Pairs["Subject"])
|
||||
}
|
||||
if err := aliasService.Call("AliasesV1.UpdateAlias", &Alias{
|
||||
Direction: "*out",
|
||||
Tenant: "cgrates.org",
|
||||
Category: "call",
|
||||
Account: "set",
|
||||
Subject: "set",
|
||||
Context: "*rating",
|
||||
Values: AliasValues{&AliasValue{
|
||||
DestinationId: "NAT",
|
||||
Pairs: AliasPairs{"Subject": map[string]string{"3333": "4444"}},
|
||||
Weight: 10,
|
||||
}},
|
||||
if err := aliasService.Call("AliasesV1.SetAlias", &AttrAddAlias{
|
||||
Alias: &Alias{
|
||||
Direction: "*out",
|
||||
Tenant: "cgrates.org",
|
||||
Category: "call",
|
||||
Account: "set",
|
||||
Subject: "set",
|
||||
Context: "*rating",
|
||||
Values: AliasValues{&AliasValue{
|
||||
DestinationId: "NAT",
|
||||
Pairs: AliasPairs{"Subject": map[string]string{"3333": "4444"}},
|
||||
Weight: 10,
|
||||
}},
|
||||
},
|
||||
Overwrite: false,
|
||||
}, &out); err != nil || out != utils.OK {
|
||||
t.Error("Error updateing alias: ", err, out)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user