
Формуляторность-это самостоятельное приложение для создания и развертывания опросов с использованием кода вместо традиционных строителей обследования.
Этот подход предлагает ряд преимуществ, в том числе:
Формуляция использует читаемый на человеке декларативный язык Yaml.

Панель администратора
ПРИМЕЧАНИЕ. Используйте user / pass для входа в консольный пользовательский интерфейс.
Каждый каталог в SURVEYS_DIR является опросом. Вы можете настроить источник своих опросов, установив различные SURVEYS_DIR env var.
surveys/
├── survey1/
│ ├── metadata.yaml
│ ├── questions.yaml
│ ├── security.yaml
│ ├── variables.yaml
│ └── ...
└── survey2/
├── metadata.yaml
├── questions.yaml
└── ... Чтобы начать, ознакомьтесь с папкой ./surveys с несколькими примерами.
Этот файл требуется! Файл состоит из объекта YAML с определенными свойствами, описывающими опрос.
title : Survey Title
theme : default # or custom
intro : |
This is the introduction to the survey.
It can be multiple lines long.
outro : |
Thank you for taking the survey.
Your feedback is important to us.Этот файл требуется! Файл состоит из списка вопросов, каждый из которых определяется как объект YAML с определенными свойствами.
single-choice , multiple-choice и ranking . questions :
- type : single-choice
id : question1 # optional ID, must be unique across all questions
label : What is the capital of Germany?
description : You can select multiple options
optionsFromVariable : german-city-options # defined in variables.yaml
options :
- Berlin
- Munich
- Paris
- London
- Hamburg
- Cologne
validation :
min : 1
max : 3Этот файл необязательно. Файл состоит из объекта YAML с определенными свойствами для настройки безопасности.
duplicateProtection : cookie # cookie | ipЭтот файл необязательно. Файл состоит из списка переменных, каждый из которых определяется как объект YAML с определенными свойствами.
variables :
- id : german-city-options # must be unique
type : list
options :
- Berlin
- Munich
- Hamburg
- Cologne Подсказывает пользователям краткий письменный ответ.
- type : short-text
label : What is the capital of Germany?
# set min/max characters
validation :
min : 10
max : 100Подсказывает пользователям подробный письменный ответ.
- type : long-text
label : What is the capital of Germany?
# set min/max characters
validation :
min : 10
max : 100Представляет вопрос только с одним правильным ответом из списка параметров.
- type : single-choice
label : What is the capital of Germany?
options :
- Berlin
- Munich
- Paris
- London
- Hamburg
- CologneПредставляет вопрос, где пользователи могут выбрать несколько ответов (с ограничениями). Вы можете настроить минимальный и максимально допустимый выбор в разделе проверки.
- type : multiple-choice
label : Which of the following are cities in Germany?
description : You can select multiple options
validation :
min : 1
max : 3
options :
- Berlin
- Munich
- Paris
- London
- Hamburg
- CologneПросит пользователей ввести определенную дату.
- type : date
label : When was the Berlin Wall built?Представляет для пользователей шкала, чтобы оценить что -то в предопределенном диапазоне.
- type : rating
label : How much do you like Berlin?
min : 1
max : 5Просит пользователей ранжировать варианты на основе заданных критериев.
- type : ranking
label : Rank the following cities by population
optionsFromVariable : german-city-optionsПредставляет вопрос, где пользователи могут ответить только «да» или «нет».
- type : yes-no
label : Is Berlin the capital of Germany?Побуждает пользователя ввести их электронную почту
- type : email
label : Please enter your email.Помогает пользователю загрузить свой файл на основе данных форматов и максимального размера загрузки.
- type : file
label : Upload a Berlin Image
validation :
formats :
- .jpg
- .png
max_size_bytes : 5*1024*1024 # 5 MB Ответы могут быть показаны в пользовательском интерфейсе и экспортированы как JSON. В качестве альтернативы вы можете использовать API REST для получения ответов на опрос:
curl -XGET
http://localhost:9900/app/surveys/{SURVEY_ID}/sessions ? limit=100 & offset=0 & sort_by=created_at & order=desc Где {SURVEY_ID} id uuid данного опроса.


docker-compose up -d --build
И вы должны иметь возможность получить доступ к пользовательскому интерфейсу на http: // localhost: 3000 (по умолчанию Basic Auth: user:pass ).
Вы можете развернуть отдельные услуги для любого облачного провайдера или самостоятельно принять их.
Демо -сервис (ссылки выше) развернута для Fly.io (Go, SQLite) и Vercel (next.js) и находятся под свободными уровнями.
Установите воздух локально отсюда
Запустите следующую команду после установки воздуха
cd api
air
Эта команда поможет в перезагрузке в прямом эфире, когда в API -интерфейсах вносятся изменения, используя air . Пользовательские конфигурации могут быть установлены путем изменения файла air.toml
API:
DATABASE_TYPE - sqlite или postgresDATABASE_URL - Postgres или SQLite Connection StringLOG_LEVEL - уровень журнала, например, infoSURVEYS_DIR - каталог с опросами, например /root/surveys . Предполагается использовать монтированный объем для этого каталога.UI:
CONSOLE_API_ADDR - Публичный адрес бэкэнда GO. Нужно быть доступным из браузера.CONSOLE_API_ADDR_INTERNAL - Внутренний адрес бэкэнда GO, например http://api:8080 (может быть таким же, как CONSOLE_API_ADDR ).IRON_SESSION_SECRET - секрет шифрования сеансаHTTP_BASIC_AUTH - формат: user:pass для Basic Auth (необязательно) Обязательно установите Go-Migrate в первую очередь.
cd api
migrate create -dir migrations/postgres -ext sql -seq name
migrate create -dir migrations/sqlite -ext sql -seq name
cd api
make test
Запросы на привлечение, отчеты об ошибках и все другие формы вклада приветствуются и рекомендуются!