import 'package:apidash/models/models.dart'; import 'package:apidash/consts.dart'; import 'convert_utils.dart'; DateTime stripTime(DateTime dateTime) { return DateTime(dateTime.year, dateTime.month, dateTime.day); } RequestModel getRequestModelFromHistoryModel(HistoryRequestModel model) { return RequestModel( id: model.historyId, name: model.metaData.name, responseStatus: model.httpResponseModel.statusCode, message: kResponseCodeReasons[model.httpResponseModel.statusCode], httpRequestModel: model.httpRequestModel, httpResponseModel: model.httpResponseModel, ); } String getHistoryRequestName(HistoryMetaModel model) { if (model.name.isNotEmpty) { return model.name; } else { return model.url; } } String getHistoryRequestKey(HistoryMetaModel model) { String timeStamp = humanizeDate(model.timeStamp); if (model.name.isNotEmpty) { return model.name + model.method.name + timeStamp; } else { return model.url + model.method.name + timeStamp; } } String? getLatestRequestId( Map> temporalGroups) { if (temporalGroups.isEmpty) { return null; } List keys = temporalGroups.keys.toList(); keys.sort((a, b) => b.compareTo(a)); return temporalGroups[keys.first]!.first.historyId; } DateTime getDateTimeKey(List keys, DateTime currentKey) { if (keys.isEmpty) return currentKey; for (DateTime key in keys) { if (key.year == currentKey.year && key.month == currentKey.month && key.day == currentKey.day) { return key; } } return stripTime(currentKey); } Map> getTemporalGroups( List? models) { Map> temporalGroups = {}; if (models?.isEmpty ?? true) { return temporalGroups; } for (HistoryMetaModel model in models!) { List existingKeys = temporalGroups.keys.toList(); DateTime key = getDateTimeKey(existingKeys, model.timeStamp); if (existingKeys.contains(key)) { temporalGroups[key]!.add(model); } else { temporalGroups[stripTime(key)] = [model]; } } temporalGroups.forEach((key, value) { value.sort((a, b) => b.timeStamp.compareTo(a.timeStamp)); }); return temporalGroups; } Map> getRequestGroups( List? models) { Map> historyGroups = {}; if (models?.isEmpty ?? true) { return historyGroups; } for (HistoryMetaModel model in models!) { String key = getHistoryRequestKey(model); if (historyGroups.containsKey(key)) { historyGroups[key]!.add(model); } else { historyGroups[key] = [model]; } } historyGroups.forEach((key, value) { value.sort((a, b) => b.timeStamp.compareTo(a.timeStamp)); }); return historyGroups; } List getRequestGroup( List? models, HistoryMetaModel? selectedModel) { List requestGroup = []; if (selectedModel == null || (models?.isEmpty ?? true)) { return requestGroup; } String selectedModelKey = getHistoryRequestKey(selectedModel); for (HistoryMetaModel model in models!) { String key = getHistoryRequestKey(model); if (key == selectedModelKey) { requestGroup.add(model); } } requestGroup.sort((a, b) => b.timeStamp.compareTo(a.timeStamp)); return requestGroup; } DateTime? getRetentionDate(HistoryRetentionPeriod retentionPeriod) { DateTime now = DateTime.now(); DateTime today = stripTime(now); switch (retentionPeriod) { case HistoryRetentionPeriod.oneWeek: return today.subtract(const Duration(days: 7)); case HistoryRetentionPeriod.oneMonth: return today.subtract(const Duration(days: 30)); case HistoryRetentionPeriod.threeMonths: return today.subtract(const Duration(days: 90)); default: return null; } }