Михаил
Павлов
Сделать веб-приложение со списком вопросов
(*) - Опционально
Доработать веб-приложение
(*) - Опционально
Зависимости:
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'
}
Настройки:
spring.datasource.url=jdbc:h2:mem:restapp;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.h2.console.enabled=true
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
Имя своей БД
Http-запросы:
Получение метаданных журнала
Получение строк журнала
Создание вопроса
Редактирование вопроса
Получение списка вопросов для новой сессии
Сохранение новой сессии
Клиент ожидает сервер по адресу http://localhost:8080
Клиент ожидает данные по двум журналам:
- Вопросы (id = questions)
- Сессии (id = sessions)
Тип метода: GET
URL: http://localhost:8080/api/journal/<строка с id журнала>
Пример: http://localhost:8080/api/journal/questions
Ожидаемый ответ:
Пример ответа (JSON):
{
id: string;
name: string;
defaultPageSize?: number;
}
{
"id": "questions",
"name": "Вопросы",
"defaultPageSize": 15
}
Тип метода: PUT
URL: http://localhost:8080/api/journal/<строка с id журнала>/rows
Пример: http://localhost:8080/api/journal/questions/rows
Тело запроса:
Пример тела запроса (JSON):
{ journalId: string;
search: string;
filters: JournalFilterItem[];
page: number;
pageSize: number; }
{ type: string;
code: string;
value: string; }
JournalFilterItem:
{ "journalId": "questions",
"search": "someText",
"filters": [{
"code": "question-answer-count",
"type": "single-select",
"value": 2
}],
"page": 1,
"pageSize": 15 }
Ожидаемые ответ:
Пример тела ответа (JSON):
{
total: number;
items:
[{
id: string;
name: string;
answers: AnswerItemDTO[];
}]
}
{
"total" : 2,
"items":
[{
"id": 1,
"name": "Вопрос 1",
"answers": [{
"id": 3,
"answerText": "Ответ 3",
"isCorrect": true
}]
}, {
"id": 2,
"name": "Вопрос 2",
"answers": [{
"id": 4,
"answerText": "Ответ 4",
"isCorrect": false
}]
}]
}
{ id: string;
answerText: string;
isCorrect: boolean; }
AnswerItemDTO:
Тип метода: PUT
URL: http://localhost:8080/api/journal/<строка с id журнала>/rows
Пример: http://localhost:8080/api/journal/sessions/rows
Тело запроса:
Пример тела запроса (JSON):
{ journalId: string;
search: string;
filters: JournalFilterItem[];
page: number;
pageSize: number; }
{ type: string;
code: string;
value: string; }
JournalFilterItem:
{ "journalId": "sessions",
"search": "someText",
"filters": [],
"page": 1,
"pageSize": 15 }
Ожидаемые ответ:
Пример тела ответа (JSON):
{
total: number;
items:
[{
id: string;
name: string;
insertDate: Date;
result: number;
}]
}
{
"total" : 2,
"items":
[{
"id": 1,
"name": "Иванов И.И.",
"insertDate": 1568073600,
"result": 80
}, {
"id": 2,
"name": "Сидоров А.А.",
"insertDate": 1568073600,
"result": 100
}]
}
Тип метода: POST
URL: http://localhost:8080/api/question/create
Пример: http://localhost:8080/api/question/create
Тело запроса:
Пример тела запроса (JSON):
{
name: string;
answers: AnswerItemDTO[];
}
{ answerText: string;
isCorrect: boolean; }
AnswerItemDTO:
{
"name": "Текст вопроса",
"answers": [{
"answerText": "Текст ответа",
"isCorrect": true
}]
}
Тело ответа:
Пример тела запроса (JSON):
{
id: string;
name: string;
answers: AnswerItemDTO[];
}
{
id: string;
answerText: string;
isCorrect: boolean;
}
AnswerItemDTO:
{
"id": "1",
"name": "Текст вопроса",
"answers": [{
"id": "2",
"answerText": "Текст ответа",
"isCorrect": true
}]
}
Тип метода: PUT
URL: http://localhost:8080/api/question/edit
Пример: http://localhost:8080/api/question/edit
Тело запроса:
Пример тела запроса (JSON):
{
id: string;
name: string;
answers: AnswerItemDTO[];
}
{ answerText: string;
isCorrect: boolean; }
AnswerItemDTO:
{
"id": "1",
"name": "Текст вопроса",
"answers": [{
"answerText": "Текст ответа",
"isCorrect": true
}]
}
Тело ответа:
Пример тела запроса (JSON):
{
id: string;
name: string;
answers: AnswerItemDTO[];
}
{
id: string;
answerText: string;
isCorrect: boolean;
}
AnswerItemDTO:
{
"id": "1",
"name": "Текст вопроса",
"answers": [{
"id": "2",
"answerText": "Текст ответа",
"isCorrect": true
}]
}
* ответ такой же как при создании вопроса
Тип метода: GET
URL: http://localhost:8080/api/session/questions-new
Пример: http://localhost:8080/api/session/questions-new
Ответ (список):
[{
id: string;
name: string;
answers: AnswerItemDTO[];
}]
{
id: string;
answerText: string;
isCorrect: boolean;
}
AnswerItemDTO:
Поле "isCorrect" есть в AnswerItemDTO, но лучше его не слать с сервера :)
Пример ответа (JSON):
[{
"id": "1",
"name": "Текст вопроса",
"answers": [{
"id": "3",
"answerText": "Текст ответа"
}]
}, {
"id": "2",
"name": "Текст вопроса2",
"answers": [{
"id": "4",
"answerText": "Текст ответа2"
}]
}]
Тип метода: POST
URL: http://localhost:8080/api/session
Пример: http://localhost:8080/api/session
Тело запроса:
{
name: string;
questionsList: AnsweredQuestionDTO[];
}
{ id: string;
answersList: SessionQuestionAnswer[]; }
AnsweredQuestionDTO:
{ id: string;
isSelected: boolean; }
SessionQuestionAnswer:
Пример тела запроса (JSON):
{
"name": "Иванов Иван Иванович",
"questionsList": [{
"id": "1",
"answersList": [{
"id": "2",
"isSelected": true
}]
}, {
"id": "3",
"answersList": [{
"id": "4",
"isSelected": true
}, {
"id": "5",
"isSelected": false
}]
}]
}
В ответ получаем строку - количество набранных процентов
Варианты, как это можно сделать:
В данном случае ошибка - статус 404, на сервере не найден метод для такого запроса
Основное задание:
max(0, k/m - w/(n-m)), где
k - количество выбранных верных вариантов ответа,
w - количество выбранных неверных вариантов ответа.
Алгоритм начисления:
*
***