261 lines
6.9 KiB
C#
261 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.Base;
|
|
using gehGassi.Domain.Common;
|
|
using gehGassi.Domain.Ratings;
|
|
using NetTopologySuite.Geometries;
|
|
|
|
namespace gehGassi.Domain.Dogs
|
|
{
|
|
/// <summary>
|
|
/// Repräsentiert einen App-User
|
|
/// </summary>
|
|
public class AppUser : SyncEntity, IAuditable
|
|
{
|
|
/// <summary>
|
|
/// Art des App-Users
|
|
/// </summary>
|
|
[Required]
|
|
public AppUserType Type { get; set; }
|
|
|
|
/// <summary>
|
|
/// Nummer des App-Users
|
|
/// </summary>
|
|
[Required]
|
|
[MaxLength(100)]
|
|
public string Number { get; set; }
|
|
|
|
/// <summary>
|
|
/// Anrede / titel
|
|
/// </summary>
|
|
[MaxLength(50)]
|
|
public string Title { get; set; }
|
|
|
|
/// <summary>
|
|
/// Vorname
|
|
/// </summary>
|
|
[Required]
|
|
[MaxLength(150)]
|
|
public string FirstName { get; set; }
|
|
|
|
/// <summary>
|
|
/// Nachname
|
|
/// </summary>
|
|
[Required]
|
|
[MaxLength(150)]
|
|
public string LastName { get; set; }
|
|
|
|
/// <summary>
|
|
/// Geschlecht
|
|
/// </summary>
|
|
[Required]
|
|
public Sex Sex { get; set; }
|
|
|
|
/// <summary>
|
|
/// Optional - Geburtstag
|
|
/// </summary>
|
|
public DateTimeOffset? BirthDate { get; set; }
|
|
|
|
/// <summary>
|
|
/// Optional - Foto des Benutzers
|
|
/// </summary>
|
|
[MaxLength(500)]
|
|
public string Photo { get; set; }
|
|
|
|
/// <summary>
|
|
/// Kontaktdaten
|
|
/// </summary>
|
|
public ContactMin Contact { get; set; }
|
|
|
|
/// <summary>
|
|
/// Adressdaten
|
|
/// </summary>
|
|
public Address Address { get; set; }
|
|
|
|
/// <summary>
|
|
/// Geo-Koordinaten
|
|
/// </summary>
|
|
public Point Location { get; set; }
|
|
|
|
/// <summary>
|
|
/// Socialmedia Daten
|
|
/// </summary>
|
|
public SocialMedia SocialMedia { get; set; }
|
|
|
|
/// <summary>
|
|
/// Interne Anmerkungen
|
|
/// </summary>
|
|
[MaxLength(1000)]
|
|
public string Comment { get; set; }
|
|
|
|
/// <summary>
|
|
/// Rating-Statistiken für den Hundebesitzer
|
|
/// </summary>
|
|
public RatingStatistics RatingStatistics { get; set; }
|
|
|
|
/// <summary>
|
|
/// Ratingstatistiken wenn auch oder nur Walker
|
|
/// </summary>
|
|
public RatingStatistics RatingStatisticsWalker { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gesperrt
|
|
/// </summary>
|
|
[Required]
|
|
public bool Locked { get; set; }
|
|
|
|
/// <summary>
|
|
/// Grund für die Sperrung
|
|
/// </summary>
|
|
[MaxLength(1000)]
|
|
public string LockedReason { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gesperrt bis
|
|
/// </summary>
|
|
public DateTimeOffset? LockedUntil { get; set; }
|
|
|
|
/// <summary>
|
|
/// Wie oft wurde der Benutzer gesperrt
|
|
/// </summary>
|
|
public int LockedCount { get; set; }
|
|
|
|
/// <summary>
|
|
/// Wurden die AGB akzeptiert
|
|
/// </summary>
|
|
[Required]
|
|
public bool TermsAccepted { get; set; }
|
|
|
|
/// <summary>
|
|
/// Wann wurden die AGB akzeptiert?
|
|
/// </summary>
|
|
public DateTimeOffset? TermsAcceptedDate { get; set; }
|
|
|
|
/// <summary>
|
|
/// Wurden die Datenschutzbedingungen akzeptiert
|
|
/// </summary>
|
|
[Required]
|
|
public bool PrivacyAccepted { get; set; }
|
|
|
|
/// <summary>
|
|
/// Wann wurden die Datenschutzbedingungen akzeptiert?
|
|
/// </summary>
|
|
public DateTimeOffset? PrivacyAcceptedDate { get; set; }
|
|
|
|
#region Erweiterungen Mangopay
|
|
|
|
/// <summary>
|
|
/// Wurden die Datenschutzbedingungen des Paymentproviders akzeptiert
|
|
/// </summary>
|
|
[Required]
|
|
public bool PaymentTermsAccepted { get; set; }
|
|
|
|
/// <summary>
|
|
/// Wann wurden die Datenschutzbedingungen des Paymentproviders akzeptiert?
|
|
/// </summary>
|
|
public DateTimeOffset? PaymentTermsAcceptedDate { get; set; }
|
|
|
|
/// <summary>
|
|
/// Nationalität ISO-2
|
|
/// </summary>
|
|
[MaxLength(2)]
|
|
public string NationalityCode { get; set; }
|
|
|
|
/// <summary>
|
|
/// Land Hauptwohnsitz ISO-2
|
|
/// </summary>
|
|
[MaxLength(2)]
|
|
public string MainResidenceCode { get; set; }
|
|
|
|
/// <summary>
|
|
/// ID des AppUsers beim Payment-Provider
|
|
/// </summary>
|
|
[MaxLength(255)]
|
|
public string PaymentId { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gibt an ob der Benutzer den KYC-Prozess durchlaufen hat
|
|
/// </summary>
|
|
[Required]
|
|
public bool KycPassed { get; set; }
|
|
|
|
/// <summary>
|
|
/// Wann wurde der KYC-Prozess erfolgreich durchlaufen?
|
|
/// </summary>
|
|
public DateTimeOffset? KycPassedDate { get; set; }
|
|
|
|
/// <summary>
|
|
/// ID der Bank-Verbindung beim Payment-Provider
|
|
/// </summary>
|
|
[MaxLength(255)]
|
|
public string BankId { get; set; }
|
|
|
|
#endregion
|
|
|
|
/// <summary>
|
|
/// Gibt an ob es sich um einen verifizierten Benutzer handelt
|
|
/// </summary>
|
|
[Required]
|
|
public bool Verified { get; set; }
|
|
|
|
/// <summary>
|
|
/// Wann wurde die Verification erfolgreich durchlaufen?
|
|
/// </summary>
|
|
public DateTimeOffset? VerifiedDate { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gibt an ob für den Benutzer eine automatische Auszahlung erfolgen soll
|
|
/// Das kann z.B. Wöchentlich sein. TODO: Besprechen wie das erfolgen soll
|
|
/// </summary>
|
|
[Required]
|
|
public bool AutoPayout { get; set; }
|
|
|
|
/// <summary>
|
|
/// Wurde der Benutzer anonymisiert?
|
|
/// </summary>
|
|
[Required]
|
|
public bool Anonymized { get; set; }
|
|
|
|
/// <summary>
|
|
/// Wann wurde der Benutzer anonymisiert?
|
|
/// </summary>
|
|
public DateTimeOffset? AnonymizedDate { 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 "AppUsers";
|
|
}
|
|
|
|
public AuditableOptions Options()
|
|
{
|
|
return AuditableOptions.Create | AuditableOptions.Edit | AuditableOptions.Delete;
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|