Files
TimeReg/lib/models/audit_log.dart
T
steinhelge c829f78984 Initial commit: TimeReg Flutter app med Firebase backend
- Opprettet Flutter-prosjekt med alle nødvendige avhengigheter
- Implementert datamodeller (User, TimeRegistration, TariffProfile, Deviation, AuditLog)
- Implementert tjenester (AuthService, TimeService)
- Implementert Riverpod providers for state management
- Opprettet autentiseringsskjermer (login, signup, reset password)
- Opprettet hjemmeskjerm med timer-funksjonalitet
- Opprettet placeholder-skjermer for historikk, rapporter og profil
- Lagt til norsk dokumentasjon i README
2025-11-24 20:52:27 +01:00

116 lines
2.7 KiB
Dart

import 'package:cloud_firestore/cloud_firestore.dart';
enum AuditAction {
create,
update,
delete,
}
enum EntityType {
timeRegistration,
user,
tariffProfile,
}
class AuditLog {
final String id;
final String userId;
final String organizationId;
final AuditAction action;
final EntityType entityType;
final String entityId;
final Map<String, dynamic>? before;
final Map<String, dynamic>? after;
final DateTime timestamp;
final String? ipAddress;
AuditLog({
required this.id,
required this.userId,
required this.organizationId,
required this.action,
required this.entityType,
required this.entityId,
this.before,
this.after,
required this.timestamp,
this.ipAddress,
});
factory AuditLog.fromFirestore(DocumentSnapshot doc) {
final data = doc.data() as Map<String, dynamic>;
return AuditLog(
id: doc.id,
userId: data['userId'] ?? '',
organizationId: data['organizationId'] ?? '',
action: _parseAction(data['action']),
entityType: _parseEntityType(data['entityType']),
entityId: data['entityId'] ?? '',
before: data['changes']?['before'],
after: data['changes']?['after'],
timestamp: (data['timestamp'] as Timestamp).toDate(),
ipAddress: data['ipAddress'],
);
}
Map<String, dynamic> toFirestore() {
return {
'userId': userId,
'organizationId': organizationId,
'action': action.name,
'entityType': entityType.name,
'entityId': entityId,
'changes': {
'before': before,
'after': after,
},
'timestamp': Timestamp.fromDate(timestamp),
'ipAddress': ipAddress,
};
}
static AuditAction _parseAction(String? actionString) {
switch (actionString) {
case 'update':
return AuditAction.update;
case 'delete':
return AuditAction.delete;
default:
return AuditAction.create;
}
}
static EntityType _parseEntityType(String? typeString) {
switch (typeString) {
case 'user':
return EntityType.user;
case 'tariffProfile':
return EntityType.tariffProfile;
default:
return EntityType.timeRegistration;
}
}
String get actionDisplayName {
switch (action) {
case AuditAction.create:
return 'Opprettet';
case AuditAction.update:
return 'Endret';
case AuditAction.delete:
return 'Slettet';
}
}
String get entityTypeDisplayName {
switch (entityType) {
case EntityType.timeRegistration:
return 'Timeregistrering';
case EntityType.user:
return 'Bruker';
case EntityType.tariffProfile:
return 'Tariffprofil';
}
}
}