# T-shirt eCommerce Backend API

A RESTful API for a T-shirt eCommerce platform built with Node.js, Express, and MongoDB.

## Features

- User authentication with JWT
- Product management (CRUD operations)
- Shopping cart functionality
- Order management
- Image upload for products
- Role-based access control (Admin/User)

## Tech Stack

- Node.js
- Express.js
- MongoDB with Mongoose
- JWT for authentication
- Multer for file uploads
- Stripe for payments (optional)

## Prerequisites

- Node.js (v14 or higher)
- MongoDB
- npm or yarn

## Installation

1. Clone the repository:
```bash
git clone <repository-url>
cd tshirt-ecommerce-backend
```

2. Install dependencies:
```bash
npm install
```

3. Create a `.env` file in the root directory with the following variables:
```
PORT=5000
MONGODB_URI=mongodb://localhost:27017/tshirt-ecommerce
JWT_SECRET=your_jwt_secret_key_here
JWT_EXPIRE=30d
STRIPE_SECRET_KEY=your_stripe_secret_key
UPLOAD_PATH=uploads
```

4. Create an `uploads` directory in the root folder:
```bash
mkdir uploads
```

5. Start the server:
```bash
# Development
npm run dev

# Production
npm start
```

## API Endpoints

### Authentication

- `POST /api/auth/register` - Register a new user
- `POST /api/auth/login` - Login user
- `GET /api/auth/me` - Get current user

### Products

- `GET /api/products` - Get all products (with filters)
- `GET /api/products/:id` - Get single product
- `POST /api/products` - Create new product (Admin only)
- `PUT /api/products/:id` - Update product (Admin only)
- `DELETE /api/products/:id` - Delete product (Admin only)

### Cart

- `GET /api/cart` - Get user's cart
- `POST /api/cart` - Add item to cart
- `PUT /api/cart/:itemId` - Update cart item quantity
- `DELETE /api/cart/:itemId` - Remove item from cart
- `DELETE /api/cart` - Clear cart

### Orders

- `POST /api/orders` - Create new order
- `GET /api/orders` - Get all orders (Admin only)
- `GET /api/orders/myorders` - Get user's orders
- `GET /api/orders/:id` - Get single order
- `PUT /api/orders/:id/status` - Update order status (Admin only)
- `PUT /api/orders/:id/pay` - Update order payment status

## Request/Response Examples

### Register User
```http
POST /api/auth/register
Content-Type: application/json

{
    "name": "John Doe",
    "email": "john@example.com",
    "password": "password123"
}
```

### Create Product
```http
POST /api/products
Content-Type: multipart/form-data
Authorization: Bearer <token>

{
    "name": "Classic White T-shirt",
    "description": "Premium cotton t-shirt",
    "price": 29.99,
    "sizes": ["S", "M", "L", "XL"],
    "colors": ["White", "Black"],
    "category": "men",
    "stock": 100
}
```

### Add to Cart
```http
POST /api/cart
Content-Type: application/json
Authorization: Bearer <token>

{
    "productId": "product_id_here",
    "quantity": 2,
    "size": "M",
    "color": "White"
}
```

## Error Handling

The API uses a consistent error response format:

```json
{
    "success": false,
    "error": "Error message here"
}
```

## Security

- JWT-based authentication
- Password hashing with bcrypt
- Role-based access control
- Input validation
- File upload restrictions

## Contributing

1. Fork the repository
2. Create your feature branch
3. Commit your changes
4. Push to the branch
5. Create a new Pull Request 