feat: implement QuestionBank CRUD with pagination and template query
- Add pagination support to findAll (page, limit query params) - Add findByTemplateId method to service - Add GET /by-template/:templateId endpoint to controller - Service already includes CRUD for QuestionBank and QuestionBankItem
This commit is contained in:
+118
@@ -0,0 +1,118 @@
|
||||
# AuraK V2 — Frontend (web)
|
||||
|
||||
A modern multi-tenant knowledge base and AI assistant platform built with React 19, Vite, and Tailwind CSS.
|
||||
|
||||
## 🏗️ Architecture
|
||||
|
||||
The frontend uses **React Router** for navigation with a clean role-based routing structure:
|
||||
|
||||
| Route | Access | Description |
|
||||
|-------|--------|-------------|
|
||||
| `/login` | Public | Password or API Key sign-in |
|
||||
| `/` | All users | Workspace overview |
|
||||
| `/chat` | All users | AI Chat with scope selection |
|
||||
| `/knowledge` | All users | Document (Knowledge Base) management |
|
||||
| `/notebooks` | All users | Notebooks and notes |
|
||||
| `/settings` | All users | Model and app settings |
|
||||
| `/admin` | TENANT_ADMIN+ | Team management, share approvals |
|
||||
| `/admin/tenants` | SUPER_ADMIN | Global tenant management |
|
||||
| `/admin/models` | TENANT_ADMIN+ | Model configuration |
|
||||
|
||||
## 🔐 Authentication
|
||||
|
||||
The app supports **two login methods**:
|
||||
1. **Password login** — POST to `/api/v1/auth/login`, receives an `apiKey` back
|
||||
2. **Direct API Key** — paste the API key directly
|
||||
|
||||
All API calls include `x-api-key: <key>` in the request headers automatically via `services/apiClient.ts`.
|
||||
|
||||
## 🛠️ Tech Stack
|
||||
|
||||
- **React 19 + TypeScript**
|
||||
- **Vite** (dev server + build)
|
||||
- **TailwindCSS v3** (styling)
|
||||
- **React Router v6** (routing)
|
||||
- **framer-motion** (animations)
|
||||
- **Lucide React** (icons)
|
||||
- **clsx + tailwind-merge** (`cn()` utility)
|
||||
|
||||
## 🚀 Quick Start
|
||||
|
||||
### 1. Install dependencies
|
||||
```bash
|
||||
cd web
|
||||
yarn install
|
||||
```
|
||||
|
||||
### 2. Configure environment
|
||||
Copy `.env.example` to `.env` and set the backend URL if needed:
|
||||
```
|
||||
VITE_API_BASE_URL=http://localhost:13000
|
||||
```
|
||||
|
||||
The Vite dev server proxies `/api/*` to `http://localhost:13000` by default (see `vite.config.ts`).
|
||||
|
||||
### 3. Start the dev server
|
||||
```bash
|
||||
yarn dev
|
||||
# → http://localhost:13001
|
||||
```
|
||||
|
||||
### 4. Build for production
|
||||
```bash
|
||||
yarn build
|
||||
# Output: dist/
|
||||
```
|
||||
|
||||
## 📁 Project Structure
|
||||
|
||||
```
|
||||
web/
|
||||
├── index.tsx # App root — BrowserRouter + all routes
|
||||
├── index.html
|
||||
├── src/
|
||||
│ ├── contexts/
|
||||
│ │ └── AuthContext.tsx # User auth state (apiKey, user, role)
|
||||
│ ├── components/
|
||||
│ │ └── layouts/
|
||||
│ │ ├── WorkspaceLayout.tsx # Sidebar + header for main workspace
|
||||
│ │ └── AdminLayout.tsx # Admin console layout
|
||||
│ ├── pages/
|
||||
│ │ ├── auth/
|
||||
│ │ │ └── Login.tsx # Dual-mode login (password + API key)
|
||||
│ │ ├── workspace/
|
||||
│ │ │ ├── ChatPage.tsx
|
||||
│ │ │ ├── KnowledgePage.tsx
|
||||
│ │ │ ├── NotebooksPage.tsx
|
||||
│ │ │ └── SettingsPage.tsx
|
||||
│ │ └── admin/
|
||||
│ │ ├── SuperAdminPage.tsx # Tenant management (SUPER_ADMIN)
|
||||
│ │ └── TenantAdminPage.tsx # Team management (TENANT_ADMIN)
|
||||
│ └── utils/
|
||||
│ └── cn.ts # clsx + twMerge helper
|
||||
├── components/ # Legacy rich view components (still used)
|
||||
│ └── views/
|
||||
│ ├── ChatView.tsx
|
||||
│ ├── KnowledgeBaseView.tsx
|
||||
│ ├── NotebooksView.tsx
|
||||
│ └── SettingsView.tsx
|
||||
└── services/ # API service layer
|
||||
├── apiClient.ts # Base HTTP client (auto-injects x-api-key)
|
||||
├── chatService.ts # Streaming chat
|
||||
├── knowledgeBaseService.ts
|
||||
└── ...
|
||||
```
|
||||
|
||||
## 🔑 Default Credentials (Development)
|
||||
|
||||
After running the backend migration, a default super admin is seeded:
|
||||
- **Email**: `admin@system.local`
|
||||
- **Password**: `admin123`
|
||||
|
||||
The `/api/v1/auth/api-key` endpoint returns your API key after login.
|
||||
|
||||
## ⚠️ Troubleshooting
|
||||
|
||||
- **401 errors**: Your session expired. You will be redirected to `/login` automatically.
|
||||
- **Upload fails**: Ensure the backend is running and the `uploads/` directory is writable.
|
||||
- **No AI response**: Configure at least one LLM model in `/settings` or `/admin/models`.
|
||||
Reference in New Issue
Block a user