feat: crud
This commit is contained in:
parent
4eae25ab02
commit
8af5aebfe3
44
README.md
44
README.md
|
@ -1,31 +1,45 @@
|
||||||
# BAG Laravel Helper
|
# BAG Laravel Helper
|
||||||
|
|
||||||
This package provides Laravel commands to execute BAG for Laravel Stack.
|
Ce package Laravel fournit des commandes pour générer du code via BAG par Bluesquare.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
Edit your `composer.json` file to include the following dependency:
|
Mettre à jour les sources de `composer.json` avec :
|
||||||
|
|
||||||
```
|
```shell
|
||||||
"require": {
|
composer config repositories.bag vcs https://git.bluesquare.io/bag/laravel-helper.git -n
|
||||||
"bag/laravel-helper": "dev-main"
|
|
||||||
},
|
|
||||||
"repositories": [
|
|
||||||
{
|
|
||||||
"type": "vcs",
|
|
||||||
"url": "https://git.bluesquare.io/bag/laravel-helper.git"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Then run:
|
Puis installer le package :
|
||||||
|
|
||||||
```bash
|
```shell
|
||||||
composer update bag/laravel-helper
|
composer require bag/laravel-helper
|
||||||
```
|
```
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
Pour installer BAG :
|
||||||
|
|
||||||
|
```shell
|
||||||
|
php artisan bag:install
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Pour générer un CRUD en créant/partant d'un model :
|
||||||
|
|
||||||
|
```shell
|
||||||
|
php artisan bag:crud
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
sail artisan bag:crud
|
||||||
|
```
|
||||||
|
|
||||||
|
Pour générer des migrations automatiquement :
|
||||||
|
|
||||||
|
```shell
|
||||||
php artisan bag:migrations
|
php artisan bag:migrations
|
||||||
```
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
sail artisan bag:migrations
|
||||||
|
```
|
||||||
|
|
|
@ -15,7 +15,7 @@ class Install extends ProxyCommand
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $description = 'Install required packages';
|
protected $description = 'Installer les packages requis';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return int|null
|
* @return int|null
|
||||||
|
@ -23,7 +23,7 @@ class Install extends ProxyCommand
|
||||||
public function handle()
|
public function handle()
|
||||||
{
|
{
|
||||||
if (env('LARAVEL_SAIL')) {
|
if (env('LARAVEL_SAIL')) {
|
||||||
$this->error("🐳 To install packages, please run 'php artisan bag:install' outside Sail.");
|
$this->error("🐳 Pour installer les packages, exécuter 'php artisan bag:install' en dehors de Sail.");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,123 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace BAG\Laravel\Console;
|
||||||
|
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
use Symfony\Component\Console\Attribute\AsCommand;
|
||||||
|
|
||||||
|
#[AsCommand(name: 'bag:crud')]
|
||||||
|
class MakeCRUD extends ProxyCommand
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $signature = 'bag:crud {model?}';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $description = 'Génère un CRUD complet.';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return int|null
|
||||||
|
*/
|
||||||
|
public function proxyHandle()
|
||||||
|
{
|
||||||
|
$this->comment("Note : si le model existe déjà, il ne sera pas écrasé.");
|
||||||
|
|
||||||
|
$model = $this->argument('model');
|
||||||
|
|
||||||
|
if (! $model) {
|
||||||
|
$model = $this->ask("Nom du modèle ? (ex : User)");
|
||||||
|
|
||||||
|
if (empty($model)) {
|
||||||
|
$this->error("Nom de model invalide.");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$controller = $this->confirm("Générer un Controller ?", true);
|
||||||
|
$policy = $this->confirm("Générer une Policy ?", $controller);
|
||||||
|
$resource = $this->confirm("Générer une Resource ?", $controller);
|
||||||
|
$views = $this->confirm("Générer des vues ?", true);
|
||||||
|
|
||||||
|
if (! $controller) {
|
||||||
|
$routing = false;
|
||||||
|
} else {
|
||||||
|
$routing = $this->confirm("Ajouter automatiquement les routes ?", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
$model_name = "App\\Models\\$model";
|
||||||
|
|
||||||
|
if (class_exists($model_name)) {
|
||||||
|
$this->comment("Le model existe déjà - ignoré.");
|
||||||
|
}
|
||||||
|
|
||||||
|
$controller_name = "App\\Http\\Controllers\\{$model}Controller";
|
||||||
|
|
||||||
|
if ($controller && class_exists($controller_name)) {
|
||||||
|
$this->comment("Le controller existe déjà - ignoré.");
|
||||||
|
$controller = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$policy_name = "App\\Policies\\{$model}Policy";
|
||||||
|
|
||||||
|
if ($policy && class_exists($policy_name)) {
|
||||||
|
$this->comment("La policy existe déjà - ignorée.");
|
||||||
|
$policy = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$resource_name = "App\\Http\\Resources\\{$model}Resource";
|
||||||
|
|
||||||
|
if ($resource && class_exists($resource_name)) {
|
||||||
|
$this->comment("La resource existe déjà - ignorée.");
|
||||||
|
$resource = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = app(\BAG\Stack\Laravel\MakeCRUD::class)->run($model, [
|
||||||
|
'model' => ! class_exists($model_name),
|
||||||
|
'controller' => $controller,
|
||||||
|
'policy' => $policy,
|
||||||
|
'resource' => $resource,
|
||||||
|
'views' => $views,
|
||||||
|
]);
|
||||||
|
|
||||||
|
if (! $result) {
|
||||||
|
$this->error("Erreur lors de la génération du CRUD.");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($routing) {
|
||||||
|
$this->addRoutes($model);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->info("CRUD généré avec succès.");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function addRoutes($model)
|
||||||
|
{
|
||||||
|
$file = base_path('routes/web.php');
|
||||||
|
|
||||||
|
if (! file_exists($file)) {
|
||||||
|
$this->warn("Le fichier $file n'existe pas - ajout des routes ignoré.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$prefix = Str::snake(Str::plural($model));
|
||||||
|
$test = "Route::resource('{$prefix}',";
|
||||||
|
$line = "Route::resource('{$prefix}', \App\Http\Controllers\\{$model}Controller::class)->withTrashed(['show'])->middleware('auth');";
|
||||||
|
|
||||||
|
$routes = trim(file_get_contents($file));
|
||||||
|
|
||||||
|
if (strpos($routes, $test) !== false) {
|
||||||
|
$this->warn("Les routes existent déjà - ajout des routes ignoré.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$routes .= "\n\n$line\n";
|
||||||
|
|
||||||
|
file_put_contents(base_path('routes/web.php'), $routes);
|
||||||
|
}
|
||||||
|
}
|
|
@ -15,13 +15,21 @@ class MakeMigrations extends ProxyCommand
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $description = 'Generate migrations based on current database schema and models';
|
protected $description = 'Génère des migrations en comparant les models et les tables existants.';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return int|null
|
* @return int|null
|
||||||
*/
|
*/
|
||||||
public function proxyHandle()
|
public function proxyHandle()
|
||||||
{
|
{
|
||||||
return app(\BAG\Stack\Laravel\MakeMigrations::class)->run();
|
$result = app(\BAG\Stack\Laravel\MakeMigrations::class)->run();
|
||||||
|
|
||||||
|
if ($result) {
|
||||||
|
$this->info('Migrations générées !');
|
||||||
|
} else {
|
||||||
|
$this->info('Aucune migration générée.');
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ abstract class ProxyCommand extends Command
|
||||||
$package_path = "{$this->base_path}/packages/$package";
|
$package_path = "{$this->base_path}/packages/$package";
|
||||||
|
|
||||||
if (! is_dir($package_path)) {
|
if (! is_dir($package_path)) {
|
||||||
$this->error("🚨 Missing package bag/$package. Please run 'php artisan bag:install' first.");
|
$this->error("🚨 Le package bag/$package est manquant. Merci d'exécuter 'php artisan bag:install' pour commencer.");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,28 +57,28 @@ abstract class ProxyCommand extends Command
|
||||||
$package_path = "$install_path/$package";
|
$package_path = "$install_path/$package";
|
||||||
|
|
||||||
if (! is_dir($package_path)) {
|
if (! is_dir($package_path)) {
|
||||||
$this->info("🚚 Installing bag/$package...");
|
$this->info("🚚 Installation de bag/$package...");
|
||||||
|
|
||||||
$result = Process::path($install_path)
|
$result = Process::path($install_path)
|
||||||
->run("git clone git@git.bluesquare.io:bag/$package.git $package");
|
->run("git clone git@git.bluesquare.io:bag/$package.git $package");
|
||||||
|
|
||||||
if ($result->failed()) {
|
if ($result->failed()) {
|
||||||
throw new \Exception("Failed to fetch bag/$package");
|
throw new \Exception("Récupération de bag/$package impossible.");
|
||||||
}
|
}
|
||||||
} elseif (! cache()->has("bag/$package")) {
|
} elseif (! cache()->has("bag/$package")) {
|
||||||
$this->info("🤖 Updating bag/$package...");
|
$this->info("🤖 Mise à jour de bag/$package...");
|
||||||
$result = Process::path($package_path)->run("git pull");
|
$result = Process::path($package_path)->run("git pull");
|
||||||
|
|
||||||
if ($result->failed()) {
|
if ($result->failed()) {
|
||||||
$this->warn("😰 Failed to update!");
|
$this->warn("😰 Échec de mise à jour !");
|
||||||
}
|
}
|
||||||
|
|
||||||
cache()->put("bag/$package", true, now()->addMinutes(5));
|
cache()->put("bag/$package", true, now()->addMinutes(5));
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->info("🐠 Loading bag/$package...");
|
$this->info("🐠 Chargement de bag/$package...");
|
||||||
$result = Process::path($package_path)->run("composer install --ignore-platform-reqs");
|
$result = Process::path($package_path)->run("composer install --ignore-platform-reqs");
|
||||||
|
|
||||||
$this->info("⚡️ Installed!");
|
$this->info("⚡️ Installation réussie !");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ class ServiceProvider extends \Illuminate\Support\ServiceProvider implements Def
|
||||||
$this->commands([
|
$this->commands([
|
||||||
Console\Install::class,
|
Console\Install::class,
|
||||||
Console\MakeMigrations::class,
|
Console\MakeMigrations::class,
|
||||||
|
Console\MakeCRUD::class,
|
||||||
//...
|
//...
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
@ -44,6 +45,7 @@ class ServiceProvider extends \Illuminate\Support\ServiceProvider implements Def
|
||||||
return [
|
return [
|
||||||
Console\Install::class,
|
Console\Install::class,
|
||||||
Console\MakeMigrations::class,
|
Console\MakeMigrations::class,
|
||||||
|
Console\MakeCRUD::class,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue