- Список модулей
- Список вариантов
- Выдача случайного варианта
- Выдача файлов модуля
- База общих изображений
- Выдача псевдо-случайного варианта
- Пользователи
- Аутентификация
- Авторизация по ролям
- Научить логи заданий получать пользователя из данных аутентификации
- Logout
- Лог выполнения
- Asp.Net Core
- OData Core
- EntityFramework Core
- Установите Visual Studio или Rider последней версии
- Установите Net Core SDK 2.2
- Установите сертификат для отладки на localhost'е через https, выполнив:
dotnet dev-certs https --trust
- Подключение к БД настраивается переменными окружения:
DB_HOST=postgres.example.com
DB_NAME=graphlabs
DB_USER=graphlabs
DB_PASSWORD=my_password
Content-Type: application/json
Body:
{
"email": "student-1@graphlabs.ru",
"password": "первый"
}
Ответ будет примерно такой:
{
"userId": 0,
"firstName": "Администратор",
"lastName": "Администратор",
"token": "бла-бла-бла"
}
Во все последующие запросы необходимо включать заголовок
Authorization : "Bearer бла-бла-бла", где бла-бла-бла - тот самый token, полученный в ответе
Renew токена По-умолчанию, токен действителен 1 день с момента выдачи (или до перезапуска сервера). Но его возможно обновить:
POST http://localhost:5000/auth/renew Ответ аналогичен запросу логина, плюс придёт новый токен.
Метаданные:
Список всех модулей-заданий:
Модуль с идентификатором 1:
Запрос с фильтрацией (название = "КСС"):
GET http://localhost:5000/odata/taskModules?$filter=Name eq 'КСС'
Запрос с фильтрацией, лимитом и упорядочиванием:
GET http://localhost:5000/odata/taskModules?$filter=version eq '2.0'&$top=3&$orderby=Name desc
Запрос случайного варианта задания с id = 2:
GET http://localhost:5000/odata/taskModules(2)/randomVariant
Скачивание файла "service-worker.js" модуля-задания с id = 1:
GET http://localhost:5000/odata/taskModules(1)/download(path='service-worker.js')
Скачивание файла "static/main.a091e228.js" модуля-задания с id = 1:
GET http://localhost:5000/odata/taskModules(1)/download(path='static%2Fjs%2Fmain.a091e228.js')
Скачивание изображения "Complete.png" из общей библиотеки:
GET http://localhost:5000/odata/downloadImage(name='Complete.png')
Список всех вариантов:
Json варианта с идентификатором 5:
Обновить вариант с идентификатором 5:
Для создания нового варианта передайте идентификатор 0 и в URL и в теле (meta/id=0).
Content-Type: application/json
Body:
{
"data": [
{
"type": "graph",
"value": {
"vertices": [
"1",
"2",
"3",
"4",
"5"
],
"edges": [
{
"source": "1",
"target": "2"
},
{
"source": "2",
"target": "3"
},
{
"source": "3",
"target": "4"
},
{
"source": "4",
"target": "5"
},
{
"source": "5",
"target": "1"
}
]
}
}
],
"meta": {
"name": "Вариант 5",
"id": "5",
"moduleId": "2"
}
}
в ответе придёт json
{"@odata.context":"http://localhost:5000/odata/$metadata#Edm.Int64","value":1}
, где value - идентификатор созданного/обновлённого варианта
Удалить вариант с идентификатором 22:
Список всех студентов:
Студент с идентификатором 2:
Студент с почтой "student-3@graphlabs.ru":
GET http://localhost:5000/odata/students?$filter=email eq 'student-3@graphlabs.ru'
Список всех действий:
Зарегистрировать новое действие:
POST http://localhost:5000/odata/taskVariantLogs Content-Type: application/json Body:
{
"action": "описание действия",
"variantId": "Id варианта",
"penalty": 10
}
Загрузить новую версию модуля c идентификатором 1:
POST http://localhost:5000/odata/taskModules(1)/upload Body:
binary data: zip archive
Запросить информацию о текущем пользователе: