using System.ComponentModel.DataAnnotations; namespace LittleShop.DTOs; public class ReviewDto { public Guid Id { get; set; } public Guid ProductId { get; set; } public string ProductName { get; set; } = string.Empty; public Guid CustomerId { get; set; } public string CustomerDisplayName { get; set; } = string.Empty; public Guid OrderId { get; set; } public int Rating { get; set; } public string? Title { get; set; } public string? Comment { get; set; } public bool IsVerifiedPurchase { get; set; } public bool IsApproved { get; set; } public bool IsActive { get; set; } public DateTime CreatedAt { get; set; } public DateTime UpdatedAt { get; set; } public DateTime? ApprovedAt { get; set; } public string? ApprovedByUsername { get; set; } } public class CreateReviewDto { [Required] public Guid ProductId { get; set; } [Required] public Guid CustomerId { get; set; } [Required] public Guid OrderId { get; set; } [Required] [Range(1, 5, ErrorMessage = "Rating must be between 1 and 5 stars")] public int Rating { get; set; } [StringLength(100, ErrorMessage = "Title cannot exceed 100 characters")] public string? Title { get; set; } [StringLength(2000, ErrorMessage = "Comment cannot exceed 2000 characters")] public string? Comment { get; set; } } public class UpdateReviewDto { [Range(1, 5, ErrorMessage = "Rating must be between 1 and 5 stars")] public int? Rating { get; set; } [StringLength(100, ErrorMessage = "Title cannot exceed 100 characters")] public string? Title { get; set; } [StringLength(2000, ErrorMessage = "Comment cannot exceed 2000 characters")] public string? Comment { get; set; } public bool? IsApproved { get; set; } public bool? IsActive { get; set; } } public class ReviewSummaryDto { public Guid ProductId { get; set; } public string ProductName { get; set; } = string.Empty; public int TotalReviews { get; set; } public int ApprovedReviews { get; set; } public double AverageRating { get; set; } public int FiveStars { get; set; } public int FourStars { get; set; } public int ThreeStars { get; set; } public int TwoStars { get; set; } public int OneStar { get; set; } public DateTime? LatestReviewDate { get; set; } } public class CustomerReviewEligibilityDto { public Guid CustomerId { get; set; } public Guid ProductId { get; set; } public bool CanReview { get; set; } public string? Reason { get; set; } public List EligibleOrderIds { get; set; } = new(); public bool HasExistingReview { get; set; } public Guid? ExistingReviewId { get; set; } }