mymuseum-visitapp/lib/Services/statisticsService.dart

53 lines
1.4 KiB
Dart

import 'dart:convert';
import 'dart:math';
import 'package:manager_api_new/api.dart';
import 'package:mymuseum_visitapp/client.dart';
class StatisticsService {
final Client clientAPI;
final String? instanceId;
final String? configurationId;
final String? appType; // "Mobile" or "Tablet"
final String? language;
final String sessionId;
StatisticsService({
required this.clientAPI,
required this.instanceId,
required this.configurationId,
this.appType = 'Mobile',
this.language,
}) : sessionId = _generateSessionId();
static String _generateSessionId() {
final rand = Random();
final bytes = List<int>.generate(16, (_) => rand.nextInt(256));
return bytes.map((b) => b.toRadixString(16).padLeft(2, '0')).join();
}
Future<void> track(
String eventType, {
String? sectionId,
int? durationSeconds,
Map<String, dynamic>? metadata,
}) async {
try {
await clientAPI.statsApi!.statsTrackEvent(VisitEventDTO(
instanceId: instanceId ?? '',
configurationId: configurationId,
sectionId: sectionId,
sessionId: sessionId,
eventType: eventType,
appType: appType,
language: language,
durationSeconds: durationSeconds,
metadata: metadata != null ? jsonEncode(metadata) : null,
timestamp: DateTime.now(),
));
} catch (_) {
// fire-and-forget — never block the UI on stats errors
}
}
}