Модуль org.unidata.mdm.rest.v2.draft

Общая информация

Модуль предоставляет доступ к работе с черновиками посредством REST API.

Операции:

  • Получить список всех доступных провайдеров черновиков;

  • Получить состояния существующих черновиков;

  • Найти черновики по запросу;

  • Создать/обновить черновик;

  • Опубликовать черновик;

  • Удалить черновик.

Зависимости:

  • org.unidata.mdm.rest.v2.core

  • org.unidata.mdm.rest.system

  • org.unidata.mdm.draft

Параметры конфигурации:

Отсутствуют внешние параметры

Точки в пайплайнах:

Отсутствуют

Классы и интерфейсы модуля

DraftRestService - REST-сервис для работы с черновиками.

Операции:

  • Получить список всех доступных провайдеров черновиков;

  • Получить состояния существующих черновиков;

  • Найти черновики по запросу;

  • Создать/обновить черновик;

  • Опубликовать черновик;

  • Удалить черновик.

REST-сервисы

REST-сервис работы с черновиками - org.unidata.mdm.rest.v2.draft.service.DraftRestService

/api/v2/draft

@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
@Path("/")
public class DraftRestService extends AbstractRestService {

   private static final String SERVICE_TAG = "Draft";
   /**
   * Returns list of draft provider types, currently known to the system.
   */
   @GET
   @Path("types")
   @Operation(
      summary = "Get list of draft provider types, currently known to the system",
      description = "Returns list of draft provider types, currently known to the system"
   )
   public GetDraftTypesResultRO types();
   /**
   * Returns list of known draft states.
   */
   @GET
   @Path("states")
   @Operation(
      summary = "Get list of draft states, currently known to the system",
      description = "Returns list of draft states, currently known to the system"
   )
   public GetDraftStatesResultRO states();
   /**
   * Find drafts for request
   *
   * @return List of drafts
   */
   @POST
   @Path("drafts")
   @Operation(summary = "Find drafts for request", description = "Find drafts for request"
   )
   public GetDraftResultRO drafts(GetDraftRequestRO request);
   /**
   * Upsert draft
   *
   * @return List of drafts
   */
   @POST
   @Path("upsert")
   @Operation(
      summary = "Upsert draft",
      description = "Upsert draft, create or update display name if draft exists"
   )
   public UpsertDraftResultRO upsert(UpsertDraftRequestRO request);
   /**
   * Publish draft
   *
   * @return result
   */
   @POST
   @Path("publish")
   @Operation(
      summary = "Publish draft",
      description = "Publish draft"
   )
   public PublishDraftResultRO publish(PublishDraftRequestRO request);
   /**
   * Remove drafts
   *
   * @return result
   */
   @POST
   @Path("remove")
   @Operation(
      summary = "Remove draft",
      description = "Remove draft"
   )
   public RemoveDraftResultRO remove(RemoveDraftRequestRO request);
}

Swagger UI

/api/v2/draft/api-docs

Список примеров:

Поиск черновиков

POST /universe-backend/api/v2/draft/drafts

Ищет по любым имеющимся полям.

Принимает GetDraftRequestRO.

Возвращает GetDraftResultRO.

Запрос:

{
"query": {
   "type": "string", //ID провайдера, например, "record", для записей реестров
   "owner": "string", //Владелец черновика, например, "admin"
   "subjectId": "string", //ID объекта, для которого создан черновик, например, Etalon ID записи
   "draftId": 0, //ID искомого черновика
   "parentDraftId": 0, //ID родительского черновика
   "tags": [ //Тэги, например, "namespace:register" для поиска черновиков для записей реестров или "entity-name:TestReg" для поиска черновиков записей реестра "TestReg"
      "string"
   ],
   "state": "string" //Состояние черновика, например, "RUNNING" для поиска черновиков, с которыми ведется работа
},
"offset": 0,
"limit": 0 //Больше нуля или отсутствует
}

Ответ:

{
"details": { //Ошибки
   "info": [],
   "warning": [],
   "error": []
},
"drafts": [ //Черновики
   {
      "type": "string",
      "subjectId": "string",
      "description": "string",
      "owner": "string",
      "ownerFullName": "string",
      "createdBy": "string",
      "updatedBy": "string",
      "draftId": 0,
      "parentDraftId": 0,
      "editionsCount": 0,
      "createDate": "2023-07-17T07:51:37.259Z",
      "updateDate": "2023-07-17T07:51:37.259Z",
      "tags": [
      "string"
      ],
      "state": "CREATED" //Состояние черновика
   }
],
"totalCount": 0 //Общее количество найденных черновиков
}

Пример запроса для поиска всех черновиков:

{
}

Пример запроса для поиска всех черновиков модели данных:

{
"query": {
   "type": "data-model"
}
}

Пример запроса для поиска всех черновиков записи реестра с etalon ID "5d909a39-1fea-11ee-8704-19e62a84c1f0", с которыми ведется работа ("RUNNING"):

{
"query": {
   "type": "record",
   "subjectId": "5d909a39-1fea-11ee-8704-19e62a84c1f0",
   "state": "RUNNING"
}
}

Пример ответа для запроса выше:

{
"details": {
   "info": [],
   "warning": [],
   "error": []
},
"drafts": [
   {
      "type": "record",
      "subjectId": "5d909a39-1fea-11ee-8704-19e62a84c1f0",
      "description": "Черновик от 11.07.2023 15:56:06",
      "owner": "admin",
      "ownerFullName": "Admin  Root",
      "createdBy": "admin",
      "updatedBy": "admin",
      "draftId": 2,
      "parentDraftId": null,
      "editionsCount": 2,
      "createDate": "2023-07-11T15:56:06.990655+03:00",
      "updateDate": "2023-07-11T15:57:11.674683+03:00",
      "tags": [
      "record-external-id:4d39b560-1fea-11ee-addc-e31a630bec40\u001fTestReg\u001funidata",
      "namespace:register",
      "operation-code:UPSERT_DATA",
      "entity-name:TestReg"
      ],
      "state": "RUNNING"
   }
],
"totalCount": 1
}

Создание или обновление черновика

POST /api/v2/draft/upsert

  • Принимает UpsertDraftRequestRO

  • Возвращает UpsertDraftResultRO

См. Поиск черновиков

Запрос:

{
   "type": "string", //Указывается ID провайдера, например, "record" для создания черновика записи
   "owner": "string", //Если отсутствует, то будет использоваться имя пользователя, который отправил запрос
   "subjectId": "string", //Может быть пустым, если, например, запись реестра еще не создана
   "draftId": 0, //Указывается для обновления
   "parentDraftId": 0, //Указывается, если есть родитель
   "tags": [ //Для записи реестра, например, указываются "namespace:register" и "entity-name:имя_реестра"
      "string" //Могут быть опциональными, проставятся автоматически на основе остальных данных и параметров, например, для записи реестра
   ],
   "description": "string", //Отображаемое имя черновика
   "parameters": { //Параметры черновика, если есть
      "additionalProp1": "string", //Например, "entity-name" : "имя_реестра" для создания черновика для записи реестра
      "additionalProp2": "string",
      "additionalProp3": "string"
   }
}

Ответ:

{
   "details": {
      "info": [],
      "warning": [],
      "error": []
   },
   "draft": {
      "type": "string",
      "subjectId": "string",
      "description": "string",
      "owner": "string",
      "ownerFullName": "string",
      "createdBy": "string",
      "updatedBy": "string",
      "draftId": 0,
      "parentDraftId": 0,
      "editionsCount": 0,
      "createDate": "2023-07-17T07:21:26.482Z",
      "updateDate": "2023-07-17T07:21:26.482Z",
      "tags": [
         "string"
      ],
      "state": "CREATED"
   }
}

Пример создания черновика для записи (record) реестра (register) "TestReg" (системное имя) с etalon ID "5d909a39-1fea-11ee-8704-19e62a84c1f0":

{
   "type": "record", //Провайдер для записей
   "subjectId": "5d909a39-1fea-11ee-8704-19e62a84c1f0", //Для записей ID эталона
   "description": "example draft",
      "parameters": {
         "namespace" : "register", //Пространство имен реестров
         "entity-name" : "TestReg" //Название реестра
      }
}

Ответ:

{
   "details": {
      "info": [],
      "warning": [],
      "error": []
   },
   "draft": {
      "type": "record",
      "subjectId": "5d909a39-1fea-11ee-8704-19e62a84c1f0",
      "description": "example draft",
      "owner": "admin",
      "ownerFullName": "Admin  Root",
      "createdBy": "admin",
      "updatedBy": null,
      "draftId": 14,
      "parentDraftId": null,
      "editionsCount": 0,
      "createDate": "2023-07-17T11:00:58.451+03:00",
      "updateDate": null,
      "tags": [
         "namespace:register",
         "entity-name:TestReg"
      ],
      "state": "CREATED"
   }
}

Пример создания черновика для добавления записи (record) в реестр (register) "TestReg" (системное имя). Записи еще нет, поэтому нет ID эталона:

{
"type": "record", //Провайдер для записей
"subjectId": "", //Еще нет объекта
"description": "example draft",
   "parameters": {
      "namespace" : "register", //Пространство имен реестров
      "entity-name" : "TestReg" //Название реестра
   }
}

Ответ:

{
   "details": {
      "info": [],
      "warning": [],
      "error": []
   },
   "draft": {
      "type": "record",
      "subjectId": "",
      "description": "example draft to add record to entity",
      "owner": "admin",
      "ownerFullName": "Admin  Root",
      "createdBy": "admin",
      "updatedBy": null,
      "draftId": 15,
      "parentDraftId": null,
      "editionsCount": 0,
      "createDate": "2023-07-17T11:05:20.678+03:00",
      "updateDate": null,
      "tags": [
         "namespace:register",
         "entity-name:TestReg"
      ],
      "state": "CREATED"
   }
}

Пример запроса для создания черновика модели данных для работы с моделями реестров и справочников:

{
"type": "data-model",
"subjectId": "",
"description": "example draft to update data-model",
   "parameters": {
   }
}

Ответ:

{
   "details": {
      "info": [],
      "warning": [],
      "error": []
   },
   "draft": {
      "type": "data-model",
      "subjectId": "",
      "description": "example draft to update data-model",
      "owner": "admin",
      "ownerFullName": "Admin  Root",
      "createdBy": "admin",
      "updatedBy": null,
      "draftId": 16,
      "parentDraftId": null,
      "editionsCount": 0,
      "createDate": "2023-07-17T11:06:31.562+03:00",
      "updateDate": null,
      "tags": [],
      "state": "RUNNING"
   }
}

Публикация черновика

POST /api/v2/draft/publish

  • Принимает UpsertDraftRequestRO

  • Возвращает UpsertDraftResultRO

Запрос:

{
  "draftId": 0, //ID черновика
  "force": true, //Принудительная публикация
  "delete": true //Удаление черновика после публикации
}

Ответ:

{
   "details": {
      "info": [],
      "warning": [],
      "error": []
   },
   "draft": {
      "type": "string",
      "subjectId": "string",
      "description": "string",
      "owner": "string",
      "ownerFullName": "string",
      "createdBy": "string",
      "updatedBy": "string",
      "draftId": 0,
      "parentDraftId": 0,
      "editionsCount": 0,
      "createDate": "2023-07-17T07:20:07.706Z",
      "updateDate": "2023-07-17T07:20:07.706Z",
      "tags": [
         "string"
      ],
      "state": "CREATED"
   }
}

Пример запроса на публикацию черновика модели данных, который создали в другом примере с draftId = 16, с принудительной публикацией (force) и без удаления публикуемого черновика (delete):

{
"draftId": 16,
"force": true,
"delete": false
}

Ответ:

{
   "details": {
      "info": [],
      "warning": [],
      "error": []
   },
   "draft": {
      "type": "data-model",
      "subjectId": "",
      "description": "example draft to update data-model",
      "owner": "admin",
      "ownerFullName": "Admin  Root",
      "createdBy": "admin",
      "updatedBy": "admin",
      "draftId": 16,
      "parentDraftId": null,
      "editionsCount": 1,
      "createDate": "2023-07-17T11:06:31.729904+03:00",
      "updateDate": "2023-07-17T11:06:31.729904+03:00",
      "tags": [],
      "state": "PUBLISHED"
   }
}

Удаление черновика

POST /api/v2/draft/publish

  • Принимает UpsertDraftRequestRO

  • Возвращает UpsertDraftResultRO

Ищет по любым имеющимся полям. См. Поиск черновиков

Запрос:

{
"type": "string",
"owner": "string",
"subjectId": "string",
"draftId": 0,
"parentDraftId": 0,
"tags": [
   "string"
],
"state": "string"
}

Ответ:

{
"details": {
   "info": [],
   "warning": [],
   "error": []
},
"success": true //Успешность запроса
}

Запрос для удаления черновика с draftId = 15:

{
"draftId": 15
}

Ответ:

{
"details": {
   "info": [],
   "warning": [],
   "error": []
},
"success": true
}

Пример запроса для удаления всех черновиков, которые были опубликованы:

{
"state" : "PUBLISHED"
}

Пример запроса для удаления всех черновиков пользователя "admin" записи (record) реестра (register) "TestReg" (системное имя) с etalon ID "5d909a39-1fea-11ee-8704-19e62a84c1f0", которые были созданы, но работа с которыми не велась:

{
"type": "record",
"owner": "admin",
"subjectId": "5d909a39-1fea-11ee-8704-19e62a84c1f0",
"tags": [
   "entity-name:TestReg"
],
"state": "CREATED"
}

Получение списка возможных состояний черновика

POST /api/v2/draft/states

Запрос отправляется без параметров.

Ответ:

{
   "details": {
      "info": [],
      "warning": [],
      "error": []
   },
   "states": [
      {
         "name": "string", //Систеное имя состояния, которое используется при поиске в параметре "state"
         "moduleId": "string", //Модуль, в котором определено состояние
         "displayName": "string",
         "description": "string"
      }
   ]
}

Пример ответа:

{
   "details": {
      "info": [],
      "warning": [],
      "error": []
   },
   "states": [
      {
         "name": "CREATED",
         "moduleId": "org.unidata.mdm.draft",
         "displayName": "Начальное состояние черновика",
         "description": "Выставляется в случае, когда черновик только создан и еще не имеет ни одной редакции"
      },
      {
         "name": "PUBLISHED",
         "moduleId": "org.unidata.mdm.draft",
         "displayName": "Черновик опубликован",
         "description": "Черновик успешно опубликован"
      },
      {
         "name": "DELAYED_BY_WORKFLOW",
         "moduleId": "com.unidata.mdm.workflow.core",
         "displayName": "Публикация черновика отложена",
         "description": "Фактическая публикация черновика отложена до окончания процесса согласования."
      },
      {
         "name": "FAILED",
         "moduleId": "org.unidata.mdm.draft",
         "displayName": "Неудачная публикация",
         "description": "Процесс публикации завершился с ошибками в дополнительных действих после публикации"
      },
      {
         "name": "RUNNING",
         "moduleId": "org.unidata.mdm.draft",
         "displayName": "Нормальное состояние черновика",
         "description": "Черновик доступен для редактирования и имеет одну или несколько редакций"
      }
   ]
}

Получение списка возможных типов провайдеров

POST GET /api/v2/draft/types

Запрос отправляется без параметров.

Ответ:

{
   "details": {
      "info": [],
      "warning": [],
      "error": []
   },
   "types": [
      {
         "id": "string",
         "description": "string",
         "tags": [
         "string"
         ]
      }
   ]
}

Пример ответа:

{
   "details": {
      "info": [],
      "warning": [],
      "error": []
   },
   "types": [
      {
         "id": "bpmn-model",
         "description": "com.unidata.mdm.workflow.core.bpmn.model.draft.provider.description",
         "tags": []
      },
      {
         "id": "matching-model",
         "description": "app.matching.draft.model.provider.description",
         "tags": []
      },
      {
         "id": "classifier-model",
         "description": "com.unidata.mdm.classifiers.draft.classifier.provider.description",
         "tags": []
      },
      {
         "id": "record",
         "description": "Поддержка черновиков для типа данных \"записи\"",
         "tags": [
         "entity-name",
         "operation-code",
         "namespace",
         "record-external-id"
         ]
      },
      {
         "id": "data-model",
         "description": "",
         "tags": []
      },
      {
         "id": "classifier-version",
         "description": "com.unidata.mdm.classifiers.draft.version.provider.description",
         "tags": []
      },
      {
         "id": "quality-model",
         "description": "app.dq.draft.model.provider.description",
         "tags": []
      },
      {
         "id": "workflow-model",
         "description": "Провайдер черновиков модели бизнес-процессов",
         "tags": []
      },
      {
         "id": "classifier-node",
         "description": "com.unidata.mdm.classifiers.draft.node.provider.description",
         "tags": []
      },
      {
         "id": "classification",
         "description": "com.unidata.mdm.classifiers.draft.classification.provider.description",
         "tags": [
         "classified-origin-id",
         "namespace",
         "classified-id",
         "operation-code",
         "node-name",
         "version-name",
         "classifier-name"
         ]
      },
      {
         "id": "relation",
         "description": "Поддержка черновиков для типа данных \"связи\"",
         "tags": [
         "relation-from-etalon-id",
         "namespace",
         "relation-to-external-id",
         "entity-name",
         "operation-code",
         "relation-to-etalon-id",
         "relation-from-external-id"
         ]
      }
   ]
}