using Application.Abstractions.Messaging; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; namespace Admin.Pages.Config.Payment; public class IndexModel(IMediator mediator) : PageModel { [BindProperty] public InputModel Input { get; set; } = new(); /// 저장된 키 존재 여부 — 화면에는 키 원문/암호문을 노출하지 않고 placeholder 로만 표시 public GetConfig.Response.TossConfigDto KeyState { get; set; } = new(); public async Task OnGetAsync(CancellationToken ct) { var config = await mediator.Send(new GetConfig.Query(), ct); if (config is not null) { Input = InputModel.From(config); KeyState = config.Toss; } } public async Task OnPostAsync(CancellationToken ct) { if (!ModelState.IsValid) { var config = await mediator.Send(new GetConfig.Query(), ct); if (config is not null) { KeyState = config.Toss; } return Page(); } await mediator.Send(Input.ToCommand(), ct); TempData["SuccessMessage"] = "저장되었습니다."; return RedirectToPage(); } public sealed class InputModel { public UpdateConfig.Request.TossConfigDto Toss { get; set; } = new(); public static InputModel From(GetConfig.Response config) { var req = UpdateConfig.Request.From(config); return new() { Toss = req.Toss ?? new() }; } public UpdateConfig.Command ToCommand() { return new( Toss: Toss ); } } }