Задание выполняется на Scala, весь новый функционал приложения должен быть покрыт тестами, если тесты не проходят, требуется их исправить. В описании пулреквеста требуется приложить гифку работы приложения (идеальный вариант) или скрины.
-
(10) Реализуйте два запроса в объекте
Queries
:topTenLanguagesSpokenByCities
- требуется вывести топ 10 языков по количеству городов, в которых на них говорят. Каждый город находится в стране, в каждой стране говорят на нескольких языках. Считается, что если в стране говорят на языке, то и в городе говорят. Функция возвращает список пар название языка -> количество городов, в которых на нём говорят.topTenLanguagesSpokenByPopulation
- требуется вывести топ 10 языков по количеству людей, которые на нём говорят. Каждый город находится в стране, в каждой стране говорят на нескольких языках и известен процент говорящих на этом языке. Считается, что процент говорящих на языке в стране равен проценту в каждом городе этой страны. Функция возвращает список пар название языка -> количество людей которые на нём говорят (округление делается при помощи.toLong
).
Quill
поддерживаетgroupBy
(всегда должен быть продолженmap
) иsortBy
. Если возникли сложности, рекомендуется сначала написать этот запрос на SQL, а потом транслировать в скалу. -
(15) Реализуйте функционал из пунктов 1-2 HW8 с поддержкой базы данных. Для удобства порядковый номер сообщения можно реализовать как
serial
. Дополнительно требуется хранить время отправки сообщения. -
(15) Реализуйте API позволяющий запрашивать сообщения:
description | method | url | data | response |
---|---|---|---|---|
gets messages from specific user | GET |
/messages/$username |
{messages: ["message 1", "message 2", ...]} |
|
gets messages count by user | GET |
/messages/$username/stats |
{stats: [count: 239]} |
|
top 10 chatters by messages count | GET |
/messages/stats/top |
{top: [{username: "user", count: 239}, ...]} |
|
gets all current messages, filtered by date | GET |
/messages |
{from:?$date, to:?$date} |
{messages: [{id: id, username: "user", message: "message", replyTo:? optionalInt}, ...]} |
Фильтр по дате опционален и работает как Epoch Timestamp в миллисекундах.
Docs: