Базовая имплементация серверной части мессенджера Wemesse.
После первого запуска бинарника происходит миграция всех импортированных моделей в хранилище
Основное хранилище обновлений и версионирования клиента
{
"id": bigint,
"app_checksum": text,
"app_name": text,
"app_notes": text,
"app_size": text,
"app_version": text,
"skipped": boolean,
"uploads": bigint,
"uri": text
}
Необходима для сверки сигнатуры клиента и сервера. Сигнатура создается принудительно в хранилище используя Argon2 или любой другой алгоритм
{
"id": bigint,
"signature": text
}
Основное хранилище пользователей передаваемых при каждой сессии с клиента
{
"id": bigint,
"app_locale": text,
"app_version": text,
"device_locale": text,
"device_mac": text,
"device_model": text,
"device_sdk": text,
"session_activity": bigint,
"session_id": bigint,
"session_register": bigint,
"tg_version": text
}
Основные методы. Все за исключением GetUpdate ожидают сигнатуру клиента
Передаем текущую версию клиента. Возвращаем JSON с актуальной версией или принудительной для загрузки
router.Get("/api/v1/updates/{version}"
ВАЖНО: URI вернется с ссылкой Гонконгского сервера
{
"Id": int,
"Checksum": string,
"Name": string,
"Message": string,
"Size": string,
"Version": string,
"Skipped": bool,
"Uploads": int,
"URI": string
}
ВАЖНО: Служебный метод
Возвращаем массив объектов со всеми обновлениями
router.Get("/api/v1/updates"
ВАЖНО: URI вернется с ссылкой нашего сервера
[
{
"Id": int,
"Checksum": string,
"Name": string,
"Message": string,
"Size": string,
"Version": string,
"Skipped": bool,
"Uploads": int,
"URI": string
}
]
ВАЖНО: Служебный метод
ВАЖНО: Каждая 00_00 версия клиента принудительная и вернется со статусом skipped = false
Передаем Form-Data. Возвращаем JSON этого обновления
router.Post("/api/v1/updates"
appNotes string
appVersion string
tmpFile file
ВАЖНО: URI вернется с ссылкой нашего сервера
{
"Id": int,
"Checksum": string,
"Name": string,
"Message": string,
"Size": string,
"Version": string,
"Skipped": bool,
"Uploads": int,
"URI": string
}
ВАЖНО: Этот метод прибавляет +1 к версии в таблице apps
Передаем с клиента JSON объект пользователя и его устройства. Возвращаем JSON объект текущего пользователя
router.Post("/api/v1/users"
{
"AppLocale": string,
"AppVersion": string,
"DeviceLocale": string,
"DeviceMac": string,
"DeviceModel": string,
"DeviceSDK": string,
"SessionActivity": int,
"SessionID": int,
"SessionRegister": int,
"TgVersion": string
}
{
"ID": int,
"AppLocale": string,
"AppVersion": string,
"DeviceLocale": string,
"DeviceMac": string,
"DeviceModel": string,
"DeviceSDK": string,
"SessionActivity": int,
"SessionID": int,
"SessionRegister": int,
"TgVersion": string
}
ВАЖНО: Служебный метод
Возвращаем массив объектов со всеми пользователями
router.Get("/api/v1/users"
[
{
"ID": int,
"AppLocale": string,
"AppVersion": string,
"DeviceLocale": string,
"DeviceMac": string,
"DeviceModel": string,
"DeviceSDK": string,
"SessionActivity": int,
"SessionID": int,
"SessionRegister": int,
"TgVersion": string
}
]