Files
monica/app/Console/Commands/SetupDocumentation.php

98 lines
2.4 KiB
PHP

<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Console\ConfirmableTrait;
use Illuminate\Support\Facades\File;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Output\OutputInterface;
use function Safe\passthru;
use function Safe\putenv;
/**
* @codeCoverageIgnore
*/
#[AsCommand(name: 'scribe:setup')]
class SetupDocumentation extends Command
{
use ConfirmableTrait;
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'scribe:setup
{--clean : Remove database file after generating the documentation.}
{--force : Force the operation to run when in production.}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Generate the api documentation.';
/**
* Execute the console command.
*/
public function handle(): void
{
if ($this->confirmToProceed()) {
$this->documentation();
}
}
/**
* Regenerate api documentation.
*/
protected function documentation(): void
{
putenv('DB_CONNECTION=docs');
putenv('APP_ENV=testing');
putenv('CACHE_DRIVER=array');
putenv('QUEUE_CONNECTION=sync');
putenv('SESSION_DRIVER=array');
putenv('MAIL_MAILER=log');
putenv('SCOUT_DRIVER=null');
if (! File::exists($database = config('database.connections.docs.database'))) {
File::put($database, '');
}
$v = $this->getVerbosity();
$artisan = base_path('artisan');
passthru(PHP_BINARY." $artisan migrate:fresh --force -q");
passthru(PHP_BINARY." $artisan scribe:generate --force$v");
if ($this->option('clean') && File::exists($database)) {
File::delete($database);
}
}
private function getVerbosity(): string
{
$verbosity = $this->getOutput()->getOutput()->getVerbosity();
if ($verbosity >= OutputInterface::VERBOSITY_DEBUG) {
return ' -vvv';
}
if ($verbosity >= OutputInterface::VERBOSITY_VERY_VERBOSE) {
return ' -vv';
}
if ($verbosity >= OutputInterface::VERBOSITY_VERBOSE) {
return ' -v';
}
if ($verbosity <= OutputInterface::VERBOSITY_QUIET) {
return ' -q';
}
return '';
}
}