---
# System prepended metadata

title: Задачи p2

---

# Задачи p2

## Отзывы

Отзыв может быть у маршрутов, отелей, ресторанов и достопримечательностей

Отзыв состоит из числовой оценки (float) и текстового описания.
Оценка обязательна, описание нет.
У каждого места пользователь может оставить только один отзыв

- [x] Добавить отзывы
- [x] :ok: Добавить поле visible для модерации
- [x] :ok: Дата создания/обновления
- [x] :ok: Редактирование и удаление отзывов
  - [x] :ok: Админы могут редактировать всё
  - [x] :ok: Пользователи - только их отзывы
- [x] :ok: Запрос списка мест с отзывами по автору
- [x] Хранить средний рейтинг места в его записи,
пересчитывать после добавления или изменения отзыва

## Маршруты

- [x] Создание маршрутов открыть для пользователей
- [x] Добавить поле автора маршрута (id пользователя)
- [x] Добавить поле visible - будет использоваться для модерации
- [x] Редактирование маршрутов и их достопримечательностей
  - [x] Админам позволять редактировать всё
  - [x] Пользователям - только их маршруты
- [x] Запрос маршрутов по автору
- [x] Длина маршрута - учитывать duration (в минутах) из каждой достопримечательности.

## Пользователь

- [x] Строковое поле avatar, доступен пользователю для изменения.
В нём хранится название одного из предзаготовленных аватаров в приложении.
Если загружен свой аватар, то вписать в поле custom.
- [x] После удаления ставить пустую строку.
- [x] Загрузка аватара
  - [x] Добавить в хранилище папку для аватаров
  - [x] Добавить метод для загрузки файла, сохраняться будет по `{id}.jpg`
  - [x] Методы для изменения и удаления аватара.
  - [x] Доступ к аватару пользователя открыт для всех
- [x] Открытый доступ к базовой информации пользователя по id
  - [x] Имя
  - [x] Всё про аватары

## Рестораны

- [x] Добавить строковое поле phone
- [x] Добавить строковое поле url

## Отели

- [x] Добавить строковое поле phone
- [x] Добавить строковое поле url

## Афиша

```json
{
  "name": "string",
  "preview": "string",
  "description": "string",
  "cityId": 0,
  "districtId": 0,
  "address": "string",
  "latitude": "string",
  "longitude": "string",
  "path": "string",
  "discount": 0,
  "weight": 0,
  "startDate": "2021-03-27T05:52:11.495Z",
  "endDate": "2021-03-27T05:52:11.495Z",
  "phone": "string",
  "url": "string",
  "rating": 0.0
}
```

- [x] Добавить мероприятия (event)
- [x] Добавить возможность оставлять отзывы к мероприятию
- [x] Custom поиск: город, район, начало, окончание
