68 lines
2.3 KiB
Dart
68 lines
2.3 KiB
Dart
import 'dart:io';
|
|
|
|
class MarketQuestionLogger {
|
|
MarketQuestionLogger._();
|
|
|
|
static const String _logFilePrefix = 'market_questions_';
|
|
static const String _logFileSuffix = '.log';
|
|
|
|
/// Log an answered market question to a date-stamped file with a 2-day rotation.
|
|
static Future<void> logAnswer({
|
|
required String questionId,
|
|
required String userId,
|
|
required String symbol,
|
|
required num response,
|
|
required num correctAnswer,
|
|
required bool isInverted,
|
|
DateTime? now,
|
|
}) async {
|
|
final DateTime time = now ?? DateTime.now().toUtc();
|
|
final String dateString = _formatDate(time);
|
|
|
|
// Construct today's and yesterday's file names
|
|
final String todayFileName = '$_logFilePrefix$dateString$_logFileSuffix';
|
|
final String yesterdayFileName = '$_logFilePrefix${_formatDate(time.subtract(const Duration(days: 1)))}$_logFileSuffix';
|
|
|
|
// 1. Write the log entry
|
|
final String logLine = '[${time.toIso8601String()}] '
|
|
'Question ID: $questionId, '
|
|
'User ID: $userId, '
|
|
'Symbol: $symbol, '
|
|
'Response: $response, '
|
|
'Correct: $correctAnswer, '
|
|
'Inverted: $isInverted\n';
|
|
|
|
final File logFile = File(todayFileName);
|
|
try {
|
|
await logFile.writeAsString(logLine, mode: FileMode.append, flush: true);
|
|
} catch (e) {
|
|
stderr.writeln('Failed to write market question log: $e');
|
|
}
|
|
|
|
// 2. Perform rotation (delete any log files that are not today's or yesterday's)
|
|
try {
|
|
final Directory currentDir = Directory.current;
|
|
final List<FileSystemEntity> entities = currentDir.listSync();
|
|
for (final FileSystemEntity entity in entities) {
|
|
if (entity is File) {
|
|
final String name = entity.uri.pathSegments.last;
|
|
if (name.startsWith(_logFilePrefix) && name.endsWith(_logFileSuffix)) {
|
|
if (name != todayFileName && name != yesterdayFileName) {
|
|
await entity.delete();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} catch (e) {
|
|
stderr.writeln('Failed to rotate market question logs: $e');
|
|
}
|
|
}
|
|
|
|
static String _formatDate(DateTime dt) {
|
|
final String y = dt.year.toString().padLeft(4, '0');
|
|
final String m = dt.month.toString().padLeft(2, '0');
|
|
final String d = dt.day.toString().padLeft(2, '0');
|
|
return '$y-$m-$d';
|
|
}
|
|
}
|