вообще не прикасайся к клавиатуре, сажай пользователя за комп и бери деньги за обучение установке ПО, подробно - про то как именно нельзя устанавливать нелицензионное
было бы странно если другой язык был бы такой-же как ява - зачем тогда он нужен?
а на уровне аналогий - все то же самое, но намного меньше писанины за счет синтаксического сахара
но зачем выбирать как пример попытку писать на котлине как на яве?
вот это будет примером общего у явы и котлина:
"data классы это аналог POJO и data class CoverFront(val coverType String, val media: KeywordOrName, val mediaCol: MediaCol)"
и сравнить с реализацией POJO в яве с геттерами-сеттерами
или взять списки и строки - общего полно
а скажем, дженерики вообще не изменились
data классы это аналог POJO, зачем тут вот это все?
вынести лишнее в отдельные классы/расширения
поправить логику чтобы null параметры не передавались
и будет все красиво и правильно
data class CoverFront(val coverType String, val media: KeywordOrName, val mediaCol: MediaCol)
всё
а так хорошо начиналось
зачем тут js? ConcurrentHashMap тоже ни к чему - это map а чату нужен порядок следования
лучше выбрать сокеты (для начала можно взять блокирующие) и Flow для очереди и событий
Wexter, ну с гитом идея понятная - где-то есть локальная копия потерянного состояния и данные не пропадут, но - просто восстановить зеркало или поднять с нуля сервер, бэкакп а потом всей конторой мерджить свое последнее состояние - может оказаться намного дороже рейда
и судя по всему там достаточно будет статичных html страниц которые вообще можно в ворде готовить и просто в папку на сервере складывать, код самого сервера будет в пару экранов, пишется за час-два
зачем? нагрузку потянет любой древний десктоп, все пользователи в локальной сети и только читают, отказоустойчивость, логирование, зеркала - все это не нужно
да даже старый андроид можно вместо сервера взять