# Image Processor Lambda

Processes uploaded images by extracting metadata (EXIF, GPS, camera info) and stripping it before storing publicly. Triggered by S3 uploads to the `staging/` prefix.

## How It Works

1. User uploads image to `staging/{folder}/{uuid}.jpg` via presigned URL
2. S3 triggers this Lambda
3. Lambda extracts metadata and saves to `ImageMetadata` table
4. Lambda strips EXIF data from image
5. Lambda moves clean image to final location `{folder}/{uuid}.jpg`
6. Lambda deletes staging file

## Local Development

### Install Dependencies

```bash
cd lambdas/shared && npm install
cd ../imageProcessor && npm install
```

### Set Up Environment

## Environment Variables

| Variable       | Description                  | Example                                         |
| -------------- | ---------------------------- | ----------------------------------------------- |
| `DATABASE_URL` | PostgreSQL connection string | `postgresql://user:pass@localhost:5432/db-name` |
| `S3_BUCKET`    | S3 bucket name               | `bucket-name`                                   |
| `AWS_REGION`   | AWS region                   | `us-east-1`                                     |
| `LOG_LEVEL`    | Logging level                | `debug`, `info`, `warn`, `error`                |

### Run Locally

```bash
aws s3 cp source s3://bucket-name/staging/image-type/key --profile your-profile-name
```

```bash
npm run local -- staging/items/test-image.jpg my-bucket
```

### Run Migration

```bash
cd backend
npx sequelize-cli db:migrate
```

## Supported Image Types

- JPEG (`.jpg`, `.jpeg`)
- PNG (`.png`)
- GIF (`.gif`) - preserves animation
- WebP (`.webp`)

## Metadata Extracted

| Field                       | Description                                  |
| --------------------------- | -------------------------------------------- |
| `latitude`, `longitude`     | GPS coordinates (stripped from public image) |
| `cameraMake`, `cameraModel` | Camera manufacturer and model                |
| `cameraSoftware`            | Software used to create image                |
| `dateTaken`                 | Original capture date                        |
| `width`, `height`           | Image dimensions                             |
| `orientation`               | EXIF orientation flag                        |
| `fileSize`                  | File size in bytes                           |

## Deployment

See [infrastructure/cdk/README.md](../../infrastructure/cdk/README.md) for deployment instructions.

```bash
cd infrastructure/cdk
npm run deploy:staging
```
