Hello world на Lua
Из этого руководства вы узнаете, как настраивать модель данных, выполнять запросы и создавать хранимые процедуры на языке Lua.
Для начала вам понадобится запущенный экземпляр TDG. Можно запустить TDG в Docker-контейнере или же развернуть его на локальной машине вручную или с помощью Ansible.
Затем вы сможете:
В этом руководстве используется модель данных, содержащая два типа объектов: музыкальные группы и исполнители. У каждой музыкальной группы есть название, жанр и год ее создания. Для исполнителей указываются имена, страны происхождения и инструменты, на которых они играют.
Вот пример такой модели:
[{"name": "MusicBand","type": "record","fields": [{"name": "name", "type": "string"},{"name": "genre", "type": {"type":"array", "items":"string"}},{"name": "wasformed", "type":"long"}],"indexes": ["name", "genre", "wasformed"]},{"name": "Artist","type": "record","fields": [{"name": "fullname", "type": "string"},{"name": "country", "type": "string"},{"name": "instruments", "type": {"type":"array", "items":"string"}}],"indexes": ["fullname"]}]
В меню слева есть вкладка Model. Откройте ее и вставьте модель в поле Request. Нажмите Submit:

Вы настроили модель данных. Теперь можно выполнять загрузку, выборку и удаление данных.
В меню слева есть вкладка под названием Graphql. Откройте эту вкладку, выберите необходимую схему default и удалите всё из поля запроса:

В поле запроса вставьте такие данные:
mutation all {rammstein:MusicBand(insert: {name: "Rammstein",genre: ["metal", "industrial", "gothic"],wasformed: 1994}) {namegenrewasformed}linkinpark:MusicBand(insert: {name: "Linkin Park",genre: ["alternative", "metal"],wasformed: 1996}) {namegenrewasformed}blacksabbath:MusicBand(insert: {name: "Black Sabbath",genre: ["gothic", "metal"],wasformed: 1968}) {namegenrewasformed}deeppurple:MusicBand(insert:{name: "Deep Purple",genre: ["metal", "rock"],wasformed: 1968}) {namegenrewasformed}maxkorzh:MusicBand(insert:{name:"Max Korzh",genre:["rap", "electro"],wasformed: 2006}) {namegenrewasformed}}
Нажмите кнопку воспроизведения, чтобы выполнить запрос:

Данные загружены.
Читать данные можно на вкладке Graphql. Убедитесь, что выбрана схема default, удалите всё из поля слева и напишите запрос на выборку всех музыкальных групп:
query {MusicBand {namewasformedgenre}}
Нажмите кнопку воспроизведения. В поле справа вы увидите результат:

Выполните выборку данных по первичному ключу:
query {MusicBand(name:"Black Sabbath") {namewasformedgenre}}
Нажав на кнопку воспроизведения, вы получите всю сохраненную информацию о группе Black Sabbath:

Добавьте еще один музыкальный жанр для одной из групп. Для этого на вкладке Graphql внесите информацию о двух жанрах для группы:
mutation {MusicBand(insert:{name: "Deep Purple",genre: ["metal", "rock"],wasformed: 1968}) {namegenrewasformed}}
Нажмите кнопку воспроизведения. Информация о группе Deep Purple обновилась.
На вкладке Graphql напишите запрос на удаление всех данных об одной из музыкальных групп:
mutation {MusicBand(name:"Linkin Park" delete:true) {namegenrewasformed}}
Нажмите кнопку воспроизведения. Все данные о музыкальной группе Linkin Park удалены.
В меню слева есть вкладка Code. Откройте эту вкладку и создайте
директорию src. В директории src создайте файл hello.lua,
представляющий собой Lua-модуль для экспорта функций:
function hello()return "Hello World"endreturn {hello = hello}
Нажмите Apply:

Для этого Lua-модуля необходим GraphQL-интерфейс. На вкладке Code
создайте файл под названием services.yml и задайте сигнатуру
GraphQL-вызова:
hello_world:doc: "Hello World script"function: hello.helloreturn_type: string
Нажмите Apply:

Код проверяется и загружается в кластер. Если произойдет ошибка, в правом нижнем углу вы увидите уведомление с ее описанием.
Откройте вкладку Graphql, выберите необходимую схему default и вызовите хранимую процедуру:
{hello_world}
В поле справа вы получите результат:

В наборе данных есть разные музыкальные группы. Создайте хранимую процедуру для создания плейлиста, который будет воспроизводить песни в случайном порядке.
На вкладке Code откройте директорию src и создайте файл под
названием playlist.lua. В этом файле задайте логику для создания
плейлиста со случайным порядком воспроизведения:
local repository = require('repository')function shuffle(tbl)for i = #tbl, 2, -1 dolocal j = math.random(i)tbl[i], tbl[j] = tbl[j], tbl[i]endreturn tblendfunction playlist()local result = repository.find("MusicBand", {})result = result or {}shuffle(result)return resultendreturn {playlist=playlist}
В файле services.yml задайте сигнатуру GraphQL-вызова:
playlist:doc: "Return randomized playlist"function: playlist.playlistreturn_type: {"type":"array", "items":"MusicBand"}
Перейдите на вкладку Graphql и выполните такую команду:
{playlist { name }}
Нажмите кнопку воспроизведения. В результате вы получите плейлист, в котором группы представлены в случайном порядке:

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