В выполнении работы подразумевалось что это чат принадлежащий одному пользователю, который общается с другими пользователями, поэтому ID этого юзера было заранее указано в системе-сервисе чатов
Файл Chat.kt содержит два класса:
Chat
содержит Id юзера, с которым общается наш пользователь и список сообщений классаMessage
Message
содержит текст сообщения, ID того кто его отправил и флаг прочитано оно или нет
Сервис ChatService.kt отвечает за работу с нашей системой классов. В нем имеется мапа chatList
которая содержит чаты класса Chat
и ID собеседника в качестве ключа. Кроме того тут заранее задано ownerId
- ID пользователя нашей системы чатов.
В данном сервисе имеются следующие методы:
newMessage
создает новое сообщение классаmessage
и либо помещает в список сообщений уже существующего чата, либо создает новый и добавляет его вchatList
getFromIndexMessages
выдает список сообщений из чата с ID определенного пользователя с заданного сообщения (каждое выданное сообщения считается прочитанным)getChats
выдает список чатов с последним сообщением в них (это не считается как чтение сообщения)getUnreadChatsCount
выдает количество чатов, в которых есть хоть одно непрочитанное сообщениеdeleteMessage
- удаляет указанное по номеру сообщение в чате с указанным ID. Если это было последнее сообщение - удаляет весь чатeditMessage
- заменяет текст указанного собщения в чате с указанным IDdeleteChat
- удаляет чат и, соответственно, все сообщения в нем