func NewNEFRouter(nefCtx *nefContext) *mux.Router {
	router := mux.NewRouter().StrictSlash(true)
	smfNotif := Route{}
	smfNotif.Name = "NotifySmfUPFEvent"
	smfNotif.Method = strings.ToUpper("Post")
	smfNotif.Handler = NotifySmfUPFEvent
	smfNotif.Pattern = nefCtx.cfg.UpfNotificationResURIPath
	NEFRoutes = append(NEFRoutes, smfNotif)
	for _, route := range NEFRoutes {
		var handler http.Handler = route.Handler
		handler = nefRouteLogger(handler, route.Name)
		router.
			Methods(route.Method).
			Path(route.Pattern).
			Name(route.Name).
			Handler(handler)
	}
	router.Use(func(next http.Handler) http.Handler {
		return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
			ctx := context.WithValue(
				r.Context(),
				nefCtxKey("nefCtx"),
				nefCtx)
			if nefCtx.cfg.OAuth2Support {
				if nefValidateAccessToken(w, r) {
					next.ServeHTTP(w, r.WithContext(ctx))
				}
			} else {
				next.ServeHTTP(w, r.WithContext(ctx))
			}
		})
	})
	return router
}
NewNEFRouter : This function creates and initializes a NEF Router with all
the available routes for NEF Module. This router object is
defined in "github.com/gorilla/mux" package.
Input Args:
- nefCtx: This is NEF Module Context. This contains the NEF Module Data.
Output Args:
- error: retruns pointer to created mux.Router object
package ngcnef
import (
	"context"
	"net/http"
	"strings"
	"time"
	"github.com/gorilla/mux"
	oauth2 "github.com/open-ness/epcforedge/ngc/pkg/oauth2"
)
type Route struct {
	Name    string
	Method  string
	Pattern string
	Handler http.HandlerFunc  
}
var NEFRoutes = []Route{
	{
		"ReadAllTrafficInfluenceSubscription",
		strings.ToUpper("Get"),
		"/3gpp-traffic-influence/v1/{afId}/subscriptions",
		ReadAllTrafficInfluenceSubscription,
	},
	{
		"CreateTrafficInfluenceSubscription",
		strings.ToUpper("Post"),
		"/3gpp-traffic-influence/v1/{afId}/subscriptions",
		CreateTrafficInfluenceSubscription,
	},
	{
		"ReadTrafficInfluenceSubscription",
		strings.ToUpper("Get"),
		"/3gpp-traffic-influence/v1/{afId}/subscriptions/{subscriptionId}",
		ReadTrafficInfluenceSubscription,
	},
	{
		"UpdatePutTrafficInfluenceSubscription",
		strings.ToUpper("Put"),
		"/3gpp-traffic-influence/v1/{afId}/subscriptions/{subscriptionId}",
		UpdatePutTrafficInfluenceSubscription,
	},
	{
		"UpdatePatchTrafficInfluenceSubscription",
		strings.ToUpper("Patch"),
		"/3gpp-traffic-influence/v1/{afId}/subscriptions/{subscriptionId}",
		UpdatePatchTrafficInfluenceSubscription,
	},
	{
		"DeleteTrafficInfluenceSubscription",
		strings.ToUpper("Delete"),
		"/3gpp-traffic-influence/v1/{afId}/subscriptions/{subscriptionId}",
		DeleteTrafficInfluenceSubscription,
	},
	{
		"ReadAllPFDManagementTransaction",
		strings.ToUpper("Get"),
		"/3gpp-pfd-management/v1/{scsAsId}/transactions",
		ReadAllPFDManagementTransaction,
	},
	{
		"CreatePFDManagementTransaction",
		strings.ToUpper("Post"),
		"/3gpp-pfd-management/v1/{scsAsId}/transactions",
		CreatePFDManagementTransaction,
	},
	{
		"ReadPFDManagementTransaction",
		strings.ToUpper("Get"),
		"/3gpp-pfd-management/v1/{scsAsId}/transactions/{transactionId}",
		ReadPFDManagementTransaction,
	},
	{
		"UpdatePutPFDManagementTransaction",
		strings.ToUpper("Put"),
		"/3gpp-pfd-management/v1/{scsAsId}/transactions/{transactionId}",
		UpdatePutPFDManagementTransaction,
	},
	{
		"DeletePFDManagementTransaction",
		strings.ToUpper("Delete"),
		"/3gpp-pfd-management/v1/{scsAsId}/transactions/{transactionId}",
		DeletePFDManagementTransaction,
	},
	{
		"ReadPFDManagementApplication",
		strings.ToUpper("Get"),
		"/3gpp-pfd-management/v1/{scsAsId}/transactions/{transactionId}/" +
			"applications/{appId}",
		ReadPFDManagementApplication,
	},
	{
		"DeletePFDManagementApplication",
		strings.ToUpper("Delete"),
		"/3gpp-pfd-management/v1/{scsAsId}/transactions/{transactionId}/" +
			"applications/{appId}",
		DeletePFDManagementApplication,
	},
	{
		"UpdatePutPFDManagementApplication",
		strings.ToUpper("Put"),
		"/3gpp-pfd-management/v1/{scsAsId}/transactions/{transactionId}/" +
			"applications/{appId}",
		UpdatePutPFDManagementApplication,
	},
	{
		"PatchPFDManagementApplication",
		strings.ToUpper("Patch"),
		"/3gpp-pfd-management/v1/{scsAsId}/transactions/{transactionId}/" +
			"applications/{appId}",
		PatchPFDManagementApplication,
	},
}
type nefCtxKey string