LogEvent.from constructor
LogEvent.from({
- Invokable? initiator,
- Map? payload,
Implementation
factory LogEvent.from({Invokable? initiator, Map? payload}) {
payload = Utils.convertYamlToDart(payload);
String? eventName = payload?['name'];
String? operation = payload?['operation'];
String? provider = payload?['provider'] ?? 'firebase';
dynamic value = payload?['value'];
String? attributeKey = payload?['attributeKey'];
// Firebase validation
if (provider == 'firebase') {
Map<String, dynamic> validationPayload = {};
if (payload != null) {
payload.forEach((key, value) {
if (key != null) {
validationPayload[key.toString()] = value;
}
});
}
// Required Parameters validator for ALL Firebase operations
try {
FirebaseAnalyticsValidator.validate(operation ?? 'logEvent', validationPayload);
} catch (e) {
throw LanguageError(
"${ensembleAction.ActionType.logEvent.name} validation failed: ${e.toString()}");
}
}
// MoEngage validations
else if (provider == 'moengage') {
if (operation == null) {
throw LanguageError('MoEngage requires operation type');
}
// Value validation for operations requiring it
if (value == null &&
!NoValueOperations.values.any((e) => e.name == operation)) {
throw LanguageError('Operation $operation requires a value');
}
// Operation-specific validations
switch (operation) {
case 'trackEvent':
if (eventName == null) {
throw LanguageError('trackEvent requires event name');
}
break;
case 'setLocation':
case 'setUserAttributeLocation':
final location = EnsembleGeoLocation.parse(value);
if (location == null) {
throw LanguageError('Invalid location format');
}
break;
case 'custom':
case 'timestamp':
if (attributeKey == null) {
throw LanguageError('Operation $operation requires attributeKey');
}
break;
case 'locationAttribute':
if (attributeKey == null) {
throw LanguageError('Operation $operation requires attributeKey');
}
final location = EnsembleGeoLocation.parse(value);
if (location == null) {
throw LanguageError('Invalid location format');
}
break;
case 'setContext':
if (value != null && value is! List) {
throw LanguageError('setContext requires List value');
}
break;
}
} else if (provider == 'adobe') {
if (operation == 'trackAction') {
if (eventName == null) {
throw LanguageError('trackAction requires event name');
}
} else if (operation == 'trackState') {
if (eventName == null) {
throw LanguageError('trackState requires event name');
}
} else if (operation == 'sendEvent') {
if (eventName == null) {
throw LanguageError('sendEvent requires event name');
}
}
}
return LogEvent(
initiator: initiator,
eventName: eventName,
parameters: payload?['parameters'] is Map ? payload!['parameters'] : null,
logLevel: payload?['logLevel'] ?? logging.LogLevel.info.name,
provider: provider,
operation: operation,
userId: payload?['userId'],
value: value,
attributeKey: attributeKey,
originalPayload: payload,
onSuccess: ensembleAction.EnsembleAction.from(payload?['onSuccess']),
onError: ensembleAction.EnsembleAction.from(payload?['onError']),
);
}