244 lines
4.7 KiB
Markdown
244 lines
4.7 KiB
Markdown
|
|
# User Management API
|
||
|
|
|
||
|
|
## Overview
|
||
|
|
Create a complete User CRUD API for the user management page.
|
||
|
|
|
||
|
|
## Required Endpoints
|
||
|
|
|
||
|
|
| Method | Endpoint | Description |
|
||
|
|
|--------|----------|-------------|
|
||
|
|
| GET | /api/users | List all users (with pagination) |
|
||
|
|
| GET | /api/users/(:num) | Get single user by ID |
|
||
|
|
| POST | /api/users | Create new user |
|
||
|
|
| PATCH | /api/users | Update existing user |
|
||
|
|
| DELETE | /api/users/(:num) | Delete user |
|
||
|
|
|
||
|
|
## Database Schema
|
||
|
|
|
||
|
|
The User model should use the existing `users` table (or create if doesn't exist):
|
||
|
|
|
||
|
|
```sql
|
||
|
|
-- If table doesn't exist, create it:
|
||
|
|
CREATE TABLE IF NOT EXISTS users (
|
||
|
|
UserID INT AUTO_INCREMENT PRIMARY KEY,
|
||
|
|
Username VARCHAR(50) NOT NULL UNIQUE,
|
||
|
|
Email VARCHAR(100) NOT NULL,
|
||
|
|
Name VARCHAR(100),
|
||
|
|
Role VARCHAR(50),
|
||
|
|
Department VARCHAR(100),
|
||
|
|
IsActive BOOLEAN DEFAULT TRUE,
|
||
|
|
CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
UpdatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
|
|
DelDate TIMESTAMP NULL,
|
||
|
|
INDEX idx_username (Username),
|
||
|
|
INDEX idx_email (Email)
|
||
|
|
);
|
||
|
|
```
|
||
|
|
|
||
|
|
## User Fields
|
||
|
|
|
||
|
|
### Required Fields
|
||
|
|
- `Username` - Unique login username
|
||
|
|
- `Email` - User email address
|
||
|
|
|
||
|
|
### Optional Fields
|
||
|
|
- `Name` - Full name
|
||
|
|
- `Role` - User role (admin, technician, doctor, etc.)
|
||
|
|
- `Department` - Department name
|
||
|
|
- `IsActive` - Whether user is active
|
||
|
|
|
||
|
|
## API Specifications
|
||
|
|
|
||
|
|
### 1. List Users
|
||
|
|
|
||
|
|
**Request:**
|
||
|
|
```http
|
||
|
|
GET /api/users?page=1&per_page=20&search=john HTTP/1.1
|
||
|
|
```
|
||
|
|
|
||
|
|
**Query Parameters:**
|
||
|
|
- `page` - Page number (default: 1)
|
||
|
|
- `per_page` - Items per page (default: 20)
|
||
|
|
- `search` - Search term for username/email/name (optional)
|
||
|
|
|
||
|
|
**Success Response (200):**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"status": "success",
|
||
|
|
"message": "Users retrieved successfully",
|
||
|
|
"data": {
|
||
|
|
"users": [
|
||
|
|
{
|
||
|
|
"UserID": 1,
|
||
|
|
"Username": "john.doe",
|
||
|
|
"Email": "john@hospital.com",
|
||
|
|
"Name": "John Doe",
|
||
|
|
"Role": "technician",
|
||
|
|
"Department": "Laboratory",
|
||
|
|
"IsActive": true,
|
||
|
|
"CreatedAt": "2024-01-15 10:30:00"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"pagination": {
|
||
|
|
"current_page": 1,
|
||
|
|
"per_page": 20,
|
||
|
|
"total": 150,
|
||
|
|
"total_pages": 8
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. Get Single User
|
||
|
|
|
||
|
|
**Request:**
|
||
|
|
```http
|
||
|
|
GET /api/users/1 HTTP/1.1
|
||
|
|
```
|
||
|
|
|
||
|
|
**Success Response (200):**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"status": "success",
|
||
|
|
"message": "User retrieved successfully",
|
||
|
|
"data": {
|
||
|
|
"UserID": 1,
|
||
|
|
"Username": "john.doe",
|
||
|
|
"Email": "john@hospital.com",
|
||
|
|
"Name": "John Doe",
|
||
|
|
"Role": "technician",
|
||
|
|
"Department": "Laboratory",
|
||
|
|
"IsActive": true,
|
||
|
|
"CreatedAt": "2024-01-15 10:30:00",
|
||
|
|
"UpdatedAt": "2024-01-15 10:30:00"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**Not Found Response (404):**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"status": "failed",
|
||
|
|
"message": "User not found",
|
||
|
|
"data": null
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. Create User
|
||
|
|
|
||
|
|
**Request:**
|
||
|
|
```http
|
||
|
|
POST /api/users HTTP/1.1
|
||
|
|
Content-Type: application/json
|
||
|
|
|
||
|
|
{
|
||
|
|
"Username": "jane.smith",
|
||
|
|
"Email": "jane@hospital.com",
|
||
|
|
"Name": "Jane Smith",
|
||
|
|
"Role": "doctor",
|
||
|
|
"Department": "Pathology"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**Success Response (201):**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"status": "success",
|
||
|
|
"message": "User created successfully",
|
||
|
|
"data": {
|
||
|
|
"UserID": 2,
|
||
|
|
"Username": "jane.smith",
|
||
|
|
"Email": "jane@hospital.com"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**Validation Error Response (400):**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"status": "failed",
|
||
|
|
"message": "Validation failed",
|
||
|
|
"data": {
|
||
|
|
"Username": "Username is required",
|
||
|
|
"Email": "Email is required"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### 4. Update User
|
||
|
|
|
||
|
|
**Request:**
|
||
|
|
```http
|
||
|
|
PATCH /api/users HTTP/1.1
|
||
|
|
Content-Type: application/json
|
||
|
|
|
||
|
|
{
|
||
|
|
"UserID": 1,
|
||
|
|
"Name": "John Doe Updated",
|
||
|
|
"Role": "senior_technician"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**Success Response (200):**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"status": "success",
|
||
|
|
"message": "User updated successfully",
|
||
|
|
"data": {
|
||
|
|
"UserID": 1,
|
||
|
|
"Name": "John Doe Updated",
|
||
|
|
"Role": "senior_technician"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### 5. Delete User
|
||
|
|
|
||
|
|
**Request:**
|
||
|
|
```http
|
||
|
|
DELETE /api/users/1 HTTP/1.1
|
||
|
|
```
|
||
|
|
|
||
|
|
**Success Response (200):**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"status": "success",
|
||
|
|
"message": "User deleted successfully",
|
||
|
|
"data": {
|
||
|
|
"UserID": 1
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## Implementation Files
|
||
|
|
|
||
|
|
See `code-templates/` folder for ready-to-use code:
|
||
|
|
- `UserController.php` - Complete controller implementation
|
||
|
|
- `UserModel.php` - Database model
|
||
|
|
- `Routes-additions.php` - Routes to add to Routes.php
|
||
|
|
|
||
|
|
## Testing
|
||
|
|
|
||
|
|
After implementation, test with:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# List users
|
||
|
|
curl http://localhost:8000/api/users
|
||
|
|
|
||
|
|
# Get single user
|
||
|
|
curl http://localhost:8000/api/users/1
|
||
|
|
|
||
|
|
# Create user
|
||
|
|
curl -X POST http://localhost:8000/api/users \
|
||
|
|
-H "Content-Type: application/json" \
|
||
|
|
-d '{"Username":"test","Email":"test@test.com","Name":"Test User"}'
|
||
|
|
|
||
|
|
# Update user
|
||
|
|
curl -X PATCH http://localhost:8000/api/users \
|
||
|
|
-H "Content-Type: application/json" \
|
||
|
|
-d '{"UserID":1,"Name":"Updated Name"}'
|
||
|
|
|
||
|
|
# Delete user
|
||
|
|
curl -X DELETE http://localhost:8000/api/users/1
|
||
|
|
```
|