Полная реализация синхронизации

This commit is contained in:
RoyceDa
2026-02-15 18:14:42 +02:00
parent fe5bf2bd04
commit 7dc94678ba
15 changed files with 333 additions and 32 deletions

View File

@@ -2,10 +2,13 @@ package im.rosetta.service.services;
import java.util.List;
import im.rosetta.client.tags.ECIAuthentificate;
import im.rosetta.client.tags.ECIDevice;
import im.rosetta.database.entity.Device;
import im.rosetta.database.entity.User;
import im.rosetta.database.repository.DeviceRepository;
import im.rosetta.service.Service;
import io.orprotocol.client.Client;
public class DeviceService extends Service<DeviceRepository> {
@@ -45,4 +48,38 @@ public class DeviceService extends Service<DeviceRepository> {
return this.getRepository().findAllByField("publicKey", publicKey);
}
/**
* Получает время последней синхронизации устройства, для корректной работы синхронизации сообщений
* @param client клиент для которого нужно получить время последней синхронизации устройства
* @return время последней синхронизации устройства, или 0 если устройство не найдено,
* или клиент не авторизован, таким образом вызывающий код синхронизирует все сообщения
*/
public long getLastSyncTime(Client client){
ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class);
if(eciAuthentificate == null || !eciAuthentificate.hasAuthorized()){
/**
* Если клиент не авторизован, возвращаем 0, такого быть не должно
*/
return 0;
}
ECIDevice eciDevice = client.getTag(ECIDevice.class);
if(eciDevice == null){
/**
* Если у клиента нет тега устройства, возвращаем 0, такого быть не должно, но на всякий случай
*/
return 0;
}
Device device = this.getRepository().findByField(new java.util.HashMap<String, Object>(){{
put("deviceId", eciDevice.getDeviceId());
put("publicKey", eciAuthentificate.getPublicKey());
}});
if(device == null){
/**
* Если устройство не найдено, возвращаем 0, значит это устройство новое
*/
return 0;
}
return device.getSyncTime();
}
}