add( '/automations' ) ->args( new ArgumentCollection( ( new IntArgument( 'page' ) ) ->minimum( 1 ) ->default( 1 ), ( new IntArgument( 'pageSize' ) ) ->default( 20 ) ->minimum( 1 ) ->maximum( 100 ), ( new Argument( 'filters' ) ) ->type( 'object' ) ) ) ->controller( [ Controller\AutomationController::class, 'index' ] ); $routes->add( '/automations/count' ) ->controller( [ Controller\AutomationController::class, 'count' ] ); $routes->add( '/automations/(?P[\d]+)' ) ->args( new ArgumentCollection( new Argument( 'id' ) ) ) ->controller( [ Controller\AutomationController::class, 'show' ] ); $routes->add( '/automations/(?P[\d]+)/children' ) ->args( new ArgumentCollection( new Argument( 'id' ) ) ) ->controller( [ Controller\AutomationController::class, 'list_children' ] ); $routes->add( '/automations/(?P[\d]+)' ) ->args( new ArgumentCollection( ( new IntArgument( 'id' ) ) ->required() ) ) ->controller( [ Controller\AutomationController::class, 'update' ] ) ->methods( [ 'PATCH', 'PUT' ] ); $routes->add( '/automations/(?P[\d]+)' ) ->args( new ArgumentCollection( new Argument( 'id' ) ) ) ->controller( [ Controller\AutomationController::class, 'delete' ] ) ->methods( 'DELETE' ); $routes->add( '/automations' ) ->args( new ArgumentCollection( new Argument( 'name' ), new Argument( 'event' ), new Argument( 'actions' ), new Argument( 'filters' ) ) ) ->controller( [ Controller\AutomationController::class, 'create' ] ) ->methods( 'POST' ); $routes->add( '/automations/stats' ) ->args( new ArgumentCollection( ( new IntArgument( 'page' ) ) ->minimum( 1 ) ->default( 1 ), ( new IntArgument( 'pageSize' ) ) ->default( 20 ) ->minimum( 1 ) ->maximum( 100 ) ) ) ->controller( [ Controller\MailTrackingController::class, 'per_automation' ] ); $routes->add( '/outcomes' ) ->args( new ArgumentCollection( ( new IntArgument( 'page' ) ) ->minimum( 1 ) ->default( 1 ), ( new IntArgument( 'pageSize' ) ) ->default( 20 ) ->minimum( 1 ) ->maximum( 100 ) ) ) ->controller( [ Controller\OutcomesController::class, 'index' ] ); $routes->add( '/outcomes/(?P[\d]+)' ) ->args( new ArgumentCollection( new Argument( 'id' ) ) ) ->controller( [ Controller\OutcomesController::class, 'show' ] ); $routes->add( '/outcomes/(?P[\d]+)' ) ->args( new ArgumentCollection( new Argument( 'id' ) ) ) ->methods( 'DELETE' ) ->controller( [ Controller\OutcomesController::class, 'delete' ] ); $routes->add( '/outcomes/count' ) ->controller( [ Controller\OutcomesController::class, 'count' ] ); $routes->add( '/clients' ) ->args( new ArgumentCollection( ( new IntArgument( 'page' ) ) ->minimum( 1 ) ->default( 1 ), ( new IntArgument( 'pageSize' ) ) ->default( 20 ) ->minimum( 1 ) ->maximum( 100 ) ) ) ->controller( [ Controller\CustomerController::class, 'index' ] ); $routes->add( '/clients/stats' ) ->args( new ArgumentCollection( ( new IntArgument( 'page' ) ) ->minimum( 1 ) ->default( 1 ), ( new IntArgument( 'pageSize' ) ) ->default( 20 ) ->minimum( 1 ) ->maximum( 100 ) ) ) ->controller( [ Controller\MailTrackingController::class, 'per_customer' ] ); $routes->add( '/guests' ) ->args( new ArgumentCollection( ( new IntArgument( 'page' ) ) ->minimum( 1 ) ->default( 1 ), ( new IntArgument( 'pageSize' ) ) ->default( 20 ) ->minimum( 1 ) ->maximum( 100 ) ) ) ->controller( [ Controller\CustomerController::class, 'guests' ] ); $routes->add( '/guests/(?P[\d]+)' ) ->args( new ArgumentCollection( new IntArgument( 'id' ) ) ) ->methods( 'DELETE' ) ->controller( array( Controller\CustomerController::class, 'delete_guest' ) ); $routes->add( '/guests/count' ) ->controller( array( Controller\CustomerController::class, 'guests_count' ) ); $routes->add( '/automations/recipes' ) ->controller( array( Controller\RecipesController::class, 'index' ) ); $routes->add( '/subscribers' ) ->args( new ArgumentCollection( ( new IntArgument( 'page' ) ) ->minimum( 1 ) ->default( 1 ), ( new IntArgument( 'pageSize' ) ) ->default( 20 ) ->minimum( 1 ) ->maximum( 100 ), ( new Argument( 'filters' ) ) ->type( 'object' ), ( new Argument( 'order' ) ) ->type( 'object' ) ) ) ->controller( array( Controller\SubscribersController::class, 'index' ) ); $routes->add( '/subscribers/(?P[\d]+)' ) ->args( new ArgumentCollection( new IntArgument( 'id' ) ) ) ->methods( 'DELETE' ) ->controller( [ Controller\SubscribersController::class, 'delete' ] ); $routes->add( '/subscribers/count' ) ->args( new ArgumentCollection( ( new Argument( 'filters' ) ) ->type( 'object' ) ) ) ->controller( [ Controller\SubscribersController::class, 'count' ] ); $routes->add( '/settings' ) ->controller( [ Controller\SettingsController::class, 'index' ] ); $routes->add( '/settings' ) ->controller( [ Controller\SettingsController::class, 'update' ] ) ->methods( [ 'POST' ] ); $routes->add( '/resources/events' ) ->controller( [ Controller\ResourcesController::class, 'events' ] ); $routes->add( '/resources/filters' ) ->args( new ArgumentCollection( new Argument( 'event_slug' ) ) ) ->controller( [ Controller\ResourcesController::class, 'filters' ] ); $routes->add( '/resources/placeholders' ) ->args( new ArgumentCollection( new Argument( 'event_slug' ) ) ) ->controller( [ Controller\ResourcesController::class, 'placeholders' ] ); $routes->add( '/resources/actions' ) ->controller( [ Controller\ResourcesController::class, 'actions' ] ); $routes->add( '/resources/actions/(?P[\w]+)/test' ) ->methods( 'POST' ) ->controller( [ Controller\ResourcesController::class, 'test_action' ] ); $routes->add( '/resources/marketing-list' ) ->controller( [ Controller\MarketingListsController::class, 'fields' ] ); $routes->add( '/resources/shortcode' ) ->controller( [ Controller\MarketingListsController::class, 'shortcode_fields' ] ); $routes->add( '/lists' ) ->args( new ArgumentCollection( ( new IntArgument( 'page' ) ) ->minimum( 1 ) ->default( 1 ), ( new IntArgument( 'pageSize' ) ) ->default( 20 ) ->minimum( 1 ) ->maximum( 100 ), ( new Argument( 'filters' ) ) ->type( 'object' ), ( new Argument( 'order' ) ) ->type( 'object' ) ) ) ->controller( [ Controller\MarketingListsController::class, 'index' ] ); $routes->add( '/lists/count' ) ->args( new ArgumentCollection( ( new Argument( 'filters' ) ) ->type( 'object' ) ) ) ->controller( [ Controller\MarketingListsController::class, 'count' ] ); $routes->add( '/lists/(?P[\d]+)/subscribers/count' ) ->args( new ArgumentCollection( new IntArgument( 'id' ) ) ) ->controller( [ Controller\MarketingListsController::class, 'subscribers_count' ] ); $routes->add( '/lists/(?P[\d]+)/subscribers' ) ->args( new ArgumentCollection( new IntArgument( 'id' ) ) ) ->controller( [ Controller\SubscribersController::class, 'get' ] ); $routes->add( '/lists/(?P[\d]+)/subscribers' ) ->methods( 'POST' ) ->args( new ArgumentCollection( new IntArgument( 'id' ) ) ) ->controller( [ Controller\SubscribersController::class, 'import' ] ); $routes->add( '/lists' ) ->methods( 'POST' ) ->controller( [ Controller\MarketingListsController::class, 'create' ] ); $routes->add( '/lists/(?P[\d]+)' ) ->args( new ArgumentCollection( new Argument( 'id' ) ) ) ->methods( [ 'PUT', 'PATCH' ] ) ->controller( [ Controller\MarketingListsController::class, 'update' ] ); $routes->add( '/lists/(?P[\d]+)' ) ->args( new ArgumentCollection( new Argument( 'id' ) ) ) ->methods( 'DELETE' ) ->controller( [ Controller\MarketingListsController::class, 'delete' ] ); $routes->add( '/lists/(?P[\d]+)' ) ->args( new ArgumentCollection( new Argument( 'id' ) ) ) ->controller( [ Controller\MarketingListsController::class, 'show' ] ); $routes->add( '/queue' ) ->args( new ArgumentCollection( ( new IntArgument( 'page' ) ) ->minimum( 1 ) ->default( 1 ), ( new IntArgument( 'pageSize' ) ) ->default( 20 ) ->minimum( 1 ) ->maximum( 100 ) ) ) ->controller( [ Controller\QueueController::class, 'index' ] ); $routes->add( '/queue/(?P[\d]+)' ) ->args( new ArgumentCollection( ( new IntArgument( 'id' ) ) ->required() ) ) ->methods( 'DELETE' ) ->controller( [ Controller\QueueController::class, 'cancel' ] ); $routes->add( '/queue/count' ) ->controller( [ Controller\QueueController::class, 'count' ] ); $routes->add( '/tracker' ) ->controller( [ Controller\MailTrackingController::class, 'index' ] ); $routes->add( '/analytics/outcomes/aggregate' ) ->controller( [ Controller\StatisticsController::class, 'outcomes' ] ); $routes->add( '/analytics/emails/aggregate' ) ->controller( [ Controller\StatisticsController::class, 'email' ] ); $routes->add( '/analytics/top-stats' ) ->controller( [ Controller\StatisticsController::class, 'top_stats' ] ); $routes->add( '/products/search' ) ->args( new ArgumentCollection( ( new StringArgument( 's' ) ) ->minLength( 3 ) ->required() ) ) ->controller( [ Controller\ProductController::class, 'search' ] ); $routes->add( '/products' ) ->args( new ArgumentCollection( ( new StringArgument( 'include' ) ) ->pattern( '([\d]+,?)+' ) ->required() ) ) ->controller( [ Controller\ProductController::class, 'index' ] ); $routes->add( '/log' ) ->args( new ArgumentCollection( ( new StringArgument( 'message' ) ) ->required(), ( new StringArgument( 'level' ) ), ( new Argument( 'context' )) ) ) ->methods( 'POST' ) ->controller( [ Controller\LogController::class, 'log' ] ); };