* Optimize api create function code.

This commit is contained in:
wangyuting
2023-11-30 08:53:34 +08:00
parent b9868c6955
commit bbe3a73989
5 changed files with 70 additions and 72 deletions
+17 -1
View File
@@ -20,7 +20,7 @@ $config->api->form->createLib = array();
$config->api->form->createLib['libType'] = array('type' => 'string', 'required' => true, 'default' => 'nolink');
$config->api->form->createLib['product'] = array('type' => 'int', 'required' => true, 'default' => 0);
$config->api->form->createLib['project'] = array('type' => 'int', 'required' => true, 'default' => 0);
$config->api->form->createLib['execution'] = array('type' => 'int', 'required' => true, 'default' => 0);
$config->api->form->createLib['execution'] = array('type' => 'int', 'required' => false, 'default' => 0);
$config->api->form->createLib['name'] = array('type' => 'string', 'required' => true, 'default' => '');
$config->api->form->createLib['baseUrl'] = array('type' => 'string', 'required' => false, 'default' => '');
$config->api->form->createLib['acl'] = array('type' => 'string', 'required' => false, 'default' => 'open');
@@ -34,3 +34,19 @@ $config->api->form->editLib['baseUrl'] = array('type' => 'string', 'required' =>
$config->api->form->editLib['acl'] = array('type' => 'string', 'required' => false, 'default' => 'open');
$config->api->form->editLib['groups'] = array('type' => 'array', 'required' => false, 'default' => array(''), 'filter' => 'join');
$config->api->form->editLib['users'] = array('type' => 'array', 'required' => false, 'default' => array(''), 'filter' => 'join');
$config->api->form->create = array();
$config->api->form->create['module'] = array('type' => 'int', 'required' => false, 'default' => 0);
$config->api->form->create['lib'] = array('type' => 'int', 'required' => true, 'default' => 0);
$config->api->form->create['title'] = array('type' => 'string', 'required' => true, 'default' => '');
$config->api->form->create['protocol'] = array('type' => 'string', 'required' => true, 'default' => '');
$config->api->form->create['method'] = array('type' => 'string', 'required' => true, 'default' => '');
$config->api->form->create['path'] = array('type' => 'string', 'required' => true, 'default' => '');
$config->api->form->create['requestType'] = array('type' => 'string', 'required' => false, 'default' => '');
$config->api->form->create['status'] = array('type' => 'string', 'required' => false, 'default' => '');
$config->api->form->create['owner'] = array('type' => 'string', 'required' => false, 'default' => '');
$config->api->form->create['params'] = array('type' => 'string', 'required' => false, 'default' => '', 'control' => 'editor');
$config->api->form->create['paramsExample'] = array('type' => 'string', 'required' => false, 'default' => '');
$config->api->form->create['response'] = array('type' => 'string', 'required' => false, 'default' => '', 'control' => 'editor');
$config->api->form->create['responseExample'] = array('type' => 'string', 'required' => false, 'default' => '');
$config->api->form->create['desc'] = array('type' => 'string', 'required' => false, 'default' => '', 'control' => 'editor');
+38 -46
View File
@@ -447,6 +447,43 @@ class api extends control
return $this->send(array('result' => 'success', 'load' => true, 'closeModal' => true, 'app' => $this->app->tab));
}
/**
* 创建一个接口文档。
* Create an api doc.
*
* @param int $libID
* @param int $moduleID
* @param string $space api|project|product
* @access public
* @return void
*/
public function create(int $libID, int $moduleID = 0, string $space = '')
{
if(!empty($_POST))
{
$formData = form::data($this->config->api->form->create)->add('product', 0)->add('version', 1)->add('addedBy', $this->app->user->account)->add('addedDate', helper::now())->get();
$apiID = $this->api->create($formData);
if(dao::isError()) return $this->sendError(dao::getError());
if(isInModal()) return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'closeModal' => true, 'load' => true));
return $this->sendSuccess(array('locate' => helper::createLink('api', 'index', "libID={$formData->lib}&moduleID={$formData->module}&apiID={$apiID}")));
}
$this->setMenu($libID, $space);
$lib = $this->doc->getLibByID($libID);
$libName = isset($lib->name) ? $lib->name . $this->lang->colon : '';
$this->view->title = $libName . $this->lang->api->create;
$this->view->allUsers = $this->loadModel('user')->getPairs('devfirst|noclosed');
$this->view->libID = $libID;
$this->view->libName = $lib->name;
$this->view->moduleID = $moduleID;
$this->view->moduleOptionMenu = $this->loadModel('tree')->getOptionMenu($libID, 'api', $startModuleID = 0);
$this->display();
}
/**
* Edit library.
*
@@ -457,7 +494,7 @@ class api extends control
public function edit($apiID)
{
$api = $this->api->getLibById($apiID);
if(helper::isAjaxRequest() && !empty($_POST))
if(!empty($_POST))
{
$changes = $this->api->update($apiID);
if(dao::isError()) return $this->sendError(dao::getError());
@@ -487,51 +524,6 @@ class api extends control
$this->view->allUsers = $this->loadModel('user')->getPairs('devfirst|noclosed');;
$this->view->moduleOptionMenu = $this->loadModel('tree')->getOptionMenu($api->lib, 'api', $startModuleID = 0);
$this->view->moduleID = $api->module ? (int)$api->module : (int)$this->cookie->lastDocModule;
$this->display();
}
/**
* Create an api doc.
*
* @param int $libID
* @param int $moduleID
* @param string $space api|project|product
* @access public
* @return void
*/
public function create($libID, $moduleID = 0, $space = '')
{
if(!empty($_POST))
{
$api = $this->api->create();
if($api === false) return $this->sendError(dao::getError());
$this->action->create('api', $api->id, 'Created', '', '', '', false);
if(isInModal()) return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'closeModal' => true, 'load' => true));
return $this->sendSuccess(array('locate' => helper::createLink('api', 'index', "libID={$api->lib}&moduleID={$api->module}&apiID={$api->id}")));
}
$libs = $this->doc->getLibs('api', '', $libID);
if(!$libID and !empty($libs)) $libID = key($libs);
$this->setMenu($libID, $space);
$lib = $this->doc->getLibByID($libID);
$libName = isset($lib->name) ? $lib->name . $this->lang->colon : '';
$this->getTypeOptions($libID);
$this->view->user = $this->app->user->account;
$this->view->allUsers = $this->loadModel('user')->getPairs('devfirst|noclosed');
$this->view->libID = $libID;
$this->view->libName = $lib->name;
$this->view->moduleOptionMenu = $this->loadModel('tree')->getOptionMenu($libID, 'api', $startModuleID = 0);
$this->view->moduleID = $moduleID ? (int)$moduleID : (int)$this->cookie->lastDocModule;
$this->view->libs = $libs;
$this->view->title = $libName . $this->lang->api->create;
$this->view->users = $this->user->getPairs('nocode');
$this->display();
}
+11 -22
View File
@@ -84,40 +84,29 @@ class apiModel extends model
/**
* Create an api doc.
*
* @param object $formData
* @access public
* @return object | bool
* @return int|bool
*/
public function create()
public function create(object $formData)
{
$now = helper::now();
$data = fixer::input('post')
->trim('title,path')
->remove('type,undefined')
->skipSpecial('params,response')
->add('addedBy', $this->app->user->account)
->add('addedDate', $now)
->add('editedBy', $this->app->user->account)
->add('editedDate', $now)
->add('version', 1)
->setDefault('product,module', 0)
->stripTags($this->config->api->editor->create['id'], $this->config->allowedTags)
->get();
$this->dao->insert(TABLE_API)->data($data)
$this->dao->insert(TABLE_API)->data($formData)
->autoCheck()
->batchCheck($this->config->api->create->requiredFields, 'notempty')
->check('title', 'unique', "lib = $data->lib AND module = $data->module")
->check('path', 'unique', "lib = $data->lib AND module = $data->module AND method = '$data->method'")
->check('title', 'unique', "lib = $formData->lib AND module = $formData->module")
->check('path', 'unique', "lib = $formData->lib AND module = $formData->module AND method = '$formData->method'")
->exec();
if(dao::isError()) return false;
$data->id = $this->dao->lastInsertID();
$apiID = $this->dao->lastInsertID();
$this->loadModel('action')->create('api', $apiID, 'Created', '', '', '', false);
$apiSpec = $this->getApiSpecByData($data);
$formData->id = $apiID;
$apiSpec = $this->getApiSpecByData($formData);
$this->dao->replace(TABLE_API_SPEC)->data($apiSpec)->exec();
return $data;
return $apiID;
}
/**
+1 -1
View File
@@ -11,7 +11,7 @@ declare(strict_types=1);
namespace zin;
$data = array('normal' => array(), 'closed' => array());
$data['normal'][] = array('id' => 0, 'text' => $lang->api->noLinked, 'active' => $objectID == 0, 'type' => 'unlink');
$data['normal'][] = array('id' => 0, 'text' => $lang->api->noLinked, 'active' => $objectID == 0, 'type' => 'nolink');
/* 处理分组数据。Process grouped data. */
foreach(array('product', 'project') as $moduleType)
+3 -2
View File
@@ -7,7 +7,7 @@ formPanel
div
(
setClass('panel-title text-lg'),
$lang->api->create
$title
)
),
formGroup
@@ -30,7 +30,8 @@ formPanel
(
set::items($moduleOptionMenu),
set::name('module'),
set::required(true)
set::required(true),
set::value($moduleID)
)
),
formGroup