243 lines
6.3 KiB
C#
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
|
|
}
|
|
}
|