Projekto tikslas - sukurti mokomąją sistemą, leidžiančią mokiniams atsakinėti į klausimus įvairiose srityse. Klausimai būtų testinio tipo, su keliais atsakymų variantais.
Veikimo principas – pačią kuriamą platformą sudaro dvi dalys: internetinė aplikacija, kuria naudosis naudotojai, bei aplikacijų programavimo sąsaja (angl. trump. API).
- Klausimas (question)
- Tema (klausimų rinkinys, klausimynas) (theme)
- Sritis (topic)
Neregistruotas vartotojas (svečias) gali:
- Matyti sričių sąrašą;
- Matyti srities temas;
- Matyti temos klausimus.
Mokinys gali:
- Matyti klausimo atsakymo variantus.
- Atsakinėti į klausimus.
Mokytojas savo srityje(-se) gali:
- Kurti klausimų rinkinius.
- Kurti klausimus ir jų atsakymo variantus jų sukurtose temose.
- Redaguoti savo sukurtus klausimus bei atsakymus.
Administratorius gali:
- Kurti sritis
- Redaguoti sritis
- Patvirtinti mokytojus.
Užsiregistravęs vartotojas automatiškai yra mokinys, reikia administratoriaus patvirtinimo, kad taptų mokytoju.
- Back-end: Node.js + ExpressJS
- Duomenų bazė: MariaDB (MySQL)
- Front-end: Vue
Grąžina visas sistemoje esančias sritis. Grąžinamoje informacijoje yra srities ID, pavadinimas, aprašymas bei vartotojo, kuris šią sritį sukūrė, duomenys.
/api/v1/topics
Reikšmė | |
---|---|
Atsako formatas | JSON |
Atsako kodai | 200, 500 |
Reikia autentifikacijos? | Ne |
GET /api/v1/topics
[
{
"id": 1,
"name": "Matematika",
"description": "Paskaičiuokime, protingieji kurmiai",
"user": {
"id": 1,
"username": "QuantumLTU"
}
}
]
Grąžina vieną nurodytą sistemoje esančią sritį. Grąžinamoje informacijoje yra srities ID, pavadinimas, aprašymas bei vartotojo, kuris šią sritį sukūrė, duomenys.
/api/v1/topics/{topic_ID}
Reikšmė | |
---|---|
Atsako formatas | JSON |
Atsako kodai | 200, 404, 500 |
Reikia autentifikacijos? | Ne |
GET /api/v1/topics/1
{
"id": 1,
"name": "Matematika",
"description": "Paskaičiuokime, protingieji kurmiai",
"user": {
"id": 1,
"username": "QuantumLTU"
}
}
Sukuria sritį. Užklausos kūne JSON formatu nurodomas srities pavadinimas bei aprašymas. Grąžinamoje informacijoje yra srities ID, pavadinimas, aprašymas bei vartotojo, kuris šią sritį sukūrė, duomenys. Būtina turėti administratoriaus privilegijas šio veiksmo atlikimui.
/api/v1/topics
Reikšmė | |
---|---|
Atsako formatas | JSON |
Atsako kodai | 201, 400, 401, 403, 500 |
Reikia autentifikacijos? | Taip |
Parametras | Būtinas? | Aprašas | Pavyzdys |
---|---|---|---|
name |
Taip | Srities pavadinimas | "Geografija" |
description |
Ne | Srities aprašymas | "Visa mūsų Žemė" |
POST /api/v1/topics
Authorization: Bearer {TOKEN}
{
"name": "Geografija",
"description": "Visa mūsų Žemė"
}
{
"id": 25,
"name": "Geografija",
"description": "Visa mūsų Žemė",
"user": {
"id": 1,
"username": "QuantumLTU"
}
}
Redaguoja sritį. Užklausos kūne JSON formatu nurodomas naujas srities pavadinimas ir/arba aprašymas. Būtina turėti administratoriaus privilegijas šio veiksmo atlikimui.
/api/v1/topics/{topic_ID}
Reikšmė | |
---|---|
Atsako formatas | - |
Atsako kodai | 204, 400, 401, 403, 404, 500 |
Reikia autentifikacijos? | Taip |
Privaloma nusiųsti bent vieną parametrą.
Parametras | Būtinas? | Aprašas | Pavyzdys |
---|---|---|---|
name |
Ne | Srities pavadinimas | "Geografija" |
description |
Ne | Srities aprašymas | "Visa mūsų Žemė" |
PATCH /api/v1/topics/25
Authorization: Bearer {TOKEN}
{
"name": "Geografija",
"description": "Visa mūsų Žemė"
}
Ištrina sritį ir visus duomenis susijusius su šia sritimi. Būtina turėti administratoriaus privilegijas šio veiksmo atlikimui.
/api/v1/topics/{topic_ID}
Reikšmė | |
---|---|
Atsako formatas | - |
Atsako kodai | 204, 401, 403, 404, 500 |
Reikia autentifikacijos? | Taip |
DELETE /api/v1/topics/25
Authorization: Bearer {TOKEN}
Grąžina visas srityje esančias temas. Grąžinamoje informacijoje yra temos ID, pavadinimas, aprašymas bei vartotojo, kuris šią temą sukūrė, duomenys.
/api/v1/topics/{topic_ID}/themes
Reikšmė | |
---|---|
Atsako formatas | JSON |
Atsako kodai | 200, 404, 500 |
Reikia autentifikacijos? | Ne |
GET /api/v1/topics/1/themes
[
{
"id": 1,
"name": "Geometrija",
"description": "Visokios įdomios formos",
"user": {
"id": 1,
"username": "QuantumLTU"
}
}
]
Grąžina vieną nurodytą srityje esančią temą. Grąžinamoje informacijoje yra temos ID, pavadinimas, aprašymas bei vartotojo, kuris šią temą sukūrė, duomenys.
/api/v1/topics/{topic_ID}/themes/{theme_ID}
Reikšmė | |
---|---|
Atsako formatas | JSON |
Atsako kodai | 200, 404, 500 |
Reikia autentifikacijos? | Ne |
GET /api/v1/topics/1/themes/1
{
"id": 1,
"name": "Geometrija",
"description": "Visokios įdomios formos",
"user": {
"id": 1,
"username": "QuantumLTU"
}
}
Sukuria temą. Užklausos kūne JSON formatu nurodomas temos pavadinimas bei aprašymas. Grąžinamoje informacijoje yra temos ID, pavadinimas, aprašymas bei vartotojo, kuris šią temą sukūrė, duomenys. Būtina turėti bent mokytojo privilegijas šio veiksmo atlikimui.
/api/v1/topics/{topic_ID}/themes
Reikšmė | |
---|---|
Atsako formatas | JSON |
Atsako kodai | 201, 400, 401, 403, 500 |
Reikia autentifikacijos? | Taip |
Parametras | Būtinas? | Aprašas | Pavyzdys |
---|---|---|---|
name |
Taip | Temos pavadinimas | "Europa" |
description |
Ne | Temos aprašymas | "Europietizmas" |
POST /api/v1/topics/1/themes
Authorization: Bearer {TOKEN}
{
"name": "Europa",
"description": "Europietizmas"
}
{
"id": 28,
"name": "Europa",
"description": "Europietizmas",
"user": {
"id": 1,
"username": "QuantumLTU"
}
}
Redaguoja temą. Užklausos kūne JSON formatu nurodomas naujas temos pavadinimas ir/arba aprašymas. Būtina turėti bent mokytojo privilegijas šio veiksmo atlikimui. Jei veiksmą atlieka mokytojas, tai turi būti tas pats vartotojas, kuris sukūrė šią temą.
/api/v1/topics/{topic_ID}/themes/{theme_ID}
Reikšmė | |
---|---|
Atsako formatas | - |
Atsako kodai | 204, 400, 401, 403, 404, 500 |
Reikia autentifikacijos? | Taip |
Privaloma nusiųsti bent vieną parametrą.
Parametras | Būtinas? | Aprašas | Pavyzdys |
---|---|---|---|
name |
Ne | Temos pavadinimas | "Europa" |
description |
Ne | Temos aprašymas | "Europietizmas" |
PATCH /api/v1/topics/1/themes/28
Authorization: Bearer {TOKEN}
{
"name": "Europa",
"description": "Europietizmas"
}
Ištrina temą ir visus duomenis susijusius su šia tema. Būtina turėti bent mokytojo privilegijas šio veiksmo atlikimui. Jei veiksmą atlieka mokytojas, tai turi būti tas pats vartotojas, kuris sukūrė šią temą.
/api/v1/topics/{topic_ID}/themes/{theme_ID}
Reikšmė | |
---|---|
Atsako formatas | - |
Atsako kodai | 204, 401, 403, 404, 500 |
Reikia autentifikacijos? | Taip |
DELETE /api/v1/topics/1/themes/28
Authorization: Bearer {TOKEN}
Grąžina visus temoje esančius klausimus. Grąžinamoje informacijoje yra klausimo ID, klausimas bei vartotojo, kuris šį klausimą sukūrė, duomenys. Taip pat, jei vartotojas yra prisijungęs, grąžinami atsakymo variantai ir teisingas atsakymas.
/api/v1/topics/{topic_ID}/themes/{theme_ID}/questions
Reikšmė | |
---|---|
Atsako formatas | JSON |
Atsako kodai | 200, 404, 500 |
Reikia autentifikacijos? | Ne |
GET /api/v1/topics/1/themes/1/questions
Authorization: Bearer {TOKEN}
[
{
"id": 20,
"question": "Kokia yra trikampio kampų suma?",
"answers": [
{
"answer": "180 laipsnių",
"is_correct": true
},
{
"answer": "0 laipsnių"
}
],
"user": {
"id": 1,
"username": "QuantumLTU"
}
}
]
Grąžina vieną temoje esantį klausimą. Grąžinamoje informacijoje yra klausimo ID, klausimas bei vartotojo, kuris šį klausimą sukūrė, duomenys. Taip pat, jei vartotojas yra prisijungęs, grąžinami atsakymo variantai ir teisingas atsakymas.
/api/v1/topics/{topic_ID}/themes/{theme_ID}/questions/{question_ID}
Reikšmė | |
---|---|
Atsako formatas | JSON |
Atsako kodai | 200, 404, 500 |
Reikia autentifikacijos? | Ne |
GET /api/v1/topics/1/themes/1/questions/20
{
"id": 20,
"question": "Kokia yra trikampio kampų suma?",
"user": {
"id": 1,
"username": "QuantumLTU"
}
}
Sukuria klausimą. Užklausos kūne JSON formatu nurodomas klausimas bei atsakymo klausimų masyvas, kuriame bent vienas atsakymas turi būti pažymėtas teisingu. Grąžinamoje informacijoje yra klausimo ID, klausimas, atsakymo variantai bei vartotojo, kuris šį klausimą sukūrė, duomenys. Jei veiksmą atlieka mokytojas, tai klausimus galima kurti tik savo sukurtose temose.
/api/v1/topics/{topic_ID}/themes/{theme_ID}/questions
Reikšmė | |
---|---|
Atsako formatas | JSON |
Atsako kodai | 201, 400, 401, 403, 500 |
Reikia autentifikacijos? | Taip |
Parametras | Būtinas? | Aprašas | Pavyzdys |
---|---|---|---|
question |
Taip | Klausimas | "Kiek yra 2 + 2?" |
answers |
Taip | Galimi klausimo atsakymo variantai | [{"answer": "4", "is_correct": true}] |
POST /api/v1/topics/1/themes/1/questions
Authorization: Bearer {TOKEN}
{
"question": "Klausimas",
"answers": [
{
"answer": "Neteisingas ats"
},
{
"answer": "Teisingas ats",
"is_correct": true
}
]
}
{
"id": 35,
"question": "Klausimas",
"answers": [
{
"answer": "Neteisingas ats"
},
{
"answer": "Teisingas ats",
"is_correct": true
}
]
}
Redaguoja klausimą. Užklausos kūne JSON formatu nurodomas klausimas bei atsakymo klausimų masyvas, kuriame bent vienas atsakymas turi būti pažymėtas teisingu. Grąžinamoje informacijoje yra klausimo ID, klausimas, atsakymo variantai bei vartotojo, kuris šį klausimą sukūrė, duomenys. Jei veiksmą atlieka mokytojas, tai galima redaguoti tik savo sukurtus klausimus.
/api/v1/topics/{topic_ID}/themes/{theme_ID}/questions/{question_ID}
Reikšmė | |
---|---|
Atsako formatas | - |
Atsako kodai | 204, 400, 401, 403, 404, 500 |
Reikia autentifikacijos? | Taip |
Parametras | Būtinas? | Aprašas | Pavyzdys |
---|---|---|---|
question |
Taip | Klausimas | "Kiek yra 2 + 2?" |
answers |
Taip | Galimi klausimo atsakymo variantai | [{"answer": "4", "is_correct": true}] |
PUT /api/v1/topics/1/themes/28
Authorization: Bearer {TOKEN}
{
"question": "Kokia yra penkiakampio kampų suma?",
"answers": [
{
"answer": "180 laipsnių"
},
{
"answer": "0 laipsnių"
},
{
"answer": "540 laipsnių",
"is_correct": true
}
]
}
Ištrina klausimą. Būtina turėti bent mokytojo privilegijas šio veiksmo atlikimui. Jei veiksmą atlieka mokytojas, tai turi būti tas pats vartotojas, kuris sukūrė šį klausimą.
/api/v1/topics/{topic_ID}/themes/{theme_ID}/questions/{question_ID}
Reikšmė | |
---|---|
Atsako formatas | - |
Atsako kodai | 204, 401, 403, 404, 500 |
Reikia autentifikacijos? | Taip |
DELETE /api/v1/topics/1/themes/1/33
Authorization: Bearer {TOKEN}
Grąžina visus srityje esančius klausimus. Grąžinamoje informacijoje yra klausimo ID, klausimas, vartotojo, kuris šį klausimą sukūrė, duomenys, bei temos, kurioje kiekvienas klausimas yra, informacija. Taip pat, jei vartotojas yra prisijungęs, grąžinami atsakymo variantai ir teisingas atsakymas.
/api/v1/topics/{topic_ID}/questions
Reikšmė | |
---|---|
Atsako formatas | JSON |
Atsako kodai | 200, 404, 500 |
Reikia autentifikacijos? | Ne |
GET /api/v1/topics/1/questions
Authorization: Bearer {TOKEN}
[
{
"id": 20,
"question": "Kokia yra trikampio kampų suma?",
"answers": [
{
"answer": "180 laipsnių",
"is_correct": true
},
{
"answer": "0 laipsnių"
}
],
"user": {
"id": 1,
"username": "QuantumLTU"
},
"theme": {
"id": 1,
"name": "Geometrija",
"description": "Visokios įdomios formos"
}
}
]
Grąžina vartotojo, kurio JWT token'ą turime, duomenis. Grąžinamoje informacijoje yra vartotojo slapyvardis, elektroninis paštas, ID ir rolės ID.
/api/v1/user
Reikšmė | |
---|---|
Atsako formatas | JSON |
Atsako kodai | 200, 401, 500 |
Reikia autentifikacijos? | Taip |
GET /api/v1/user
Authorization: Bearer {TOKEN}
{
"username": "Studis",
"id": 4,
"email": "studentai@klausimelis.lt",
"role": 0
}
Grąžina vartotojo duomenis. Jei tai yra tas pats vartotojas, kurio JWT token'ą turime, grąžinamoje informacijoje yra vartotojo slapyvardis, elektroninis paštas, ID ir rolės ID. Jei tai yra ne tas vartotojas arba mes esame neprisijungę, tada gaunama tik vartotojo ID ir slapyvardis.
/api/v1/user/3
Reikšmė | |
---|---|
Atsako formatas | JSON |
Atsako kodai | 200, 404, 500 |
Reikia autentifikacijos? | Ne |
GET /api/v1/user/3
{
"id": 3,
"username": "Mokytojas"
}
Prisijungiama prie sistemos. Užklausos kūne JSON formatu nurodomas vartotojo el. paštas bei slaptažodis. Alternatyviai, galima autentifikuotis ir JWT token'u, taip gaunant naują token'ą.
/api/v1/login
Reikšmė | |
---|---|
Atsako formatas | JSON |
Atsako kodai | 200, 401, 500 |
Reikia autentifikacijos? | Ne |
Parametras | Būtinas? | Aprašas | Pavyzdys |
---|---|---|---|
email |
Taip | Naudotojo elektroninis paštas | "dompet2@ktu.lt" |
password |
Taip | Naudotojo slaptažodis | "theverysecretpassword" |
POST /api/v1/login
{
"email": "dompet2@ktu.lt",
"password": "theverysecretpassword"
}
{
"id": 1,
"username": "QuantumLTU",
"email": "dompet2@ktu.lt",
"role": 0,
"token": "{TOKEN}"
}
Priregistruojama prie sistemos. Užklausos kūne JSON formatu nurodomas vartotojo el. paštas, slapyvardis bei slaptažodis. Alternatyviai, galima autentifikuotis ir JWT token'u, taip gaunant naują token'ą.
/api/v1/register
Reikšmė | |
---|---|
Atsako formatas | JSON |
Atsako kodai | 201, 400, 403, 500 |
Reikia autentifikacijos? | Ne |
Parametras | Būtinas? | Aprašas | Pavyzdys |
---|---|---|---|
email |
Taip | Naudotojo elektroninis paštas | "dompet2@ktu.lt" |
password |
Taip | Naudotojo slaptažodis | "theverysecretpassword" |
username |
Taip | Naudotojo slapyvardis | "Dėstytojas" |
POST /api/v1/register
{
"username": "Dėstytojas",
"email": "destai@klausimelis.lt",
"password": "password123"
}
{
"id": 6,
"email": "destai@klausimelis.lt",
"username": "Dėstytojas"
}
Sistemos wireframe paveikslas:
Sistemą sukurti pavyko.
Su API sudėtingiausia buvo užtikrinti, jog įvedus netinkamus duomenis sistema grąžintų tinkamą klaidą.
Prisijungimo srityje sudėtingiausia buvo išsiaiškinti kaip veikia passport
biblioteka.
Klientinėje dalyje trūko testavimo, taip pat dizainas buvo paprastas, nes dirbti su klientine dalimi, man, asmeniškai, nėra pats mėgstamiausias dalykas.