56 lines
1.5 KiB
TypeScript
56 lines
1.5 KiB
TypeScript
import { api } from '@sgse-app/backend/convex/_generated/api';
|
|
import type { ConvexClient } from 'convex/browser';
|
|
|
|
/**
|
|
* Obtém tempo do servidor (sincronizado)
|
|
*/
|
|
export async function obterTempoServidor(client: ConvexClient): Promise<number> {
|
|
try {
|
|
// Tentar obter configuração e sincronizar se necessário
|
|
const config = await client.query(api.configuracaoRelogio.obterConfiguracao, {});
|
|
|
|
if (config.usarServidorExterno) {
|
|
try {
|
|
const resultado = await client.action(api.configuracaoRelogio.sincronizarTempo, {});
|
|
if (resultado.sucesso && resultado.timestamp) {
|
|
return resultado.timestamp;
|
|
}
|
|
} catch (error) {
|
|
console.warn('Erro ao sincronizar com servidor externo:', error);
|
|
if (config.fallbackParaPC) {
|
|
return Date.now();
|
|
}
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
// Usar tempo do servidor Convex
|
|
const tempoServidor = await client.query(api.configuracaoRelogio.obterTempoServidor, {});
|
|
return tempoServidor.timestamp;
|
|
} catch (error) {
|
|
console.warn('Erro ao obter tempo do servidor, usando tempo local:', error);
|
|
return Date.now();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Obtém tempo do PC (fallback)
|
|
*/
|
|
export function obterTempoPC(): number {
|
|
return Date.now();
|
|
}
|
|
|
|
/**
|
|
* Calcula offset entre dois timestamps
|
|
*/
|
|
export function calcularOffset(timestampServidor: number, timestampLocal: number): number {
|
|
return timestampServidor - timestampLocal;
|
|
}
|
|
|
|
/**
|
|
* Aplica offset a um timestamp
|
|
*/
|
|
export function aplicarOffset(timestamp: number, offsetSegundos: number): number {
|
|
return timestamp + offsetSegundos * 1000;
|
|
}
|