Михаил
Павлов
Сделать веб-приложение со списком вопросов
(*) - Опционально
Доработать веб-приложение
(*) - Опционально
Зависимости:
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 - количество выбранных неверных вариантов ответа.
Алгоритм начисления:
*
***