namespace IOL.GreatOffice.Api.Data.Dtos;
///
/// Represents a user archive as it is provided to users.
///
public class UserArchiveDto
{
///
public UserArchiveDto(User user) {
Meta = new MetaDto {
GeneratedAt = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ")
};
User = new UserDto(user);
Entries = new List();
}
///
/// Metadata for the user archive.
///
public MetaDto Meta { get; }
///
/// Relevant user data for the archive.
///
public UserDto User { get; }
///
/// List of entries that the user has created.
///
public List Entries { get; }
public void CountEntries() {
Meta.EntryCount = Entries.Count;
}
///
/// Represents a time entry in the data archive.
///
public class EntryDto
{
public string CreatedAt { get; init; }
[JsonIgnore]
public DateTime StartDateTime { get; init; }
///
/// ISO 8601 string of the UTC date the time entry started.
///
public string Start => StartDateTime.ToString("yyyy-MM-ddTHH:mm:ssZ");
[JsonIgnore]
public DateTime StopDateTime { get; init; }
///
/// ISO 8601 string of the UTC date the time entry stopped.
///
public string Stop => StopDateTime.ToString("yyyy-MM-ddTHH:mm:ssZ");
///
/// Total amount of minutes elapsed from start to stop on this time entry.
///
public double Minutes => StopDateTime.Subtract(StartDateTime).TotalMinutes;
public string Description { get; init; }
///
/// Archive spesific category for this time entry.
///
public CategoryDto Category { get; init; }
///
/// Archive spesific list of labels for this time entry.
///
public List Labels { get; init; }
}
///
/// Time entry category as it is written to the user archive.
///
public class CategoryDto
{
public string Name { get; init; }
public string Color { get; init; }
}
///
/// Time entry label as it is written to the user archive.
///
public class LabelDto
{
public string Name { get; init; }
public string Color { get; init; }
}
///
/// Represents the user who this archive's data is based on.
///
public class UserDto
{
///
public UserDto(User user) {
Username = user.Username;
CreatedAt = user.CreatedAt;
}
///
/// UTC date this user was created.
///
public DateTime CreatedAt { get; }
public string Username { get; }
}
///
/// Represents the meta object which contains metdata for this archive.
///
public class MetaDto
{
///
/// ISO 8601 UTC date string for when this archive was created.
///
public string GeneratedAt { get; init; }
///
/// Amount of entries in the archive.
///
public int EntryCount { get; set; }
}
}