mirror of
				https://github.com/abhinavxd/libredesk.git
				synced 2025-11-04 05:53:30 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			133 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			133 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package main
 | 
						|
 | 
						|
import (
 | 
						|
	"strconv"
 | 
						|
 | 
						|
	amodels "github.com/abhinavxd/libredesk/internal/automation/models"
 | 
						|
	"github.com/abhinavxd/libredesk/internal/envelope"
 | 
						|
	"github.com/valyala/fasthttp"
 | 
						|
	"github.com/zerodha/fastglue"
 | 
						|
)
 | 
						|
 | 
						|
// handleGetAutomationRules gets all automation rules
 | 
						|
func handleGetAutomationRules(r *fastglue.Request) error {
 | 
						|
	var (
 | 
						|
		app = r.Context.(*App)
 | 
						|
		typ = r.RequestCtx.QueryArgs().Peek("type")
 | 
						|
	)
 | 
						|
	out, err := app.automation.GetAllRules(typ)
 | 
						|
	if err != nil {
 | 
						|
		return sendErrorEnvelope(r, err)
 | 
						|
	}
 | 
						|
	return r.SendEnvelope(out)
 | 
						|
}
 | 
						|
 | 
						|
// handleGetAutomationRuleByID gets an automation rule by ID
 | 
						|
func handleGetAutomationRule(r *fastglue.Request) error {
 | 
						|
	var (
 | 
						|
		app   = r.Context.(*App)
 | 
						|
		id, _ = strconv.Atoi(r.RequestCtx.UserValue("id").(string))
 | 
						|
	)
 | 
						|
	out, err := app.automation.GetRule(id)
 | 
						|
	if err != nil {
 | 
						|
		return sendErrorEnvelope(r, err)
 | 
						|
	}
 | 
						|
	return r.SendEnvelope(out)
 | 
						|
}
 | 
						|
 | 
						|
// handleToggleAutomationRule toggles an automation rule
 | 
						|
func handleToggleAutomationRule(r *fastglue.Request) error {
 | 
						|
	var (
 | 
						|
		app   = r.Context.(*App)
 | 
						|
		id, _ = strconv.Atoi(r.RequestCtx.UserValue("id").(string))
 | 
						|
	)
 | 
						|
	if err := app.automation.ToggleRule(id); err != nil {
 | 
						|
		return sendErrorEnvelope(r, err)
 | 
						|
	}
 | 
						|
	return r.SendEnvelope(true)
 | 
						|
}
 | 
						|
 | 
						|
// handleUpdateAutomationRule updates an automation rule
 | 
						|
func handleUpdateAutomationRule(r *fastglue.Request) error {
 | 
						|
	var (
 | 
						|
		app     = r.Context.(*App)
 | 
						|
		rule    = amodels.RuleRecord{}
 | 
						|
		id, err = strconv.Atoi(r.RequestCtx.UserValue("id").(string))
 | 
						|
	)
 | 
						|
	if err != nil || id == 0 {
 | 
						|
		return r.SendErrorEnvelope(fasthttp.StatusBadRequest, app.i18n.Ts("globals.messages.invalid", "name", "`id`"), nil, envelope.InputError)
 | 
						|
	}
 | 
						|
 | 
						|
	if err := r.Decode(&rule, "json"); err != nil {
 | 
						|
		return r.SendErrorEnvelope(fasthttp.StatusBadRequest, app.i18n.Ts("globals.messages.errorParsing", "name", "{globals.terms.request}"), nil, envelope.InputError)
 | 
						|
	}
 | 
						|
 | 
						|
	if err = app.automation.UpdateRule(id, rule); err != nil {
 | 
						|
		return sendErrorEnvelope(r, err)
 | 
						|
	}
 | 
						|
	return r.SendEnvelope(true)
 | 
						|
}
 | 
						|
 | 
						|
// handleCreateAutomationRule creates a new automation rule
 | 
						|
func handleCreateAutomationRule(r *fastglue.Request) error {
 | 
						|
	var (
 | 
						|
		app  = r.Context.(*App)
 | 
						|
		rule = amodels.RuleRecord{}
 | 
						|
	)
 | 
						|
	if err := r.Decode(&rule, "json"); err != nil {
 | 
						|
		return r.SendErrorEnvelope(fasthttp.StatusBadRequest, app.i18n.Ts("globals.messages.errorParsing", "name", "{globals.terms.request}"), nil, envelope.InputError)
 | 
						|
	}
 | 
						|
	if err := app.automation.CreateRule(rule); err != nil {
 | 
						|
		return sendErrorEnvelope(r, err)
 | 
						|
	}
 | 
						|
	return r.SendEnvelope(true)
 | 
						|
}
 | 
						|
 | 
						|
// handleDeleteAutomationRule deletes an automation rule
 | 
						|
func handleDeleteAutomationRule(r *fastglue.Request) error {
 | 
						|
	var (
 | 
						|
		app = r.Context.(*App)
 | 
						|
 | 
						|
		id, err = strconv.Atoi(r.RequestCtx.UserValue("id").(string))
 | 
						|
	)
 | 
						|
	if err != nil || id == 0 {
 | 
						|
		return r.SendErrorEnvelope(fasthttp.StatusBadRequest, app.i18n.Ts("globals.messages.invalid", "name", "`id`"), nil, envelope.InputError)
 | 
						|
	}
 | 
						|
	if err = app.automation.DeleteRule(id); err != nil {
 | 
						|
		return sendErrorEnvelope(r, err)
 | 
						|
	}
 | 
						|
	return r.SendEnvelope(true)
 | 
						|
}
 | 
						|
 | 
						|
// handleUpdateAutomationRuleWeights updates the weights of the automation rules
 | 
						|
func handleUpdateAutomationRuleWeights(r *fastglue.Request) error {
 | 
						|
	var (
 | 
						|
		app     = r.Context.(*App)
 | 
						|
		weights = make(map[int]int)
 | 
						|
	)
 | 
						|
	if err := r.Decode(&weights, "json"); err != nil {
 | 
						|
		return r.SendErrorEnvelope(fasthttp.StatusBadRequest, app.i18n.Ts("globals.messages.errorParsing", "name", "{globals.terms.request}"), nil, envelope.InputError)
 | 
						|
	}
 | 
						|
	err := app.automation.UpdateRuleWeights(weights)
 | 
						|
	if err != nil {
 | 
						|
		return sendErrorEnvelope(r, err)
 | 
						|
	}
 | 
						|
	return r.SendEnvelope(true)
 | 
						|
}
 | 
						|
 | 
						|
// handleUpdateAutomationRuleExecutionMode updates the execution mode of the automation rules for a given type
 | 
						|
func handleUpdateAutomationRuleExecutionMode(r *fastglue.Request) error {
 | 
						|
	var (
 | 
						|
		app  = r.Context.(*App)
 | 
						|
		mode = string(r.RequestCtx.PostArgs().Peek("mode"))
 | 
						|
	)
 | 
						|
	if mode != amodels.ExecutionModeAll && mode != amodels.ExecutionModeFirstMatch {
 | 
						|
		return r.SendErrorEnvelope(fasthttp.StatusBadRequest, app.i18n.T("automation.invalidRuleExecutionMode"), nil, envelope.InputError)
 | 
						|
	}
 | 
						|
	// Only new conversation rules can be updated as they are the only ones that have execution mode.
 | 
						|
	if err := app.automation.UpdateRuleExecutionMode(amodels.RuleTypeNewConversation, mode); err != nil {
 | 
						|
		return sendErrorEnvelope(r, err)
 | 
						|
	}
 | 
						|
	return r.SendEnvelope(true)
 | 
						|
}
 |