phase-3: BIT_FlightDeck CFE — HTTPService bfd_IntegrationAPI with 11 GET endpoints
- Configuration.xml: AddOn extension, prefix bfd_, compat Version8_3_14 - CommonModule bfd_IntegrationAPIHelpers (server, privileged): JSON response, ISO date parse, UUID, email extractor, limit parser - HTTPService bfd_IntegrationAPI (rootURL=bfd-api): 11 templates - /v1/health, /v1/employees, /v1/works (+modified_since, +limit) - /v1/projects, /v1/stages, /v1/work_types, /v1/dictionaries - /v1/dept_history (+modified_since), /v1/project_register (+modified_since for MVP-3) - /v1/eva_mapping/projects, /v1/eva_mapping/clients (best-effort from BIT.RA registers) - README with step-by-step instructions for 1C developer - cfe-validate: 0 errors / 0 warnings (13/13 checks)
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// bfd_IntegrationAPIHelpers
|
||||
//
|
||||
// Назначение: вспомогательные процедуры/функции для bfd_IntegrationAPI
|
||||
// (read-only REST API для проекта bit-flight-deck).
|
||||
//
|
||||
// Context: Server, Privileged.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Формирует HTTPСервисОтвет с JSON-телом.
|
||||
// Параметры:
|
||||
// Данные — Произвольный (Структура / Массив / Число / Строка / Дата / Булево / Неопределено)
|
||||
// Код — Число (по умолчанию 200)
|
||||
// Возвращаемое значение: HTTPСервисОтвет
|
||||
//
|
||||
Функция СформироватьОтветJSON(Знач Данные, Знач Код = 200) Экспорт
|
||||
|
||||
ЗаписьJSON = Новый ЗаписьJSON;
|
||||
ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.БезПереносов, "", Ложь, "yyyy-MM-ddTHH:mm:ss");
|
||||
ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
|
||||
ЗаписатьJSON(ЗаписьJSON, Данные);
|
||||
|
||||
Ответ = Новый HTTPСервисОтвет(Код);
|
||||
Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
|
||||
Ответ.УстановитьТелоИзСтроки(ЗаписьJSON.Закрыть(), КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
|
||||
Возврат Ответ;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Сериализованная ошибка.
|
||||
//
|
||||
Функция СформироватьОтветОшибки(Знач СообщениеОшибки, Знач Код = 500) Экспорт
|
||||
|
||||
Структура = Новый Структура("error", СообщениеОшибки);
|
||||
Возврат СформироватьОтветJSON(Структура, Код);
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Парсит ISO 8601 дату из строки query-параметра.
|
||||
// Возвращает Дату или '00010101' при ошибке/пусто.
|
||||
//
|
||||
Функция ПарсДатуISO(Знач СтрокаДаты) Экспорт
|
||||
|
||||
Если ПустаяСтрока(СтрокаДаты) Тогда
|
||||
Возврат Дата(1, 1, 1);
|
||||
КонецЕсли;
|
||||
|
||||
ОчищеннаяСтрока = СтрЗаменить(СтрЗаменить(СтрокаДаты, "T", " "), "Z", "");
|
||||
Попытка
|
||||
Возврат Дата(ОчищеннаяСтрока);
|
||||
Исключение
|
||||
Возврат Дата(1, 1, 1);
|
||||
КонецПопытки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Строковое представление GUID ссылки или пустая строка.
|
||||
//
|
||||
Функция UUID(Знач Ссылка) Экспорт
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(Ссылка) Тогда
|
||||
Возврат "";
|
||||
КонецЕсли;
|
||||
Возврат Строка(Ссылка.УникальныйИдентификатор());
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Извлекает email из ТЧ КонтактнаяИнформация пользователя.
|
||||
//
|
||||
Функция ИзвлечьEmail(Знач Пользователь) Экспорт
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(Пользователь) Тогда
|
||||
Возврат "";
|
||||
КонецЕсли;
|
||||
|
||||
Попытка
|
||||
Объект = Пользователь.ПолучитьОбъект();
|
||||
Исключение
|
||||
Возврат "";
|
||||
КонецПопытки;
|
||||
|
||||
Если Объект = Неопределено Тогда
|
||||
Возврат "";
|
||||
КонецЕсли;
|
||||
|
||||
Попытка
|
||||
Для Каждого Стр Из Объект.КонтактнаяИнформация Цикл
|
||||
ВидНаименование = "";
|
||||
Если ЗначениеЗаполнено(Стр.Вид) Тогда
|
||||
ВидНаименование = Строка(Стр.Вид);
|
||||
КонецЕсли;
|
||||
Если СтрНайти(НРег(ВидНаименование), "email") > 0 ИЛИ СтрНайти(НРег(ВидНаименование), "почта") > 0 Тогда
|
||||
Если ЗначениеЗаполнено(Стр.Представление) Тогда
|
||||
Возврат Стр.Представление;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
Исключение
|
||||
Возврат "";
|
||||
КонецПопытки;
|
||||
|
||||
Возврат "";
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Лимит выборки из query-параметра.
|
||||
//
|
||||
Функция ПарсЛимит(Знач Запрос, Знач MaxDefault = 1000, Знач MaxAllowed = 10000) Экспорт
|
||||
|
||||
Параметр = Запрос.ПараметрыЗапроса.Получить("limit");
|
||||
Если ПустаяСтрока(Параметр) Тогда
|
||||
Возврат MaxDefault;
|
||||
КонецЕсли;
|
||||
|
||||
Попытка
|
||||
Значение = Число(Параметр);
|
||||
Исключение
|
||||
Возврат MaxDefault;
|
||||
КонецПопытки;
|
||||
|
||||
Если Значение <= 0 Тогда
|
||||
Возврат MaxDefault;
|
||||
КонецЕсли;
|
||||
Возврат Мин(Значение, MaxAllowed);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
Reference in New Issue
Block a user