---
# System prepended metadata

title: Тестовое задание Умскул Frontend

---

# Тестовое задание Умскул Frontend

### Общие требования:
- Vue 3; 
- Composition API;
- TypeScript;
- Tailwind;
- Чистый код;

## Данные:

Есть 4 бизнес-сущности:
- Продукт
- Предмет
- Учитель
- Тип класса

Продукт это агрегат предмета, типа класса и учителя.

## Этапы выполнения
1. Создать типы для сущностей.
2. Сделать мокап-сервис который эмулирует бекенд идентично контракту.
3. Подготовить данные от бекенда для передачи их в UI.
4. Реализовать UI каталога

## UI
Страница каталога содержит: фильтр по продуктам, типам класса и список карточек продукта

> Фильтр это - выпадающий список, где первый элемент это "Все" который убирает фильтрацию по этому параметру. 

### Карточка продукта
- Заголовок: `{subject.name} - {teacher.name}`
- Цена: `{product.price.amount} {product.price.currency}`
- Тип класса: текст `classType.name`, цвет фона `classType.color`
- Описание продукта: `product.description`

## Контракт:

URL: `api/products/`

Response:

```json
[
  {
    "id": 1,
    "teacher_id": 1,
    "subject_id": 1,
    "class_type_id": 1,
    "description": "Многие думают, что Lorem Ipsum - взятый с потолка псевдо-латинский набор слов, но это не совсем так. Его корни уходят в один фрагмент классической латыни 45 года н.э., то есть более двух тысячелетий назад.",
    "price": {
      "amount": 100,
      "currency": "RUB"
    }
  }
]
```

---

URL: `api/subjects/`

Response:

```json
[
  {
    "id": 1,
    "name": "Математика"
  },
  // ..
]
```

---

URL: `api/teachers/`

Response:

```json
[
  {
    "id": 1,
    "name": "Иван Иванов"
  },
  // ..
]
```

---

URL: `api/class-types/`

Response:

```json
[
  {
    "id": 1,
    "name": "5-8 класс",
    "color": "#ADA8FF"
  },
  // ..
]
```

Статичные данные можно взять [тут](https://hackmd.io/@vadek/umschool-frontend-interview-data).

