using System.Security.Claims; using Application.Abstractions.Data; using Domain.Entities.Developers; using MediatR; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.EntityFrameworkCore; namespace Admin.Pages.Developers.Accounts; public class DetailModel(IMediator mediator, IAppDbContext db) : PageModel { [BindProperty(SupportsGet = true)] public int ID { get; set; } public Developer? Dev { get; set; } public string? MemberEmail { get; set; } public string? MemberName { get; set; } [BindProperty] public string? Reason { get; set; } public async Task OnGetAsync(CancellationToken ct) { Dev = await db.Developer .Include(c => c.Member) .FirstOrDefaultAsync(c => c.ID == ID, ct); if (Dev is null) { return NotFound(); } MemberEmail = Dev.Member?.Email; MemberName = Dev.Member?.Name; return Page(); } private string CurrentAdminID() => User.FindFirstValue(ClaimTypes.NameIdentifier) ?? "system"; public async Task OnPostApproveAsync(CancellationToken ct) { var result = await mediator.Send(new Application.Features.Admin.Developers.Accounts.ApproveDeveloper.Command(ID, CurrentAdminID()), ct); if (result.IsSuccess) { TempData["SuccessMessage"] = "개발자 계정을 승인했습니다."; } else { TempData["ErrorMessages"] = result.Error.Description; } return RedirectToPage("/Developers/Accounts/Detail", new { ID }); } public async Task OnPostRejectAsync(CancellationToken ct) { var result = await mediator.Send(new Application.Features.Admin.Developers.Accounts.RejectDeveloper.Command(ID, CurrentAdminID(), Reason), ct); if (result.IsSuccess) { TempData["SuccessMessage"] = "개발자 계정을 거절 처리했습니다."; } else { TempData["ErrorMessages"] = result.Error.Description; } return RedirectToPage("/Developers/Accounts/Detail", new { ID }); } public async Task OnPostSuspendAsync(CancellationToken ct) { var result = await mediator.Send(new Application.Features.Admin.Developers.Accounts.SuspendDeveloper.Command(ID, CurrentAdminID(), Reason), ct); if (result.IsSuccess) { TempData["SuccessMessage"] = "개발자 계정을 정지 처리했습니다."; } else { TempData["ErrorMessages"] = result.Error.Description; } return RedirectToPage("/Developers/Accounts/Detail", new { ID }); } }