From a6b519a4c7454c6368848fd3e5035bf99e9c750c Mon Sep 17 00:00:00 2001
From: 65160258 <65160258@go.buu.ac.th>
Date: Mon, 24 Mar 2025 18:38:52 +0700
Subject: [PATCH] category update

---
 app.js                | 43 +++++++++++++++++++++++++++++++++----------
 views/pages/index.ejs | 12 ++++++++++++
 2 files changed, 45 insertions(+), 10 deletions(-)

diff --git a/app.js b/app.js
index 4d170e5..01bdfd8 100644
--- a/app.js
+++ b/app.js
@@ -52,21 +52,44 @@ app.get('/', (req, res) => {
 app.get('/index', async (req, res) => {
   if (!req.session.user) return res.redirect('/');
   try {
-    // ดึง posts จากฐานข้อมูล (หากต้องการ)
-    const [posts] = await db.query(
-      `SELECT p.*, u.username, c.name AS category_name 
-       FROM posts p 
-       JOIN users u ON p.user_id = u.id 
-       JOIN categories c ON p.category_id = c.id 
-       ORDER BY p.created_at DESC`
-    );
-    res.render('pages/index', { posts, user: req.session.user });
+    const categoryId = req.query.category || ''; // รับค่า category จาก query parameter
+    const params = [];
+
+    let query = `
+      SELECT p.*, u.username, c.name AS category_name 
+      FROM posts p 
+      JOIN users u ON p.user_id = u.id 
+      JOIN categories c ON p.category_id = c.id
+    `;
+
+    if (categoryId) {
+      query += ` WHERE p.category_id = ?`;
+      params.push(categoryId);
+    }
+
+    query += ` ORDER BY p.created_at DESC`;
+
+    const [posts] = await db.query(query, params);
+    const [categories] = await db.query(`SELECT * FROM categories`); // ดึงรายการ category ทั้งหมด
+
+    res.render('pages/index', {
+      posts,
+      categories,
+      selectedCategory: categoryId,
+      user: req.session.user
+    });
   } catch (error) {
     console.error('Error fetching posts:', error);
-    res.render('pages/index', { posts: [], user: req.session.user });
+    res.render('pages/index', {
+      posts: [],
+      categories: [],
+      selectedCategory: '',
+      user: req.session.user
+    });
   }
 });
 
+
 // ค้นหาบทความ (ค้นหาจาก title)
 app.get('/index/search', async (req, res) => {
   if (!req.session.user) return res.redirect('/');
diff --git a/views/pages/index.ejs b/views/pages/index.ejs
index efebb49..3ca9ac5 100644
--- a/views/pages/index.ejs
+++ b/views/pages/index.ejs
@@ -4,6 +4,18 @@
 <div class="main-content">
   <div class="d-flex justify-content-between align-items-center mb-5">
     <h1 class="h2 fw-bold text-primary">All Posts</h1>
+    <form action="/index" method="GET" class="mb-4">
+      <label for="category" class="form-label">Filter by Category:</label>
+      <select name="category" id="category" class="form-select w-auto d-inline-block" onchange="this.form.submit()">
+        <option value="">All Categories</option>
+        <% categories.forEach(category => { %>
+          <option value="<%= category.id %>" <%= selectedCategory == category.id ? 'selected' : '' %>>
+            <%= category.name %>
+          </option>
+        <% }) %>
+      </select>
+    </form>
+    
     <div class="badge bg-primary rounded-pill"><%= posts.length %> posts</div>
   </div>
   
-- 
GitLab