/
v.bolshakov
/
AIEcosystem-Testing
Обзор
Документация
Войти
/
v.bolshakov
/
AIEcosystem-Testing
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
dev
backend/forms/gpt/SyncProjectForm.php
115 строк
3 KB
Developer
Initial commit
03 авг 2026, 17:43
03 авг 2026, 17:43
7433917
Код
Авторство
О чём код?
<?php namespace backend\forms\gpt; use common\forms\base\BaseModel; use common\helpers\ArrayHelper; use common\helpers\CentrifugoHelper; use common\models\Project; use Yii; use yii\helpers\VarDumper; /** * Форма синхронизации моделей * * @author Dmitry E. Semenov <sde.tomsk@gmail.com> * @copyright Self (c) 2024 */ class SyncProjectForm extends BaseModel { /** * @var string */ public $type = 'project'; /** * @inheritdoc */ public function rules() { return ArrayHelper::merge(parent::rules(), [ [['type'], 'string'], ]); } /** * @inheritdoc */ protected function doSave() { Yii::debug(VarDumper::dumpAsString([ 'sync' => $this->type ])); $client = new \yii\httpclient\Client([ 'transport' => 'yii\httpclient\CurlTransport', 'baseUrl' => 'https://api.openai.com/v1' ]); $request = $client->createRequest(); $config = ArrayHelper::getValue(Yii::$app->params, 'OpenAI'); $proxy = ArrayHelper::getValue($config, 'proxy'); $apiKey = ArrayHelper::getValue($config, 'admin_key'); $request->getHeaders() ->add('Authorization', 'Bearer ' . $apiKey); $url = '/organization/projects'; $response = $request ->setMethod('GET') ->setUrl($url) ->setOptions([ 'proxy' => $proxy, 'SSL_VERIFYHOST' => 0, 'SSL_VERIFYPEER' => 0 ]) ->send(); $message = ArrayHelper::getValue($response->data, 'error.message'); if ($message) { $this->addError('summary', $message); return false; } $project_list = ArrayHelper::getValue($response->data, 'data'); foreach ($project_list as $project) { $p = Project::findOrNew([ 'key' => ArrayHelper::getValue($project, 'id'), ]); $status = ArrayHelper::getValue($project, 'status'); $p->setAttributes([ 'name' => ArrayHelper::getValue($project, 'name'), 'rec_status' => $status == 'active' ? 1 : 0 ]); if (!$p->save()) { $this->addErrors($p->errors); return false; } } $client = CentrifugoHelper::createClient(); $user = Yii::$app->user->identity; $channel = CentrifugoHelper::getChannelName($user->guid); $data = [ 'projects' => 'ok', ]; $response = $client->publish($channel, $data); Yii::debug(VarDumper::dumpAsString([ 'channel' => $channel, 'response' => $response, 'data' => $data ])); return true; } }