Продукт "Şañıraq.kz" - имеет много конкурентов на рынке. Чтобы не отставать по User Experience, нам нужно увеличить конверсию откликов на объявления.
На данном спринте мы сфокусируемся на важных фичах любого маркетплейса:
- Изображения к объявлениям. Клиенты сервиса должны видеть фотографии своего будущего дома, поэтому очень важно иметь возможность прикреплять фотографии.
- Комментарии к объявлениям. Клиенты сервиса должны иметь возможность писать комментарий к объявлениям, чтобы оставлять свои отзывы.
После завершения данного спринта разверните разработку на railway.
Пользователи должны иметь возможность прикреплять изображения к своим объявлениям.
Пример запроса на API: должен выполняться HTTP метод POST
на роут /shanyraks/{id}/media
, в который загружаются изображения. {id}
- идентификатор объявления.
POST /shanyraks/{id}/media HTTP/1.1
Authorization: Bearer {token}
photo_1.png
photo_2.png
photo_3.png
photo_n.png
При успешном прикреплении изображений к объявлению, API должен возвращать HTTP код 200
.
HTTP/1.1 200 OK
Пользователи должны иметь возможность просматривать прикрепленные к объявлению изображения.
Пример запроса на API: должен выполняться HTTP метод GET
на роут /shanyraks/{id}
, где {id}
- идентификатор объявления.
GET /shanyraks/{id} HTTP/1.1
При успешном выполнении запроса, API должен возвращать HTTP код 200
и JSON структура с данными объявления и ссылками на изображения.
HTTP/1.1 200 OK
{
"_id": "507f191e810c19729de860ea",
"type": "rent",
"price": 150000,
"address": "Астана, Алматы р-н, ул. Нажимеденова, 16 – Сарыколь",
"area": 46.5,
"rooms_count": 2,
"description": "...",
"user_id": "{user_id пользователя создавшего объявление}",
"media": [
"https://{s3_service}/shanyraks/507f191e810c19729de860ea/photo_1.png",
"https://{s3_service}/shanyraks/507f191e810c19729de860ea/photo_2.png",
"https://{s3_service}/shanyraks/507f191e810c19729de860ea/photo_3.png",
"https://{s3_service}/shanyraks/507f191e810c19729de860ea/photo_n.png"
]
}
Пользователи должны иметь возможность удалять прикрепленные к объявлению изображения.
Пример запроса на API: должен выполняться HTTP метод DELETE
на роут /shanyraks/{id}/media
, где {id}
- идентификатор объявления.
DELETE /shanyraks/{id}/media HTTP/1.1
Authorization: Bearer {token}
{
"media": [
"https://{s3_service}/shanyraks/507f191e810c19729de860ea/photo_1.png",
"https://{s3_service}/shanyraks/507f191e810c19729de860ea/photo_2.png"
]
}
При успешном удалении изображений, API должен возвращать HTTP код 200
.
HTTP/1.1 200 OK
Пользователи должны иметь возможность оставлять комментарии к объявлениям.
Пример запроса на API: должен выполняться HTTP метод POST
на роут /shanyraks/{id}/comments
, где {id}
- идентификатор объявления.
POST /shanyraks/{id}/comments HTTP/1.1
Authorization: Bearer {token}
{
"content": "Очень понравилось тут жить! Соседи тихие, автобусные остановки рядом, школа рядом. Дети довольны! 🥰"
}
При успешном добавлении комментария, API должен возвращать HTTP код 200
.
HTTP/1.1 200 OK
Пользователи должны иметь возможность просматривать список комментариев к объявлениям.
Пример запроса на API: должен выполняться HTTP метод GET
на роут /shanyraks/{id}/comments
, где {id}
- идентификатор объявления.
GET /shanyraks/{id}/comments HTTP/1.1
При успешном выполнении запроса, API должен возвращать HTTP код 200
и JSON структура с массивом комментариев.
HTTP/1.1 200 OK
{
"comments": [
{
"_id": "{comment_id}"
"content": "Очень понравилось тут жить! Соседи тихие, автобусные остановки рядом, школа рядом. Дети довольны! 🥰"
"created_at": "{время и дата создания}",
"author_id": "{user_id пользователя который оставил коммент}"
},
{
"_id": "{comment_id}"
"content": "Очень шумный двор! 😡\nКуча детей играют в футбол до поздна! Много посуточных квартир, поэтому всю ночь ходят пьянные парочки. Везде мусор кидают дети."
"created_at": "{время и дата создания}",
"author_id": "{user_id пользователя который оставил коммент}"
}
]
}
Пользователи должны иметь возможность изменять текст своего комментария.
Пример запроса на API: должен выполняться HTTP метод PATCH
на роут /shanyraks/{id}/comments/{comment_id}
, где {id}
- идентификатор объявления, {comment_id}
- идентификатор комментария.
PATCH /shanyraks/{id}/comments/{comment_id} HTTP/1.1
Authorization: Bearer {token}
{
"content": "Живу здесь с момента постройки, все устраивает, самое главное распоряжение, тепло, кск хорошо и вовремя реагирует на заявку, парковка огромная, школы, садики, ТРЦ, крупные магазины все рядом. Единственный минус большое количество квартирантов."
}
При успешном изменении комментария, API должен возвращать HTTP код 200
.
HTTP/1.1 200 OK
Пользователи должны иметь возможность удалять свои комментарии.
Пример запроса на API: должен выполняться HTTP метод DELETE
на роут /shanyraks/{id}/comments/{comment_id}
, где {id}
- идентификатор объявления, {comment_id}
- идентификатор комментария.
DELETE /shanyraks/{id}/comments/{comment_id} HTTP/1.1
Authorization: Bearer {token}
При успешном удалении комментария, API должен возвращать HTTP код 200
.
HTTP/1.1 200 OK