294 lines
6.9 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using gehGassi.Domain.Common;
using NetTopologySuite.Geometries;
using Newtonsoft.Json;
namespace gehGassi.Domain.News
{
/// <summary>
/// Repräsentiert eine News-Meldung
/// </summary>
public class News : IAuditable
{
/// <summary>
/// Eindeutige Id
/// </summary>
[Key]
[Required]
public long Id { get; set; }
/// <summary>
/// Id der News-Kategorie
/// </summary>
[Required]
[MaxLength(128)]
public string CategoryId { get; set; }
/// <summary>
/// Status der News
/// </summary>
[Required]
public NewsStatus Status { get; set; }
/// <summary>
/// Sichtbarkeit der News
/// </summary>
[Required]
public NewsVisibility Visibility { get; set; }
/// <summary>
/// Startdatum
/// </summary>
[Required]
public DateTimeOffset Start { get; set; }
/// <summary>
/// Enddatum
/// </summary>
public DateTimeOffset? End { get; set; }
/// <summary>
/// Erstellt von
/// </summary>
[Required]
[MaxLength(100)]
public string Creator { get; set; }
/// <summary>
/// Stammt von einer externen Quelle
/// </summary>
[Required]
public bool IsExternal { get; set; }
/// <summary>
/// Quelle der News wenn extern
/// </summary>
[MaxLength(100)]
public string Source { get; set; }
#region Inhalt
/// <summary>
/// Sprache für welche die News zur Verfügung steht
/// </summary>
[Required]
[MaxLength(2)]
public string Language { get; set; }
/// <summary>
/// Bild für die Newsmeldung
/// </summary>
[MaxLength(500)]
public string Image { get; set; }
/// <summary>
/// Schlagzeile
/// </summary>
[Required]
[MaxLength(100)]
public string Headline { get; set; }
/// <summary>
/// Inhalt - HTML
/// </summary>
[Required]
public string Content { get; set; }
#endregion
#region Geo-Einschränkungen
/// <summary>
/// Art der Geo-Einschränkung
/// </summary>
[Required]
public GeoMode GeoMode { get; set; }
/// <summary>
/// Bundesland / Staat
/// </summary>
[MaxLength(10)]
public string State { get; set; }
/// <summary>
/// ISO2 Ländercode
/// </summary>
[MaxLength(2)]
public string CountryCode { get; set; }
/// <summary>
/// Geo-Koordinaten
/// </summary>
public Point Location { get; set; }
/// <summary>
/// Radius für eine Geolocation
/// </summary>
public double Radius { get; set; }
#endregion
/// <summary>
/// Gelöscht
/// </summary>
[Required]
public bool Deleted { get; set; }
/// <summary>
/// Datum der Erstellung
/// </summary>
public DateTimeOffset Created { get; set; }
#region 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>
public string AuditKey()
{
return Id.ToString();
}
/// <summary>
/// Gibt den Objektnamen bzw. die Tabelle der Entität zurück
/// </summary>
/// <returns>Objektnamen</returns>
public string AuditTable()
{
return "News";
}
public AuditableOptions Options()
{
return AuditableOptions.Create | AuditableOptions.Edit | AuditableOptions.Delete;
}
#endregion
}
/// <summary>
/// Repräsentiert eine News-Meldung für Listen mit Namen aufgelöst
/// </summary>
public class NewsWithNames
{
/// <summary>
/// Eindeutige Id
/// </summary>
public long Id { get; set; }
/// <summary>
/// Id der News-Kategorie
/// </summary>
public string CategoryId { get; set; }
/// <summary>
/// Name der News-Kategorie
/// </summary>
public string CategoryName { get; set; }
/// <summary>
/// Status der News
/// </summary>
public NewsStatus Status { get; set; }
/// <summary>
/// Sichtbarkeit der News
/// </summary>
public NewsVisibility Visibility { get; set; }
/// <summary>
/// Startdatum
/// </summary>
public DateTimeOffset Start { get; set; }
/// <summary>
/// Enddatum
/// </summary>
public DateTimeOffset? End { get; set; }
/// <summary>
/// Erstellt von
/// </summary>
public string Creator { get; set; }
/// <summary>
/// Stammt von einer externen Quelle
/// </summary>
public bool IsExternal { get; set; }
/// <summary>
/// Quelle der News wenn extern
/// </summary>
public string Source { get; set; }
#region Inhalt
/// <summary>
/// Sprache für welche die News zur Verfüggung steht
/// </summary>
public string Language { get; set; }
/// <summary>
/// Bild für die Newsmeldung
/// </summary>
public string Image { get; set; }
/// <summary>
/// Schlagzeile
/// </summary>
public string Headline { get; set; }
/// <summary>
/// Inhalt - HTML
/// </summary>
public string Content { get; set; }
#endregion
#region Geo-Einschränkungen
/// <summary>
/// Art der Geo-Einschränkung
/// </summary>
public GeoMode GeoMode { get; set; }
/// <summary>
/// Bundesland / Staat
/// </summary>
public string State { get; set; }
/// <summary>
/// ISO2 Ländercode
/// </summary>
public string CountryCode { get; set; }
/// <summary>
/// Geo-Koordinaten
/// </summary>
public Point Location { get; set; }
/// <summary>
/// Radius für eine Geolocation
/// </summary>
public double Radius { get; set; }
#endregion
/// <summary>
/// Gelöscht
/// </summary>
public bool Deleted { get; set; }
/// <summary>
/// Datum der Erstellung
/// </summary>
public DateTimeOffset Created { get; set; }
}
}