# Member Registration API - Postman Testing Guide

## Quick Start

1. **Import the Postman Collection**
   - Open Postman
   - Click `File` → `Import`
   - Select `Member-Registration-API.postman_collection.json`
   - Click Import

2. **Set Base URL**
   - Collection uses `{{baseUrl}}` variable
   - Default: `http://localhost:3000/api/v1`
   - Change in collection variables if needed

## API Endpoint

**POST** `{{baseUrl}}/members/register`

## Required Fields

| Field | Type | Format | Example |
|-------|------|--------|---------|
| `memberId` | String | 4 digits only | `"1789"` |
| `membershipTypeId` | Integer | ID > 0 | `1` |
| `firstName` | String | Max 100 chars | `"MRS.SABA KALWAR"` |
| `lastName` | String | Max 100 chars | `"KALWAR"` |
| `cnic` | String | 13 digits | `"4550116410804"` |
| `dateOfBirth` | String | ISO8601 format | `"1987-01-18T00:00:00.000Z"` |
| `gender` | String | Male/Female/Other | `"Female"` |
| `phonePrimary` | String | Pakistani format | `"03001234567"` |
| `address` | String | Full address | `"Street Address, City"` |
| `membershipStartDate` | String | ISO8601 format | `"2026-02-07T00:00:00.000Z"` |

## Optional Fields

| Field | Type | Format | Example |
|-------|------|--------|---------|
| `fatherName` | String | Any text | `"KALWAR"` |
| `phoneSecondary` | String | Pakistani format | `"03009876543"` |
| `email` | String | Valid email | `"saba@example.com"` |
| `emergencyContactName` | String | Any text | `"John Kalwar"` |
| `emergencyContactPhone` | String | Pakistani format | `"03111234567"` |
| `emergencyContactRelation` | String | Relation type | `"Brother"` |
| `membershipExpiryDate` | String | ISO8601 format | `"2027-02-07T00:00:00.000Z"` |
| `password` | String | Strong password | `"Member@123"` |

## Testing Steps

### 1. Login (Get Auth Token)
- Go to **Authentication** → **Admin Login**
- Click **Send**
- The token will be automatically saved to `{{authToken}}`
- Check the response - you should see `"success": true`

### 2. Register a Member
- Go to **Member Registration** → **Register New Primary Member**
- Update the body with your member details
- Ensure `memberId` is unique (4-digit number)
- Click **Send**
- Expected Response:
```json
{
  "success": true,
  "message": "Member registered successfully",
  "timestamp": "2026-02-16T06:26:42.434Z",
  "data": {
    "member": {
      "memberId": "1789",
      "firstName": "MRS.SABA KALWAR",
      ...
    }
  }
}
```

### 3. Verify Registration
- Go to **Get All Members**
- Click **Send**
- Look for your newly registered member in the data array

## Validation Rules

| Field | Validation |
|-------|-----------|
| `memberId` | Must be exactly 4 digits (0000-9999) |
| `cnic` | Must be exactly 13 digits |
| `phonePrimary` | Must start with 03 (03001234567) or 923 |
| `email` | Must be valid email format (or empty) |
| `gender` | Only: Male, Female, or Other |
| `dateOfBirth` | Must be valid ISO8601 date |
| `membershipStartDate` | Must be valid ISO8601 date |

## Example Request Body (All Fields)

```json
{
  "memberId": "1789",
  "membershipTypeId": 1,
  "firstName": "MRS.SABA KALWAR",
  "lastName": "KALWAR",
  "fatherName": "KALWAR",
  "cnic": "4550116410804",
  "dateOfBirth": "1987-01-18T00:00:00.000Z",
  "gender": "Female",
  "phonePrimary": "03001234567",
  "phoneSecondary": "03009876543",
  "email": "saba.kalwar@example.com",
  "address": "REVENUE EMPLOYEES CO-OPERATIVE HOUSING SOCIETY, HOUSE NO. 1, QASIMABAD",
  "emergencyContactName": "John Kalwar",
  "emergencyContactPhone": "03111234567",
  "emergencyContactRelation": "Brother",
  "membershipStartDate": "2026-02-07T00:00:00.000Z",
  "membershipExpiryDate": null,
  "password": "Member@123"
}
```

## Error Responses

| Error | Cause |
|-------|-------|
| `409 Member ID already exists` | memberId is duplicate |
| `409 CNIC already registered` | CNIC already in database |
| `400 Validation Error` | Invalid field format |
| `401 Unauthorized` | Token missing or invalid |
| `403 Forbidden` | User doesn't have permission |

## Notes

- **Authentication Required**: All requests need valid bearer token
- **User Roles**: Only `admin` and `front_desk` users can register members
- **Password**: Optional during registration, can be set later
- **Membership Type**: Verify the IDs exist in your database first
