feat(wizard): add WizardPayload with AOT JSON source-gen

This commit is contained in:
2026-06-04 07:59:13 +03:00
parent d5fdc19016
commit 2c7495cd8d
@@ -0,0 +1,56 @@
using System;
using System.Collections.Generic;
using System.Text.Json.Serialization;
namespace GmRelay.Shared.Features.Sessions.CreateSession.Wizard;
public enum WizardCreationType { Single, Pool }
public enum WizardVisibility { Public, Club, Members }
public sealed class WizardSlotInput
{
public DateTimeOffset ScheduledAt { get; set; }
public int MaxPlayers { get; set; }
public bool Waitlist { get; set; }
}
public sealed class WizardSingleInput
{
public DateTimeOffset? ScheduledAt { get; set; }
public int? MaxPlayers { get; set; }
}
public sealed class WizardPayload
{
public WizardCreationType? Type { get; set; }
public string? Title { get; set; }
public string? Description { get; set; }
public string? ImageFileId { get; set; }
public string? ImageUrl { get; set; }
public string? System { get; set; }
public int? DurationMinutes { get; set; }
public WizardVisibility? Visibility { get; set; }
public Guid? ClubId { get; set; }
public bool? PublishInShowcase { get; set; }
public bool? Waitlist { get; set; }
public WizardSingleInput? Single { get; set; }
public WizardPoolInput? Pool { get; set; }
}
public sealed class WizardPoolInput
{
public List<WizardSlotInput> Slots { get; set; } = new();
}
[JsonSerializable(typeof(WizardPayload))]
[JsonSerializable(typeof(WizardSingleInput))]
[JsonSerializable(typeof(WizardPoolInput))]
[JsonSerializable(typeof(WizardSlotInput))]
[JsonSourceGenerationOptions(
WriteIndented = false,
PropertyNamingPolicy = JsonKnownNamingPolicy.CamelCase,
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull)]
public partial class WizardPayloadJsonContext : JsonSerializerContext
{
}