/
v.bolshakov
/
AIEcosystem-Testing
Обзор
Документация
Войти
/
v.bolshakov
/
AIEcosystem-Testing
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
dev
backend/forms/gpt/SyncFileForm.php
101 строка
3 KB
Developer
Initial commit
03 авг 2026, 17:43
03 авг 2026, 17:43
7433917
Код
Авторство
О чём код?
<?php namespace backend\forms\gpt; use common\components\OpenAIComponent; use common\forms\base\BaseModel; use common\helpers\ArrayHelper; use common\helpers\FileHelper; use common\kdf\KModelStatus; use common\models\File; use common\models\Project; use OpenAI\Client; use OpenAI\Exceptions\ErrorException; use Yii; use yii\helpers\VarDumper; /** * Форма синхронизации файлов * * @author Dmitry E. Semenov <sde.tomsk@gmail.com> * @copyright Self (c) 2025 */ class SyncFileForm extends BaseModel { /** * @var string */ public $type = 'file'; /** * @inheritdoc */ public function rules() { return ArrayHelper::merge(parent::rules(), [ [['type'], 'string'], ]); } /** * @inheritdoc */ protected function doSave() { $pl = Project::find() ->published() ->all(); /** @var Project $p */ foreach ($pl as $p) { try { $openAI = Yii::createObject([ 'class' => OpenAIComponent::class, 'project_id' => $p->key ]); /** @var Client $client */ $client = $openAI->getClient(); $response = $client->files()->list(); foreach ($response->data as $result) { Yii::debug(VarDumper::dumpAsString([ 'result' => $result ])); $f = File::findOrNew([ 'key' => $result->id, ]); $ftype = FileHelper::getMimeTypeByExtension($result->filename) ?: 'plain/text'; $f->setAttributes([ 'project_id' => $p->id, 'fname' => $result->filename, 'fsize' => $result->bytes, 'ftype' => $ftype, 'purpose' => $result->purpose, 'rec_status' => $result->status == 'deleted' ? KModelStatus::ARCHIVE : KModelStatus::PUBLISHED ]); if (!$f->save()) { $this->addErrors($f->errors); return false; } } } catch (ErrorException $e) { Yii::debug(VarDumper::dumpAsString([ 'error' => $e->getMessage() ])); $p->updateAttributes([ 'rec_status' => KModelStatus::ARCHIVE ]); } } return true; } }