61 lines
2.5 KiB
Markdown
61 lines
2.5 KiB
Markdown
# web-admin
|
||
|
||
Next.js 15 App Router + shadcn/ui (стиль `new-york`, base `neutral`) + Recharts + TanStack Query.
|
||
|
||
Порт: **3001** (3000 занят `hr_v2_next`).
|
||
|
||
## Запуск
|
||
|
||
```bash
|
||
pnpm --filter=@reception/web-admin dev
|
||
# → http://localhost:3001
|
||
```
|
||
|
||
Логин: dev-юзеры из `packages/db/prisma/seed.ts`:
|
||
- `senior@local / senior123` — Старший администратор (видит Enrollment, Пациенты)
|
||
- `manager@local / manager123` — Управляющий (Дашборд, Пациенты)
|
||
- `admin@local / admin123` — Админ системы (Аудит, Пациенты)
|
||
- `security@local / security123` — Безопасность (Инциденты)
|
||
|
||
## Структура
|
||
|
||
```
|
||
src/
|
||
app/
|
||
layout.tsx # root layout с ThemeProvider + Toaster
|
||
page.tsx # redirect по роли
|
||
login/page.tsx # вход
|
||
(authed)/
|
||
layout.tsx # серверный гард + AppShell
|
||
dashboard/page.tsx # Управляющий
|
||
enrollment/page.tsx # Старший администратор (M10)
|
||
patients/ # M11
|
||
incidents/page.tsx # Безопасность (заглушка)
|
||
audit/page.tsx # Админ системы (M11)
|
||
components/
|
||
app-shell.tsx # сайдбар + топбар (фильтр nav по роли)
|
||
login-form.tsx # форма входа
|
||
theme-provider.tsx # next-themes
|
||
ui/ # shadcn компоненты
|
||
lib/
|
||
auth.ts # серверные actions: login/logout/getCurrentUser
|
||
api.ts # серверный fetch с проксированием cookies
|
||
utils.ts # cn, formatDateTime, formatDuration
|
||
middleware.ts # редирект на /login если нет access_token
|
||
```
|
||
|
||
## Эндпоинты apps/api, используемые в web-admin
|
||
|
||
| Метод | Путь | Где |
|
||
|---|---|---|
|
||
| `POST` | `/auth/login` | login form (server action) |
|
||
| `POST` | `/auth/logout` | header logout (server action) |
|
||
| `GET` | `/auth/me` | `getCurrentUser()` |
|
||
| `GET` | `/tracks?status=UNMATCHED` | /enrollment (M10) |
|
||
| `GET` | `/polimed/appointments?date=...` | /enrollment (M10) |
|
||
| `POST` | `/enrollment` | /enrollment submit (M10) |
|
||
| `GET` | `/patients` | /patients (M11) |
|
||
| `GET` | `/patients/:id/visits` | /patients/:id (M11) |
|
||
| `POST` | `/consents/:patientId/revoke` | /patients revoke (M11) |
|
||
| `GET` | `/audit/biometry` | /audit (M11) |
|