| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- @page "{id:int}"
- @using Domain.Entities.Developers.ValueObject
- @model Admin.Pages.Developers.Apps.DetailModel
- @{
- ViewData["Title"] = "개발자 앱 상세";
- }
- <div class="container">
- <h3>@ViewData["Title"]</h3>
- <hr />
- <partial name="_StatusMessage" />
- @if (Model.App == null)
- {
- <div class="alert alert-warning">앱이 존재하지 않습니다.</div>
- return;
- }
- <div class="row">
- <div class="col-12 col-md-8">
- <table class="table table-bordered">
- <tr><th style="width:160px">ID</th><td class="text-start">@Model.App.ID</td></tr>
- <tr><th>이름</th><td class="text-start">@Model.App.Name</td></tr>
- <tr><th>설명</th><td class="text-start">@(Model.App.Description ?? "-")</td></tr>
- <tr><th>홈페이지</th><td class="text-start"><a href="@Model.App.HomepageUrl" target="_blank">@(Model.App.HomepageUrl ?? "-")</a></td></tr>
- <tr><th>소유자</th><td class="text-start">@Model.App.Owner?.Email (@(Model.App.Owner?.Name ?? "-"))</td></tr>
- <tr><th>상태</th><td class="text-start"><span class="badge bg-secondary">@Model.App.Status</span></td></tr>
- <tr><th>요청 Scope</th><td class="text-start">@string.Join(", ", Model.Scopes)</td></tr>
- <tr><th>생성일</th><td class="text-start">@Model.App.CreatedAt.ToString("yyyy-MM-dd HH:mm")</td></tr>
- <tr><th>승인일</th><td class="text-start">@(Model.App.ApprovedAt?.ToString("yyyy-MM-dd HH:mm") ?? "-")</td></tr>
- <tr><th>정지일</th><td class="text-start">@(Model.App.SuspendedAt?.ToString("yyyy-MM-dd HH:mm") ?? "-")</td></tr>
- </table>
- </div>
- <div class="col-12 col-md-4">
- <form method="post" class="mb-3">
- @if (Model.App.Status != ApplicationStatus.Active)
- {
- <button type="submit" asp-page-handler="Approve" class="btn btn-success w-100 mb-2">승인</button>
- }
- @if (Model.App.Status != ApplicationStatus.Suspended)
- {
- <button type="submit" asp-page-handler="Suspend" class="btn btn-warning w-100 mb-2">정지</button>
- }
- </form>
- <h5>속도 제한</h5>
- <form method="post">
- <div class="input-group">
- <input type="number" name="LimitPerMinute" value="@Model.LimitPerMinute" min="1" max="100000" class="form-control" />
- <span class="input-group-text">/분</span>
- <button type="submit" asp-page-handler="OverrideRateLimit" class="btn btn-primary">적용</button>
- </div>
- <small class="text-muted">기본 60/분. 덮어쓰기 값만 저장됩니다.</small>
- </form>
- </div>
- </div>
- <hr />
- <h4>인증 정보 <small>(Client ID / Secret)</small></h4>
- <table class="table table-bordered table-hover">
- <thead>
- <tr>
- <th>ClientID</th>
- <th>SecretHint</th>
- <th>상태</th>
- <th>생성</th>
- <th>최근 사용</th>
- </tr>
- </thead>
- <tbody>
- @foreach (var c in Model.Credentials)
- {
- <tr>
- <td><code>@c.ClientID</code></td>
- <td>****@c.SecretHint</td>
- <td>@c.Status</td>
- <td>@c.CreatedAt.ToString("yyyy-MM-dd HH:mm")</td>
- <td>@(c.LastUsedAt?.ToString("yyyy-MM-dd HH:mm") ?? "-")</td>
- </tr>
- }
- </tbody>
- </table>
- <hr/>
- <div class="d-flex justify-content-center">
- <a asp-page="/Developers/Apps/Index" class="btn btn-secondary">목록으로</a>
- </div>
- </div>
|