/** * Creates a new Apis model from a swagger url. * If creation is successful, the browser will be redirected to the 'view' page. * * @param integer $swaggerId * * @return mixed */ public function actionCreateapi($swaggerId) { $swaggerAPI = $this->findModel($swaggerId); $myId = \Yii::$app->user->id; $query = ObjectFromSwagger::find(); $query->where(['api_from_swagger' => $swaggerId]); $dataProvider = new ActiveDataProvider(['query' => $query]); // Check if there is already another API with the same name, that has not be created by me $alreadyTakenName = Apis::find(); $alreadyTakenName->joinWith(['createdBy']); $alreadyTakenName->where(['name' => $swaggerAPI->name]); $alreadyTakenName->where(['not', 'created_by' => $myId]); if ($swaggerAPI->load(Yii::$app->request->post()) && $swaggerAPI->save()) { if ($alreadyTakenName->one() === null) { $buildFromSwagger = new BuildFromSwagger(); $buildFromSwagger->setSwaggerAPI($swaggerId); if ($buildFromSwagger->BuildAPI()) { // Build all the Objects $buildFromSwagger->BuildObjects(); // Notify users who follow me! $myId = \Yii::$app->user->id; $change = new NotifUserHelper(); $followersNotified = $change->userChangedCreatedApi($myId); return $this->redirect(['apis/view', 'id' => $buildFromSwagger->getAPIId(), 'followersNotified' => $followersNotified]); } } } // Check if there is already an API with same version by me. If there is, display a message. $message = Apis::find()->where(['name' => $swaggerAPI->name, 'created_by' => $myId])->one() === null ? '' : 'Overwrite already existing API?'; $message = $alreadyTakenName->one() === null ? $message : 'This API name is already taken. Another one should be provided!'; return $this->render('createapi', ['model' => $swaggerAPI, 'dataProvider' => $dataProvider, 'message' => $message]); }
/** * Builds the ObjectFromSwagger Model */ public function buildSwaggerObjects() { // Show all Objects brought from definition if (property_exists($this->resource, 'definitions')) { foreach ($this->resource->definitions as $keyObject => $valueObject) { // Get each Object with its name and description $object = new ObjectFromSwagger(); $object->api_from_swagger = $this->getSwaggerAPIId(); $object->name = property_exists($valueObject, 'title') ? $valueObject->title : $keyObject; $object->description = property_exists($valueObject, 'description') ? $valueObject->description : ''; $object->methods = ''; $object->save(); } } // if (property_exists($this->resource, 'paths')) { // foreach ($this->resource->paths as $pathKey => $pathValue) { // $swaggerObject = new ObjectFromSwagger; // $swaggerObject->api_from_swagger = $this->getSwaggerAPIId(); // $swaggerObject->name = substr($pathKey, 1); // $swaggerObject->methods = ''; // // foreach ($pathValue as $operationKey => $operationValue) { // // If there is a tag connected to this object, keep its description. // if (property_exists($operationValue, 'tags') and property_exists($this->resource, 'tags')) { // foreach ($this->resource->tags as $tag) { // if (property_exists($tag, 'name') and property_exists($tag, 'description') and ($tag->name === $operationValue->tags[0])) { // $swaggerObject->description = $tag->description; // } // } // } // // Keep track of the methods used. Only: get, post, put, delete. No: $ref, options, head, patch, parameters // switch ($operationKey) { // case 'get': // case 'post': // case 'put': // case 'delete': // $swaggerObject->methods .= $operationKey . ' '; // break; // } // } // // $swaggerObject->save(); // } // } }
/** * @return \yii\db\ActiveQuery */ public function getObjectFromSwaggers() { return $this->hasMany(ObjectFromSwagger::className(), ['api_from_swagger' => 'id']); }