Описание:
Реализовать компонент <Poll pollID={pollID} />
, который инкапсулирует в себе логику работы с опросами
Вводные:
Репозиторий с готовым серверным приложением и скелетом клиентского приложения
Требования:
- Получение конфига опроса с сервера.
- Рендер опроса по полученному конфигу.
- Отправка пользовательских событий
answer/finish
на сервер.
Доп. требования:
- Сохранять состояние частично пройденного опроса при перезагрузке страницы
- Обеспечить надежность доставки пользовательских событий. Например, у пользователя может отвалиться интернет, пока он едет в лифте
- Отправка событий “просмотра” вопроса/страницы. Хотим понимать увидел ли пользователь определенный вопрос или страницу
Структура репозитория
/src
Create React App + Typescript
Material UI
/mocks
Моки ручек на основе mocks-server
Описание эндпоинтов
- `GET /api/poll/<pollID>`
- Формат ответа
```tsx
{
id: string;
questions: {
[id: number]: {
id: number;
label: string;
type: 'choice' | 'rating';
isMulti?: boolean;
options?: {
id: number;
label: string;
}
maxValue?: number;
}
}
pages: {
[id: number]: {
questions: number[];
}
}
pageOrder: number[];
}
```
- `POST /api/poll/<pollID>/answer`
- Формат запроса
```tsx
{
questionID: number;
value: number | number[];
timestamp: number;
}
```
- `POST /api/poll/<pollID>/finish`
- Формат запроса
```tsx
{
timestamp: number;
}
```
- `POST /api/poll/<pollID>/stats`
- Формат запроса
```tsx
{
event: 'show_question' | 'show_page';
id: number;
timestamp: number;
}
```