199 lines
5.0 KiB
C#

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