# This file defines conventions for the modular system in the Laravel application. # By following these rules, we can ensure consistency and maintainability across the codebase. # GENERAL OVERVIEW # The application uses a modular architecture to organize features into distinct, reusable units. # Modules are located in the `app/Modules` directory. Each subdirectory in this directory is considered a module. # The core logic for module discovery and registration is handled by `App\Modules\ModuleRepository` and `App\Providers\ModuleServiceProvider`. # KEY FILES # - `app/Providers/ModuleServiceProvider.php`: Registers and boots all active modules. This is where module resources (configs, migrations, routes, views, etc.) are loaded. # - `app/Modules/ModuleRepository.php`: Discovers modules from the filesystem. # - `app/Modules/ModuleContract.php`: The interface that each module's main class must implement. # - `app/Modules/BaseModule.php`: A base class for module data. # - `app/Modules/module-helpers.php`: Global helper functions for interacting with the modular system. # CONVENTIONS rules: - name: "Modular Architecture" description: | The application is divided into modules, located in `app/Modules`. Each module is a self-contained unit with its own resources. When adding new high-level functionality, consider creating a new module for it. - name: "Creating a New Module" description: | To create a new module named "MyModule", follow these steps: 1. Create a new directory `app/Modules/MyModule`. 2. Create the main module class `app/Modules/MyModule/MyModuleModule.php`. This class must implement `\App\Modules\ModuleContract`. 3. Implement the `isEnabled()` method in `MyModuleModule.php` to control if the module is active. 4. Add resources to your module following the structure defined in `ModuleServiceProvider`: - Configs: `app/Modules/MyModule/Configs/my-module-config.php` - Migrations: `app/Modules/MyModule/Database/Migrations/` - Views: `app/Modules/MyModule/Resources/Views/` - Routes: `app/Modules/MyModule/Routes/my-module-routes.php` - Helpers: `app/Modules/MyModule/my-module-helpers.php` - Translations: `app/Modules/MyModule/Resources/lang/` - name: "Enabling/Disabling Modules" description: | A module can be enabled or disabled via its `isEnabled()` method in the main module class (e.g., `MyModuleModule.php`). The `ModuleServiceProvider` only boots enabled modules. - name: "Interacting with Modules" description: | Use the helper functions defined in `app/Modules/module-helpers.php` to work with modules: - `modules()`: Get a collection of all enabled modules. - `module('MyModule')`: Get an instance of a specific module's main class. - `modules_path()`: Get the absolute path to the modules directory.