using Koogle.Domain.Enums;
namespace Koogle.Application.DTOs;
///
/// Data transfer object representing an expense template.
///
public record ExpenseDto
{
///
/// Unique identifier of the expense.
///
public Guid Id { get; init; }
///
/// Name of the expense.
///
public string Name { get; init; } = string.Empty;
///
/// Description of the expense.
///
public string Description { get; init; } = string.Empty;
///
/// Default price of the expense.
///
public decimal Price { get; init; }
///
/// Indicates if this expense should be shown as a quick-action button.
///
public bool IsOneClick { get; init; }
///
/// Indicates if this is an inverse expense (charged to all except one person).
///
public bool IsInverse { get; init; }
///
/// Indicates if the price can vary when assigned.
///
public bool IsVariable { get; init; }
///
/// Type of the expense (Monetary or Material).
///
public ExpenseType ExpenseType { get; init; }
///
/// Unique identifier of the club this expense belongs to.
///
public Guid ClubId { get; init; }
///
/// Date and time when the expense was created.
///
public DateTime CreatedAt { get; init; }
///
/// Date and time when the expense was last modified.
///
public DateTime? ModifiedAt { get; init; }
}
///
/// Data transfer object for creating a new expense template.
///
public record CreateExpenseDto
{
///
/// Name of the expense to create.
///
public string Name { get; init; } = string.Empty;
///
/// Description of the expense.
///
public string Description { get; init; } = string.Empty;
///
/// Default price of the expense.
///
public decimal Price { get; init; }
///
/// Indicates if this expense should be shown as a quick-action button.
///
public bool IsOneClick { get; init; }
///
/// Indicates if this is an inverse expense.
///
public bool IsInverse { get; init; }
///
/// Indicates if the price can vary when assigned.
///
public bool IsVariable { get; init; }
///
/// Type of the expense (Monetary or Material).
///
public ExpenseType ExpenseType { get; init; } = ExpenseType.Monetary;
}
///
/// Data transfer object for updating an existing expense template.
///
public record UpdateExpenseDto
{
///
/// Unique identifier of the expense to update.
///
public Guid Id { get; init; }
///
/// Updated name of the expense.
///
public string Name { get; init; } = string.Empty;
///
/// Updated description of the expense.
///
public string Description { get; init; } = string.Empty;
///
/// Updated default price.
///
public decimal Price { get; init; }
///
/// Updated one-click status.
///
public bool IsOneClick { get; init; }
///
/// Updated inverse expense status.
///
public bool IsInverse { get; init; }
///
/// Updated variable price status.
///
public bool IsVariable { get; init; }
///
/// Updated expense type.
///
public ExpenseType ExpenseType { get; init; }
}
///
/// Lightweight data transfer object for expense summaries.
///
public record ExpenseSummaryDto
{
///
/// Unique identifier of the expense.
///
public Guid Id { get; init; }
///
/// Name of the expense.
///
public string Name { get; init; } = string.Empty;
///
/// Default price of the expense.
///
public decimal Price { get; init; }
///
/// Indicates if this expense is shown as a quick-action button.
///
public bool IsOneClick { get; init; }
}