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