592 lines
14 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
using gehGassi.Domain.Base;
using gehGassi.Domain.Common;
using gehGassi.Domain.Ratings;
namespace gehGassi.Domain.Dogs
{
/// <summary>
/// Repräsentiert einen Hund
/// </summary>
public class Dog : SyncEntity, IAuditable
{
/// <summary>
/// Id der Hunderasse
/// </summary>
[MaxLength(128)]
public string DogRaceId { get; set; }
/// <summary>
/// Id des App-Users
/// </summary>
[Required]
[MaxLength(128)]
public string AppUserId { get; set; }
#region Basis
/// <summary>
/// Nummer des Hundes
/// </summary>
[Required]
[MaxLength(100)]
public string Number { get; set; }
/// <summary>
/// Name des Hundes
/// </summary>
[Required]
[MaxLength(100)]
public string Name { get; set; }
/// <summary>
/// Optional: Beschreibung
/// </summary>
[MaxLength(5000)]
public string Description { get; set; }
/// <summary>
/// Optional - Foto des Hundes
/// </summary>
[MaxLength(500)]
public string Photo { get; set; }
/// <summary>
/// Geburtstag des Hundes
/// </summary>
public DateTimeOffset? BirthDate { get; set; }
/// <summary>
/// Geschlecht des Hundes
/// </summary>
[Required]
public DogSex Sex { get; set; }
/// <summary>
/// Größe des Hundes
/// </summary>
[Required]
public DogSize Size { get; set; }
#endregion
#region Eigenschaften beim Gassi gehen
/// <summary>
/// Zieht an der Leine
/// </summary>
[Required]
public bool PullsTheLeash { get; set; }
/// <summary>
/// Geht an der Leine
/// </summary>
[Required]
public bool WalksTheLeash { get; set; }
/// <summary>
/// Kennt die Grundkommandos
/// </summary>
[Required]
public bool BasicCommands { get; set; }
/// <summary>
/// Jagd andere Tiere
/// </summary>
[Required]
public bool Hunter { get; set; }
/// <summary>
/// Versucht alles zu essen
/// </summary>
[Required]
public bool Eating { get; set; }
/// <summary>
/// Springt Menschen an
/// </summary>
[Required]
public bool Jumper { get; set; }
#endregion
#region Persönlichkeit
/// <summary>
/// Mag Erwachsene
/// </summary>
[Required]
public bool LikesAdults { get; set; }
/// <summary>
/// Mag Kinder
/// </summary>
[Required]
public bool LikesChildren { get; set; }
/// <summary>
/// Mag Artgenossen
/// </summary>
[Required]
public bool LikesConspecifics { get; set; }
/// <summary>
/// Ist zutraulich
/// </summary>
[Required]
public bool IsTrustful { get; set; }
/// <summary>
/// Ist aggressiv
/// </summary>
[Required]
public bool IsAggressiv { get; set; }
/// <summary>
/// Ist ein Einzelgänger
/// </summary>
[Required]
public bool IsLoneGunner { get; set; }
/// <summary>
/// Aggressionsgrad des Hundes, wenn aggressiv
/// </summary>
[Required]
public DogAggressionLevel AggressionLevel { get; set; }
#endregion
#region Verhalten wenn jemand das Haus betritt
/// <summary>
/// Stürmt nach draussen
/// </summary>
[Required]
public bool RushesOutside { get; set; }
/// <summary>
/// Ist ruhig und entspannt
/// </summary>
[Required]
public bool IsCalm { get; set; }
/// <summary>
/// Pinkelt vor Aufregung
/// </summary>
[Required]
public bool IsPeeing { get; set; }
/// <summary>
/// Ist schüchtern
/// </summary>
[Required]
public bool IsShy { get; set; }
/// <summary>
/// Bewacht das zuhause
/// </summary>
[Required]
public bool IsGuard { get; set; }
#endregion
#region Medical
/// <summary>
/// Unverträglichkeiten
/// </summary>
[MaxLength(5000)]
public string Intolerances { get; set; }
/// <summary>
/// Ist gechipt
/// </summary>
[Required]
public bool Chiped { get; set; }
/// <summary>
/// Ist sterilisiert?
/// </summary>
[Required]
public bool Sterilized { get; set; }
/// <summary>
/// Medizinische Informationen
/// </summary>
[MaxLength(5000)]
public string MedicalInfo { get; set; }
#endregion
#region Sitting
/// <summary>
/// Ist stubenrein?
/// </summary>
[Required]
public bool HouseTrained { get; set; }
/// <summary>
/// Fütterungszeiten
/// </summary>
[Required]
public DogFeedingTimes FeedingTimes { get; set; }
/// <summary>
/// Fütterungszeiten Individuell
/// </summary>
[MaxLength(500)]
public string FeedingIndividual { get; set; }
#endregion
/// <summary>
/// Optional: Kommentar von gehgassi
/// </summary>
public string Comment { get; set; }
/// <summary>
/// Rating-Statistiken für den Hund
/// </summary>
public RatingStatistics RatingStatistics { 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 "Dogs";
}
public AuditableOptions Options()
{
return AuditableOptions.Create | AuditableOptions.Edit | AuditableOptions.Delete;
}
#endregion
}
/// <summary>
/// Repräsentiert einen Hund für Listendarstellungen
/// </summary>
public class DogWithNames : SyncEntityVw
{
/// <summary>
/// Id der Hunderasse
/// </summary>
public string DogRaceId { get; set; }
/// <summary>
/// Name der Hunderasse
/// </summary>
public string DogRaceName { get; set; }
/// <summary>
/// Id des App-Users
/// </summary>
public string AppUserId { get; set; }
/// <summary>
/// Name des Hundebesitzers
/// </summary>
public string AppUserName { get; set; }
#region Basis
/// <summary>
/// Nummer des Hundes
/// </summary>
public string Number { get; set; }
/// <summary>
/// Name des Hundes
/// </summary>
public string Name { get; set; }
/// <summary>
/// Optional: Beschreibung
/// </summary>
public string Description { get; set; }
/// <summary>
/// Optional - Foto des Hundes
/// </summary>
public string Photo { get; set; }
/// <summary>
/// Geburtstag des Hundes
/// </summary>
public DateTimeOffset? BirthDate { get; set; }
/// <summary>
/// Geschlecht des Hundes
/// </summary>
public DogSex Sex { get; set; }
/// <summary>
/// Größe des Hundes
/// </summary>
public DogSize Size { get; set; }
#endregion
#region Eigenschaften beim Gassi gehen
/// <summary>
/// Zieht an der Leine
/// </summary>
public bool PullsTheLeash { get; set; }
/// <summary>
/// Geht an der Leine
/// </summary>
public bool WalksTheLeash { get; set; }
/// <summary>
/// Kennt die Grundkommandos
/// </summary>
public bool BasicCommands { get; set; }
/// <summary>
/// Jagd andere Tiere
/// </summary>
public bool Hunter { get; set; }
/// <summary>
/// Versucht alles zu essen
/// </summary>
public bool Eating { get; set; }
/// <summary>
/// Springt Menschen an
/// </summary>
public bool Jumper { get; set; }
#endregion
#region Persönlichkeit
/// <summary>
/// Mag Erwachsene
/// </summary>
public bool LikesAdults { get; set; }
/// <summary>
/// Mag Kinder
/// </summary>
public bool LikesChildren { get; set; }
/// <summary>
/// Mag Artgenossen
/// </summary>
public bool LikesConspecifics { get; set; }
/// <summary>
/// Ist zutraulich
/// </summary>
public bool IsTrustful { get; set; }
/// <summary>
/// Ist aggressiv
/// </summary>
public bool IsAggressiv { get; set; }
/// <summary>
/// Ist ein Einzelgänger
/// </summary>
public bool IsLoneGunner { get; set; }
/// <summary>
/// Aggressionsgrad des Hundes, wenn aggressiv
/// </summary>
public DogAggressionLevel AggressionLevel { get; set; }
#endregion
#region Verhalten wenn jemand das Haus betritt
/// <summary>
/// Stürmt nach draussen
/// </summary>
public bool RushesOutside { get; set; }
/// <summary>
/// Ist ruhig und entspannt
/// </summary>
public bool IsCalm { get; set; }
/// <summary>
/// Pinkelt vor Aufregung
/// </summary>
public bool IsPeeing { get; set; }
/// <summary>
/// Ist schüchtern
/// </summary>
public bool IsShy { get; set; }
/// <summary>
/// Bewacht das zuhause
/// </summary>
public bool IsGuard { get; set; }
#endregion
#region Medical
/// <summary>
/// Unverträglichkeiten
/// </summary>
public string Intolerances { get; set; }
/// <summary>
/// Ist gechipt
/// </summary>
public bool Chiped { get; set; }
/// <summary>
/// Ist sterilisiert?
/// </summary>
public bool Sterilized { get; set; }
/// <summary>
/// Medizinische Informationen
/// </summary>
public string MedicalInfo { get; set; }
#endregion
#region Sitting
/// <summary>
/// Ist stubenrein?
/// </summary>
public bool HouseTrained { get; set; }
/// <summary>
/// Fütterungszeiten
/// </summary>
public DogFeedingTimes FeedingTimes { get; set; }
/// <summary>
/// Fütterungszeiten Individuell
/// </summary>
public string FeedingIndividual { get; set; }
#endregion
/// <summary>
/// Optional: Kommentar von gehgassi
/// </summary>
public string Comment { get; set; }
/// <summary>
/// Anzahl der Bewertungen
/// </summary>
public int RatingStatistics_TotalRatings { get; set; }
/// <summary>
/// Anzahl der Punkte die vergeben wurden
/// </summary>
public decimal RatingStatistics_TotalPoints { get; set; }
/// <summary>
/// Durchschnittliche Bewertung
/// </summary>
public decimal RatingStatistics_AverageRating { get; set; }
/// <summary>
/// Datum der Erstellung
/// </summary>
public DateTimeOffset Created { get; set; }
}
/// <summary>
/// Min-Info eines Hundes
/// </summary>
public class DogMinInfo : SyncEntityVw
{
/// <summary>
/// Id der Hunderasse
/// </summary>
public string DogRaceId { get; set; }
/// <summary>
/// Name der Hunderasse
/// </summary>
public string DogRaceName { get; set; }
/// <summary>
/// Name des Hundes
/// </summary>
public string Name { get; set; }
/// <summary>
/// Optional - Foto des Hundes
/// </summary>
public string Photo { get; set; }
/// <summary>
/// Geschlecht
/// </summary>
public DogSex Sex { get; set; }
/// <summary>
/// Größe des Hundes
/// </summary>
public DogSize Size { get; set; }
/// <summary>
/// Geburtstag des Hundes
/// </summary>
public DateTimeOffset? BirthDate { get; set; }
/// <summary>
/// Durchschnittliche Bewertung
/// </summary>
public decimal AverageRating { get; set; }
}
/// <summary>
/// Hilfsklasse für das Speichern von Hunden zu Walks
/// </summary>
public class DogWalkJson
{
/// <summary>
/// Id des Hundes
/// </summary>
[JsonPropertyName("id")]
public string Id { get; set; }
/// <summary>
/// Name des Hundes
/// </summary>
[JsonPropertyName("name")]
public string Name { get; set; }
}
}