| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- using Application.Abstractions.Data;
- using SharedKernel.Helpers;
- using Microsoft.AspNetCore.Mvc;
- using Microsoft.AspNetCore.Mvc.RazorPages;
- using Microsoft.EntityFrameworkCore;
- using System.ComponentModel;
- using System.ComponentModel.DataAnnotations;
- namespace Admin.Pages.Paper.Accounts;
- // 모의투자 계좌 모니터 (읽기 전용) — d4 §⑤ /Paper/Accounts
- public class IndexModel(IAppDbContext db) : PageModel
- {
- [BindProperty(SupportsGet = true)]
- public QueryParams Query { get; set; } = new();
- public sealed class QueryParams
- {
- [Range(1, int.MaxValue)]
- public int PageNum { get; set; } = 1;
- [Range(1, 100)]
- public ushort PerPage { get; set; } = 20;
- // 1 = 회원 SID, 2 = 닉네임
- [DisplayName("검색 조건")]
- [Range(1, 2, ErrorMessage = "{0}이(가) 올바르지 않습니다.")]
- public int? Search { get; set; }
- [DisplayName("검색어")]
- [MaxLength(100)]
- public string? Keyword { get; set; }
- }
- public int Total { get; set; }
- public List<(
- int Num,
- int ID,
- string SID,
- string? Nickname,
- decimal Token,
- decimal ReservedToken,
- decimal Units,
- decimal TotalDeposited,
- decimal TotalWithdrawn,
- string CreatedAt
- )> List { get; set; } = [];
- public Pagination? Pagination { get; set; }
- public async Task OnGetAsync(CancellationToken ct)
- {
- if (!ModelState.IsValid)
- {
- return;
- }
- var query = from a in db.PaperAccount.AsNoTracking()
- join m in db.Member.AsNoTracking() on a.MemberID equals m.ID
- select new
- {
- a.ID,
- m.SID,
- Nickname = m.Name,
- a.Token,
- a.ReservedToken,
- a.Units,
- a.TotalDeposited,
- a.TotalWithdrawn,
- a.CreatedAt
- };
- if (!string.IsNullOrWhiteSpace(Query.Keyword))
- {
- var keyword = Query.Keyword.Trim();
- query = Query.Search switch
- {
- 1 => query.Where(c => c.SID == keyword),
- 2 => query.Where(c => c.Nickname != null && c.Nickname.Contains(keyword)),
- _ => query
- };
- }
- Total = await query.CountAsync(ct);
- var skip = (Query.PageNum - 1) * Query.PerPage;
- var rows = await query.OrderByDescending(c => c.ID).Skip(skip).Take(Query.PerPage).ToListAsync(ct);
- var num = skip + 1;
- List = [.. rows.Select(c => (
- Num: num++,
- c.ID,
- c.SID,
- c.Nickname,
- c.Token,
- c.ReservedToken,
- c.Units,
- c.TotalDeposited,
- c.TotalWithdrawn,
- CreatedAt: c.CreatedAt.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss")
- ))];
- Pagination = new Pagination(Total, Query.PageNum, Query.PerPage);
- }
- }
|