215 lines
5.5 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;
using gehGassiApp.Domain.Common;
namespace gehGassiApp.Domain.Walks
{
/// <summary>
/// Repräsentiert eine Antwort auf eine öffentliche Anfrage
/// </summary>
public class PublicWalkResponse : SyncEntity
{
private decimal _price;
private string _info;
private string _answer;
private PublicWalkResponseStatus _status;
private string _cancellationReason;
/// <summary>
/// Id der öffentlichen Anfrage
/// </summary>
[MaxLength(128)]
public string PublicWalkRequestId { get; set; }
/// <summary>
/// Id des App-Users / Walker
/// Ist eine AppUserId
/// </summary>
[MaxLength(128)]
public string DogWalkerId { get; set; }
/// <summary>
/// Preis den der Walker anbietet
/// </summary>
[Required]
public decimal Price
{
get => _price;
set
{
_price = value;
OnPropertyChanged();
}
}
/// <summary>
/// Zusatzinfo für das Angebot
/// </summary>
[MaxLength(500)]
public string Info
{
get => _info;
set
{
_info = value;
OnPropertyChanged();
}
}
/// <summary>
/// Optional: Antwort des Hundebesitzers
/// </summary>
[MaxLength(500)]
public string Answer
{
get => _answer;
set
{
_answer = value;
OnPropertyChanged();
}
}
/// <summary>
/// Status des Angebotes
/// </summary>
public PublicWalkResponseStatus Status
{
get => _status;
set
{
_status = value;
OnPropertyChanged();
}
}
/// <summary>
/// Grund für die Stornierung
/// </summary>
[MaxLength(500)]
public string CancellationReason
{
get => _cancellationReason;
set
{
_cancellationReason = value;
OnPropertyChanged();
}
}
/// <summary>
/// Wann wurde das Angebot erstellt?
/// </summary>
public DateTimeOffset Created { get; set; }
}
/// <summary>
/// Antwort auf eine öffentliche Anfrage mit Namen aufgelöst
/// </summary>
public class PublicWalkResponseWithNames : SyncEntityVw
{
/// <summary>
/// Id der öffentlichen Anfrage
/// </summary>
public string PublicWalkRequestId { get; set; }
/// <summary>
/// Id des App-Users / Walker
/// Ist eine AppUserId
/// </summary>
public string DogWalkerId { get; set; }
/// <summary>
/// Name des DogWalkers
/// </summary>
public string DogWalkerName { get; set; }
/// <summary>
/// Foto des DogWalkers
/// </summary>
public string DogWalkerPhoto { get; set; }
/// <summary>
/// Dogwalker verifiziert?
/// </summary>
public bool DogWalkerVerified { get; set; }
/// <summary>
/// Dogwalker blockiert?
/// </summary>
[NotMapped]
public bool DogWalkerBlocked { get; set; }
/// <summary>
/// Dogwalker gesperrt?
/// </summary>
[NotMapped]
public bool DogWalkerLocked { get; set; }
/// <summary>
/// Blockiert oder gesperrt
/// </summary>
[NotMapped]
public bool DogWalkerBlockedOrLocked => DogWalkerBlocked || DogWalkerLocked;
/// <summary>
/// Preis den der Walker anbietet
/// </summary>
[Required]
public decimal Price { get; set; }
/// <summary>
/// Zusatzinfo für das Angebot
/// </summary>
public string Info { get; set; }
/// <summary>
/// Optional: Antwort des Hundebesitzers
/// </summary>
public string Answer { get; set; }
/// <summary>
/// Status des Angebotes
/// </summary>
public PublicWalkResponseStatus Status { get; set; }
/// <summary>
/// Grund für die Stornierung
/// </summary>
public string CancellationReason { get; set; }
/// <summary>
/// Wann wurde das Angebot erstellt?
/// </summary>
public DateTimeOffset Created { get; set; }
/// <summary>
/// Vorname + Nachname erster Buchstabe + Punkt, oder nur Vorname wenn kein Nachname
/// </summary>
[NotMapped]
public string DogWalkerFullNameShort
{
get
{
if (!string.IsNullOrWhiteSpace(DogWalkerName))
{
var parts = DogWalkerName.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;
}
}
}
}