Здравствуйте, товарищи! Помогите пожалуйста решить задачу.
В базе данных
PostgreSQL есть 3 таблицы:
SURVEY (ОПРОС),
QUESTION (ВОПРОС) и
OPTION (ВАРИАНТ ОТВЕТА).
Таблица
SURVEY:
| survey_id (uuid4) | survey_name (varchar) |
|--------------------------------------|-----------------------|
| 0cf1cf18-d5fd-474e-a8be-754fbdc89720 | April |
| b9fg55d9-n5fy-s7fe-s5bh-856fbdc89720 | May |
Таблица
QUESTION:
| question_id (int) | question_text (text) |
|-------------------|------------------------------|
| 1 | What is your favorite color? |
Таблица
OPTION:
| option_id (int) | option_text (text) |
|-------------------|--------------------|
| 1 | red |
| 2 | blue |
| 3 | grey |
| 4 | green |
| 5 | brown |
В
Golang приложении использую пакет
GORM. Для каждой из вышеупомянутых таблиц создал структуры. В базе данных создал еще одну таблицу
SURVEYS_QUESTIONS_OPTIONS
, которая объединяет предыдущие три таблицы. По сути в этой таблице связь многое ко многому.
| survey_id | question_id | option_id |
|--------------------------------------|-------------|-----------|
| 0cf1cf18-d5fd-474e-a8be-754fbdc89720 | 1 | 1 |
| 0cf1cf18-d5fd-474e-a8be-754fbdc89720 | 1 | 2 |
| 0cf1cf18-d5fd-474e-a8be-754fbdc89720 | 1 | 3 |
| b9fg55d9-n5fy-s7fe-s5bh-856fbdc89720 | 1 | 3 |
| b9fg55d9-n5fy-s7fe-s5bh-856fbdc89720 | 1 | 4 |
| b9fg55d9-n5fy-s7fe-s5bh-856fbdc89720 | 1 | 5 |
У меня возник вопрос. Как создать древовидную JSON из последней таблицы? К примеру при GET запросе возвращать список всех опросов. В каждом опросе список вопросов. В каждом вопросе список вариантов ответов. Одним словом что-то на подобии данной структуры нужно возвращать:
[
{
"survey_id": "0cf1cf18-d5fd-474e-a8be-754fbdc89720",
"survey_name": "April",
"questions": [
{
"question_id": 1,
"question_text": "What is your favorite color?",
"options": [
{
"option_id": 1,
"option_text": "red"
},
{
"option_id": 2,
"option_text": "blue"
},
{
"option_id": 3,
"option_text": "grey"
},
]
}
]
},
{
"survey_id": "b9fg55d9-n5fy-s7fe-s5bh-856fbdc89720",
"survey_name": "May",
"questions": [
{
"question_id": 1,
"question_text": "What is your favorite color?",
"options": [
{
"option_id": 3,
"option_text": "grey"
},
{
"option_id": 4,
"option_text": "green"
},
{
"option_id": 5,
"option_text": "brown"
},
]
}
]
}
]
Возможно ли это сделать с помощью GORM?