# 🚀 Blog System Implementation Plan (Study-Visionx-LMS)

LMS প্রজেক্টের জন্য একটি পূর্ণাঙ্গ, স্কেলেবল ও মডার্ন **Blog System** ইমপ্লিমেন্টেশন প্ল্যান। এই ডকুমেন্টে ডাটাবেজ ফিল্ড, অ্যাডমিন প্যানেল, ফ্রন্টএন্ড এবং স্টেপ-বাই-স্টেপ গাইডলাইন উল্লেখ করা হয়েছে।

---

## ১. ডাটাবেজ স্কিমা ও ফিল্ড ডিটেইলস (Database Schema & Fields)

### A. `blog_categories` টেবিল
ব্লগগুলোকে সাজানোর জন্য ক্যাটাগরি টেবিল:

| Field Name | Data Type | Attributes / Default | বিবরণ |
|---|---|---|---|
| `id` | `BIGINT UNSIGNED` | Auto Increment, Primary | ক্যাটাগরি আইডি |
| `name` | `VARCHAR(255)` | Not Null | ক্যাটাগরির নাম (উদা: "Web Development") |
| `slug` | `VARCHAR(255)` | Unique, Not Null | URL স্লাগ (উদা: `web-development`) |
| `status` | `BOOLEAN` | Default: `1` (Active) | একটিভ / ইন-একটিভ স্ট্যাটাস |
| `created_at` | `TIMESTAMP` | Nullable | সৃষ্টির সময় |
| `updated_at` | `TIMESTAMP` | Nullable | আপডেটের সময় |

---

### B. `blogs` টেবিল
ব্লগের মূল তথ্য ধারণকারী টেবিল:

| Field Name | Data Type | Attributes / Default | বিবরণ |
|---|---|---|---|
| `id` | `BIGINT UNSIGNED` | Auto Increment, Primary | ব্লগের আইডি |
| `blog_category_id` | `BIGINT UNSIGNED` | Foreign Key, Nullable on delete | ক্যাটাগরি রেফারেন্স (`blog_categories.id`) |
| `title` | `VARCHAR(255)` | Not Null | ব্লগের মূল টাইটেল |
| `slug` | `VARCHAR(255)` | Unique, Not Null | SEO ফ্রেন্ডলি URL স্লাগ |
| `writer` | `VARCHAR(150)` | Nullable | লেখকের নাম (উদা: "Admin", "Shawon", ইত্যাদি) |
| `image` | `VARCHAR(255)` | Nullable | থাম্বনেইল / ফিচারড ইমেজ পাথ (`upload/blog/...`) |
| `short_description` | `TEXT` | Nullable | কার্ডে দেখানোর জন্য সংক্ষিপ্ত বিবরণ (১-২ লাইন) |
| `description` | `LONGTEXT` | Not Null | সম্পূর্ণ ব্লগ পোস্ট (HTML / Rich-text কনটেন্ট) |
| `status` | `BOOLEAN` | Default: `1` (Active) | পাবলিশ স্ট্যাটাস (Active / Inactive) |
| `is_featured` | `BOOLEAN` | Default: `0` (False) | হোমপেজ বা টপে ফিচারড রাখার ফ্ল্যাগ |
| `meta_title` | `VARCHAR(255)` | Nullable | SEO মেটা টাইটেল (ঐচ্ছিক) |
| `meta_description`| `TEXT` | Nullable | SEO মেটা ডেসক্রিপশন (ঐচ্ছিক) |
| `created_at` | `TIMESTAMP` | Nullable | পাবলিশ ডেট |
| `updated_at` | `TIMESTAMP` | Nullable | আপডেটের সময় |

---

## ২. মডেল ও রিলেশনশিপ (Eloquent Models)

### `App\Models\BlogCategory`
```php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;

class BlogCategory extends Model
{
    protected $fillable = ['name', 'slug', 'status'];

    public function blogs(): HasMany
    {
        return $this->hasMany(Blog::class);
    }
}
```

### `App\Models\Blog`
```php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

class Blog extends Model
{
    protected $fillable = [
        'blog_category_id',
        'title',
        'slug',
        'writer',
        'image',
        'short_description',
        'description',
        'status',
        'is_featured',
        'meta_title',
        'meta_description'
    ];

    public function category(): BelongsTo
    {
        return $this->belongsTo(BlogCategory::class, 'blog_category_id');
    }
}
```

---

## ৩. অ্যাডমিন প্যানেল আর্কিটেকচার (Admin Panel)

### A. ACL Permissions (`config/acl.php`)
```php
'Blog Management' => [
    'blog.view'          => 'View Blogs List',
    'blog.create'        => 'Create New Blog',
    'blog.update'        => 'Edit Blog',
    'blog.delete'        => 'Delete Blog',
    'blog.toggle_status' => 'Toggle Blog Status',
],
'Blog Category Management' => [
    'blog_category.view'   => 'View Blog Categories',
    'blog_category.create' => 'Create Blog Category',
    'blog_category.update' => 'Edit Blog Category',
    'blog_category.delete' => 'Delete Blog Category',
],
```

### B. Admin Routes (`routes/admin.php`)
```php
// Blog Categories
Route::prefix('blog-categories')->as('blog_category.')->group(function () {
    Route::get('/', [BlogCategoryController::class, 'index'])->name('index')->middleware('permission:blog_category.view');
    Route::post('/store', [BlogCategoryController::class, 'store'])->name('store')->middleware('permission:blog_category.create');
    Route::get('/edit/{id}', [BlogCategoryController::class, 'edit'])->name('edit')->middleware('permission:blog_category.update');
    Route::put('/update/{id}', [BlogCategoryController::class, 'update'])->name('update')->middleware('permission:blog_category.update');
    Route::delete('/delete/{id}', [BlogCategoryController::class, 'destroy'])->name('delete')->middleware('permission:blog_category.delete');
});

// Blogs
Route::prefix('blogs')->as('blog.')->group(function () {
    Route::get('/', [BlogController::class, 'index'])->name('index')->middleware('permission:blog.view');
    Route::get('/create', [BlogController::class, 'create'])->name('create')->middleware('permission:blog.create');
    Route::post('/store', [BlogController::class, 'store'])->name('store')->middleware('permission:blog.create');
    Route::get('/edit/{id}', [BlogController::class, 'edit'])->name('edit')->middleware('permission:blog.update');
    Route::put('/update/{id}', [BlogController::class, 'update'])->name('update')->middleware('permission:blog.update');
    Route::delete('/delete/{id}', [BlogController::class, 'destroy'])->name('delete')->middleware('permission:blog.delete');
    Route::post('/toggle-status/{id}', [BlogController::class, 'toggleStatus'])->name('toggle_status')->middleware('permission:blog.toggle_status');
});
```

### C. Admin Controllers
1. **`App\Http\Controllers\Admin\BlogCategoryController`**:
   - ক্যাটাগরি তৈরি, এডিট, ডিলিট এবং স্ট্যাটাস ম্যানেজমেন্ট।
2. **`App\Http\Controllers\Admin\BlogController`**:
   - ব্লগের টেবিল ভিউ, ইমেজ আপলোড (`public/upload/blog`), Summernote এডিটর ইন্টিগ্রেশন, ক্রিয়েট, এডিট, ডিলিট।

### D. Admin Blade Views (`resources/views/backend/page/blog/`)
- `category/index.blade.php`: ক্যাটাগরি লিস্ট ও মডাল ফর্ম।
- `index.blade.php`: ডাটাটেবিল লিস্ট (থাম্বনেইল, টাইটেল, ক্যাটাগরি, লেখক, স্ট্যাটাস, অ্যাকশন)।
- `create.blade.php`: নতুন ব্লগ পোস্ট ফর্ম (টাইটেল, ক্যাটাগরি ড্রপডাউন, রাইটার, ইমেজ ফাইল ইনপুট, সামারনোট রিচ এডিটর, মেটা ট্যাগ)।
- `edit.blade.php`: বিদ্যমান ব্লগ এডিট ও বর্তমান ইমেজ প্রিভিউ।

---

## ৪. ফ্রন্টএন্ড আর্কিটেকচার (Frontend Website)

### A. Frontend Routes (`routes/web.php`)
```php
use App\Http\Controllers\BlogController as PublicBlogController;

Route::get('/blogs', [PublicBlogController::class, 'index'])->name('blogs.index');
Route::get('/blogs/{slug}', [PublicBlogController::class, 'show'])->name('blogs.show');
Route::get('/blogs/category/{slug}', [PublicBlogController::class, 'category'])->name('blogs.category');
```

### B. Frontend Controller (`App\Http\Controllers\BlogController`)
- `index(Request $request)`:
  - সার্চ কি-ওয়ার্ড ফিল্টারিং (`?search=...`)
  - ক্যাটাগরি ফিল্টারিং (`?category=...`)
  - পেজিনেশন (৯ বা ১২ টি ব্লগ প্রতি পেজে)
- `show($slug)`:
  - স্লাগ দিয়ে সিঙ্গেল ব্লগ লোড
  - সাম্প্রতিক ব্লগ (Recent Posts / ৩-৪ টি) সাইডবারে প্রদর্শন
  - রিলেটেড ব্লগ (একই ক্যাটাগরির অন্য ব্লগ)

### C. Frontend Blade Views (`resources/views/page/blog/`)
1. **`index.blade.php`**:
   - ক্লিন হিরো সেকশন ("Our Latest Articles & Insights")
   - সার্চ বার এবং ক্যাটাগরি ফিল্টার চিপস/ট্যাব
   - ৩-কলাম রেসপনসিভ ব্লগ কার্ড গ্রিড
   - কার্ডে: ইমেজ হোভার ইফেক্ট, ক্যাটাগরি ব্যাজ, তারিখ, রাইটার নাম, টাইটেল, সংক্ষিপ্ত বিবরণ ও "Read More" লিংক
   - বুটস্ট্র্যাপ পেজিনেশন
2. **`show.blade.php`**:
   - ব্লগ টাইটেল, লেখক, প্রকাশনার তারিখ, ক্যাটাগরি ব্যাজ
   - ফুল-উইথ ফিচারড ইমেজ
   - টাইপোগ্রাফি-ফ্রেন্ডলি আর্টিকেলের মূল কনটেন্ট (HTML/Summernote আউটপুট)
   - সোশ্যাল শেয়ারিং বাটন (Facebook, WhatsApp, LinkedIn, X)
   - ডানপাশে সাইডবার: ক্যাটাগরি লিস্ট ও রিসেন্ট ব্লগস।

---

## ৫. ইমপ্লিমেন্টেশন চেকলিস্ট (Execution Roadmap)

- [ ] **Phase 1: Database & Models**
  - [ ] Migration: `create_blog_categories_table`
  - [ ] Migration: `create_blogs_table`
  - [ ] Models: `BlogCategory.php`, `Blog.php`
  - [ ] Run `php artisan migrate`
- [ ] **Phase 2: Admin Panel**
  - [ ] Update `config/acl.php` with permissions
  - [ ] Controller: `Admin\BlogCategoryController.php`
  - [ ] Controller: `Admin\BlogController.php`
  - [ ] Views: `resources/views/backend/page/blog/` (category, index, create, edit)
  - [ ] Sidebar: `resources/views/backend/layout/sidebar.blade.php` এ লিংক যোগ
  - [ ] Routes: `routes/admin.php`
- [ ] **Phase 3: Frontend Website**
  - [ ] Controller: `App\Http\Controllers\BlogController.php`
  - [ ] Views: `resources/views/page/blog/index.blade.php` এবং `show.blade.php`
  - [ ] Navigation: মূল হেডার বা মেনুতে `/blogs` লিংক সংযোগ
  - [ ] Routes: `routes/web.php`
- [ ] **Phase 4: Testing & Verification**
  - [ ] টেস্ট ব্লগ তৈরি, ইমেজ আপলোড ও ক্যাটাগরি অ্যাসাইন করা
  - [ ] ফ্রন্টএন্ডে ব্লগ লিস্ট, সিঙ্গেল ভিউ ও সার্চ পরীক্ষা করা
