- JavaScript 77.2%
- CSS 20.2%
- Dockerfile 2.6%
| public | ||
| src | ||
| views | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| AGENTS.md | ||
| Containerfile | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
ankiety
Prosta aplikacja ankietowa oparta na Node.js, Fastify i Eta. Umożliwia tworzenie ankiet przez API administracyjne i ich wypełnianie przez użytkowników w przeglądarce.
Instalacja
git clone <repo-url> ankiety
cd ankiety
npm install
Konfiguracja
Skopiuj plik .env.example do .env i ustaw zmienne:
cp .env.example .env
Wymagane zmienne:
| Zmienna | Opis |
|---|---|
ADMIN_USERNAME |
Nazwa użytkownika do autoryzacji Basic (wymagana) |
ADMIN_PASSWORD |
Hasło do autoryzacji Basic endpointu administracyjnego (wymagane) |
NOTIFY_URL |
(opcjonalnie) URL tematu ntfy do powiadomień |
PORT |
Port serwera (domyślnie 3000) |
HOST |
Adres nasłuchu (domyślnie 0.0.0.0) |
DATA_DIR |
Katalog na dane (domyślnie ./data) |
LOG_LEVEL |
Poziom logowania pino (domyślnie info) |
Uruchomienie
npm start # produkcyjnie
npm run dev # dewelopersko (z automatycznym restartem)
Dodawanie ankiety
Ankiety tworzy się przez endpoint PUT /api/surveys/:id z autoryzacją Basic.
ID ankiety musi mieć 16–128 znaków alfanumerycznych, myślników lub podkreśleń.
Schemat ankiety (JSON)
{
"id": "MojaAnkieta2024-XYZ",
"title": "Preferencje kawowe",
"intro": "Pomóż nam dowiedzieć się, jak pijesz kawę.",
"questions": [
{
"type": "select",
"id": "rodzaj",
"label": "Jaki rodzaj kawy preferujesz?",
"options": [
{ "value": "espresso", "label": "Espresso" },
{ "value": "latte", "label": "Latte" },
{ "value": "czarna", "label": "Czarna" }
]
},
{
"type": "select",
"id": "dodatki",
"label": "Co dodajesz do kawy?",
"options": [
{ "value": "mleko", "label": "Mleko" },
{ "value": "cukier", "label": "Cukier" },
{ "value": "nic", "label": "Nic" }
]
}
]
}
Wysłanie ankiety
curl -X PUT 'http://localhost:3000/api/surveys/MojaAnkieta2024-XYZ' \
-u admin:twoje-haslo \
-H 'Content-Type: application/json' \
-d @ankieta.json
Poprawna odpowiedź: {"ok":true,"id":"MojaAnkieta2024-XYZ"} ze statusem 201.
Wypełnianie ankiety
Otwórz w przeglądarce adres zawierający ID ankiety:
http://localhost:3000/a/MojaAnkieta2024-XYZ
Odpowiedzi
Odpowiedzi zapisywane są w pliku data/<id>.csv. Każdy wiersz zawiera adres IP
osoby odpowiadającej i odpowiedzi na kolejne pytania, oddzielone przecinkami.
Przykład:
ip,rodzaj,dodatki
127.0.0.1,latte,cukier
192.168.1.5,espresso,nic
Ponowne wczytanie po restarcie
Wszystkie specyfikacje ankiet z katalogu DATA_DIR są automatycznie wczytywane
przy starcie serwera.