# WishlistRepository ক্লাস

**নেমস্পেস:** `Bizzwishlist\Database`  
**ফাইল:** `includes/Database/WishlistRepository.php`

## বর্ণনা

`WishlistRepository` ক্লাস উইশলিস্টের সকল ডাটাবেস অপারেশন পরিচালনা করে। এটি `wp_bizzwishlist` টেবিলে CRUD (Create, Read, Update, Delete) অপারেশন করে।

## প্রপার্টি সমূহ

| প্রপার্টি | ধরন | বর্ণনা |
|-----------|------|--------|
| `$table` | `string` | ডাটাবেস টেবিলের নাম (`wp_bizzwishlist`) |

## মেথড সমূহ

### `__construct()`
- টেবিলের নাম সেট করে (`$wpdb->prefix . 'bizzwishlist'`)।

### `add( int $product_id, int|null $user_id, string|null $session_key, int $variation_id = 0 )`
- **রিটার্ন:** `int|false`
- উইশলিস্টে একটি প্রোডাক্ট যোগ করে।
- `$variation_id` দিয়ে ভেরিয়েশন নির্দিষ্ট করা যায়। ০ মানে সিম্পল প্রোডাক্ট বা ভেরিয়েশন ছাড়া।
- ডুপ্লিকেট চেক করে, ইতিমধ্যে থাকলে `false` রিটার্ন করে।

### `remove( int $product_id, int|null $user_id, string|null $session_key, int $variation_id = 0 )`
- **রিটার্ন:** `bool`
- উইশলিস্ট থেকে একটি প্রোডাক্ট সরায়।
- `$variation_id` > ০ হলে নির্দিষ্ট ভেরিয়েশন সরায়; ০ হলে সকল ভেরিয়েশন সরায়।

### `exists( int $product_id, int|null $user_id, string|null $session_key, int $variation_id = 0 )`
- **রিটার্ন:** `bool`
- একটি প্রোডাক্ট উইশলিস্টে আছে কি না তা চেক করে।
- `$variation_id` > ০ হলে নির্দিষ্ট ভেরিয়েশন চেক করে।

### `get_items( int|null $user_id, string|null $session_key )`
- **রিটার্ন:** `array`
- ইউজার/সেশনের সকল উইশলিস্ট আইটেম রিটার্ন করে।
- তৈরির তারিখ অনুসারে সাজায় (নতুন প্রথমে)।
- প্রতিটি আইটেমে `product_id`, `variation_id`, `created_at` ইত্যাদি থাকে।

### `get_count( int|null $user_id, string|null $session_key )`
- **রিটার্ন:** `int`
- মোট উইশলিস্ট আইটেম সংখ্যা রিটার্ন করে।

### `get_product_ids( int|null $user_id, string|null $session_key )`
- **রিটার্ন:** `array`
- শুধুমাত্র প্রোডাক্ট আইডিগুলোর অ্যারে রিটার্ন করে।

### `merge_guest_to_user( string $session_key, int $user_id )`
- **রিটার্ন:** `void`
- গেস্ট সেশনের আইটেমগুলো লগইন করা ইউজারের উইশলিস্টে মার্জ করে।
- ডুপ্লিকেট থাকলে গেস্টের আইটেম মুছে দেয়।

## ডাটাবেস টেবিল স্ট্রাকচার

| কলাম | ধরন | বর্ণনা |
|------|------|--------|
| `id` | `bigint(20) UNSIGNED` | প্রাইমারি কী |
| `user_id` | `bigint(20) UNSIGNED` | লগইন ইউজারের আইডি (NULL হতে পারে) |
| `session_key` | `varchar(100)` | গেস্ট সেশন কী (NULL হতে পারে) |
| `product_id` | `bigint(20) UNSIGNED` | WooCommerce প্রোডাক্ট আইডি |
| `variation_id` | `bigint(20) UNSIGNED` | ভেরিয়েশন আইডি (০ মানে ভেরিয়েশন নেই) |
| `created_at` | `datetime` | তৈরির সময় |
| `updated_at` | `datetime` | আপডেটের সময় |
