namespace GmRelay.Web.Services.Portfolio; public sealed record PublicPortfolioCard( string Slug, string Title, string CoverPath, string? System, string? Format, DateTime CompletedAt); public sealed record PublicPortfolioMaster(string Slug, string DisplayName); public sealed record PublicPortfolioReview( string AuthorDisplayName, string Body, DateTime CreatedAt); public sealed record PublicPortfolioGame( string Slug, string Title, string Description, string CoverPath, string? System, string? Format, DateTime CompletedAt, string? ClubName, string? ClubSlug, IReadOnlyList Masters, IReadOnlyList Reviews); public sealed record PortfolioGameSummary( Guid Id, Guid GroupId, string Title, string? PublicSlug, bool IsPublic, DateTime CompletedAt, int SessionCount, int MasterCount, int PendingReviewCount); public sealed record PortfolioSessionOption( Guid Id, string Title, DateTime ScheduledAt, bool Selected); public sealed record PortfolioMasterOption( Guid PlayerId, string DisplayName, bool Selected); public sealed record PortfolioReviewForModeration( Guid Id, string AuthorDisplayName, string Body, string ModerationStatus, DateTime CreatedAt); public sealed record PortfolioGameEditor( Guid Id, Guid GroupId, string Title, string? PublicSlug, string? Description, string? CoverPath, string? System, string? Format, DateTime CompletedAt, bool IsPublic, IReadOnlyList Sessions, IReadOnlyList Masters, IReadOnlyList Reviews); public sealed record PortfolioGameUpdate( string Title, string? PublicSlug, string? Description, string? System, string? Format, IReadOnlyList SessionIds, IReadOnlyList MasterPlayerIds); public enum PortfolioReviewSubmissionState { RequiresAuthentication, Ineligible, Eligible, AlreadySubmitted }