From 877c21cfccc174c6627630081d9282223245d2d0 Mon Sep 17 00:00:00 2001 From: leandrofars Date: Thu, 30 May 2024 12:34:05 -0300 Subject: [PATCH] refact(controller): send cwmp messages with no code repetition --- .../services/controller/internal/api/cwmp.go | 92 ++++++------------- .../services/controller/internal/api/wifi.go | 11 +-- 2 files changed, 31 insertions(+), 72 deletions(-) diff --git a/backend/services/controller/internal/api/cwmp.go b/backend/services/controller/internal/api/cwmp.go index 38859ac..65c9409 100644 --- a/backend/services/controller/internal/api/cwmp.go +++ b/backend/services/controller/internal/api/cwmp.go @@ -8,8 +8,9 @@ import ( "github.com/leandrofars/oktopus/internal/bridge" "github.com/leandrofars/oktopus/internal/cwmp" - "github.com/leandrofars/oktopus/internal/nats" + n "github.com/leandrofars/oktopus/internal/nats" "github.com/leandrofars/oktopus/internal/utils" + "github.com/nats-io/nats.go" ) func (a *Api) cwmpGetParameterNamesMsg(w http.ResponseWriter, r *http.Request) { @@ -22,28 +23,11 @@ func (a *Api) cwmpGetParameterNamesMsg(w http.ResponseWriter, r *http.Request) { return } - data, err := bridge.NatsCwmpInteraction( - nats.NATS_CWMP_ADAPTER_SUBJECT_PREFIX+sn+".api", - payload, - w, - a.nc, - ) + data, _, err := cwmpInteraction[cwmp.GetParameterNamesResponse](sn, payload, w, a.nc) if err != nil { return } - var response cwmp.GetParameterNamesResponse - err = xml.Unmarshal(data, &response) - if err != nil { - err = json.Unmarshal(data, &response) - if err != nil { - w.WriteHeader(http.StatusBadRequest) - w.Write(utils.Marshall(err)) - return - } - return - } - w.Write(data) } @@ -57,28 +41,11 @@ func (a *Api) cwmpGetParameterAttributesMsg(w http.ResponseWriter, r *http.Reque return } - data, err := bridge.NatsCwmpInteraction( - nats.NATS_CWMP_ADAPTER_SUBJECT_PREFIX+sn+".api", - payload, - w, - a.nc, - ) + data, _, err := cwmpInteraction[cwmp.GetParameterAttributesResponse](sn, payload, w, a.nc) if err != nil { return } - var response cwmp.GetParameterAttributesResponse - err = xml.Unmarshal(data, &response) - if err != nil { - err = json.Unmarshal(data, &response) - if err != nil { - w.WriteHeader(http.StatusBadRequest) - w.Write(utils.Marshall(err)) - return - } - return - } - w.Write(data) } @@ -92,28 +59,11 @@ func (a *Api) cwmpGetParameterValuesMsg(w http.ResponseWriter, r *http.Request) return } - data, err := bridge.NatsCwmpInteraction( - nats.NATS_CWMP_ADAPTER_SUBJECT_PREFIX+sn+".api", - payload, - w, - a.nc, - ) + data, _, err := cwmpInteraction[cwmp.GetParameterValuesResponse](sn, payload, w, a.nc) if err != nil { return } - var response cwmp.GetParameterValuesResponse - err = xml.Unmarshal(data, &response) - if err != nil { - err = json.Unmarshal(data, &response) - if err != nil { - w.WriteHeader(http.StatusBadRequest) - w.Write(utils.Marshall(err)) - return - } - return - } - w.Write(data) } @@ -127,27 +77,37 @@ func (a *Api) cwmpSetParameterValuesMsg(w http.ResponseWriter, r *http.Request) return } - data, err := bridge.NatsCwmpInteraction( - nats.NATS_CWMP_ADAPTER_SUBJECT_PREFIX+sn+".api", - payload, - w, - a.nc, - ) + data, _, err := cwmpInteraction[cwmp.SetParameterValuesResponse](sn, payload, w, a.nc) if err != nil { return } - var response cwmp.SetParameterValuesResponse + w.Write(data) +} + +func cwmpInteraction[T cwmp.SetParameterValuesResponse | cwmp.GetParameterAttributesResponse | cwmp.GetParameterNamesResponse | cwmp.GetParameterValuesResponse]( + sn string, payload []byte, w http.ResponseWriter, nc *nats.Conn, +) ([]byte, T, error) { + + var response T + + data, err := bridge.NatsCwmpInteraction( + n.NATS_CWMP_ADAPTER_SUBJECT_PREFIX+sn+".api", + payload, + w, + nc, + ) + if err != nil { + return data, response, err + } + err = xml.Unmarshal(data, &response) if err != nil { err = json.Unmarshal(data, &response) if err != nil { w.WriteHeader(http.StatusBadRequest) w.Write(utils.Marshall(err)) - return } - return } - - w.Write(data) + return data, response, err } diff --git a/backend/services/controller/internal/api/wifi.go b/backend/services/controller/internal/api/wifi.go index 3fdc172..ea63fce 100644 --- a/backend/services/controller/internal/api/wifi.go +++ b/backend/services/controller/internal/api/wifi.go @@ -219,7 +219,7 @@ func (a *Api) deviceWifi(w http.ResponseWriter, r *http.Request) { payload := cwmp.GetParameterNames("InternetGatewayDevice.LANDevice.", 1) - response, err := cwmpInteraction[cwmp.GetParameterNamesResponse](sn, payload, w, a.nc) + _, response, err := cwmpInteraction[cwmp.GetParameterNamesResponse](sn, []byte(payload), w, a.nc) if err != nil { return } @@ -232,7 +232,7 @@ func (a *Api) deviceWifi(w http.ResponseWriter, r *http.Request) { payload = cwmp.GetParameterNames(x.Name+"WLANConfiguration.", 1) - response, err := cwmpInteraction[cwmp.GetParameterNamesResponse](sn, payload, w, a.nc) + _, response, err := cwmpInteraction[cwmp.GetParameterNamesResponse](sn, []byte(payload), w, a.nc) if err != nil { return } @@ -243,7 +243,7 @@ func (a *Api) deviceWifi(w http.ResponseWriter, r *http.Request) { payload = cwmp.GetParameterNames(y.Name, 1) - response, err := cwmpInteraction[cwmp.GetParameterNamesResponse](sn, payload, w, a.nc) + _, response, err := cwmpInteraction[cwmp.GetParameterNamesResponse](sn, []byte(payload), w, a.nc) if err != nil { return } @@ -284,11 +284,10 @@ func (a *Api) deviceWifi(w http.ResponseWriter, r *http.Request) { wlanConfigurationInstances = wlanConfigurationInstances + 1 } } - log.Println("wlanConfigurationInstances: ", wlanConfigurationInstances) payload = cwmp.GetParameterMultiValues(parameters_to_get_values) - parameterValuesResp, err := cwmpInteraction[cwmp.GetParameterValuesResponse](sn, payload, w, a.nc) + _, parameterValuesResp, err := cwmpInteraction[cwmp.GetParameterValuesResponse](sn, []byte(payload), w, a.nc) if err != nil { return } @@ -369,7 +368,7 @@ func (a *Api) deviceWifi(w http.ResponseWriter, r *http.Request) { payload := cwmp.SetParameterMultiValues(fmtBody) - setParameterValuesResp, err := cwmpInteraction[cwmp.SetParameterValuesResponse](sn, payload, w, a.nc) + _, setParameterValuesResp, err := cwmpInteraction[cwmp.SetParameterValuesResponse](sn, []byte(payload), w, a.nc) if err != nil { return }