your controller layer should be pretty light, and use it as a means to
- handle traffic from a route
- do a thing
- return a response to describe what you did.
the 'do a thing' should be done in a separate class, and commonly this would be placed in App/Services/* which an accompanying test within tests/Unit/Services/*
if you use events and listeners, it is still helpful Ito isolate your new Service in its own namespace as that will allow you to share this functionality across your codebase. Eg you might have an event that does a thing but also that thing can be ran by running a custom artisan command.
The key thing to take home is ensure new work is covered by tests as that will mean you can easily move functionality as you refine your directory structure.