namespace LittleShop.DTOs;
///
/// Complete customer data export for GDPR "Right to Data Portability" compliance.
/// Contains all personal data stored about a customer.
///
public class CustomerDataExportDto
{
// Customer Profile
public Guid CustomerId { get; set; }
public long TelegramUserId { get; set; }
public string TelegramUsername { get; set; } = string.Empty;
public string TelegramDisplayName { get; set; } = string.Empty;
public string TelegramFirstName { get; set; } = string.Empty;
public string TelegramLastName { get; set; } = string.Empty;
public string? Email { get; set; }
public string? PhoneNumber { get; set; }
// Preferences
public bool AllowMarketing { get; set; }
public bool AllowOrderUpdates { get; set; }
public string Language { get; set; } = string.Empty;
public string Timezone { get; set; } = string.Empty;
// Metrics
public int TotalOrders { get; set; }
public decimal TotalSpent { get; set; }
public decimal AverageOrderValue { get; set; }
public DateTime? FirstOrderDate { get; set; }
public DateTime? LastOrderDate { get; set; }
// Account Status
public bool IsBlocked { get; set; }
public string? BlockReason { get; set; }
public int RiskScore { get; set; }
public string? CustomerNotes { get; set; }
// Timestamps
public DateTime CreatedAt { get; set; }
public DateTime UpdatedAt { get; set; }
public DateTime LastActiveAt { get; set; }
public DateTime? DataRetentionDate { get; set; }
// Related Data
public List Orders { get; set; } = new();
public List Messages { get; set; } = new();
public List Reviews { get; set; } = new();
}
///
/// Order data included in customer export
///
public class CustomerOrderExportDto
{
public Guid OrderId { get; set; }
public string Status { get; set; } = string.Empty;
public decimal TotalAmount { get; set; }
public string Currency { get; set; } = string.Empty;
public DateTime OrderDate { get; set; }
// Shipping Information
public string ShippingName { get; set; } = string.Empty;
public string ShippingAddress { get; set; } = string.Empty;
public string ShippingCity { get; set; } = string.Empty;
public string ShippingPostCode { get; set; } = string.Empty;
public string ShippingCountry { get; set; } = string.Empty;
// Tracking
public string? TrackingNumber { get; set; }
public DateTime? EstimatedDeliveryDate { get; set; }
public DateTime? ActualDeliveryDate { get; set; }
public string? Notes { get; set; }
// Order Items
public List Items { get; set; } = new();
}
///
/// Order item data included in customer export
///
public class CustomerOrderItemExportDto
{
public string ProductName { get; set; } = string.Empty;
public string? VariantName { get; set; }
public int Quantity { get; set; }
public decimal UnitPrice { get; set; }
public decimal TotalPrice { get; set; }
}
///
/// Message data included in customer export
///
public class CustomerMessageExportDto
{
public DateTime SentAt { get; set; }
public string MessageType { get; set; } = string.Empty;
public string Content { get; set; } = string.Empty;
public bool WasRead { get; set; }
public DateTime? ReadAt { get; set; }
}
///
/// Review data included in customer export
///
public class CustomerReviewExportDto
{
public Guid ProductId { get; set; }
public string ProductName { get; set; } = string.Empty;
public int Rating { get; set; }
public string? Comment { get; set; }
public DateTime CreatedAt { get; set; }
public bool IsApproved { get; set; }
public bool IsVerifiedPurchase { get; set; }
}