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
);
}
}
}