Campaign сontroller

CampaignController

CampaignController — a Spring MVC controller that provides the UI interface for managing Campaign entities. It extends ViewableFilterController<Long, Campaign, CampaignFilter>, which automatically adds standard CRUD operations and list filtering.


Example Code:

@Controller
@RequestMapping(value = CampaignController.PATH)
public class CampaignController extends
    ViewableFilterController<Long, Campaign, CampaignFilter> {

    public static final String PATH = "/campaign";

    @Autowired
    private CampaignService service;
    @Autowired
    private CampaignExecutionService executionService;
    @Autowired
    private ExpressionFormMapper expressionFormMapper;
    @Autowired
    private ClientSearchEngine clientSearchEngine;

    @RequestMapping(value = "/evaluate-expression", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
    public @ResponseBody
    List<String> evaluateExpression(@Valid CampaignEvaluationForm form) throws ScriptException {
        Expression expression = expressionFormMapper.createEntity(form.getExpression());
        return List.of(String.valueOf(executionService.evaluateExpression(form.entityId, expression)));
    }

    @PreAuthorize("hasRole(this.viewRole)")
    @RequestMapping(value = "/entities", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    public Map<?, String> getData(@RequestParam String search) {
        return clientSearchEngine.getData(search, (entity, name) -> name);
    }

    public static class CampaignEvaluationForm {

        @NotNull
        private UUID entityId;

        @Valid
        private ExpressionForm expression;

        // getters and setters
    }
}

🔧 Key Functions of CampaignController

Evaluate Expression (/evaluate-expression)

Allows testing of a filtering script (Expression) against a specific client directly from the UI (while editing a campaign). Useful for debugging the expression before launching a campaign.

@RequestMapping(value = "/evaluate-expression", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public List<String> evaluateExpression(@Valid CampaignEvaluationForm form) throws ScriptException {
    Expression expression = expressionFormMapper.createEntity(form.getExpression());
    return List.of(String.valueOf(executionService.evaluateExpression(form.entityId, expression)));
}

🔒 Available only to authorized users with the appropriate role.


Client Autocomplete (/entities)

Used in the client selection UI component (e.g., during expression testing).

@RequestMapping(value = "/entities", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public Map<?, String> getData(@RequestParam String search) {
    return clientSearchEngine.getData(search, (entity, name) -> name);
}

📥 CampaignEvaluationForm

CampaignEvaluationForm is the form used when testing a filtering expression. It is submitted to the /evaluate-expression endpoint.

public static class CampaignEvaluationForm {

    @NotNull
    private UUID entityId; // ID of the client used for testing the expression

    @Valid
    private ExpressionForm expression; // The expression in form format
}

🧩 Dependencies Used:

  • CampaignService — main campaign service

  • CampaignExecutionService — used for evaluateExpression

  • ExpressionFormMapper — converts ExpressionForm to Expression

  • ClientSearchEngine — for client lookup in the UI

Last updated

Was this helpful?