# Equipment Planner API Testing Guide

## Base URL
```
http://localhost:3000/api/v1/equipment-planner
```

---

## 1. Create Single Record (Draft)

**Endpoint:** `POST /create-equipment-planner`

**Request Body:**
```json
{
  "eqp_id": "G2-RMG",
  "eqp_activity": "Mixing Operation",
  "eqp_plan_type": "operation",
  "start_date": "2026-01-30 08:00:00",
  "end_date": "2026-01-30 12:00:00",
  "product_name": "Product ABC",
  "dispensing_request_id": "BATCH001"
}
```

**Expected Response:**
```json
{
  "success": true,
  "message": "Equipment planner created successfully (draft)",
  "data": {
    "id": 1,
    "eqp_id": "G2-RMG",
    "eqp_activity": "Mixing Operation",
    "eqp_plan_type": "operation",
    "status": "draft",
    "plan_version": 0,
    ...
  }
}
```

---

## 2. Bulk Create (Multiple Records)

**Endpoint:** `POST /create-equipment-planner`

**Request Body:**
```json
[
  {
    "eqp_id": "G2-RMG",
    "eqp_activity": "Mixing",
    "eqp_plan_type": "operation",
    "start_date": "2026-01-30 08:00:00",
    "end_date": "2026-01-30 12:00:00",
    "product_name": "Product A",
    "dispensing_request_id": "BATCH001"
  },
  {
    "eqp_id": "G2-FBD",
    "eqp_activity": "Drying",
    "eqp_plan_type": "operation",
    "start_date": "2026-01-30 13:00:00",
    "end_date": "2026-01-30 17:00:00",
    "product_name": "Product A",
    "dispensing_request_id": "BATCH001"
  },
  {
    "eqp_id": "G2-COATING",
    "eqp_activity": "Type A Cleaning",
    "eqp_plan_type": "cleaning",
    "start_date": "2026-01-30 18:00:00",
    "end_date": "2026-01-30 20:00:00"
  }
]
```

**Expected Response:**
```json
{
  "success": true,
  "message": "Equipment planner records created successfully (draft)",
  "data": [...]
}
```

---

## 3. Update Existing Record

**Endpoint:** `POST /create-equipment-planner`

**Request Body:**
```json
{
  "id": 1,
  "eqp_id": "G2-RMG",
  "eqp_activity": "Updated Mixing Operation",
  "start_date": "2026-01-30 09:00:00",
  "end_date": "2026-01-30 13:00:00"
}
```

**Expected Response:**
```json
{
  "success": true,
  "message": "Equipment planner updated successfully (draft)",
  "data": {
    "id": 1,
    "status": "draft",
    ...
  }
}
```

---

## 4. Deactivate Record

**Endpoint:** `POST /create-equipment-planner`

**Request Body:**
```json
{
  "id": 1,
  "is_active": false
}
```

**Expected Response:**
```json
{
  "success": true,
  "message": "Equipment planner deactivated successfully (draft)",
  "data": {
    "id": 1,
    "is_active": false,
    "status": "draft"
  }
}
```

---

## 5. Publish Plan

**Endpoint:** `POST /publish`

**Request Body:** None required

**Expected Response:**
```json
{
  "success": true,
  "message": "Equipment plan published successfully",
  "new_version": 1,
  "records_published": 3,
  "published_at": "2026-01-30T08:00:00.000Z"
}
```

---

## 6. Get Plan Status

**Endpoint:** `GET /plan-status`

**Request:** No parameters required

**Expected Response:**
```json
{
  "success": true,
  "data": {
    "draft_count": 0,
    "published_count": 3,
    "total_active_records": 3,
    "current_version": 1,
    "has_unpublished_changes": false,
    "status": "published"
  }
}
```

---

## 7. Get Plan Versions

**Endpoint:** `GET /plan-versions`

**Request:** No parameters required

**Expected Response:**
```json
{
  "success": true,
  "data": [
    {
      "plan_version": 1,
      "published_at": "2026-01-30T08:00:00.000Z",
      "published_by": 1,
      "record_count": 3,
      "publisher": {
        "id": 1,
        "name": "Admin",
        "email": "admin@example.com"
      }
    }
  ],
  "count": 1
}
```

---

## 8. Get Plan History (by Version)

**Endpoint:** `GET /plan-history?version=1`

**Query Parameters:**
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| version | number | Yes | Version number to fetch |
| eqp_id | string | No | Filter by equipment ID |
| start_date | string | No | Filter by start date (YYYY-MM-DD) |
| end_date | string | No | Filter by end date (YYYY-MM-DD) |

**Example Request:**
```
GET /plan-history?version=1
GET /plan-history?version=1&eqp_id=G2-RMG
```

**Expected Response:**
```json
{
  "success": true,
  "data": [...],
  "meta": {
    "version": 1,
    "total_records": 3
  }
}
```

---

## Complete Workflow Test

### Step 1: Create initial records (status = draft, plan_version = 0)
```
POST /create-equipment-planner
Body: [{ record1 }, { record2 }, { record3 }]
```

### Step 2: Check status (should show draft)
```
GET /plan-status
Expected: { "draft_count": 3, "published_count": 0, "status": "draft" }
```

### Step 3: Publish (plan_version becomes 1)
```
POST /publish
Expected: { "new_version": 1, "records_published": 3 }
```

### Step 4: Check status (should show published)
```
GET /plan-status
Expected: { "draft_count": 0, "published_count": 3, "status": "published" }
```

### Step 5: Edit one record (status changes to draft)
```
POST /create-equipment-planner
Body: { "id": 1, "eqp_activity": "Updated Activity" }
```

### Step 6: Check status (mixed state)
```
GET /plan-status
Expected: { "draft_count": 1, "published_count": 2, "has_unpublished_changes": true }
```

### Step 7: Publish again (plan_version becomes 2)
```
POST /publish
Expected: { "new_version": 2, "records_published": 3 }
```

### Step 8: View version history
```
GET /plan-versions
Expected: Shows version 1 and version 2
```

### Step 9: View historical snapshot
```
GET /plan-history?version=1
Expected: Shows the original state before edits
```

---

## Field Reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| id | number | No | Record ID (for update only) |
| eqp_id | string | Yes | Equipment/Area ID (e.g., "G2-RMG") |
| eqp_activity | string | Yes | Activity description |
| eqp_plan_type | string | No | "operation", "cleaning", "maintenance" |
| start_date | string | Yes | Start datetime (IST format) |
| end_date | string | Yes | End datetime (IST format) |
| product_name | string | No | Product name |
| dispensing_request_id | string | No | Batch number (stored as product_batch) |
| is_active | boolean | No | Default: true. Set false to deactivate |

---

## Version Flow Diagram

```
┌─────────────────────────────────────────────────────────────┐
│                    CREATE RECORDS                           │
│                   (status = draft)                          │
│                  (plan_version = 0)                         │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                    PUBLISH (v1)                             │
│                 status → published                          │
│                plan_version → 1                             │
│        Copy all records to equipment_plan_history           │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                    EDIT RECORD                              │
│              (edited record: status → draft)                │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                    PUBLISH (v2)                             │
│              ALL records: status → published                │
│              ALL records: plan_version → 2                  │
│        Copy ALL records to equipment_plan_history           │
└─────────────────────────────────────────────────────────────┘
```
