mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
ApierV1 TPActionTimings set with duplicated and remove
This commit is contained in:
@@ -25,22 +25,17 @@ import (
|
||||
)
|
||||
|
||||
// Creates a new ActionTimings profile within a tariff plan
|
||||
func (self *ApierV1) SetTPActionTimings(attrs utils.ApiTPActionTimings, reply *string) error {
|
||||
func (self *ApierV1) SetTPActionTimings(attrs utils.TPActionTimings, reply *string) error {
|
||||
if missing := utils.MissingStructFields(&attrs, []string{"TPid", "ActionTimingsId", "ActionTimings"}); len(missing) != 0 {
|
||||
return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing)
|
||||
}
|
||||
for _, at := range attrs.ActionTimings {
|
||||
requiredFields := []string{"ActionsId", "TimingId", "Weight"}
|
||||
if missing := utils.MissingStructFields(&at, requiredFields); len(missing) != 0 {
|
||||
if missing := utils.MissingStructFields(at, requiredFields); len(missing) != 0 {
|
||||
return fmt.Errorf("%s:Action:%s:%v", utils.ERR_MANDATORY_IE_MISSING, at.ActionsId, missing)
|
||||
}
|
||||
}
|
||||
if exists, err := self.StorDb.ExistsTPActionTimings(attrs.TPid, attrs.ActionTimingsId); err != nil {
|
||||
return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error())
|
||||
} else if exists {
|
||||
return errors.New(utils.ERR_DUPLICATE)
|
||||
}
|
||||
if err := self.StorDb.SetTPActionTimings(attrs.TPid, map[string][]*utils.ApiActionTiming{attrs.ActionTimingsId: attrs.ActionTimings}); err != nil {
|
||||
if err := self.StorDb.SetTPActionTimings(attrs.TPid, map[string][]*utils.TPActionTiming{attrs.ActionTimingsId: attrs.ActionTimings}); err != nil {
|
||||
return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error())
|
||||
}
|
||||
*reply = "OK"
|
||||
@@ -53,7 +48,7 @@ type AttrGetTPActionTimings struct {
|
||||
}
|
||||
|
||||
// Queries specific ActionTimings profile on tariff plan
|
||||
func (self *ApierV1) GetTPActionTimings(attrs AttrGetTPActionTimings, reply *utils.ApiTPActionTimings) error {
|
||||
func (self *ApierV1) GetTPActionTimings(attrs AttrGetTPActionTimings, reply *utils.TPActionTimings) error {
|
||||
if missing := utils.MissingStructFields(&attrs, []string{"TPid", "ActionTimingsId"}); len(missing) != 0 { //Params missing
|
||||
return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing)
|
||||
}
|
||||
@@ -62,7 +57,7 @@ func (self *ApierV1) GetTPActionTimings(attrs AttrGetTPActionTimings, reply *uti
|
||||
} else if len(ats) == 0 {
|
||||
return errors.New(utils.ERR_NOT_FOUND)
|
||||
} else { // Got the data we need, convert it
|
||||
atRply := &utils.ApiTPActionTimings{attrs.TPid, attrs.ActionTimingsId, ats[attrs.ActionTimingsId]}
|
||||
atRply := &utils.TPActionTimings{attrs.TPid, attrs.ActionTimingsId, ats[attrs.ActionTimingsId]}
|
||||
*reply = *atRply
|
||||
}
|
||||
return nil
|
||||
@@ -86,3 +81,16 @@ func (self *ApierV1) GetTPActionTimingIds(attrs AttrGetTPActionTimingIds, reply
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Removes specific ActionTimings on Tariff plan
|
||||
func (self *ApierV1) RemTPActionTimings(attrs AttrGetTPActionTimings, reply *string) error {
|
||||
if missing := utils.MissingStructFields(&attrs, []string{"TPid", "ActionTimingsId"}); len(missing) != 0 { //Params missing
|
||||
return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing)
|
||||
}
|
||||
if err := self.StorDb.RemTPData(utils.TBL_TP_ACTION_TIMINGS, attrs.TPid, attrs.ActionTimingsId); err != nil {
|
||||
return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error())
|
||||
} else {
|
||||
*reply = "OK"
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -131,8 +131,8 @@ type LoadStorage interface {
|
||||
GetTPActions(string, string) (*utils.TPActions, error)
|
||||
GetTPActionIds(string) ([]string, error)
|
||||
ExistsTPActionTimings(string, string) (bool, error)
|
||||
SetTPActionTimings(string, map[string][]*utils.ApiActionTiming) error
|
||||
GetTPActionTimings(string, string) (map[string][]*utils.ApiActionTiming, error)
|
||||
SetTPActionTimings(string, map[string][]*utils.TPActionTiming) error
|
||||
GetTPActionTimings(string, string) (map[string][]*utils.TPActionTiming, error)
|
||||
GetTPActionTimingIds(string) ([]string, error)
|
||||
ExistsTPActionTriggers(string, string) (bool, error)
|
||||
SetTPActionTriggers(string, map[string][]*ActionTrigger) error
|
||||
@@ -148,7 +148,7 @@ type LoadStorage interface {
|
||||
GetTpRatingPlans(string, string) (*utils.TPRatingPlan, error)
|
||||
GetTpRatingProfiles(string, string) (map[string]*utils.TPRatingProfile, error)
|
||||
GetTpActions(string, string) (map[string][]*Action, error)
|
||||
GetTpActionTimings(string, string) (map[string][]*utils.ApiActionTiming, error)
|
||||
GetTpActionTimings(string, string) (map[string][]*utils.TPActionTiming, error)
|
||||
GetTpActionTriggers(string, string) (map[string][]*utils.ApiActionTrigger, error)
|
||||
GetTpAccountActions(string, string) (map[string]*AccountAction, error)
|
||||
}
|
||||
|
||||
@@ -630,30 +630,31 @@ func (self *SQLStorage) ExistsTPActionTimings(tpid, atId string) (bool, error) {
|
||||
}
|
||||
|
||||
// Sets actionTimings in sqlDB. Imput is expected in form map[actionTimingId][]rows, eg a full .csv file content
|
||||
func (self *SQLStorage) SetTPActionTimings(tpid string, ats map[string][]*utils.ApiActionTiming) error {
|
||||
func (self *SQLStorage) SetTPActionTimings(tpid string, ats map[string][]*utils.TPActionTiming) error {
|
||||
if len(ats) == 0 {
|
||||
return nil //Nothing to set
|
||||
}
|
||||
qry := fmt.Sprintf("INSERT INTO %s (tpid,tag,actions_tag,timing_tag,weight) VALUES ", utils.TBL_TP_ACTION_TIMINGS)
|
||||
vals := ""
|
||||
i := 0
|
||||
for atId, atRows := range ats {
|
||||
for _, at := range atRows {
|
||||
if i != 0 { //Consecutive values after the first will be prefixed with "," as separator
|
||||
qry += ","
|
||||
vals += ","
|
||||
}
|
||||
qry += fmt.Sprintf("('%s','%s','%s','%s',%f)",
|
||||
vals += fmt.Sprintf("('%s','%s','%s','%s',%f)",
|
||||
tpid, atId, at.ActionsId, at.TimingId, at.Weight)
|
||||
i++
|
||||
}
|
||||
}
|
||||
qry := fmt.Sprintf("INSERT INTO %s (tpid,tag,actions_tag,timing_tag,weight) VALUES %s ON DUPLICATE KEY UPDATE timing_tag=values(timing_tag),weight=values(weight)", utils.TBL_TP_ACTION_TIMINGS, vals)
|
||||
if _, err := self.Db.Exec(qry); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *SQLStorage) GetTPActionTimings(tpid, atId string) (map[string][]*utils.ApiActionTiming, error) {
|
||||
ats := make(map[string][]*utils.ApiActionTiming)
|
||||
func (self *SQLStorage) GetTPActionTimings(tpid, atId string) (map[string][]*utils.TPActionTiming, error) {
|
||||
ats := make(map[string][]*utils.TPActionTiming)
|
||||
q := fmt.Sprintf("SELECT tag,actions_tag,timing_tag,weight FROM %s WHERE tpid='%s'", utils.TBL_TP_ACTION_TIMINGS, tpid)
|
||||
if atId != "" {
|
||||
q += fmt.Sprintf(" AND tag='%s'", atId)
|
||||
@@ -671,7 +672,7 @@ func (self *SQLStorage) GetTPActionTimings(tpid, atId string) (map[string][]*uti
|
||||
if err = rows.Scan(&tag, &actionsId, &timingId, &weight); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
ats[tag] = append(ats[tag], &utils.ApiActionTiming{actionsId, timingId, weight})
|
||||
ats[tag] = append(ats[tag], &utils.TPActionTiming{actionsId, timingId, weight})
|
||||
}
|
||||
return ats, nil
|
||||
}
|
||||
@@ -1177,7 +1178,7 @@ func (self *SQLStorage) GetTpActions(tpid, tag string) (map[string][]*Action, er
|
||||
return as, nil
|
||||
}
|
||||
|
||||
func (self *SQLStorage) GetTpActionTimings(tpid, tag string) (map[string][]*utils.ApiActionTiming, error) {
|
||||
func (self *SQLStorage) GetTpActionTimings(tpid, tag string) (map[string][]*utils.TPActionTiming, error) {
|
||||
q := fmt.Sprintf("SELECT tag,actions_tag,timing_tag,weight FROM %s WHERE tpid='%s'", utils.TBL_TP_ACTION_TIMINGS, tpid)
|
||||
if tag != "" {
|
||||
q += fmt.Sprintf(" AND tag='%s'", tag)
|
||||
@@ -1187,14 +1188,14 @@ func (self *SQLStorage) GetTpActionTimings(tpid, tag string) (map[string][]*util
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
ats := make(map[string][]*utils.ApiActionTiming)
|
||||
ats := make(map[string][]*utils.TPActionTiming)
|
||||
for rows.Next() {
|
||||
var weight float64
|
||||
var tag, actions_tag, timing_tag string
|
||||
if err := rows.Scan(&tag, &actions_tag, &timing_tag, &weight); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
at := &utils.ApiActionTiming {
|
||||
at := &utils.TPActionTiming {
|
||||
ActionsId: tag,
|
||||
TimingId: timing_tag,
|
||||
Weight: weight,
|
||||
|
||||
@@ -355,14 +355,14 @@ func (self *TPCSVImporter) importActionTimings(fn string) error {
|
||||
}
|
||||
continue
|
||||
}
|
||||
at := []*utils.ApiActionTiming{
|
||||
&utils.ApiActionTiming{
|
||||
at := []*utils.TPActionTiming{
|
||||
&utils.TPActionTiming{
|
||||
ActionsId: actionsTag,
|
||||
TimingId: timingTag,
|
||||
Weight: weight,
|
||||
},
|
||||
}
|
||||
if err := self.StorDb.SetTPActionTimings(self.TPid, map[string][]*utils.ApiActionTiming{tag: at}); err != nil {
|
||||
if err := self.StorDb.SetTPActionTimings(self.TPid, map[string][]*utils.TPActionTiming{tag: at}); err != nil {
|
||||
if self.Verbose {
|
||||
log.Printf("Ignoring line %d, storDb operational error: <%s> ", lineNr, err.Error())
|
||||
}
|
||||
|
||||
@@ -164,13 +164,13 @@ type TPAction struct {
|
||||
Weight float64 // Action's weight
|
||||
}
|
||||
|
||||
type ApiTPActionTimings struct {
|
||||
type TPActionTimings struct {
|
||||
TPid string // Tariff plan id
|
||||
ActionTimingsId string // ActionTimings id
|
||||
ActionTimings []*ApiActionTiming // Set of ActionTiming bindings this profile will group
|
||||
ActionTimings []*TPActionTiming // Set of ActionTiming bindings this profile will group
|
||||
}
|
||||
|
||||
type ApiActionTiming struct {
|
||||
type TPActionTiming struct {
|
||||
ActionsId string // Actions id
|
||||
TimingId string // Timing profile id
|
||||
Weight float64 // Binding's weight
|
||||
|
||||
Reference in New Issue
Block a user