BMC IO DocsBMC IO Docs
IO v6
IO v7
Notes
Docs
IO v6
IO v7
Notes
Docs
  • Notes

    • Заметки

Заметки

  • IO v7. Что осталось важного сделать
  • IO v7. Остаются вопросы
  • Что нужно дописать в документации
  • Прочие заметки от lexinzector

IO v7. Что осталось важного сделать

  • перенос недостающих функций из IO6.
  • внедрение Capsule из laravel/symfony для удобства конструирования SQL запросов ($capsuledb).
  • изменение сервиса авторизации на использование JWT без cookie, что позволит создавать открытое API.
  • добавление поддержки словарей фраз.
  • добавление поддержки $ioEnum.
  • добавление поддержки $ioLangs.
  • добавление поддержки $purifier.
  • перенос недостающих констант из IO6.
  • проверить поддержку параметров ~ и !~ в функции getWhereFromFilter() класса IO_MYSQL_PDO.

IO v7. Остаются вопросы

  • где dbsearch2 у классов? она заменена на search.
  • почему Unit класс находится в модуле io7 а не в trade?
  • проверить работоспособность вызова классов и моделей через общалку. как локальных так и удаленных. попробовать не переопределять некоторые функции, чтобы проверить имеются ли они по умолчанию в классе наследования или нет, и нужно ли вообще их объявлять.
  • попробовать воспользоваться IOCore::Instance() и ->delete(), ->update(), ...

Что нужно дописать в документации

  • io6
    • Функции фреймворка
      • описать каждую функцию
      • dbSearchAll
        • описать как получать массив объектов вместо массива массивов
    • Class
      • описать прочие функции класса
      • написать примеры
      • описать какие функции только для монго
    • Model
      • подробнее описать класс наследования и доступные функции
    • Controller
      • описать как управлять выводом кнопок в app.view.cabinet.main через run_pre()
    • Twig функции
      • описать каждую функцию
    • Twig фильтры
      • описать каждый фильтр
    • JS плагины
      • описать популярные библиотеки
      • описать какие библиотеки используются по умолчанию
        • в кабинете
        • во внешней части
        • в мобилке
    • Обращение к Model через JS
      • преобразовать картинки в текст
    • Разворачивание нового проекта
      • описать подробнее
    • $ioSession->user
      • узнать как используется и описать delegate
      • узнать как используется и описать init()
      • узнать как используется и описать delegate()
      • узнать как используется и описать mylogin()
    • IOCore класс
      • узнать как используется и описать runController()
  • io7
    • Функции фреймворка
      • описать каждую функцию
    • Route
      • описать все доступные функции (например show_error(), show_success(), ...)
      • привести содержимое страницы в порядок как в io6
    • Class
      • подробнее описать классы наследования и доступные функции
        • MySQL_Class
      • описать функционал операций с классом
      • описать все доступные функции
      • привести содержимое страницы в порядок как в io6
    • Api
      • подробнее описать классы наследования и доступные функции
      • привести содержимое страницы в порядок как в io6
    • Twig функции
      • описать каждую функцию
    • Обращение к Api через JS
      • перенести описание страницы из io6
    • Разворачивание нового проекта
      • описать подробнее
    • методы frontend разработки
      • как создавать модели/компоненты/шаблоны по правилам
      • описать виды проекта (под микрофронт, без него)
    • создать страницу для процессов по разработке фронта на vue3
    • удалены некоторые глобальные переменные!!!
    • добавлены новые типы проектов (чистый проект, проект с поддержкой микрофронтенда). у них отличается структура папок и файлов!

Прочие заметки от lexinzector

касаемо хоста:

  • нужно где-то хранить список доступных сервисов (appModel.mfservices)
  • нужно как-то управлять доменами dev и prod и самим списком сервисов, т.к. на проде может быть меньше запущенных сервисов
  • нужно как-то получать список купленных и некупленных сервисов пользователя, для отображения в MainPanel и в модалке списка сервисов и в модалке поиска
  • нужно как-то переключать компанию (при выборе компании, по прямой ссылке)
  • нужно как-то запрашивать компанию, если нет возможности в ссылке ее указать (к примеру ссылка на кабинет какого-то сервиса, а после перехода запрашивать компанию, как сделано в io6)
  • разработать разделы /cabinet, /admin, /settings
  • выделить /messages в микрофронтенд сервиса уведомлений
  • выделить /help в микрофронтенд сервиса базы знаний

касаемо микрофронтов:

  • определить как будут писаться функции
  • модернизировать ioCallEntity и ioCallEntitySubmit так, чтобы они обрабатывали ошибки нормально, и не было проблем с сессией и cors

касаемо фреймворка io7:

  • добавить в модели базовые функции похожие на map reduce (подробнее в проекте трейда в модели инвойсов)
  • понять, что лучше использовать, api через роуты или через entity к моделям?
  • везде убрать define переменные а оставить только getenv()
  • везде применить Constant переменные EIO:... вместо EIO_...

iocli должен уметь эту команду и вывод должен быть соответственным:

php artisan migrate:fresh --seed

  Dropping all tables .................................................................................................. 381.22ms DONE

   INFO  Preparing database.  

  Creating migration table .............................................................................................. 43.29ms DONE

   INFO  Running migrations.  

  0001_01_01_000000_create_users_table ................................................................................. 125.26ms DONE
  0001_01_01_000001_create_cache_table .................................................................................. 97.60ms DONE
  0001_01_01_000002_create_jobs_table .................................................................................. 138.36ms DONE
  2024_01_01_000003_create_personal_access_tokens_table ................................................................. 80.22ms DONE
  2024_01_01_000004_create_parent_student_table ........................................................................ 206.12ms DONE
  2024_01_01_000005_create_courses_table ................................................................................ 93.12ms DONE
  2024_01_01_000006_create_course_enrollments_table .................................................................... 343.00ms DONE
  2024_01_01_000007_create_topics_table ................................................................................. 97.92ms DONE
  2024_01_01_000008_create_assignments_table ........................................................................... 143.47ms DONE
  2024_01_01_000009_create_submissions_table ........................................................................... 163.26ms DONE
  2024_01_01_000010_create_rubrics_table ............................................................................... 183.24ms FAIL

   Illuminate\Database\QueryException 

  SQLSTATE[HY000]: General error: 1824 Failed to open the referenced table 'rubric_criterias' (Connection: mysql, Host: 127.0.0.1, Port: 3306, Database: study, SQL: alter table `rubric_levels` add constraint `rubric_levels_rubric_criteria_id_foreign` foreign key (`rubric_criteria_id`) references `rubric_criterias` (`id`) on delete cascade)

  at vendor/laravel/framework/src/Illuminate/Database/Connection.php:857
    853▕             $exceptionType = ($isUniqueConstraintError = $this->isUniqueConstraintError($e))
    854▕                 ? UniqueConstraintViolationException::class
    855▕                 : QueryException::class;
    856▕ 
  ➜ 857▕             $exception = new $exceptionType(
    858▕                 $this->getNameWithReadWriteType(),
    859▕                 $query,
    860▕                 $this->prepareBindings($bindings),
    861▕                 $e,

      +9 vendor frames 

  10  database/migrations/2024_01_01_000010_create_rubrics_table.php:32
      Illuminate\Support\Facades\Facade::__callStatic()
      +37 vendor frames 

  48  artisan:16
      Illuminate\Foundation\Application::handleCommand()

нужно создать composer библиотеку bmc/io-installer (как laravel/installer). но для этого нужен composer репозиторий на сервере компании....


  • повторяющиеся участки документации нужно удалить. в местах где пересекаются инструкции нужно создавать ссылки на документы с отдельными инструкциями вместо дублирования текста.
  • очереди queue на данный момент работают через бд и iocli queue:work. нужно будет посадить ее в том числе на redis.
  • schedule нужно перевести на работу как в laravel (из базы в Module.php). и разработать фасад Schedule, который умеет работать как в laravel и может запускать задачи каждую секунду и т.п.
  • есть несколько проектов, которые читают одну базу. чтобы не повредить базу, нужно в app/Module.php сделать возможность отключать миграции для каждого модуля (настраиваемо), а также в .env добавить флаг MIGRATE_ENABLE для всего проекта. в iocli также внести изменения.

в laravel 13 cron скрипты это команды либо замыкания (блоки кода), которые запускаются через фасад Schedule. они описываются в routes/console.php, либо в bootstrap/app.php через withSchedule. на сервере запускаются кроном раз в минуту. однако Schedule умеет за положенную ей минуту выполнять скрипты, которые должны выполняться например каждую секунду и т.п. в laravel 13 jobs это задачи, которые нужно выполнить в фоне (генерация отчетов или что-то сложное и долгое). они формируются при срабатывании какого то события (пользователь что-то сделал). в laravel 13 queue это очередь для jobs, которая выполняется немедленно, в момент попадания в очередь какой-либо задачи. используется либо бд либо redis. в laravel 13 bin скриптов нет, но вместо них используются либо миграции (одноразовые), либо команды (с заглушкой от повторного запуска), либо патчи (laravel-patches, которые работают как миграции, но отдельно от них)


  • в io7 помимо .twig файлов нужно добавить поддержку .blade.php файлов

  • в io6 при открытии несуществующей страницы открывается страница "файл не найден" и без глобального меню. исправить

  • в мобильном приложении сессия должна быть вечной как в приложении vk, а авторизация не должна делать редирект на sso. форма должна быть в мобильном приложении, т.к. там авторизация по отпечатку и пинкоду с вводом логина пароля... но непонятно что делать там с авторизацией через соцсети...

  • в io7 добавить класс работы с s3 хранилищами (minio)

  • в io7 добавить поддержку elasticsearch и solr

  • в io7proj подумать как io7/php/Init.php и io7/php/Const.php перенести в Module.php. и то же самое с app/Conf.php в Module.php

  • в io7 добавить поддержку Storage как в laravel 13

  • в io7 доделать функцию CrudApi.doGetReport, т.к. там нет дебага, нет выгрузки в файл, нет рекурсии для выгрузки большого количества записей

  • в io7 не все функции из io6 перенесены (functions.php, twig.php)

  • переписать документацию по io7 на манер доков laravel 13 https://laravel.su/docs/13.x


сделать в io7 функцию callApi для вызова api роутов проектов. 3 аргумента функции. 1 проект, 2 урл, 3 параметры функция как для бэка так и для фронта модели переименовать из Api в Model

по идее отличия минимальные:

  • классы не проверяют полномочия но требуют запуск внутри проектов, поддерживается только в backend.
  • модели доступны везде но там проверка полномочий.
  • роуты доступны везде, покрыты middleware и проверкой полномочий.

отказаться от моделей в пользу роутов. в twig фронте бэке сделать ioCallRoute. в io6 добавить поддержку ioCallRoute для новых проектов. ioCallRoute(proj, request_type, url, params) вполне возможно что классы превратятся в модели как в ларавел а классы станут кастомными при особых случаях без привязки к таблицам бд


  • проверить выполнение: так как есть поддержка oauth2, при запрашивании данных с проекта sso, нужно сделать страницу показа информации, какое устройство или токен запрашивает доступ, к каким данным, куда произойдет редирект, и с кнопками authorize/accept и cancel. также нужно создать нужные роуты и конструкции для возможности отдавать запрашиваемые данные. в документации нужно добавить статью о том, как это делать сторонним разработчикам в их сервисах.

  • протестировать и роуты и модели в postman с использованием bearer token логин пароль, oauth iot токенов устройств и отдельных токенов