2022-12-05 23:01:12 +08:00

215 lines
5.3 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
// +----------------------------------------------------------------------
// | CatchAdmin [Just Like ]
// +----------------------------------------------------------------------
// | Copyright (c) 2017~2021 https://catchadmin.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( https://github.com/JaguarJack/catchadmin-laravel/blob/master/LICENSE.md )
// +----------------------------------------------------------------------
// | Author: JaguarJack [ njphper@gmail.com ]
// +----------------------------------------------------------------------
namespace Modules\Develop\Support\Generate;
use Catch\Exceptions\FailedException;
use Exception;
use Illuminate\Contracts\Filesystem\FileNotFoundException;
use Modules\Develop\Support\Generate\Create\Controller;
use Modules\Develop\Support\Generate\Create\FrontForm;
use Modules\Develop\Support\Generate\Create\FrontTable;
use Modules\Develop\Support\Generate\Create\Model;
use Modules\Develop\Support\Generate\Create\Request;
use Modules\Develop\Support\Generate\Create\Route;
/**
* @class Generator
*/
class Generator
{
/**
* @var array{module:string,controller:string,model:string,paginate: bool,schema: string}
*/
protected array $gen;
/**
* @var array{name: string,charset: string, collection: string,
* comment:string,created_at: bool, updated_at: bool, deleted_at: bool,
* creator_id: bool, updated_at: bool, engine: string}
*/
protected array $schema;
/**
* @var array
*/
protected array $structures;
/**
* @var array
*/
protected array $files = [];
/**
* this model name from controller
*
* @var string
*/
protected string $modelName;
/**
* this request name for controller
*
* @var ?string
*/
protected ?string $requestName;
/**
* generate
*
* @throws Exception
* @return bool
*/
public function generate(): bool
{
try {
$this->files[] = $this->createModel();
$this->files[] = $this->createRequest();
$this->files[] = $this->createController();
$this->files[] = $this->createFrontTable();
$this->files[] = $this->createFrontForm();
$this->files[] = $this->createRoute();
} catch (Exception $e) {
$this->rollback();
throw new FailedException($e->getMessage());
}
$this->files = [];
return true;
}
/**
* create route
*
* @throws FileNotFoundException
* @return bool|string
*/
public function createRoute(): bool|string
{
// 保存之前的 route 文件
$route = new Route($this->gen['controller']);
return $route->setModule($this->gen['module'])->create();
}
/**
* create font
*
* @throws FileNotFoundException
* @return bool|string|null
*/
public function createFrontTable(): bool|string|null
{
$table = new FrontTable($this->gen['controller'], $this->gen['paginate'], (new Route($this->gen['controller']))->setModule($this->gen['module'])->getApiRute());
return $table->setModule($this->gen['module'])->setStructures($this->structures)->create();
}
/**
* create font
*
* @throws FileNotFoundException
* @return bool|string|null
*/
public function createFrontForm(): bool|string|null
{
$form = new FrontForm($this->gen['controller']);
return $form->setModule($this->gen['module'])->setStructures($this->structures)->create();
}
/**
* create model
*
* @throws FileNotFoundException
* @return bool|string
*/
protected function createModel(): bool|string
{
$model = new Model($this->gen['model'], $this->gen['schema'], $this->gen['module']);
$this->modelName = $model->getModelName();
return $model->setModule($this->gen['module'])->setStructures($this->structures)->create();
}
/**
* create request
*
* @throws FileNotFoundException
* @return bool|string
*/
protected function createRequest(): bool|string
{
$request = new Request($this->gen['controller']);
$file = $request->setStructures($this->structures)->setModule($this->gen['module'])->create();
$this->requestName = $request->getRequestName();
return $file;
}
/**
* create controller
*
* @throws FileNotFoundException
* @return bool|string
*/
protected function createController(): bool|string
{
$controller = new Controller($this->gen['controller'], $this->modelName, $this->requestName);
return $controller->setModule($this->gen['module'])->create();
}
/**
* rollback
*
* @return void
*/
protected function rollback(): void
{
// delete controller & model & migration file
foreach ($this->files as $file) {
unlink($file);
}
// 回填之前的 route 文件
}
/**
* set params
*
* @param array $params
* @return $this
*/
public function setParams(array $params): Generator
{
$this->gen = $params['codeGen'];
$this->structures = $params['structures'];
return $this;
}
}