using System;
using System.ComponentModel.DataAnnotations;
namespace gehGassi.Domain.Common
{
///
/// Schnittstellenbeschreibung für eine Entität deren Änderungen mitgeloggt werden sollen
///
public interface IAuditable
{
///
/// Gibt den eindeutigen Key für die Entität zurück;
/// Hier als String gelöst, weil damit auch kombinierte Schlüssel möglich sind.
///
/// Eindeutiger Key
string AuditKey();
///
/// Gibt den Objektnamen bzw. die Tabelle der Entität zurück
///
/// Objektnamen
string AuditTable();
///
/// Gibt zurück welche Methoden für diese Entität verwendet werden sollen.
///
/// Flags
AuditableOptions Options();
}
///
/// Welche Aktionen sollen auf eine Entität die IAuditable implementiert ausgeführt werden?
///
[Flags]
public enum AuditableOptions
{
None = 0,
Create = 1,
Edit = 2,
Delete = 3
}
///
/// Repräsentiert ein Log von Datenänderungen in Bezug auf Zeit, Aktion, Benutzer
///
public class Audit
{
///
/// Id des Eintrages
///
[Key]
public long Id { get; set; }
///
/// Schlüssel nach Objekt
///
[Required]
[MaxLength(100)]
public string Key { get; set; }
///
/// Objekt-Typ bzw. Tabellenname
///
[Required]
[MaxLength(100)]
public string Table { get; set; }
///
/// Benutzer der die Aktion durchgeführt hat
///
[Required]
[MaxLength(256)]
public string UserName { get; set; }
///
/// Durchgeführte Aktion als int.
/// 1: Angelegt
/// 2: Bearbeitet
/// 3: gelöscht
/// 4: gelöscht soft
/// 10: Zugriff
///
[Required]
public AuditAction Action { get; set; }
///
/// Datum + Uhrzeit der Aktion
///
[Required]
public DateTimeOffset DateTime { get; set; }
///
/// Daten als JSON seralisiert
///
public string KeyValues { get; set; }
///
/// Daten als JSON seralisiert
///
public string OldValues { get; set; }
///
/// Daten als JSON seralisiert
///
public string NewValues { get; set; }
}
///
/// Audit-Art / Aktion
///
public enum AuditAction : int
{
///
/// Anlegen
///
Create = 1,
///
/// Bearbeiten
///
Edit = 2,
///
/// Löschen
///
Delete = 3,
///
/// Soft-Löschen
///
DeleteSoft = 4,
///
/// Zugriff
///
Access = 10
}
///
/// Repräsentiert ein Log von Datenänderungen in Bezug auf Zeit, Aktion, Benutzer
///
public class AuditWithNames
{
///
/// Id des Eintrages
///
public long Id { get; set; }
///
/// Schlüssel nach Objekt
///
public string Key { get; set; }
///
/// Objekt-Typ bzw. Tabellenname
///
public string Table { get; set; }
///
/// Benutzer der die Aktion durchgeführt hat
///
public string UserName { get; set; }
///
/// Benutzer der die Aktion durchgeführt hat - Voller Name
///
public string UserFullName { get; set; }
///
/// Benutzer der die Aktion durchgeführt hat - Foto
///
public string UserPhoto { get; set; }
///
/// Durchgeführte Aktion als int.
/// 1: Angelegt
/// 2: Bearbeitet
/// 3: gelöscht
///
public AuditAction Action { get; set; }
///
/// Datum + Uhrzeit der Aktion
///
public DateTimeOffset DateTime { get; set; }
///
/// Daten als JSON seralisiert
///
public string KeyValues { get; set; }
///
/// Daten als JSON seralisiert
///
public string OldValues { get; set; }
///
/// Daten als JSON seralisiert
///
public string NewValues { get; set; }
}
}