# Clothing System Implementation

## Summary

A comprehensive clothing/merchandise system has been implemented with the following features:

### Features

1. **Database & Backend**
   - New `clothing` table with fields: title, description, price, currency, image_url, url, is_active, display_order
   - Full CRUD API endpoints (public & admin)
   - Soft delete support

2. **Admin Management** (`/admin/obleceni`)
   - Create, update, delete clothing items
   - Fields:
     - **Title** (required)
     - **Description** (optional)
     - **Price** (optional, with currency field)
     - **Image URL** (required)
     - **Shop URL** (optional)
     - **Display Order** (for sorting)
     - **Active/Inactive** toggle
   - Individual save buttons for each item
   - Real-time validation

3. **Public Pages**
   - **Homepage** (`/`): Shows 5 newest clothing items in the MerchSection
   - **Clothing Page** (`/obleceni`): Shows all active items in a grid layout
   - Displays price badges when available
   - Links to e-shop URLs (external links)
   - "View All" button on homepage to navigate to full clothing page

4. **Design**
   - Responsive grid layout
   - Price badges for items with pricing
   - Image placeholders for missing images
   - Hover effects and smooth transitions
   - External link indicators

## Files Created

### Backend
- `database/migrations/20251012000001_create_clothing_table.up.sql`
- `database/migrations/20251012000001_create_clothing_table.down.sql`
- `internal/models/clothing.go`
- `internal/controllers/clothing_controller.go`

### Frontend
- `frontend/src/services/clothing.ts`
- `frontend/src/pages/ClothingPage.tsx`

### Modified Files
- `internal/routes/routes.go` - Added clothing routes
- `main.go` - Added Clothing model to AutoMigrate
- `frontend/src/App.tsx` - Added /obleceni route
- `frontend/src/pages/admin/AdminMerchPage.tsx` - Complete rewrite with price field and proper CRUD
- `frontend/src/components/home/MerchSection.tsx` - Updated to fetch from API and show 5 newest items

## API Endpoints

### Public
- `GET /api/v1/clothing` - Get all active clothing items

### Admin (requires authentication)
- `GET /api/v1/admin/clothing` - Get all clothing items (including inactive)
- `GET /api/v1/admin/clothing/:id` - Get single clothing item
- `POST /api/v1/admin/clothing` - Create new clothing item
- `PUT /api/v1/admin/clothing/:id` - Update clothing item
- `DELETE /api/v1/admin/clothing/:id` - Delete clothing item (soft delete)
- `POST /api/v1/admin/clothing/reorder` - Update display order

## Database Schema

```sql
CREATE TABLE clothing (
    id SERIAL PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    description TEXT,
    price DECIMAL(10, 2),
    currency VARCHAR(10) DEFAULT 'Kč',
    image_url VARCHAR(500),
    url VARCHAR(500),
    is_active BOOLEAN DEFAULT true,
    display_order INT DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    deleted_at TIMESTAMP
);
```

## Usage

1. **Add Items**: Navigate to `/admin/obleceni` and click "Přidat položku"
2. **Fill Details**: Add title, image URL, price (optional), and shop link
3. **Save**: Click the "Uložit" button for each item
4. **View Public**: Items appear on homepage (5 newest) and `/obleceni` (all items)

## Next Steps (Optional Enhancements)

- Add image upload functionality instead of URL-only
- Add categories/tags for clothing items
- Add size/color variants
- Add stock tracking
- Add multi-image support for each item
- Add sorting options on public page (price, newest, etc.)
