# Update Profile

Update user profile information. Supports both self-edit and admin modes.

**Endpoints**:

- Self-edit: `PUT /api/auth/profile`
- Admin edit: `PUT /api/auth/profile/:id`

**Auth**: Required
**Content-Type**: `application/json`

## Self-Edit Mode

Users can update their own profile. All fields are optional.

### Request Body

| Field      | Type   | Required | Description                               |
| ---------- | ------ | -------- | ----------------------------------------- |
| username   | string | No       | New username (must be unique, 3-50 chars) |
| email      | string | No       | New email (must be unique, valid format)  |
| first_name | string | No       | User's first name                         |
| last_name  | string | No       | User's last name                          |
| theme      | string | No       | Theme preference                          |

### Example Request

```json
{
  "username": "newusername",
  "email": "newemail@example.com",
  "first_name": "John",
  "last_name": "Smith",
  "theme": "dracula"
}
```

## Admin Mode

Admins can update any user by providing the user ID in the URL. Additionally supports role changes.

**URL Parameter**: `:id` - Target user's UUID

### Additional Request Body Fields (Admin Only)

| Field | Type   | Required | Description                 |
| ----- | ------ | -------- | --------------------------- |
| role  | string | No       | New role: "user" or "admin" |

### Example Admin Request

```json
{
  "username": "newusername",
  "email": "newemail@example.com",
  "role": "admin"
}
```

## Response (200 OK)

```json
{
  "id": "uuid",
  "email": "user@example.com",
  "username": "john",
  "first_name": "John",
  "last_name": "Smith",
  "theme": "dracula",
  "role": "user",
  "max_devices": 10,
  "created_at": "2026-01-31T10:00:00Z"
}
```

## Error Responses

| Code | Description                             |
| ---- | --------------------------------------- |
| 400  | Invalid input data or invalid role      |
| 401  | Invalid or expired token                |
| 403  | Admin access required (admin mode only) |
| 404  | User not found (admin mode only)        |
| 409  | Username or email already taken         |
