using Koogle.Domain.Enums;
namespace Koogle.Application.DTOs;
///
/// Data transfer object representing a game day.
///
public record DayDto
{
///
/// Unique identifier of the day.
///
public Guid Id { get; init; }
///
/// Date of the game day.
///
public DateTime PostDate { get; init; }
///
/// Current status of the day (New, Started, Postponed, Closed).
///
public DayStatus Status { get; init; }
///
/// Unique identifier of the club this day belongs to.
///
public Guid ClubId { get; init; }
///
/// Name of the club this day belongs to.
///
public string? ClubName { get; init; }
///
/// Number of participants on this day.
///
public int ParticipantCount { get; init; }
///
/// List of participants on this day.
///
public List Participants { get; init; } = [];
///
/// Date and time when the day was created.
///
public DateTime CreatedAt { get; init; }
///
/// Date and time when the day was last modified.
///
public DateTime? ModifiedAt { get; init; }
}
///
/// Lightweight data transfer object for day summaries.
///
public record DaySummaryDto
{
///
/// Unique identifier of the day.
///
public Guid Id { get; init; }
///
/// Date of the game day.
///
public DateTime PostDate { get; init; }
///
/// Current status of the day.
///
public DayStatus Status { get; init; }
///
/// Number of participants on this day.
///
public int ParticipantCount { get; init; }
}
///
/// Data transfer object for creating a new game day.
///
public record CreateDayDto
{
///
/// Date of the game day to create.
///
public DateTime PostDate { get; init; } = DateTime.Today;
///
/// List of person IDs to add as initial participants.
///
public List ParticipantIds { get; init; } = [];
}
///
/// Data transfer object for updating an existing game day.
///
public record UpdateDayDto
{
///
/// Unique identifier of the day to update.
///
public Guid Id { get; init; }
///
/// Updated date of the game day.
///
public DateTime PostDate { get; init; }
///
/// Updated status of the day.
///
public DayStatus Status { get; init; }
}
///
/// Data transfer object representing a participant on a game day.
///
public record DayParticipantDto
{
///
/// Unique identifier of the person.
///
public Guid PersonId { get; init; }
///
/// Name of the person.
///
public string PersonName { get; init; } = string.Empty;
///
/// Status indicating whether the person is a member or guest.
///
public PersonStatus PersonStatus { get; init; }
}
///
/// Data transfer object for adding a participant to a game day.
///
public record AddDayParticipantDto
{
///
/// Unique identifier of the day.
///
public Guid DayId { get; init; }
///
/// Unique identifier of the person to add.
///
public Guid PersonId { get; init; }
}
///
/// Data transfer object for removing a participant from a game day.
///
public record RemoveDayParticipantDto
{
///
/// Unique identifier of the day.
///
public Guid DayId { get; init; }
///
/// Unique identifier of the person to remove.
///
public Guid PersonId { get; init; }
}
///
/// Data transfer object for filtering game days.
///
public record DayFilterDto
{
///
/// Filter by year.
///
public int? Year { get; init; }
///
/// Filter by status.
///
public DayStatus? Status { get; init; }
}