243 lines
6.3 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using gehGassiApp.Domain.Base;
namespace gehGassiApp.Domain.Common
{
/// <summary>
/// Repräsentiert eine Bewertung
/// </summary>
public class Rating : SyncEntity
{
/// <summary>
/// Wer hat das Rating erstellt?
/// </summary>
[Required]
[MaxLength(128)]
public string FromId { get; set; }
/// <summary>
/// Typ der Quelle des Ratings
/// </summary>
[Required]
public AppUserType FromType { get; set; }
/// <summary>
/// Ziel Id des Ratings
/// </summary>
[Required]
[MaxLength(128)]
public string TargetId { get; set; }
/// <summary>
/// Ziel-Typ
/// </summary>
[Required]
public RatingTarget TargetType { get; set; }
/// <summary>
/// Vergebene Bewertung
/// </summary>
[Required]
public decimal Points { get; set; }
/// <summary>
/// Anmerkungen zum Rating
/// </summary>
[MaxLength(500)]
public string Info { get; set; }
/// <summary>
/// Wann erstellt?
/// </summary>
[Required]
public DateTimeOffset Created { get; set; }
}
/// <summary>
/// Repräsentiert ein Rating
/// </summary>
public class RatingStatistics
{
/// <summary>
/// Anzahl der Bewertungen
/// </summary>
[Required]
public int TotalRatings { get; set; }
/// <summary>
/// Anzahl der Punkte die vergeben wurden
/// </summary>
[Required]
public decimal TotalPoints { get; set; }
/// <summary>
/// Durchschnittliche Bewertung
/// </summary>
[Required]
public decimal AverageRating { get; set; }
}
/// <summary>
/// Repräsentiert ein Rating das von jemanden für jemanden oder etwas vergeben wurde mit Namen augelöst
/// </summary>
public class RatingWithNames : SyncEntityVw
{
/// <summary>
/// Wer hat das Rating erstellt?
/// </summary>
public string FromId { get; set; }
/// <summary>
/// Name des Rating Erstellers
/// </summary>
public string FromName { get; set; }
/// <summary>
/// Photo des Ratings Erstellers
/// </summary>
public string FromPhoto { get; set; }
/// <summary>
/// Typ der Quelle des Ratings
/// </summary>
public AppUserType FromType { get; set; }
/// <summary>
/// Ziel Id des Ratings
/// </summary>
public string TargetId { get; set; }
/// <summary>
/// Name des Rating Ziels
/// </summary>
public string TargetName { get; set; }
/// <summary>
/// Photo des Ratings Ziels
/// </summary>
public string TargetPhoto { get; set; }
/// <summary>
/// Ziel-Typ
/// </summary>
public RatingTarget TargetType { get; set; }
/// <summary>
/// Vergebene Bewertung
/// </summary>
public decimal Points { get; set; }
/// <summary>
/// Anmerkungen zum Rating
/// </summary>
public string Info { get; set; }
/// <summary>
/// Wann erstellt?
/// </summary>
public DateTimeOffset Created { get; set; }
/// <summary>
/// Von Vorname
/// </summary>
public string FromFirstName
{
get
{
if (!string.IsNullOrWhiteSpace(FromName))
{
var parts = FromName.Split(" ");
return parts[0];
}
return string.Empty;
}
}
/// <summary>
/// Vorname + Nachname erster Buchstabe + Punkt, oder nur Vorname wenn kein Nachname
/// </summary>
public string FromFullNameShort
{
get
{
if (!string.IsNullOrWhiteSpace(FromName))
{
var parts = FromName.Split(" ");
var firstName = parts[0];
var lastName = string.Empty;
if (parts.Length > 1)
lastName = parts[1];
return string.IsNullOrWhiteSpace(lastName) ? firstName : $"{firstName} {lastName[..1]}.";
}
return string.Empty;
}
}
/// <summary>
/// Ziel Vorname
/// </summary>
public string TargetFirstName
{
get
{
if (!string.IsNullOrWhiteSpace(TargetName))
{
var parts = TargetName.Split(" ");
return parts[0];
}
return string.Empty;
}
}
/// <summary>
/// Vorname + Nachname erster Buchstabe + Punkt, oder nur Vorname wenn kein Nachname
/// </summary>
public string TargetFullNameShort
{
get
{
if (!string.IsNullOrWhiteSpace(TargetName))
{
var parts = TargetName.Split(" ");
var firstName = parts[0];
var lastName = string.Empty;
if (parts.Length > 1)
lastName = parts[1];
return string.IsNullOrWhiteSpace(lastName) ? firstName : $"{firstName} {lastName[..1]}.";
}
return string.Empty;
}
}
#region Erweiterung Blockier- und Sperrinfo
/// <summary>
/// blockiert
/// </summary>
[NotMapped]
public bool FromBlocked { get; set; }
/// <summary>
/// gesperrt
/// </summary>
[NotMapped]
public bool FromLocked { get; set; }
/// <summary>
/// blockiert oder gesperrt?
/// </summary>
[NotMapped]
public bool FromBlockedOrLocked => FromBlocked || FromLocked;
#endregion
}
}