From 6b1ffc16543e0585e14ff7d9a5a3a1237484edd5 Mon Sep 17 00:00:00 2001 From: ismail Date: Mon, 2 Feb 2026 18:49:57 +0100 Subject: [PATCH] fixed redirect & schema --- schemas/init.sql | 39 +++++++++++++++++++++++ src/app/api/auth/google/callback/route.ts | 6 ++-- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/schemas/init.sql b/schemas/init.sql index f8f01ea..4ff106e 100644 --- a/schemas/init.sql +++ b/schemas/init.sql @@ -66,6 +66,15 @@ CREATE TABLE IF NOT EXISTS products ( image_url VARCHAR(500), show_on_homepage BOOLEAN DEFAULT FALSE, brand VARCHAR(100), + stock_status ENUM('in_stock', 'out_of_stock', 'pre_order') DEFAULT 'in_stock', + width DECIMAL(10, 2), + height DECIMAL(10, 2), + depth DECIMAL(10, 2), + material VARCHAR(100), + color VARCHAR(50), + is_popular BOOLEAN DEFAULT FALSE, + is_new BOOLEAN DEFAULT FALSE, + is_trendy BOOLEAN DEFAULT FALSE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE RESTRICT, @@ -95,6 +104,36 @@ CREATE TABLE IF NOT EXISTS product_images ( INDEX idx_product_id (product_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +-- 6c. Create conversations table (Messaging System) +CREATE TABLE IF NOT EXISTS conversations ( + id INT AUTO_INCREMENT PRIMARY KEY, + user_id INT NOT NULL, + product_id INT, + subject VARCHAR(255) NOT NULL, + status ENUM('open', 'closed', 'archived') DEFAULT 'open', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, + FOREIGN KEY (product_id) REFERENCES products(id) ON DELETE SET NULL, + INDEX idx_user_id (user_id), + INDEX idx_product_id (product_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- 6d. Create messages table (Messaging System) +CREATE TABLE IF NOT EXISTS messages ( + id INT AUTO_INCREMENT PRIMARY KEY, + conversation_id INT NOT NULL, + sender_id INT, + sender_role ENUM('customer', 'admin', 'system') DEFAULT 'customer', + content TEXT NOT NULL, + is_read BOOLEAN DEFAULT FALSE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (conversation_id) REFERENCES conversations(id) ON DELETE CASCADE, + FOREIGN KEY (sender_id) REFERENCES users(id) ON DELETE SET NULL, + INDEX idx_conversation_id (conversation_id), + INDEX idx_is_read (is_read) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + -- 7. Insert sample data INSERT IGNORE INTO categories (id, name, description) VALUES (1, 'Furniture', 'Chairs, tables, and other furniture'), diff --git a/src/app/api/auth/google/callback/route.ts b/src/app/api/auth/google/callback/route.ts index 0d08290..257889d 100644 --- a/src/app/api/auth/google/callback/route.ts +++ b/src/app/api/auth/google/callback/route.ts @@ -9,7 +9,7 @@ export async function GET(req: NextRequest) { const code = searchParams.get('code'); if (!code) { - return NextResponse.redirect(new URL('/login?error=GoogleAuthFailed', req.url)); + return NextResponse.redirect(new URL('/login?error=GoogleAuthFailed', process.env.NEXT_PUBLIC_APP_URL || req.url)); } try { @@ -54,7 +54,7 @@ export async function GET(req: NextRequest) { }, '7d'); // Long expiry for OAuth usually fine, or check rememberMe logic // Redirect to a handling page on the frontend - const redirectUrl = new URL('/login', req.url); + const redirectUrl = new URL('/login', process.env.NEXT_PUBLIC_APP_URL || req.url); redirectUrl.searchParams.set('token', token); // Only pass essential auth data in the URL to protect PII @@ -73,6 +73,6 @@ export async function GET(req: NextRequest) { return NextResponse.redirect(redirectUrl); } catch (error) { console.error('Google Auth Callback Error:', error); - return NextResponse.redirect(new URL('/login?error=GoogleAuthFailed', req.url)); + return NextResponse.redirect(new URL('/login?error=GoogleAuthFailed', process.env.NEXT_PUBLIC_APP_URL || req.url)); } }