Примерный план:
-
Есть бд, где хранятся id пользователей, ник, etc
-
Пользователь делает запрос, в запросе идет его id, файл, состояние, мы даем ответ мол "во что перевести".
-
Пользователь дает ответ, тем временем файл лежит в редисе например. Далее мы его конвертируем и отправляем обратно нужному айдишнику. В редис учитываем таймер ответа. Типа пользователь отправил файл, в течении 5 минут должен дать ответ во что конвертировать, иначе сбросить операцию.
//==================================================================================================== Реализация:
-
Redis В листе храним id, в хешах с ключами - id храним данные по работам. В лист закидываем джобы по мере поступления от пользователей, вытаскиваем же джобу только после обработки прошлой джобы, данные по которой уже поступили серверу. Предусмотреть поломку сервера, когда джоба уже вышла - статусом джобы.
-
Redis Храним временные состояния диалогов в редис. Связка между сообщениями одного чата. Пользователь отправляет файл: запоминаем его URL, chatID, userid пользователя в редис. Далее пользователь отправляет второе сообщение - во что конвертировать: получаем FileTo, ChatId, UserId. По этим данным идем в редис и находим URL файл из первого сообщения и отправляем его в очередь конвертации.
-
S3 object storage - Minio Хранит сырые файлы для дальнейшей обработки.
-
Сторонние АПИ реализуют файл и отдают его обратно. Отправляем итоговый файл пользователю.