-- phpMyAdmin SQL Dump
-- version 5.2.1
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
-- Generation Time: Aug 13, 2026 at 09:14 AM
-- Server version: 10.4.32-MariaDB
-- PHP Version: 8.2.12

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Database: `ecommerce_db`
--

-- --------------------------------------------------------

--
-- Table structure for table `addresses`
--

CREATE TABLE `addresses` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `user_id` bigint(20) UNSIGNED NOT NULL,
  `recipient_name` varchar(255) NOT NULL,
  `phone` varchar(255) NOT NULL,
  `address` text NOT NULL,
  `province` varchar(255) NOT NULL,
  `city` varchar(255) NOT NULL,
  `district` varchar(255) NOT NULL,
  `postal_code` varchar(255) NOT NULL,
  `is_default` tinyint(1) NOT NULL DEFAULT 0,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `addresses`
--

INSERT INTO `addresses` (`id`, `user_id`, `recipient_name`, `phone`, `address`, `province`, `city`, `district`, `postal_code`, `is_default`, `created_at`, `updated_at`) VALUES
(1, 4, 'Faiz Bayu', '085889126070', '7VXV+P89, Bojong Murni, Kec. Ciawi, Kabupaten Bogor, Jawa Barat 16720', 'Jawa Barat', 'Kabupaten Bogor', 'Ciawi', '16720', 1, '2026-08-11 23:34:24', '2026-08-11 23:34:24');

-- --------------------------------------------------------

--
-- Table structure for table `banners`
--

CREATE TABLE `banners` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `title` varchar(255) DEFAULT NULL,
  `subtitle` varchar(255) DEFAULT NULL,
  `image` varchar(255) NOT NULL,
  `link` varchar(255) DEFAULT NULL,
  `sort_order` int(11) NOT NULL DEFAULT 0,
  `is_active` tinyint(1) NOT NULL DEFAULT 1,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `banners`
--

INSERT INTO `banners` (`id`, `title`, `subtitle`, `image`, `link`, `sort_order`, `is_active`, `created_at`, `updated_at`) VALUES
(1, 'SuperHuman', 'GasSoldier', 'side-banners/oEcuNRk8Wlr0PcxaHDuKeu33COuzXDfd2BDrsfvw.jpg', NULL, 0, 0, '2026-08-05 20:15:26', '2026-08-09 19:49:09'),
(2, 'Steve', 'Minecraft', 'side-banners/HJjCg99uPuoQgnkiZ0tBTtZkwtmVxlyrryJdz1DE.jpg', NULL, 0, 1, '2026-08-05 20:16:32', '2026-08-05 20:16:32'),
(3, 'Maulid Nabi Muhammad', '12 Rabiul Awal 1448H', 'side-banners/aEbUu9xcSifUYlhlMxp1qhDcIG1E0RrBXGy5sPxd.jpg', NULL, 0, 1, '2026-08-09 19:50:41', '2026-08-09 19:50:41'),
(4, 'Independence Day', 'marking the 81st anniversary of the nation\'s independence.', 'side-banners/9yOFQHrAF7KxoLvSTci3iGs3qGIIraTbw7Ovuw9U.jpg', NULL, 0, 1, '2026-08-09 19:51:55', '2026-08-09 19:51:55');

-- --------------------------------------------------------

--
-- Table structure for table `blogs`
--

CREATE TABLE `blogs` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `title` varchar(255) NOT NULL,
  `slug` varchar(255) NOT NULL,
  `thumbnail` varchar(255) DEFAULT NULL,
  `excerpt` text DEFAULT NULL,
  `content` longtext DEFAULT NULL,
  `author` varchar(255) NOT NULL DEFAULT 'Admin',
  `category` varchar(255) DEFAULT NULL,
  `is_published` tinyint(1) NOT NULL DEFAULT 0,
  `published_at` timestamp NULL DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `blogs`
--

INSERT INTO `blogs` (`id`, `title`, `slug`, `thumbnail`, `excerpt`, `content`, `author`, `category`, `is_published`, `published_at`, `created_at`, `updated_at`) VALUES
(1, '5 Strategi Efektif Menghadapi Ujian Akhir Semester dengan Percaya Diri', '5-strategi-efektif-menghadapi-ujian-akhir-semester-dengan-percaya-diri', 'blogs/qKfzPvYDVSLPHZB2HMv4Ule4ZS1ipEMQIZkedu3u.jpg', 'Simak 5 strategi praktis dan efektif bagi mahasiswa untuk mempersiapkan diri menghadapi Ujian Akhir Semester (UAS) tanpa stres berlebih.', 'Memasuki pekan Ujian Akhir Semester (UAS), tak sedikit mahasiswa yang merasa cemas dan kewalahan. Namun, dengan persiapan yang matang dan terstruktur, Anda bisa melewati masa ujian dengan lebih tenang dan optimal.\r\n\r\nBerikut adalah 5 strategi efektif yang bisa Anda terapkan:\r\n\r\nBuat Jadwal Belajar Terencana\r\nJangan gunakan sistem kram semalam (SKS). Bagi materi perkuliahan ke dalam beberapa sesi belajar singkat setiap harinya agar otak dapat menyerap informasi secara bertahap.\r\n\r\nGunakan Teknik Pemahaman, Bukan Menghafal\r\nPahami konsep dasar dari setiap mata kuliah. Menggunakan teknik mind mapping atau menjelaskan kembali materi kepada teman (Teknik Feynman) sangat ampuh memperkuat daya ingat.\r\n\r\nLatihan Soal-Soal Tahun Lalu\r\nMengerjakan ulang soal ujian dari semester sebelumnya dapat membantu Anda memahami pola pertanyaan dan mengukur tingkat kesiapan diri.\r\n\r\nMenjaga Pola Tidur dan Nutrisi\r\nKesehatan fisik sangat mempengaruhi performa akademis. Pastikan Anda tetap tidur cukup (7-8 jam) dan mengonsumsi makanan bergizi selama minggu ujian.\r\n\r\nKelola Stres dengan Istirahat Cukup\r\nSelingi sesi belajar dengan istirahat singkat (misalnya teknik Pomodoro 25 menit belajar, 5 menit istirahat) untuk menjaga fokus dan mencegah kejenuhan.\r\n\r\nSemoga berhasil dalam UAS semester ini!', 'Admin', 'Pendidikan', 1, '2026-08-03 23:24:40', '2026-08-03 23:24:35', '2026-08-03 23:31:49'),
(2, 'Panduan Lengkap Memulai Manajemen Waktu Bagi Mahasiswa Baru', 'panduan-lengkap-memulai-manajemen-waktu-bagi-mahasiswa-baru', 'blogs/f2ZfcK7EkocPhpKPogrFXz7SsVrDK1WYt8QZjiCX.jpg', 'Mengatur waktu antara kuliah, organisasi, dan kehidupan pribadi sering kali menantang. Pelajari cara mengelola waktu secara cerdas agar tetap produktif dan bebas stres.', 'Kehidupan perguruan tinggi menawarkan kebebasan yang jauh lebih besar dibanding masa sekolah. Namun, kebebasan ini datang dengan tanggung jawab besar dalam mengelola waktu sendiri. Banyak mahasiswa baru mengalami kesulitan menyeimbangkan antara tugas akademik, kegiatan ekstrakurikuler, dan waktu istirahat.\r\n\r\nBerikut beberapa tips sederhana yang bisa diterapkan untuk membangun manajemen waktu yang solid:\r\n\r\nGunakan Kalender Digital atau Planner\r\nCatat semua tenggat waktu (deadline), jadwal kuliah, dan agenda organisasi di satu tempat seperti Google Calendar atau aplikasi perencana lainnya.\r\n\r\nTerapkan Prinsip Prioritas (Matriks Eisenhower)\r\nKategorikan tugas Anda ke dalam empat kuadran:\r\n\r\nPenting & Mendesak (kerjakan segera)\r\n\r\nPenting & Tidak Mendesak (jadwalkan)\r\n\r\nTidak Penting & Mendesak (delegasikan jika memungkinkan)\r\n\r\nTidak Penting & Tidak Mendesak (eliminasi atau kurangi)\r\n\r\nHindari Multitasking\r\nFokus pada satu tugas dalam satu waktu (single-tasking). Multitasking sering kali justru menurunkan kualitas kerja dan membuat otak lebih cepat lelah.\r\n\r\nTetapkan Batas Waktu untuk Setiap Tugas\r\nBerikan batas waktu yang realistis untuk menyelesaikan suatu pekerjaan agar Anda tidak terjebak dalam procrastination (menunda-nunda).\r\n\r\nJangan Lupa Luangkan Waktu untuk Diri Sendiri (Me Time)\r\nManajemen waktu yang baik juga mencakup alokasi waktu untuk istirahat, berolahraga, dan berkumpul bersama teman agar kesehatan mental tetap terjaga.', 'Admin', 'Gaya Hidup / Tips Mahasiswa', 1, '2026-08-03 23:31:53', '2026-08-03 23:26:35', '2026-08-03 23:31:53'),
(3, 'Resmi Diluncurkan! Portal Digital Baru University Press Siap Mendukung Publikasi Ilmiah', 'resmi-diluncurkan-portal-digital-baru-university-press-siap-mendukung-publikasi-ilmiah', 'blogs/gcmfthUggc69LbkTCzQTcL8NNwN3renX4M0xX9D8.png', 'University Press resmi meluncurkan portal web baru untuk mempermudah civitas akademika dalam mengakses katalog buku, mengajukan naskah publikasi, dan mengikuti berita penerbitan terkini.', 'Sebagai wujud komitmen dalam mendukung iklim akademik dan penyebaran ilmu pengetahuan, University Press dengan bangga mengumumkan peluncuran portal digital terbaru kami.\r\n\r\nPortal ini dirancang untuk memberikan kemudahan akses bagi para dosen, peneliti, mahasiswa, serta masyarakat umum dalam menjangkau karya-karya ilmiah berkualitas.\r\n\r\nFitur Unggulan Portal Baru University Press:\r\n\r\nKatalog Buku Digital & Cetak: Jelajahi daftar buku ajar, monograf, dan jurnal Ilmiah dengan tampilan yang lebih rapi dan intuitif.\r\n\r\nInformasi Pengajuan Naskah: Panduan dan alur penerbitan naskah bagi para penulis/akademisi yang ingin menerbitkan karyanya bersama kami.\r\n\r\nPusat Berita & Artikel Ilmiah: Menyajikan ulasan buku, tips penulisan ilmiah, serta agenda kegiatan seputar dunia literasi kampus.\r\n\r\nKami mengundang Anda untuk menjelajahi platform baru ini dan menjadi bagian dari penguatan literasi akademik bersama University Press!', 'Admin UPress', 'Pengumuman / Berita Akademik', 1, '2026-08-03 23:31:38', '2026-08-03 23:31:30', '2026-08-03 23:31:38'),
(4, 'Orang yang jarang mengunggah sesuatu di media sosial dan lebih memilih menjaga privasi biasanya memiliki 7 ciri ini menurut psikologi', 'orang-yang-jarang-mengunggah-sesuatu-di-media-sosial-dan-lebih-memilih-menjaga-privasi-biasanya-memiliki-7-ciri-ini-menurut-psikologi', 'blogs/MODLbvsFBu8YVKeS6y8O8fSMTJaikBsDJmGyg3vy.webp', 'Di era digital, media sosial telah menjadi bagian yang tak terpisahkan dari kehidupan sehari-hari. Banyak orang membagikan aktivitas, pencapaian, perjalanan, hingga momen-momen pribadi melalui berbagai platform. Namun, tidak semua orang merasa nyaman melakukan hal tersebut.', 'Di era digital, media sosial telah menjadi bagian yang tak terpisahkan dari kehidupan sehari-hari. Banyak orang membagikan aktivitas, pencapaian, perjalanan, hingga momen-momen pribadi melalui berbagai platform. Namun, tidak semua orang merasa nyaman melakukan hal tersebut.\r\nAda sebagian orang yang justru sangat jarang mengunggah apa pun dan lebih memilih menikmati hidup tanpa harus membagikannya kepada publik.\r\n\r\nPerlu dipahami bahwa jarang mengunggah sesuatu di media sosial bukan berarti seseorang antisosial, pemalu, atau tidak memiliki kehidupan yang menarik.\r\n\r\nDalam psikologi, perilaku tersebut dapat dipengaruhi oleh berbagai faktor kepribadian, nilai hidup, hingga cara seseorang memandang hubungan sosial.\r\n\r\nDilansir dari Expert Editor pada Minggu (28/6), terdapat tujuh ciri yang sering dimiliki oleh orang yang lebih memilih menjaga privasi dibanding aktif membagikan kehidupannya di media sosial.\r\n\r\n1. Mereka Memiliki Rasa Aman terhadap Diri Sendiri\r\n\r\nSalah satu ciri paling umum adalah memiliki rasa percaya diri yang berasal dari dalam diri (internal validation). Mereka tidak terlalu bergantung pada pengakuan atau pujian dari orang lain untuk merasa berharga.\r\n\r\nOrang seperti ini cenderung menikmati pencapaiannya secara pribadi. Ketika berhasil mendapatkan pekerjaan baru, membeli rumah, atau mencapai target tertentu, mereka tidak merasa perlu mengumumkannya kepada banyak orang.\r\n\r\nDalam psikologi, individu yang memiliki validasi internal biasanya lebih stabil secara emosional karena kebahagiaannya tidak bergantung pada jumlah \"like\", komentar, atau perhatian dari orang lain.\r\n\r\n2. Mereka Menghargai Privasi sebagai Bentuk Perlindungan Diri\r\n\r\nBagi sebagian orang, menjaga privasi bukan berarti menutup diri, melainkan menetapkan batas yang sehat antara kehidupan pribadi dan kehidupan publik.\r\n\r\nMereka memahami bahwa tidak semua hal harus diketahui banyak orang. Dengan membatasi informasi yang dibagikan, mereka merasa lebih nyaman dan lebih aman dari berbagai risiko, seperti penilaian negatif, gosip, atau penyalahgunaan informasi pribadi.\r\n\r\nSikap ini menunjukkan adanya kesadaran terhadap pentingnya batasan pribadi atau personal boundaries.\r\n\r\n3. Mereka Lebih Fokus Menjalani Kehidupan daripada Mendokumentasikannya\r\n\r\nSaat menghadiri konser, menikmati liburan, atau berkumpul bersama keluarga, orang yang menjaga privasi biasanya lebih memilih menikmati momen secara langsung.\r\n\r\nAlih-alih sibuk mengambil foto demi unggahan, mereka lebih menghargai pengalaman yang sedang dijalani. Mereka percaya bahwa kenangan terbaik tidak selalu harus dipublikasikan agar terasa bermakna.\r\n\r\nPsikologi menyebut kecenderungan ini sebagai orientasi pada pengalaman nyata dibanding pencarian pengakuan sosial.\r\n\r\n4. Mereka Cenderung Memiliki Hubungan yang Lebih Mendalam\r\n\r\nOrang yang jarang aktif di media sosial sering kali lebih memilih hubungan berkualitas dibanding hubungan yang luas.\r\n\r\nMereka mungkin memiliki lingkaran pertemanan yang tidak terlalu besar, tetapi hubungan tersebut biasanya dibangun atas dasar kepercayaan, komunikasi yang jujur, dan kedekatan emosional.\r\n\r\nBagi mereka, berbagi cerita secara langsung kepada orang-orang terdekat terasa jauh lebih berarti daripada mengunggahnya kepada ratusan atau bahkan ribuan pengikut.\r\n\r\n5. Mereka Tidak Terlalu Terpengaruh Tekanan Sosial\r\n\r\nMedia sosial sering kali menghadirkan tekanan untuk selalu terlihat sukses, bahagia, produktif, atau memiliki kehidupan yang sempurna.\r\n\r\nOrang yang memilih menjaga privasi biasanya tidak terlalu terpengaruh oleh tekanan tersebut. Mereka tidak merasa harus mengikuti tren atau membandingkan hidupnya dengan kehidupan orang lain yang ditampilkan di dunia maya.\r\n\r\nKemampuan untuk tidak mudah terjebak dalam perbandingan sosial ini dapat membantu menjaga kesehatan mental dan mengurangi stres.\r\n\r\n6. Mereka Berpikir Sebelum Bertindak\r\n\r\nDalam psikologi kepribadian, orang yang lebih berhati-hati biasanya memiliki kecenderungan untuk mempertimbangkan konsekuensi sebelum mengambil keputusan.\r\n\r\nHal ini juga berlaku saat menggunakan media sosial. Mereka akan berpikir apakah suatu unggahan benar-benar perlu dipublikasikan, apakah dapat berdampak pada masa depan, atau apakah informasi tersebut sebaiknya tetap menjadi konsumsi pribadi.\r\n\r\nSikap reflektif seperti ini membuat mereka lebih selektif dalam membagikan informasi.\r\n\r\n7. Mereka Menemukan Kebahagiaan Tanpa Harus Dipublikasikan\r\n\r\nCiri terakhir adalah kemampuan menikmati kebahagiaan tanpa merasa perlu membuktikannya kepada orang lain.\r\n\r\nBagi mereka, momen sederhana seperti makan bersama keluarga, membaca buku, menikmati secangkir kopi, atau berjalan santai sudah cukup memberikan kepuasan batin.\r\n\r\nMereka memahami bahwa nilai sebuah pengalaman tidak ditentukan oleh seberapa banyak orang yang melihatnya, melainkan oleh makna yang dirasakan secara pribadi.\r\n\r\nMenjaga Privasi Bukan Berarti Menutup Diri\r\n\r\nPenting untuk diingat bahwa psikologi tidak menyatakan semua orang yang jarang mengunggah sesuatu di media sosial pasti memiliki tujuh ciri di atas. Perilaku setiap individu dipengaruhi oleh banyak faktor, termasuk kepribadian, budaya, pengalaman hidup, usia, dan tujuan menggunakan media sosial.\r\n\r\nSebaliknya, orang yang aktif membagikan aktivitasnya di media sosial juga tidak otomatis memiliki kebutuhan berlebihan akan perhatian. Banyak yang menggunakannya sebagai sarana bekerja, berjejaring, berbagi informasi, atau mendokumentasikan perjalanan hidup.\r\n\r\nPada akhirnya, tidak ada cara yang paling benar dalam menggunakan media sosial. Yang terpenting adalah menggunakan platform tersebut secara sehat, sesuai kebutuhan, dan tetap menjaga keseimbangan antara kehidupan digital dengan kehidupan nyata.\r\n\r\nKesimpulan\r\n\r\nMemilih untuk tidak sering mengunggah sesuatu di media sosial bukanlah tanda bahwa seseorang kurang bersosialisasi atau memiliki kehidupan yang membosankan. \r\n\r\nDalam banyak kasus, pilihan tersebut justru mencerminkan karakter yang lebih menghargai privasi, memiliki rasa percaya diri dari dalam diri, fokus pada pengalaman nyata, serta mampu membangun hubungan yang berkualitas.\r\n\r\nDi tengah budaya digital yang mendorong orang untuk terus berbagi, menjaga sebagian kehidupan tetap bersifat pribadi adalah pilihan yang sah. Kebahagiaan tidak selalu harus dipublikasikan, karena tidak semua momen berharga membutuhkan pengakuan dari dunia maya untuk menjadi berarti.', 'Irfan Fedriansyah', 'Psikologi', 1, '2026-08-05 01:04:15', '2026-08-05 01:01:16', '2026-08-05 01:04:15'),
(5, 'Real Madrid sudah tahu bakal buang titisan Lionel Messi ke klub mana', 'real-madrid-sudah-tahu-bakal-buang-titisan-lionel-messi-ke-klub-mana', 'blogs/9Fdc0iNXXJG1EuAxdNjMrOWB2tDWojABY67Vkym7.jpg', 'BOLASPORT.COM - Real Madrid sudah tahu bakal \'membuang\' Marco Mastantuono ke klub mana.\r\n\r\nSesi latihan Real Madrid pada Selasa (4/8/2026) tidak diikuti oleh Marco Mastantuono.\r\n\r\nPemain berjulukan Titisan Lionel Messi itu absen bukan karena mengalami cedera.\r\n\r\nAkan tetapi, Mastantuono menghilang di lapangan Valdebebas karena menunggu proses kepindahannya dari Madrid rampung.\r\n\r\nSang winger hampir dipastikan melanjutkan kariernya di Italia.', 'Menurut laporan Marca, Madrid sudah menyetujui permintaan Fiorentina untuk meminjam Mastantuono.\r\n\r\nTinggal satu detail lagi yang perlu disepakati kedua klub, yakni pembagian gaji pemain.\r\n\r\nSetelah hal tersebut beres, si pria Argentina akan bertolak ke Italia.\r\n\r\nSebelumnya, Mastantuono telah lebih dulu bernegosiasi dengan Fiorentina dan terjadi kesepakatan.\r\n\r\nDia mendapatkan jaminan hal yang tidak didapatkannya di ibukota Spanyol, yaitu lebih banyak waktu bermain.\r\n\r\nMastantuono gabung ke Madrid pada 2025 setelah bersinar bersama River Plate.\r\n\r\nDiharapkan tampil konsisten, eks River Plate itu justru kesulitan beradaptasi dengan Los Blancos.\r\n\r\nMastantuono memproduksi tiga gol dan satu assist dari total 35 penampilan pada 2025-2026 atau musim perdananya berseragam Madrid.\r\n\r\nBaca Juga: Publik Madrid Elu-elukan Lionel Messi usai Jadi Pahlawan Kemanusiaan\r\n\r\nSementara Mastantuono siap dilepas, Madrid berusaha mendatangkan winger lainnya dalam diri Yan Diomande.\r\n\r\nDana lebih dari 100 juta euro atau di atas Rp 2 triliun disediakan El Real guna mengangkut sang wonderkid berusia 19 tahun dari RB Leipzig.\r\n\r\nBukan tanpa alasan Diomande menjadi buruan Madrid.\r\n\r\nDia merupakan pemain yang benar-benar mampu memberikan dampak nyata.\r\n\r\nDiomande punya keahlian melewati bek dan melakukan serangan dari kedua sisi lapangan.\r\n\r\nSenjata utama Diomande adalah kecepatan.\r\n\r\nBermodalkan keunggulan berlari, pemain berpostur 180 sentimeter itu kerap bikin pemain rival kewalahan.\r\n\r\nDiomande juga punya kelebihan dalam menciptakan peluang bahkan saat sedang tidak bergerak.\r\n\r\nKeunggulan lainnya adalah si eks pemain Leganes sama-sama piawai bermain di sayap kiri maupun kanan.', 'Ade Jayadireja', 'Sport', 1, '2026-08-05 01:04:17', '2026-08-05 01:04:06', '2026-08-05 01:04:17'),
(6, 'Bahlil ungkap penyebab sejumlah wilayah di Indonesia mati listrik', 'bahlil-ungkap-penyebab-sejumlah-wilayah-di-indonesia-mati-listrik', 'blogs/MXUCikhKBhrCjHqJNPAI8um4QMHBQNQ7UERTTrZp.jpg', 'jpnn.com, JAKARTA - Menteri Energi dan Sumber Daya Mineral (ESDM) Bahlil Lahadalia mengakui masih ada sejumlah wilayah di Kalimantan dan daerah Indonesia lainnya yang mengalami pemadaman listrik.', 'jpnn.com, JAKARTA - Menteri Energi dan Sumber Daya Mineral (ESDM) Bahlil Lahadalia mengakui masih ada sejumlah wilayah di Kalimantan dan daerah Indonesia lainnya yang mengalami pemadaman listrik.\r\n\r\nHal itu dia katakan seusai rapat dan melapor kepada Presiden Prabowo Subianto mengenai sejumlah pekerjaan yang dilakukan Kementerian ESDM, pada Selasa (4/8).\r\n\r\n\"Kami harus akui di beberapa wilayah, khususnya di Kalimantan, masih ada pemadaman-pemadaman beberapa titik,” ucap Bahlil.\r\n\r\nBahlil menyebutkan pemadaman listrik tersebut bukan disebabkan oleh keterbatasan pasokan energi.\r\n\r\nBaca Juga: Sejumlah Wilayah Jakarta Bakal Mati Listrik Sabtu Malam Ini\r\n\r\n“Menurut informasi dari PLN, itu terkait dengan pemeliharaan. Bukan persoalan energinya, energinya nggak ada masalah,” kata dia.\r\n\r\nPrabowo pub menginstruksikan agar PLN dan jajaran terkait untuk segera mengambil langkah-langkah penyelesaian atas pemadaman listrik yang terjadi di sejumlah wilayah.\r\n\r\n“Dan karena itu Bapak Presiden memerintahkan kepada saya untuk segera melakukan langkah-langkah yang terukur dengan PLN agar bisa menyelesaikan dengan baik,” tutur Bahlil\r\n\r\nAdapun, hal lain yang dilaporkan Bahlil adalah terkait harga bahan bakar minyak (BBM) nasional.\r\n\r\nBaca Juga: PLN Sebut Mati Listrik di Sumatra Gara-Gara Cuaca, Astaga\r\n\r\nPrabowo mengarahkan agar stabilitas harga BBM, khususnya BBM bersubsidi, tetap terjaga.\r\n\r\nMenurutnya, pemerintah juga akan mempertimbangkan penyesuaian harga BBM nonsubsidi dengan memperhatikan perkembangan harga minyak mentah dunia.\r\n\r\n“Arahan Bapak Presiden memerintahkan agar menjaga harga BBM dengan subsidi untuk tidak boleh dinaikan, tetapi kalau memang harga ICP dunia menurun,“ tambahnya.\r\n\r\n(dit/jpnn)\r\n\r\nBaca Juga: Kenapa di Sumatra Mati Listrik? PLN Pasti Lebih Tahu', 'JPNN.COM', 'Politik', 1, '2026-08-05 01:07:03', '2026-08-05 01:06:53', '2026-08-05 01:07:03'),
(7, 'Kemenangan Sulit Kimi Antonelli di Belgia, Semua Mobil Mercedes Ternyata Rusak', 'kemenangan-sulit-kimi-antonelli-di-belgia-semua-mobil-mercedes-ternyata-rusak', 'blogs/hNOya9rkp8noKCyghmmRrPqmoyXnd8MoWmQ3UYIi.jpg', 'Bos tim Mercedes, Toto Wolff, menyebut semua mobil timnya mengalami masalah di area baterai saat menjalani balapan di Belgia.\r\nHal tersebut menyebabkan George Russell tak bisa tampil maksimal dan harus menarik diri dari balapan.\r\nSedangkan Kimi Antonelli yang keluar sebagai pemenang, sempat mendapatkan perlawanan ketat dari Charles Leclerc dan Max Verstappen sebelum mengunci kemenangan atas Leclerc dengan jarak hanya 1,9 detik.', 'TRIBUNNEWS.COM - Pembalap tim Mercedes, Kimi Antonelli, memang berhasil keluar sebagai juara di F1 seri Belgia yang digelar di Sirkuit Spa Francorchamps yang legendaris.\r\n\r\nNamun ternyata ada perjuangan yang sangat keras yang dilakukan Antonelli untuk mempertahankan posisinya tersebut.\r\n\r\nPasalnya mobil Mercedes-AMG yang ia kendarai bersama George Russell ternyata memiliki kerusakan pada bagian baterai.\r\n\r\nHal tersebut diungkapkan langsung oleh bos besar Mercedes, Toto Wolff.\r\n\r\nWolf menjabarkan mobil Antonelli dan Russell sama-sama selalu kehilangan daya ketika melahap tikungan 1 sirkuit Spa.\r\n\r\nTim Mercedes masih terus menyelidiki penyebab hal itu terjadi kepada kedua pembalapnya.\r\n\r\n\"Semua mobil Mercedes mengalami masalah itu ketika memasuki tikungan 1, tidak hanya George (Russell) saja,\" jelas Toto Wolff dikutip dari Crash.\r\n\r\n\"Itu memang memberikan efek lebih fatal kepada George daripada Kimi, tetapi Kimi juga mengalami masalahnya sendiri,\" sambungnya.\r\n\r\nMasalahnya, baterai yang tak prima itu membuat George Russell harus menyudahi balapan lebih cepat.\r\n\r\nIa mengalami crash dengan pembalap Ferrari, Lewis Hamilton, ketika balapan berlangsung belum terlalu lama.\r\n\r\nLaju Russell yang terlalu pelan di tikungan membuat Hamilton sedikit telat bereaksi dan terjadilah crash tersebut.\r\n\r\nUntungnya Hamilton bisa melanjutkan balapan, sedangkan Russell harus mengakhiri perjalanannya lebih cepat.\r\n\r\nSedangkan Kimi Antonelli beruntung lantaran posisinya sebagai pole sitter membuat dirinya lebih mudah memasuki tikungan 1.\r\n\r\n\"Saya menyelesaikan tikungan 1, dan untuk semua alasan yang ada, saya kehilangan 3-40 persen tenaga di baterai saya,\" kata George Russell.\r\n\r\n\"Saya lalu mengalami tabrakan dengan pembalap-pembalap lain,\" sambungnya.\r\n\r\nAntonelli yang mengakhiri balapan dengan poin maksimal juga bukan tanpa perlawanan.\r\n\r\nIa sempat mendapatkan perlawanan sengit dari Max Verstappen yang mendahuluinya di tikungan 1.\r\n\r\nNamun keunggulan Mercedes di jalur lurus langsung membuatnya bisa mengasapi Verstappen.\r\n\r\n\"Itu benar-benar pengalaman yang gila, jujur saja,\" terang Antonelli.\r\n\r\n\"Saya bingung dengan apa yang terjadi karena Max (Verstappen) benar-benar melaju di Eau Rouge dan mendahului saya dengan mudah, untungnya saya bisa mengambil lagi posisi saya.\"\r\n\r\n\"Lalu saya melihat Charles sudah berada di samping saya, dan saya hanya bisa berkata \'Apa yang sebenarnya sedang terjadi?\'. Saya benar-benar tidak tahu.\"\r\n\r\n\"Saya hanya mencoba mempertahankan posisi di lintasan dan terus melihat ke kaca spion karena saya melihat banyak mobil yang menyusul saya,\" ungkapnya.\r\n\r\nPada akhirnya Kimi Antonelli berhak mengantongi 25 poin setelah melahap 44 lap di sirkuit Spa dengan catatan waktu 1 jam, 24 menit, dan 42,479 detik.\r\n\r\nSementara untuk di posisi kedua, ada pembalap Ferrari, Charles Leclerc.\r\n\r\nLeclerc cuma terpaut 1,9 detik dari Antonelli untuk mengunci 18 poin.\r\n\r\nMax Verstappen yang sempat akan mengambil posisi pimpinan balapan, mengakhiri race ini dengan menempati peringkat ketiga dan berhak mendapatkan 15 poin.\r\n\r\n(Tribunnews.com/Guruh)', 'Guruh Putra Tama', 'Sport', 1, '2026-08-05 23:21:07', '2026-08-05 23:18:46', '2026-08-05 23:21:07'),
(8, 'Piala AFF 2026: Timnas Indonesia ambil langkah berbeda untuk menghadapi Singapura', 'piala-aff-2026-timnas-indonesia-ambil-langkah-berbeda-untuk-menghadapi-singapura', 'blogs/lZJruUGGBy7pfiN5B9qABdrK9WSxg6WJv8BerQXQ.jpg', 'jpnn.com - Timnas Indonesia bertolak lebih awal ke Singapura demi memaksimalkan persiapan menghadapi laga hidup-mati Grup A Piala AFF 2026.\r\n\r\nKeputusan ini diharapkan membuat skuad Garuda tampil lebih bugar saat menghadapi tuan rumah di Stadion Jalan Besar, Jumat (7/8/2026) malam WIB.\r\n\r\nRombongan Timnas Indonesia bertolak dari Bandara Soekarno-Hatta, Tangerang, Rabu (5/8/2026) sore WIB.\r\n\r\nKetua Badan Tim Nasional (BTN) PSSI Sumardji memastikan keberangkatan skuad berjalan sesuai rencana.', 'jpnn.com - Timnas Indonesia bertolak lebih awal ke Singapura demi memaksimalkan persiapan menghadapi laga hidup-mati Grup A Piala AFF 2026.\r\n\r\nKeputusan ini diharapkan membuat skuad Garuda tampil lebih bugar saat menghadapi tuan rumah di Stadion Jalan Besar, Jumat (7/8/2026) malam WIB.\r\n\r\nRombongan Timnas Indonesia bertolak dari Bandara Soekarno-Hatta, Tangerang, Rabu (5/8/2026) sore WIB.\r\n\r\nKetua Badan Tim Nasional (BTN) PSSI Sumardji memastikan keberangkatan skuad berjalan sesuai rencana.\r\n\r\nBaca Juga: Piala AFF 2026: Singapura Punya Keunggulan yang Bisa Merepotkan Timnas Indonesia\r\n\r\n\"Iya, Timnas Indonesia berangkat kemarin sore,\" kata Sumardji.\r\n\r\nKeberangkatan lebih awal ini menjadi sorotan karena berbeda dengan agenda sebelumnya saat menghadapi Timor Leste.\r\n\r\nSaat itu, Rizky Ridho dan kawan-kawan baru bertolak sehari sebelum pertandingan sehingga waktu pemulihan pemain sangat terbatas.\r\n\r\nBelajar dari pengalaman tersebut, tim asuhan John Herdman kini ingin memiliki waktu adaptasi dan pemulihan yang lebih ideal sebelum turun ke lapangan.\r\n\r\nBaca Juga: Piala AFF 2026: Singapura Pernah Jadi Korban Kebangkitan Timnas Indonesia\r\n\r\nLangkah itu diharapkan mampu menjaga kondisi fisik para pemain agar tampil maksimal dalam pertandingan yang akan menentukan nasib Indonesia di turnamen ini.\r\n\r\nLaga melawan Singapura menjadi duel krusial bagi kedua tim. Pemenangnya dipastikan melaju ke semifinal Piala AFF 2026, sedangkan tim yang kalah harus mengakhiri perjuangan di fase grup.\r\n\r\nSaat ini, Indonesia berada di peringkat ketiga klasemen sementara Grup A dengan koleksi enam poin dari tiga pertandingan.\r\n\r\nBaca Juga: Dipukul Vietnam, Timnas Indonesia Masih Punya Napas, tetapi Tak Banyak Lagi\r\n\r\nTimnas Indonesia wajib meraih kemenangan untuk memastikan satu tempat di semifinal.\r\n\r\nDi sisi lain, Singapura juga masih memiliki peluang lolos.\r\n\r\nTim besutan Gavin Lee cukup mengamankan hasil imbang untuk menjaga asa melaju ke empat besar. (dkk/jpnn)', 'JPNN.COM', 'Sport', 1, '2026-08-05 23:21:14', '2026-08-05 23:20:57', '2026-08-05 23:21:14');

-- --------------------------------------------------------

--
-- Table structure for table `cache`
--

CREATE TABLE `cache` (
  `key` varchar(255) NOT NULL,
  `value` mediumtext NOT NULL,
  `expiration` bigint(20) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `cache_locks`
--

CREATE TABLE `cache_locks` (
  `key` varchar(255) NOT NULL,
  `owner` varchar(255) NOT NULL,
  `expiration` bigint(20) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `carts`
--

CREATE TABLE `carts` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `user_id` bigint(20) UNSIGNED NOT NULL,
  `product_id` bigint(20) UNSIGNED NOT NULL,
  `quantity` int(11) NOT NULL DEFAULT 1,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `cart_items`
--

CREATE TABLE `cart_items` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `user_id` bigint(20) UNSIGNED NOT NULL,
  `product_id` bigint(20) UNSIGNED NOT NULL,
  `quantity` int(11) NOT NULL DEFAULT 1,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `categories`
--

CREATE TABLE `categories` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `name` varchar(255) NOT NULL,
  `slug` varchar(255) NOT NULL,
  `description` text DEFAULT NULL,
  `image` varchar(255) DEFAULT NULL,
  `is_active` tinyint(1) NOT NULL DEFAULT 1,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  `deleted_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `categories`
--

INSERT INTO `categories` (`id`, `name`, `slug`, `description`, `image`, `is_active`, `created_at`, `updated_at`, `deleted_at`) VALUES
(1, 'Pertanian', 'pertanian', NULL, NULL, 1, NULL, NULL, NULL),
(2, 'Kehutanan', 'kehutanan', NULL, NULL, 1, NULL, NULL, NULL),
(3, 'Manajemen', 'manajemen', NULL, NULL, 1, NULL, NULL, NULL),
(4, 'Teknologi', 'teknologi', NULL, NULL, 1, NULL, NULL, NULL),
(5, 'Bisnis', 'bisnis', NULL, NULL, 1, NULL, NULL, NULL),
(6, 'Peternakan', 'peternakan', NULL, NULL, 1, NULL, NULL, NULL),
(7, 'Perikanan', 'perikanan', NULL, NULL, 1, NULL, NULL, NULL),
(8, 'Kedokteran Hewan', 'kedokteran-hewan', NULL, NULL, 1, NULL, NULL, NULL),
(9, 'Ekonomi', 'ekonomi', NULL, NULL, 1, NULL, NULL, NULL),
(10, 'Pemasaran', 'pemasaran', NULL, NULL, 1, NULL, NULL, NULL),
(11, 'Komunikasi', 'komunikasi', NULL, NULL, 1, NULL, NULL, NULL),
(12, 'Pangan', 'pangan', NULL, NULL, 1, NULL, NULL, NULL),
(13, 'Pendidikan', 'pendidikan', NULL, NULL, 1, NULL, NULL, NULL),
(14, 'Fisika', 'fisika', NULL, NULL, 1, NULL, NULL, NULL),
(15, 'Kimia', 'kimia', NULL, NULL, 1, NULL, NULL, NULL),
(16, 'Agama Islam', 'agama-islam', NULL, NULL, 1, NULL, NULL, NULL),
(17, 'Kesehatan', 'kesehatan', NULL, NULL, 1, NULL, NULL, NULL),
(18, 'Keluarga', 'keluarga', NULL, NULL, 1, NULL, NULL, NULL),
(19, 'Pengembangan Bidang & Ilmu Spesifik', 'pengembangan-bidang-ilmu-spesifik', NULL, NULL, 1, NULL, NULL, NULL),
(20, 'Lingkungan', 'lingkungan', NULL, NULL, 1, NULL, NULL, NULL),
(21, 'Gizi', 'gizi', NULL, NULL, 1, NULL, NULL, NULL),
(22, 'Statistik / Statistika', 'statistik-statistika', NULL, NULL, 1, NULL, NULL, NULL),
(23, 'Biografi', 'biografi', NULL, NULL, 1, NULL, NULL, NULL),
(24, 'Sejarah', 'sejarah', NULL, NULL, 1, NULL, NULL, NULL),
(25, 'Matematika', 'matematika', NULL, NULL, 1, NULL, NULL, NULL),
(26, 'Biologi', 'biologi', NULL, NULL, 1, NULL, NULL, NULL),
(27, 'Sains', 'sains', NULL, NULL, 1, NULL, NULL, NULL),
(28, 'Kelautan', 'kelautan', NULL, NULL, 1, NULL, NULL, NULL),
(29, 'Bahasa', 'bahasa', NULL, NULL, 1, NULL, NULL, NULL),
(30, 'Ilmu Komputer', 'ilmu-komputer', NULL, NULL, 1, NULL, NULL, NULL),
(31, 'Iktiologi', 'iktiologi', NULL, NULL, 1, NULL, NULL, NULL),
(32, 'Pariwisata / Ekowisata', 'pariwisata-ekowisata', NULL, NULL, 1, NULL, NULL, NULL),
(33, 'Energi', 'energi', NULL, NULL, 1, NULL, NULL, NULL),
(34, 'Sosial', 'sosial', NULL, NULL, 1, NULL, NULL, NULL),
(35, 'Perkebunan', 'perkebunan', NULL, NULL, 1, NULL, NULL, NULL),
(36, 'Hukum', 'hukum', NULL, NULL, 1, NULL, NULL, NULL),
(37, 'Maritim', 'maritim', NULL, NULL, 1, NULL, NULL, NULL),
(38, 'Pajak', 'pajak', NULL, NULL, 1, NULL, NULL, NULL),
(39, 'SDM (Sumber Daya Manusia)', 'sdm-sumber-daya-manusia', NULL, NULL, 1, NULL, NULL, NULL),
(40, 'Motivasi', 'motivasi', NULL, NULL, 1, NULL, NULL, NULL),
(41, 'Kependudukan', 'kependudukan', NULL, NULL, 1, NULL, NULL, NULL),
(42, 'Kebijakan', 'kebijakan', NULL, NULL, 1, NULL, NULL, NULL),
(43, 'Pembangunan', 'pembangunan', NULL, NULL, 1, NULL, NULL, NULL),
(44, 'Fauna / Flora / Flora dan Fauna', 'fauna-flora-flora-dan-fauna', NULL, NULL, 1, NULL, NULL, NULL),
(45, 'Inovasi', 'inovasi', NULL, NULL, 1, NULL, NULL, NULL),
(46, 'Perairan', 'perairan', NULL, NULL, 1, NULL, NULL, NULL),
(47, 'Ekologi Manusia', 'ekologi-manusia', NULL, NULL, 1, NULL, NULL, NULL),
(48, 'Konsumen', 'konsumen', NULL, NULL, 1, NULL, NULL, NULL),
(49, 'Psikologi', 'psikologi', NULL, NULL, 1, NULL, NULL, NULL),
(50, 'Seni dan Budaya', 'seni-dan-budaya', NULL, NULL, 1, NULL, NULL, NULL),
(51, 'Agribisnis', 'agribisnis', NULL, NULL, 1, NULL, NULL, NULL),
(52, 'Kedokteran', 'kedokteran', NULL, NULL, 1, NULL, NULL, NULL),
(53, 'Parasitology', 'parasitology', NULL, NULL, 1, NULL, NULL, NULL),
(54, 'Perikanan & Kelautan', 'perikanan-kelautan', NULL, NULL, 1, NULL, NULL, NULL),
(55, 'Fisheries', 'fisheries', NULL, NULL, 1, NULL, NULL, NULL),
(56, 'Politik', 'politik', NULL, NULL, 1, NULL, NULL, NULL),
(57, 'Novel', 'novel', NULL, NULL, 1, NULL, NULL, NULL),
(58, 'Puisi', 'puisi', NULL, NULL, 1, NULL, NULL, NULL),
(59, 'Fiksi', 'fiksi', NULL, NULL, 1, NULL, NULL, NULL),
(60, 'Buku Anak', 'buku-anak', NULL, NULL, 1, NULL, NULL, NULL),
(61, 'Biokimia', 'biokimia', NULL, NULL, 1, NULL, NULL, NULL),
(62, 'Akuntansi', 'akuntansi', NULL, NULL, 1, NULL, NULL, NULL),
(63, 'Pemetaan', 'pemetaan', NULL, NULL, 1, NULL, NULL, NULL),
(64, 'Perkembangan Diri', 'perkembangan-diri', NULL, NULL, 1, '2026-07-23 23:45:53', '2026-07-23 23:45:53', NULL);

-- --------------------------------------------------------

--
-- Table structure for table `checkout_sessions`
--

CREATE TABLE `checkout_sessions` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `user_id` bigint(20) UNSIGNED NOT NULL,
  `session_code` varchar(255) NOT NULL,
  `total_amount` decimal(15,2) NOT NULL,
  `payment_method` varchar(255) NOT NULL,
  `voucher_id` bigint(20) UNSIGNED DEFAULT NULL,
  `voucher_discount` decimal(12,2) NOT NULL DEFAULT 0.00,
  `status` enum('pending','paid','confirmed','cancelled') NOT NULL DEFAULT 'pending',
  `proof_image` varchar(255) DEFAULT NULL,
  `proof_uploaded_at` timestamp NULL DEFAULT NULL,
  `qr_code_path` varchar(255) DEFAULT NULL,
  `payment_details` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`payment_details`)),
  `confirmed_at` timestamp NULL DEFAULT NULL,
  `expires_at` timestamp NULL DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `checkout_sessions`
--

INSERT INTO `checkout_sessions` (`id`, `user_id`, `session_code`, `total_amount`, `payment_method`, `voucher_id`, `voucher_discount`, `status`, `proof_image`, `proof_uploaded_at`, `qr_code_path`, `payment_details`, `confirmed_at`, `expires_at`, `created_at`, `updated_at`) VALUES
(1, 4, 'SESS-20260727-93FD', 751000.00, 'E-Wallet', NULL, 0.00, 'confirmed', 'proofs/sessions/WzpEmE09DOklOnpeKXVZ6ajyQV61BsCcM9i9TNhW.jpg', '2026-07-26 21:11:55', NULL, NULL, '2026-07-26 21:33:13', '2026-07-27 21:11:44', '2026-07-26 21:11:44', '2026-07-26 21:33:13'),
(2, 3, 'SESS-20260727-A869', 592800.00, 'Transfer Bank', 2, 64200.00, 'confirmed', 'proofs/sessions/KxaqTMdGdq2FT8KS6ZyvEiNtOKcZCwblhD5TGFOC.jpg', '2026-07-26 23:26:53', NULL, NULL, '2026-07-26 23:30:08', '2026-07-27 23:26:34', '2026-07-26 23:26:34', '2026-07-26 23:30:08'),
(3, 4, 'SESS-20260803-3EE3', 303900.00, 'QRIS', 2, 32100.00, 'confirmed', 'proofs/sessions/xBdmZV8iiZzhKmZEiVGzERq9Up9ykovoUe05Rwzg.png', '2026-08-02 21:44:07', 'qris/sess_SESS-20260803-3EE3.svg', '{\"qris_data\":\"Generated QRIS for session SESS-20260803-3EE3\",\"merchant\":\"UPress Indonesia\",\"valid_until\":\"2026-08-04T04:42:49+00:00\"}', '2026-08-02 21:45:24', '2026-08-03 21:42:47', '2026-08-02 21:42:47', '2026-08-02 21:45:24'),
(4, 4, 'SESS-20260803-1C5E', 212000.00, 'E-Wallet', NULL, 0.00, 'confirmed', 'proofs/sessions/QKxz6QfmJcIyketNnWST8pBNRzkLcTCj2yEzbemI.jpg', '2026-08-02 23:30:22', NULL, NULL, '2026-08-02 23:32:00', '2026-08-03 23:29:55', '2026-08-02 23:29:55', '2026-08-02 23:32:00'),
(5, 4, 'SESS-20260804-097D', 225000.00, 'QRIS', NULL, 0.00, 'confirmed', 'proofs/sessions/g3rdSwlvNUh7spY5HoYYt8pyedzbtrJ5iG6YTEJN.jpg', '2026-08-04 00:19:11', 'qris/sess_SESS-20260804-097D.svg', '{\"qris_data\":\"Generated QRIS for session SESS-20260804-097D\",\"merchant\":\"UPress Indonesia\",\"valid_until\":\"2026-08-05T07:18:57+00:00\"}', '2026-08-04 00:22:00', '2026-08-05 00:18:56', '2026-08-04 00:18:56', '2026-08-04 00:22:00'),
(6, 4, 'SESS-20260812-929C', 1304000.00, 'E-Wallet', NULL, 0.00, 'confirmed', 'proofs/sessions/n9OWqbVnWFD19REfRJr85Bf1xFmRugC7TLsio9gO.png', '2026-08-11 23:57:54', NULL, NULL, '2026-08-12 00:22:09', '2026-08-12 23:57:08', '2026-08-11 23:57:08', '2026-08-12 00:22:09');

-- --------------------------------------------------------

--
-- Table structure for table `failed_jobs`
--

CREATE TABLE `failed_jobs` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `uuid` varchar(255) NOT NULL,
  `connection` varchar(255) NOT NULL,
  `queue` varchar(255) NOT NULL,
  `payload` longtext NOT NULL,
  `exception` longtext NOT NULL,
  `failed_at` timestamp NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `hero_sliders`
--

CREATE TABLE `hero_sliders` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `title` varchar(255) DEFAULT NULL,
  `description` text DEFAULT NULL,
  `badge` varchar(255) DEFAULT NULL,
  `image` varchar(255) NOT NULL,
  `primary_button` varchar(255) DEFAULT NULL,
  `primary_button_url` varchar(255) NOT NULL DEFAULT '/catalog',
  `secondary_button` varchar(255) DEFAULT NULL,
  `secondary_button_url` varchar(255) DEFAULT NULL,
  `is_active` tinyint(1) NOT NULL DEFAULT 1,
  `sort_order` int(11) NOT NULL DEFAULT 0,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `hero_sliders`
--

INSERT INTO `hero_sliders` (`id`, `title`, `description`, `badge`, `image`, `primary_button`, `primary_button_url`, `secondary_button`, `secondary_button_url`, `is_active`, `sort_order`, `created_at`, `updated_at`) VALUES
(5, NULL, NULL, NULL, 'hero-sliders/TEAi3EAi4BYJB2LnmHDUBgUSROubjTPj7C4eP7Pj.jpg', 'Belanja Sekarang', '/catalog', 'Lihat Katalog', NULL, 1, 0, '2026-08-12 20:36:23', '2026-08-12 20:39:58'),
(6, NULL, NULL, NULL, 'hero-sliders/Ti8ONATvRa8XuM0JBBdevp7sDFoRP5hbjykd1IpP.jpg', 'Belanja Sekarang', '/catalog', 'Lihat Katalog', NULL, 1, 0, '2026-08-12 20:37:05', '2026-08-12 20:37:05');

-- --------------------------------------------------------

--
-- Table structure for table `jobs`
--

CREATE TABLE `jobs` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `queue` varchar(255) NOT NULL,
  `payload` longtext NOT NULL,
  `attempts` smallint(5) UNSIGNED NOT NULL,
  `reserved_at` int(10) UNSIGNED DEFAULT NULL,
  `available_at` int(10) UNSIGNED NOT NULL,
  `created_at` int(10) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `job_batches`
--

CREATE TABLE `job_batches` (
  `id` varchar(255) NOT NULL,
  `name` varchar(255) NOT NULL,
  `total_jobs` int(11) NOT NULL,
  `pending_jobs` int(11) NOT NULL,
  `failed_jobs` int(11) NOT NULL,
  `failed_job_ids` longtext NOT NULL,
  `options` mediumtext DEFAULT NULL,
  `cancelled_at` int(11) DEFAULT NULL,
  `created_at` int(11) NOT NULL,
  `finished_at` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `migrations`
--

CREATE TABLE `migrations` (
  `id` int(10) UNSIGNED NOT NULL,
  `migration` varchar(255) NOT NULL,
  `batch` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `migrations`
--

INSERT INTO `migrations` (`id`, `migration`, `batch`) VALUES
(1, '0001_01_01_000000_create_users_table', 1),
(2, '0001_01_01_000001_create_cache_table', 1),
(3, '0001_01_01_000002_create_jobs_table', 1),
(4, '2026_07_07_014951_create_personal_access_tokens_table', 1),
(5, '2026_07_08_023046_create_categories_table', 1),
(6, '2026_07_08_023047_create_products_table', 1),
(7, '2026_07_08_023050_create_product_images_table', 1),
(8, '2026_07_08_023052_create_carts_table', 1),
(9, '2026_07_08_023053_create_addresses_table', 1),
(10, '2026_07_08_023054_create_cart_items_table', 1),
(11, '2026_07_08_023055_create_orders_table', 1),
(12, '2026_07_08_023056_create_order_items_table', 1),
(13, '2026_07_08_023057_create_payments_table', 1),
(14, '2026_07_08_023058_create_banners_table', 1),
(15, '2026_07_13_061418_create_hero_sliders_table', 1),
(16, '2026_07_13_071115_add_home_flags_to_products_table', 1),
(17, '2026_07_14_012809_create_wishlists_table', 1),
(18, '2026_07_15_034926_add_product_to_carts_table', 1),
(19, '2026_07_16_082122_create_universities_table', 1),
(20, '2026_07_17_022708_add_university_id_to_users_table', 1),
(21, '2026_07_17_023008_add_university_id_to_products_table', 1),
(22, '2026_07_17_025049_make_birth_date_nullable_on_users_table', 1),
(23, '2026_07_18_014640_modify_products_table_for_marketplace', 1),
(24, '2026_07_18_014648_add_university_id_to_order_items_table', 1),
(25, '2026_07_18_014754_create_payouts_table', 1),
(26, '2026_07_18_023809_fix_products_type_image_nullable', 1),
(27, '2026_07_18_024942_create_reviews_table', 1),
(28, '2026_07_21_020455_add_points_to_users_table', 1),
(29, '2026_07_21_020515_add_points_columns_to_orders_table', 1),
(30, '2026_07_21_020518_create_point_transactions_table', 1),
(31, '2026_07_22_011922_add_registration_letter_to_universities_table', 1),
(32, '2026_07_22_022243_add_performance_indexes_to_products_and_orders_tables', 1),
(33, '2026_07_23_034521_add_google_id_to_users_table', 2),
(34, '2026_07_23_050000_make_phone_nullable_on_users_table', 3),
(35, '2026_07_23_065817_add_proof_image_to_payments_table', 3),
(36, '2026_07_24_000001_add_seller_fields_to_users_table', 4),
(37, '2026_07_24_000002_add_seller_id_to_products_table', 4),
(38, '2026_07_24_100001_create_notifications_table', 5),
(39, '2026_07_24_062730_add_gender_to_users_table', 6),
(40, '2026_07_27_013058_make_address_fields_nullable_on_orders_table', 7),
(41, '2026_07_27_100001_create_checkout_sessions_table', 8),
(42, '2026_07_27_110001_create_vouchers_table', 9),
(43, '2026_07_27_074801_add_sort_order_to_universities_table', 10),
(44, '2026_08_04_041206_create_banners_table', 11),
(45, '2026_08_04_060714_create_blogs_table', 12),
(46, '2026_08_06_022814_add_button_urls_to_hero_sliders_table', 13),
(47, '2026_08_13_033538_make_hero_slider_title_nullable', 14);

-- --------------------------------------------------------

--
-- Table structure for table `notifications`
--

CREATE TABLE `notifications` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `user_id` bigint(20) UNSIGNED NOT NULL,
  `type` varchar(60) NOT NULL,
  `title` varchar(255) NOT NULL,
  `body` text NOT NULL,
  `action_url` varchar(255) DEFAULT NULL,
  `data` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`data`)),
  `read_at` timestamp NULL DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `notifications`
--

INSERT INTO `notifications` (`id`, `user_id`, `type`, `title`, `body`, `action_url`, `data`, `read_at`, `created_at`, `updated_at`) VALUES
(1, 4, 'order_status', 'Status Pesanan Diperbarui', 'Pesanan #3 sekarang berstatus: completed.', '/orders/3', '{\"order_id\":3,\"status\":\"completed\"}', '2026-07-23 20:51:14', '2026-07-23 20:44:47', '2026-07-23 20:51:14'),
(2, 1, 'new_order', 'Pesanan Baru Masuk', 'Faiz Bayu baru saja membuat pesanan #4.', '/admin/orders/4', '{\"order_id\":4}', NULL, '2026-07-26 18:33:25', '2026-07-26 18:33:25'),
(3, 1, 'payment_proof', 'Bukti Pembayaran Diterima', 'Faiz Bayu mengunggah bukti pembayaran untuk pesanan #4.', '/admin/orders/4', '{\"order_id\":4}', NULL, '2026-07-26 18:36:58', '2026-07-26 18:36:58'),
(4, 4, 'payment_confirmed', 'Pembayaran Dikonfirmasi', 'Pembayaran untuk pesanan INV20260727013325 telah dikonfirmasi oleh penjual. Pesanan sedang diproses.', '/orders/4', '{\"order_id\":4}', '2026-07-26 19:18:51', '2026-07-26 18:57:34', '2026-07-26 19:18:51'),
(5, 1, 'order_completed', 'Pesanan Selesai', 'Pesanan INV20260727021828 dari Faiz Bayu telah selesai.', '/admin/orders/5', '{\"order_id\":5}', NULL, '2026-07-26 19:19:19', '2026-07-26 19:19:19'),
(6, 4, 'payment_confirmed', 'Pembayaran Dikonfirmasi', 'Pembayaran untuk pesanan INV20260727021828 telah dikonfirmasi oleh penjual. Pesanan sedang diproses.', '/orders/5', '{\"order_id\":5}', '2026-07-26 19:28:38', '2026-07-26 19:19:19', '2026-07-26 19:28:38'),
(7, 4, 'payment_confirmed', 'Pembayaran Dikonfirmasi', 'Pembayaran untuk pesanan INV2026072704114401 telah dikonfirmasi oleh penjual. Pesanan sedang diproses.', '/orders/7', '{\"order_id\":7}', NULL, '2026-07-26 21:33:13', '2026-07-26 21:33:13'),
(8, 4, 'payment_confirmed', 'Pembayaran Dikonfirmasi', 'Pembayaran untuk pesanan INV2026072704114402 telah dikonfirmasi oleh penjual. Pesanan sedang diproses.', '/orders/8', '{\"order_id\":8}', NULL, '2026-07-26 21:33:13', '2026-07-26 21:33:13'),
(9, 4, 'order_status', 'Status Pesanan Diperbarui', 'Pesanan INV2026072704114401 sekarang berstatus: Dalam Pengiriman.', '/orders/7', '{\"order_id\":7,\"status\":\"shipped\"}', NULL, '2026-07-26 21:33:36', '2026-07-26 21:33:36'),
(10, 4, 'order_status', 'Status Pesanan Diperbarui', 'Pesanan INV2026072704114402 sekarang berstatus: Dalam Pengiriman.', '/orders/8', '{\"order_id\":8,\"status\":\"shipped\"}', NULL, '2026-07-26 21:33:56', '2026-07-26 21:33:56'),
(11, 3, 'payment_confirmed', 'Pembayaran Dikonfirmasi', 'Pembayaran untuk pesanan INV2026072706263401 telah dikonfirmasi oleh penjual. Pesanan sedang diproses.', '/orders/9', '{\"order_id\":9}', NULL, '2026-07-26 23:30:08', '2026-07-26 23:30:08'),
(12, 4, 'payment_confirmed', 'Pembayaran Dikonfirmasi', 'Pembayaran untuk pesanan INV2026080304424701 telah dikonfirmasi oleh penjual. Pesanan sedang diproses.', '/orders/10', '{\"order_id\":10}', NULL, '2026-08-02 21:45:24', '2026-08-02 21:45:24'),
(13, 4, 'payment_confirmed', 'Pembayaran Dikonfirmasi', 'Pembayaran untuk pesanan INV2026080306295501 telah dikonfirmasi oleh penjual. Pesanan sedang diproses.', '/orders/11', '{\"order_id\":11}', NULL, '2026-08-02 23:32:00', '2026-08-02 23:32:00'),
(14, 4, 'payment_confirmed', 'Pembayaran Dikonfirmasi', 'Pembayaran untuk pesanan INV2026080407185601 telah dikonfirmasi oleh penjual. Pesanan sedang diproses.', '/orders/12', '{\"order_id\":12}', NULL, '2026-08-04 00:22:00', '2026-08-04 00:22:00'),
(15, 4, 'payment_confirmed', 'Pembayaran Dikonfirmasi', 'Pembayaran untuk pesanan INV20260727025133 telah dikonfirmasi oleh penjual. Pesanan sedang diproses.', '/orders/6', '{\"order_id\":6}', NULL, '2026-08-12 00:20:36', '2026-08-12 00:20:36'),
(16, 4, 'payment_confirmed', 'Pembayaran Dikonfirmasi', 'Pembayaran untuk pesanan INV2026081206570801 telah dikonfirmasi oleh penjual. Pesanan sedang diproses.', '/orders/13', '{\"order_id\":13}', NULL, '2026-08-12 00:22:09', '2026-08-12 00:22:09'),
(17, 1, 'order_completed', 'Pesanan Selesai', 'Pesanan INV2026072704114401 dari Faiz Bayu telah selesai.', '/admin/orders/7', '{\"order_id\":7}', NULL, '2026-08-12 00:22:42', '2026-08-12 00:22:42'),
(18, 4, 'order_status', 'Status Pesanan Diperbarui', 'Pesanan INV2026072704114401 sekarang berstatus: Selesai.', '/orders/7', '{\"order_id\":7,\"status\":\"completed\"}', NULL, '2026-08-12 00:22:42', '2026-08-12 00:22:42'),
(19, 3, 'order_status', 'Status Pesanan Diperbarui', 'Pesanan INV2026072706263401 sekarang berstatus: Dalam Pengiriman.', '/orders/9', '{\"order_id\":9,\"status\":\"shipped\"}', NULL, '2026-08-12 00:22:49', '2026-08-12 00:22:49'),
(20, 4, 'order_status', 'Status Pesanan Diperbarui', 'Pesanan INV20260727025133 sekarang berstatus: Dalam Pengiriman.', '/orders/6', '{\"order_id\":6,\"status\":\"shipped\"}', NULL, '2026-08-12 00:34:33', '2026-08-12 00:34:33'),
(21, 4, 'order_status', 'Status Pesanan Diperbarui', 'Pesanan INV2026080304424701 sekarang berstatus: Dalam Pengiriman.', '/orders/10', '{\"order_id\":10,\"status\":\"shipped\"}', NULL, '2026-08-12 00:34:33', '2026-08-12 00:34:33'),
(22, 4, 'order_status', 'Status Pesanan Diperbarui', 'Pesanan INV2026081206570801 sekarang berstatus: Dalam Pengiriman.', '/orders/13', '{\"order_id\":13,\"status\":\"shipped\"}', NULL, '2026-08-12 00:34:33', '2026-08-12 00:34:33'),
(23, 1, 'order_completed', 'Pesanan Selesai', 'Pesanan INV20260727025133 dari Faiz Bayu telah selesai.', '/admin/orders/6', '{\"order_id\":6}', NULL, '2026-08-12 00:34:44', '2026-08-12 00:34:44'),
(24, 4, 'order_status', 'Status Pesanan Diperbarui', 'Pesanan INV20260727025133 sekarang berstatus: Selesai.', '/orders/6', '{\"order_id\":6,\"status\":\"completed\"}', NULL, '2026-08-12 00:34:44', '2026-08-12 00:34:44'),
(25, 1, 'order_completed', 'Pesanan Selesai', 'Pesanan INV2026072706263401 dari Greesella Adhalia telah selesai.', '/admin/orders/9', '{\"order_id\":9}', NULL, '2026-08-12 00:34:44', '2026-08-12 00:34:44'),
(26, 3, 'order_status', 'Status Pesanan Diperbarui', 'Pesanan INV2026072706263401 sekarang berstatus: Selesai.', '/orders/9', '{\"order_id\":9,\"status\":\"completed\"}', NULL, '2026-08-12 00:34:44', '2026-08-12 00:34:44'),
(27, 1, 'order_completed', 'Pesanan Selesai', 'Pesanan INV2026080304424701 dari Faiz Bayu telah selesai.', '/admin/orders/10', '{\"order_id\":10}', NULL, '2026-08-12 00:34:44', '2026-08-12 00:34:44'),
(28, 4, 'order_status', 'Status Pesanan Diperbarui', 'Pesanan INV2026080304424701 sekarang berstatus: Selesai.', '/orders/10', '{\"order_id\":10,\"status\":\"completed\"}', NULL, '2026-08-12 00:34:44', '2026-08-12 00:34:44'),
(29, 1, 'order_completed', 'Pesanan Selesai', 'Pesanan INV2026081206570801 dari Faiz Bayu telah selesai.', '/admin/orders/13', '{\"order_id\":13}', NULL, '2026-08-12 00:34:44', '2026-08-12 00:34:44'),
(30, 4, 'order_status', 'Status Pesanan Diperbarui', 'Pesanan INV2026081206570801 sekarang berstatus: Selesai.', '/orders/13', '{\"order_id\":13,\"status\":\"completed\"}', NULL, '2026-08-12 00:34:44', '2026-08-12 00:34:44');

-- --------------------------------------------------------

--
-- Table structure for table `orders`
--

CREATE TABLE `orders` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `user_id` bigint(20) UNSIGNED NOT NULL,
  `checkout_session_id` bigint(20) UNSIGNED DEFAULT NULL,
  `order_number` varchar(255) NOT NULL,
  `subtotal` decimal(12,2) NOT NULL,
  `shipping_cost` decimal(12,2) NOT NULL DEFAULT 0.00,
  `total` decimal(12,2) NOT NULL,
  `points_used` int(11) NOT NULL DEFAULT 0,
  `points_earned` int(11) NOT NULL DEFAULT 0,
  `status` varchar(255) NOT NULL DEFAULT 'pending',
  `recipient_name` varchar(255) DEFAULT NULL,
  `phone` varchar(255) DEFAULT NULL,
  `address` text DEFAULT NULL,
  `city` varchar(255) DEFAULT NULL,
  `province` varchar(255) DEFAULT NULL,
  `postal_code` varchar(255) DEFAULT NULL,
  `payment_method` varchar(255) DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `orders`
--

INSERT INTO `orders` (`id`, `user_id`, `checkout_session_id`, `order_number`, `subtotal`, `shipping_cost`, `total`, `points_used`, `points_earned`, `status`, `recipient_name`, `phone`, `address`, `city`, `province`, `postal_code`, `payment_method`, `created_at`, `updated_at`) VALUES
(1, 4, NULL, 'INV20260722065424', 130000.00, 15000.00, 145000.00, 0, 145, 'completed', 'Faiz Bayu', '085889126070', 'Bogor, Jawa Barat', 'London', 'Jawa Barat', '16070', 'QRIS', '2026-07-21 23:54:24', '2026-07-22 23:48:57'),
(2, 4, NULL, 'INV20260723065640', 125000.00, 15000.00, 140000.00, 0, 140, 'cancelled', 'Faiz Bayu', '085889126070', 'St Louis', 'London', 'Jawa Barat', '16070', 'QRIS', '2026-07-22 23:56:40', '2026-07-23 00:20:19'),
(3, 4, NULL, 'INV20260723072128', 198000.00, 15000.00, 213000.00, 0, 213, 'completed', 'Faiz Bayu', '085889126070', 'St Louis', 'London', 'Jawa Barat', '16070', 'QRIS', '2026-07-23 00:21:28', '2026-07-23 20:44:47'),
(4, 4, NULL, 'INV20260727013325', 50000.00, 0.00, 50000.00, 0, 50, 'processing', 'Faiz Bayu', '085889126070', NULL, NULL, NULL, NULL, 'E-Wallet', '2026-07-26 18:33:25', '2026-07-26 18:57:34'),
(5, 4, NULL, 'INV20260727021828', 50000.00, 0.00, 50000.00, 0, 50, 'completed', 'Faiz Bayu', '085889126070', NULL, NULL, NULL, NULL, 'Transfer Bank', '2026-07-26 19:18:28', '2026-07-26 19:19:19'),
(6, 4, NULL, 'INV20260727025133', 471000.00, 35000.00, 506000.00, 0, 506, 'completed', 'Faiz Bayu', '085889126070', 'St Louis', 'London', 'Jawa Barat', '16070', 'QRIS', '2026-07-26 19:51:33', '2026-08-12 00:34:44'),
(7, 4, 1, 'INV2026072704114401', 636000.00, 12962.00, 648962.00, 0, 648, 'completed', 'Faiz Bayu', '085889126070', 'St Louis', 'London', 'Jawa Barat', '16070', 'E-Wallet', '2026-07-26 21:11:44', '2026-08-12 00:22:42'),
(8, 4, 1, 'INV2026072704114402', 100000.00, 2038.00, 102038.00, 0, 103, 'shipped', 'Faiz Bayu', '085889126070', 'St Louis', 'London', 'Jawa Barat', '16070', 'E-Wallet', '2026-07-26 21:11:44', '2026-07-26 21:33:56'),
(9, 3, 2, 'INV2026072706263401', 642000.00, 15000.00, 657000.00, 0, 657, 'completed', 'Greesella Adhalia', '083333333333', 'Fatmawati', 'Jakarta Selatan', 'DKI Jakarta', '10000', 'Transfer Bank', '2026-07-26 23:26:34', '2026-08-12 00:34:44'),
(10, 4, 3, 'INV2026080304424701', 321000.00, 15000.00, 336000.00, 0, 336, 'completed', 'Faiz Bayu', '085889126070', 'Surabaya, East Java, Indonesia', 'Bandung', 'Jawa Barat', '16070', 'QRIS', '2026-08-02 21:42:47', '2026-08-12 00:34:44'),
(11, 4, 4, 'INV2026080306295501', 200000.00, 12000.00, 212000.00, 0, 212, 'processing', 'Faiz Bayu', '085889126070', 'Surabaya, East Java, Indonesia', 'Surabaya', 'Jawa Timur', '60233', 'E-Wallet', '2026-08-02 23:29:55', '2026-08-02 23:32:00'),
(12, 4, 5, 'INV2026080407185601', 200000.00, 25000.00, 225000.00, 0, 225, 'processing', 'Faiz Bayu', '085889126070', 'St Louis', 'Surakarta', 'Jawa Tengah', '16070', 'QRIS', '2026-08-04 00:18:56', '2026-08-04 00:22:00'),
(13, 4, 6, 'INV2026081206570801', 1284000.00, 20000.00, 1304000.00, 0, 1304, 'completed', 'Faiz Bayu', '085889126070', 'CF45+CRF, Seuot Tunong, Kec. Indrapuri, Kabupaten Aceh Besar, Aceh 23373', 'Aceh Barat', 'Aceh', '23373', 'E-Wallet', '2026-08-11 23:57:08', '2026-08-12 00:34:44');

-- --------------------------------------------------------

--
-- Table structure for table `order_items`
--

CREATE TABLE `order_items` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `order_id` bigint(20) UNSIGNED NOT NULL,
  `product_id` bigint(20) UNSIGNED NOT NULL,
  `university_id` bigint(20) UNSIGNED DEFAULT NULL,
  `quantity` int(11) NOT NULL,
  `price` decimal(12,2) NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `order_items`
--

INSERT INTO `order_items` (`id`, `order_id`, `product_id`, `university_id`, `quantity`, `price`, `created_at`, `updated_at`) VALUES
(1, 1, 2, NULL, 1, 130000.00, '2026-07-21 23:54:24', '2026-07-21 23:54:24'),
(2, 2, 3, NULL, 1, 125000.00, '2026-07-22 23:56:40', '2026-07-22 23:56:40'),
(3, 3, 4, NULL, 2, 99000.00, '2026-07-23 00:21:28', '2026-07-23 00:21:28'),
(4, 4, 8, NULL, 1, 50000.00, '2026-07-26 18:33:25', '2026-07-26 18:33:25'),
(5, 5, 8, NULL, 1, 50000.00, '2026-07-26 19:18:28', '2026-07-26 19:18:28'),
(6, 6, 11, NULL, 1, 150000.00, '2026-07-26 19:51:33', '2026-07-26 19:51:33'),
(7, 6, 10, NULL, 1, 321000.00, '2026-07-26 19:51:33', '2026-07-26 19:51:33'),
(8, 7, 9, 6, 1, 315000.00, '2026-07-26 21:11:44', '2026-07-26 21:11:44'),
(9, 7, 10, 6, 1, 321000.00, '2026-07-26 21:11:44', '2026-07-26 21:11:44'),
(10, 8, 1, 2, 1, 100000.00, '2026-07-26 21:11:44', '2026-07-26 21:11:44'),
(11, 9, 10, 6, 2, 321000.00, '2026-07-26 23:26:34', '2026-07-26 23:26:34'),
(12, 10, 10, 6, 1, 321000.00, '2026-08-02 21:42:47', '2026-08-02 21:42:47'),
(13, 11, 12, 7, 1, 200000.00, '2026-08-02 23:29:55', '2026-08-02 23:29:55'),
(14, 12, 12, 7, 1, 200000.00, '2026-08-04 00:18:56', '2026-08-04 00:18:56'),
(15, 13, 10, 6, 4, 321000.00, '2026-08-11 23:57:08', '2026-08-11 23:57:08');

-- --------------------------------------------------------

--
-- Table structure for table `password_reset_tokens`
--

CREATE TABLE `password_reset_tokens` (
  `email` varchar(255) NOT NULL,
  `token` varchar(255) NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `password_reset_tokens`
--

INSERT INTO `password_reset_tokens` (`email`, `token`, `created_at`) VALUES
('faizbayu91@gmail.com', '$2y$12$Jr7zUzAKJljPJU9M/ePAjOiN1OcPh0QHpghA9gW3fjgZAFNDH8gCS', '2026-08-09 19:21:32');

-- --------------------------------------------------------

--
-- Table structure for table `payments`
--

CREATE TABLE `payments` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `order_id` bigint(20) UNSIGNED NOT NULL,
  `payment_method` varchar(255) NOT NULL,
  `amount` decimal(15,2) NOT NULL,
  `status` enum('pending','paid','failed','expired') NOT NULL DEFAULT 'pending',
  `qr_code_path` varchar(255) DEFAULT NULL,
  `proof_image` varchar(255) DEFAULT NULL,
  `proof_uploaded_at` timestamp NULL DEFAULT NULL,
  `payment_details` text DEFAULT NULL,
  `paid_at` timestamp NULL DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `payments`
--

INSERT INTO `payments` (`id`, `order_id`, `payment_method`, `amount`, `status`, `qr_code_path`, `proof_image`, `proof_uploaded_at`, `payment_details`, `paid_at`, `created_at`, `updated_at`) VALUES
(1, 1, 'QRIS', 145000.00, 'pending', 'qris/qr_INV20260722065424.svg', NULL, NULL, '{\"qris_data\":\"Generated QRIS for order INV20260722065424\",\"merchant\":\"UPress Indonesia\",\"valid_until\":\"2026-07-23T06:54:25+00:00\"}', NULL, '2026-07-21 23:54:24', '2026-07-21 23:54:25'),
(2, 2, 'QRIS', 140000.00, 'pending', 'qris/qr_INV20260723065640.svg', NULL, NULL, '{\"qris_data\":\"Generated QRIS for order INV20260723065640\",\"merchant\":\"UPress Indonesia\",\"valid_until\":\"2026-07-24T06:56:42+00:00\"}', NULL, '2026-07-22 23:56:40', '2026-07-22 23:56:42'),
(3, 3, 'QRIS', 213000.00, 'paid', 'qris/qr_INV20260723072128.svg', 'proofs/yYEDLAiG6LxgpKTjzsyfrln4Ri7n8kp03xNXyzkT.png', '2026-07-23 00:46:47', '{\"qris_data\":\"Generated QRIS for order INV20260723072128\",\"merchant\":\"UPress Indonesia\",\"valid_until\":\"2026-07-24T07:21:29+00:00\"}', '2026-07-23 00:47:13', '2026-07-23 00:21:28', '2026-07-23 00:47:13'),
(4, 4, 'E-Wallet', 50000.00, 'paid', NULL, 'proofs/L9ASFwgWcLl1esTZIW2W3xtC1v8E8okxJLLWa3iG.png', '2026-07-26 18:36:58', NULL, '2026-07-26 18:57:34', '2026-07-26 18:33:25', '2026-07-26 18:57:34'),
(5, 5, 'Transfer Bank', 50000.00, 'paid', NULL, 'proofs/aweCBSeveqrW6J2flARpyqnWBqOKAJbyBWS8GARB.png', '2026-07-26 19:18:40', NULL, '2026-07-26 19:19:19', '2026-07-26 19:18:28', '2026-07-26 19:19:19'),
(6, 6, 'QRIS', 506000.00, 'paid', 'qris/qr_INV20260727025133.svg', 'proofs/prHQoDJ8Wk25AO1gOKCFnuJjoYtlOlFT9WywtGum.png', '2026-07-26 19:51:57', '{\"qris_data\":\"Generated QRIS for order INV20260727025133\",\"merchant\":\"UPress Indonesia\",\"valid_until\":\"2026-07-28T02:51:35+00:00\"}', '2026-08-12 00:20:36', '2026-07-26 19:51:33', '2026-08-12 00:20:36');

-- --------------------------------------------------------

--
-- Table structure for table `payouts`
--

CREATE TABLE `payouts` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `university_id` bigint(20) UNSIGNED NOT NULL,
  `amount` decimal(12,2) NOT NULL,
  `status` enum('pending','processing','completed','rejected') NOT NULL DEFAULT 'pending',
  `bank_name` varchar(255) DEFAULT NULL,
  `account_number` varchar(255) DEFAULT NULL,
  `account_name` varchar(255) DEFAULT NULL,
  `notes` text DEFAULT NULL,
  `processed_at` timestamp NULL DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `personal_access_tokens`
--

CREATE TABLE `personal_access_tokens` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `tokenable_type` varchar(255) NOT NULL,
  `tokenable_id` bigint(20) UNSIGNED NOT NULL,
  `name` text NOT NULL,
  `token` varchar(64) NOT NULL,
  `abilities` text DEFAULT NULL,
  `last_used_at` timestamp NULL DEFAULT NULL,
  `expires_at` timestamp NULL DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `personal_access_tokens`
--

INSERT INTO `personal_access_tokens` (`id`, `tokenable_type`, `tokenable_id`, `name`, `token`, `abilities`, `last_used_at`, `expires_at`, `created_at`, `updated_at`) VALUES
(1, 'App\\Models\\User', 1, 'auth_token', '6159e75a8c507b9d8b614b44ab7f3c143a8c75f0b420fbd625cfb38233a8bec3', '[\"*\"]', '2026-07-21 21:55:07', NULL, '2026-07-21 21:20:47', '2026-07-21 21:55:07'),
(2, 'App\\Models\\User', 3, 'auth_token', '0dc0611863a8f30b4dd6c11480ca7a03671e064e8e7a9d0b5f9bf492905fbad2', '[\"*\"]', '2026-07-27 23:32:52', NULL, '2026-07-21 21:30:21', '2026-07-27 23:32:52'),
(3, 'App\\Models\\User', 1, 'auth_token', 'c1b9a2df6407e05cc5a8403951ba420a625e67e25ae95e084f51abf4d348efb5', '[\"*\"]', '2026-07-21 23:20:02', NULL, '2026-07-21 23:14:47', '2026-07-21 23:20:02'),
(4, 'App\\Models\\User', 4, 'auth_token', 'ae9732d567cfb81de0cfa71dde714ca5971d67995d3363b43618385c39db03ea', '[\"*\"]', '2026-07-22 00:15:16', NULL, '2026-07-21 23:53:22', '2026-07-22 00:15:16'),
(5, 'App\\Models\\User', 4, 'auth_token', '3a2d33e005f23394bb5fcb18777936eff6592bda8b65927acaa70f212bcc6ab0', '[\"*\"]', '2026-07-22 21:08:31', NULL, '2026-07-22 00:37:12', '2026-07-22 21:08:31'),
(6, 'App\\Models\\User', 1, 'auth_token', 'ef70829be7087eaf626b3320e80116c1237773e6bd356aa66c164772bce06dcf', '[\"*\"]', '2026-07-22 20:44:53', NULL, '2026-07-22 00:43:34', '2026-07-22 20:44:53'),
(7, 'App\\Models\\User', 6, 'auth_token', '63df5e7ca9c285bc972ac73c76f09ab00e5c50a6a47899729101945c7e6ada8b', '[\"*\"]', '2026-07-22 20:47:59', NULL, '2026-07-22 00:46:27', '2026-07-22 20:47:59'),
(8, 'App\\Models\\User', 5, 'auth_token', 'e1df5e1b11d7851190c2952f91a56c25da3c2bd504c4cdda366a0196078e485b', '[\"*\"]', '2026-07-24 05:00:50', NULL, '2026-07-22 00:46:31', '2026-07-24 05:00:50'),
(9, 'App\\Models\\User', 7, 'auth_token', '90a09cd2e14c0281324d1d7f80ba39fa3022d9475aa6dae054f31cab1c7e5f97', '[\"*\"]', '2026-07-26 22:06:56', NULL, '2026-07-22 00:46:39', '2026-07-26 22:06:56'),
(10, 'App\\Models\\User', 9, 'auth_token', 'cc78e6b6972937d83697fda5405c1ded3efb3f940feab00363e863410a62d6f0', '[\"*\"]', '2026-07-22 20:44:50', NULL, '2026-07-22 18:49:50', '2026-07-22 20:44:50'),
(11, 'App\\Models\\User', 8, 'auth_token', 'ac5da40edeff05f0d9428dc5252b0a9cfbe92cb7a4e7c2c9cc7e3b58da3310a5', '[\"*\"]', '2026-07-22 20:47:53', NULL, '2026-07-22 18:50:01', '2026-07-22 20:47:53'),
(12, 'App\\Models\\User', 10, 'auth_token', '64f0ae83384cb150e054270cd5437410619238feaad4d4d243fb41df87cf37a3', '[\"*\"]', '2026-07-22 21:23:31', NULL, '2026-07-22 21:23:12', '2026-07-22 21:23:31'),
(13, 'App\\Models\\User', 1, 'auth_token', '91f8e8324fc0b5ec3400d6786ed4fc7fc5f8c1c0f51ea0356a20505da7ea62c7', '[\"*\"]', '2026-07-22 21:56:22', NULL, '2026-07-22 21:23:39', '2026-07-22 21:56:22'),
(14, 'App\\Models\\User', 1, 'auth_token', '2996495f98da482565b186892d8f003f8f59d774b838c17b77e26fc840aadfb9', '[\"*\"]', '2026-07-23 19:10:37', NULL, '2026-07-22 22:56:54', '2026-07-23 19:10:37'),
(15, 'App\\Models\\User', 4, 'auth_token', '6d0d06e41368a8a3990cc3b2725bb9fd811bd859573063d57e3b0da2a185a917', '[\"*\"]', '2026-07-22 23:30:33', NULL, '2026-07-22 23:26:11', '2026-07-22 23:30:33'),
(16, 'App\\Models\\User', 4, 'auth_token', 'ae6453e34469e6e50cf75c4f0d684f9c0953ea62c523fd9b1e8518b5155528a6', '[\"*\"]', '2026-07-24 21:00:17', NULL, '2026-07-22 23:47:45', '2026-07-24 21:00:17'),
(17, 'App\\Models\\User', 1, 'auth_token', 'f4669ea7ea93bc5e8e7a84ccad379edead4b633aee3422cd34259b11d50c8fec', '[\"*\"]', '2026-07-23 19:11:57', NULL, '2026-07-23 19:10:43', '2026-07-23 19:11:57'),
(18, 'App\\Models\\User', 1, 'auth_token', 'b9393758d2db447d3e48367c1342b6145198d955c76002da9df78acf6577a745', '[\"*\"]', '2026-07-26 22:37:04', NULL, '2026-07-23 19:13:40', '2026-07-26 22:37:04'),
(19, 'App\\Models\\User', 2, 'auth_token', 'c9d85e18c3647a4774d515797300864c522f3b4cbd2c07a911356a8c50131ffd', '[\"*\"]', '2026-07-26 18:33:04', NULL, '2026-07-23 23:34:49', '2026-07-26 18:33:04'),
(20, 'App\\Models\\User', 4, 'auth_token', 'e8ce7cd1ed624b3f17e4e3b2487a879cf24ba33b818cedc8c954f986bd882447', '[\"*\"]', '2026-07-27 18:20:11', NULL, '2026-07-26 18:22:20', '2026-07-27 18:20:11'),
(21, 'App\\Models\\User', 3, 'test', 'fce384f287ef89f5527191fb25d24a4bc1c72f0bd5e7f3a66294cd77ad2558dc', '[\"*\"]', '2026-07-26 20:35:26', NULL, '2026-07-26 20:35:16', '2026-07-26 20:35:26'),
(22, 'App\\Models\\User', 8, 'auth_token', 'e3742de7ae977e1ac67b6ee105882b58f434c8c14d200e5ee306dd5dd2c99a1c', '[\"*\"]', '2026-07-27 23:32:49', NULL, '2026-07-26 21:12:35', '2026-07-27 23:32:49'),
(23, 'App\\Models\\User', 1, 'auth_token', '7300d9cb45728d47f5536c4a53668ef24e3eb233999ea0d135d5a8a579e70496', '[\"*\"]', '2026-08-02 23:34:54', NULL, '2026-07-26 23:21:10', '2026-08-02 23:34:54'),
(24, 'App\\Models\\User', 7, 'auth_token', 'f87549b1585178e75deb47e514a88a6aa101e9b1725b54a84df9d62f16751617', '[\"*\"]', '2026-08-03 21:47:44', NULL, '2026-07-27 00:29:15', '2026-08-03 21:47:44'),
(25, 'App\\Models\\User', 6, 'auth_token', '90a1d5dbe3a0b97f2334188731db48572a53d09ee1dcf78a7fb0381f45037ec3', '[\"*\"]', '2026-08-12 00:08:45', NULL, '2026-07-27 18:27:10', '2026-08-12 00:08:45'),
(26, 'App\\Models\\User', 5, 'auth_token', '46443a015feb5bd86098117efe306d0a1a3b4a08fd9537a47456cf9ff9e47b7d', '[\"*\"]', '2026-07-27 23:32:57', NULL, '2026-07-27 18:29:43', '2026-07-27 23:32:57'),
(27, 'App\\Models\\User', 9, 'auth_token', '31c2ae87cb8647fbfb413965785080c1a644971d326a4feb7c85f0c0ba1aa2f9', '[\"*\"]', '2026-07-27 23:32:42', NULL, '2026-07-27 18:32:43', '2026-07-27 23:32:42'),
(28, 'App\\Models\\User', 4, 'auth_token', '9a2ddbb7f934bab8d7cec9acbe6795717d69e6919c13debeb26924bfdafcdf90', '[\"*\"]', '2026-08-02 23:34:44', NULL, '2026-07-30 00:44:45', '2026-08-02 23:34:44'),
(29, 'App\\Models\\User', 1, 'auth_token', 'e500e253a5cae3b23a70e348862973ad91363b8e3e20665ec972bc02f9432831', '[\"*\"]', '2026-08-09 19:36:50', NULL, '2026-08-03 00:09:19', '2026-08-09 19:36:50'),
(30, 'App\\Models\\User', 4, 'auth_token', 'fa4bbbd252688c49df6ee1e7e2c834f1099bf9f2d222b65ce5427e73f5cee222', '[\"*\"]', '2026-08-04 01:25:46', NULL, '2026-08-03 00:17:37', '2026-08-04 01:25:46'),
(31, 'App\\Models\\User', 11, 'auth_token', 'adbf76d600a877962cd909fbeca4514727fd513fe287ead285c1927b4cca32ca', '[\"*\"]', '2026-08-05 01:57:56', NULL, '2026-08-05 00:53:00', '2026-08-05 01:57:56'),
(32, 'App\\Models\\User', 4, 'auth_token', '3e7e832ae6c00d66a74131c8a2b0b8aa27c67f0967968e043dfa2af14e04c33c', '[\"*\"]', '2026-08-05 23:05:20', NULL, '2026-08-05 21:14:46', '2026-08-05 23:05:20'),
(33, 'App\\Models\\User', 4, 'auth_token', '82c0b55b61d9cae2966e1f4bc75058155b97c0d4ba376c45f6ba7e4e6934baac', '[\"*\"]', '2026-08-07 00:15:45', NULL, '2026-08-06 01:06:19', '2026-08-07 00:15:45'),
(34, 'App\\Models\\User', 4, 'auth_token', 'ae2efbc491f77397d794293210b9b11ef6fdbf81c4ca9b6fc8508503ab41911e', '[\"*\"]', '2026-08-09 19:49:23', NULL, '2026-08-09 19:45:26', '2026-08-09 19:49:23'),
(35, 'App\\Models\\User', 1, 'auth_token', '8bd464528ad30f6081ee56c8c8a5ed54f555af2a43492c6d3ce984faba1ae50d', '[\"*\"]', '2026-08-09 21:19:21', NULL, '2026-08-09 19:48:37', '2026-08-09 21:19:21'),
(36, 'App\\Models\\User', 4, 'auth_token', '93d0f515599727354310793f7324e1b9dcfad1c6b32cd02ab5f81a0ac8f3f5a9', '[\"*\"]', '2026-08-09 20:36:22', NULL, '2026-08-09 20:22:55', '2026-08-09 20:36:22'),
(37, 'App\\Models\\User', 4, 'auth_token', '463fa9cb0783f9cd931b953f000bfd7724c527f3de0b879df3fa4e18c83f463d', '[\"*\"]', '2026-08-09 21:15:05', NULL, '2026-08-09 21:14:01', '2026-08-09 21:15:05'),
(38, 'App\\Models\\User', 4, 'auth_token', '2af162c6fd841feae0688c5d6162f9adaca2772a46c3940ebb0dba15d4d11dd6', '[\"*\"]', '2026-08-09 21:17:06', NULL, '2026-08-09 21:15:21', '2026-08-09 21:17:06'),
(39, 'App\\Models\\User', 4, 'auth_token', 'c3d06fc159b30b49f3e3c52375d6c1e9e08375df23529deec498eeb9e4c69504', '[\"*\"]', '2026-08-09 23:34:35', NULL, '2026-08-09 23:33:04', '2026-08-09 23:34:35'),
(40, 'App\\Models\\User', 4, 'auth_token', 'be9bcfd09ceb59f46c34b7906a75fe8c6e3bfa16837d423bb1bbcba66ab53240', '[\"*\"]', '2026-08-10 01:15:39', NULL, '2026-08-09 23:34:40', '2026-08-10 01:15:39'),
(41, 'App\\Models\\User', 4, 'auth_token', '80890109e127a33689a44b73f3e0b34a20c68f07166b6e5d60049d3e386e5596', '[\"*\"]', '2026-08-10 19:31:52', NULL, '2026-08-10 19:30:57', '2026-08-10 19:31:52'),
(42, 'App\\Models\\User', 4, 'auth_token', 'a615a4e8daa50c9bddc15311e3512df3942241fcafafd801119052c43e09f839', '[\"*\"]', '2026-08-10 19:32:24', NULL, '2026-08-10 19:32:01', '2026-08-10 19:32:24'),
(43, 'App\\Models\\User', 4, 'auth_token', '9c24dddf778c90cff96b4bd8713214c9f4ecdce7d4c618646af1a7501995a37e', '[\"*\"]', '2026-08-10 19:34:38', NULL, '2026-08-10 19:33:36', '2026-08-10 19:34:38'),
(44, 'App\\Models\\User', 4, 'auth_token', '6d25dfb784bf09bc0f9bbe09a3aed28f1f4cce0455879b41059d2301b40f0383', '[\"*\"]', '2026-08-10 19:36:08', NULL, '2026-08-10 19:35:08', '2026-08-10 19:36:08'),
(45, 'App\\Models\\User', 4, 'auth_token', '74290dd6cb0558e808ebc5b7f283f462de6a34be4c6230e0d92b1dd18719a44c', '[\"*\"]', '2026-08-10 20:03:31', NULL, '2026-08-10 19:36:19', '2026-08-10 20:03:31'),
(46, 'App\\Models\\User', 1, 'auth_token', 'f83c64dc573ba3f59d163b6d44a9b738bbfc3879d0422ccac0fb320789db4818', '[\"*\"]', '2026-08-10 20:03:03', NULL, '2026-08-10 20:00:16', '2026-08-10 20:03:03'),
(47, 'App\\Models\\User', 4, 'auth_token', '6a8ebb76b092eecc0dc9958dfe617765eb7d27d377cc65ed9019313f2e275f0c', '[\"*\"]', '2026-08-12 23:35:36', NULL, '2026-08-10 20:06:13', '2026-08-12 23:35:36'),
(48, 'App\\Models\\User', 1, 'auth_token', '8c4c124e6fe547b99d2d6d87c395ee65d0187cefa36e1b4c797e547fe2255f4d', '[\"*\"]', '2026-08-12 00:17:46', NULL, '2026-08-10 20:06:24', '2026-08-12 00:17:46'),
(49, 'App\\Models\\User', 8, 'auth_token', 'aacae80b37e098ae14196bf7eaa86a340f8c4477db0b540d10275b262bf7d215', '[\"*\"]', '2026-08-12 00:18:56', NULL, '2026-08-12 00:09:25', '2026-08-12 00:18:56'),
(50, 'App\\Models\\User', 1, 'auth_token', '78bd6086c2e41fe6219c743c6a4c483c7bb08a7eaebad4cdd5dc166ef6d291ca', '[\"*\"]', '2026-08-12 23:35:40', NULL, '2026-08-12 00:19:00', '2026-08-12 23:35:40'),
(51, 'App\\Models\\User', 15, 'auth_token', '457fbfa51982693103159e75c4c128e82d056754623ca48c0f495ddecc4cbd03', '[\"*\"]', '2026-08-12 01:11:27', NULL, '2026-08-12 00:19:30', '2026-08-12 01:11:27');

-- --------------------------------------------------------

--
-- Table structure for table `point_transactions`
--

CREATE TABLE `point_transactions` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `user_id` bigint(20) UNSIGNED NOT NULL,
  `order_id` bigint(20) UNSIGNED DEFAULT NULL,
  `type` varchar(255) NOT NULL,
  `amount` int(11) NOT NULL,
  `balance_after` int(11) NOT NULL,
  `description` text DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `point_transactions`
--

INSERT INTO `point_transactions` (`id`, `user_id`, `order_id`, `type`, `amount`, `balance_after`, `description`, `created_at`, `updated_at`) VALUES
(1, 4, 1, 'earn', 145, 290, 'Poin dari pembelian #INV20260722065424', '2026-07-22 23:48:57', '2026-07-22 23:48:57'),
(2, 4, 3, 'earn', 213, 571, 'Poin dari pembelian #INV20260723072128', '2026-07-23 20:44:47', '2026-07-23 20:44:47'),
(3, 4, 5, 'earn', 50, 458, 'Poin dari pembelian #INV20260727021828', '2026-07-26 19:19:19', '2026-07-26 19:19:19'),
(4, 4, 7, 'earn', 648, 1704, 'Poin dari pembelian #INV2026072704114401', '2026-08-12 00:22:42', '2026-08-12 00:22:42'),
(5, 4, 6, 'earn', 506, 2068, 'Poin dari pembelian #INV20260727025133', '2026-08-12 00:34:44', '2026-08-12 00:34:44'),
(6, 3, 9, 'earn', 657, 1314, 'Poin dari pembelian #INV2026072706263401', '2026-08-12 00:34:44', '2026-08-12 00:34:44'),
(7, 4, 10, 'earn', 336, 2740, 'Poin dari pembelian #INV2026080304424701', '2026-08-12 00:34:44', '2026-08-12 00:34:44'),
(8, 4, 13, 'earn', 1304, 5348, 'Poin dari pembelian #INV2026081206570801', '2026-08-12 00:34:44', '2026-08-12 00:34:44');

-- --------------------------------------------------------

--
-- Table structure for table `products`
--

CREATE TABLE `products` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `university_id` bigint(20) UNSIGNED DEFAULT NULL,
  `seller_id` bigint(20) UNSIGNED DEFAULT NULL,
  `title` varchar(255) NOT NULL,
  `slug` varchar(255) NOT NULL,
  `author` varchar(255) NOT NULL,
  `publisher` varchar(255) NOT NULL,
  `isbn` varchar(255) DEFAULT NULL,
  `type` varchar(100) DEFAULT NULL,
  `product_type` enum('physical','digital') NOT NULL DEFAULT 'physical',
  `digital_file` varchar(255) DEFAULT NULL,
  `category` varchar(255) NOT NULL,
  `language` varchar(255) NOT NULL DEFAULT 'Indonesia',
  `pages` int(11) DEFAULT NULL,
  `year` year(4) DEFAULT NULL,
  `price` decimal(12,2) NOT NULL,
  `commission_rate` decimal(5,2) NOT NULL DEFAULT 10.00 COMMENT 'Platform commission percentage',
  `discount_price` decimal(12,2) DEFAULT NULL,
  `stock` int(11) NOT NULL DEFAULT 0,
  `rating` double NOT NULL DEFAULT 0,
  `reviews` int(11) NOT NULL DEFAULT 0,
  `description` text NOT NULL,
  `image` varchar(255) DEFAULT NULL,
  `approval_status` enum('draft','pending','published','rejected') NOT NULL DEFAULT 'draft',
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  `is_flash_sale` tinyint(1) NOT NULL DEFAULT 0,
  `is_best_seller` tinyint(1) NOT NULL DEFAULT 0,
  `is_newest` tinyint(1) NOT NULL DEFAULT 0,
  `sold` int(11) NOT NULL DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `products`
--

INSERT INTO `products` (`id`, `university_id`, `seller_id`, `title`, `slug`, `author`, `publisher`, `isbn`, `type`, `product_type`, `digital_file`, `category`, `language`, `pages`, `year`, `price`, `commission_rate`, `discount_price`, `stock`, `rating`, `reviews`, `description`, `image`, `approval_status`, `created_at`, `updated_at`, `is_flash_sale`, `is_best_seller`, `is_newest`, `sold`) VALUES
(1, 2, NULL, 'Pengantar Pemrograman Web Modern dengan Laravel', 'pengantar-pemrograman-web-modern-dengan-laravel', 'Dr. Ahmad Fauzi, M.Kom.', 'LSPRPress', '978-602-432-111-0', NULL, 'physical', NULL, 'Ilmu Komputer', 'Indonesia', 320, '2025', 120000.00, 10.00, 100000.00, 50, 0, 0, 'Buku komprehensif yang membahas konsep dasar hingga tingkat lanjut pengembangan aplikasi web menggunakan framework Laravel, dirancang khusus untuk mahasiswa teknik informatika dan praktisi.', 'products/images/nwJSh8pKhVzL64ftROVQeoZoSHLVVrRphQBlngCb.png', 'published', '2026-07-21 21:34:25', '2026-07-21 21:36:14', 0, 0, 0, 0),
(2, 2, NULL, 'Manajemen Strategis Sektor Publik di Era Digital', 'manajemen-strategis-sektor-publik-di-era-digital', 'Prof. Dr. Hj. Nur Indah, S.E., M.Si.', 'LSPRPress', '978-602-432-111-0', NULL, 'physical', NULL, 'Ekonomi', 'Indonesia', 280, '2024', 145000.00, 10.00, 130000.00, 35, 0, 0, 'Membahas strategi tata kelola birokrasi dan inovasi pelayanan publik berbasis transformasi digital bagi pengambil kebijakan dan akademisi bisnis.', 'products/images/kURFwqoUQN5c7BErJ968Mix5owGgeTrVN6GCg6C7.jpg', 'published', '2026-07-21 21:35:55', '2026-07-21 23:15:23', 0, 0, 0, 0),
(3, 3, NULL, 'The Let Them Theory', 'the-let-them-theory', 'Mel Robbins', 'Binus Press', '978-602-06-7889-2', NULL, 'physical', NULL, 'Pengembangan Bidang & Ilmu Spesifik', 'Indonesia', 350, '2025', 145000.00, 10.00, 125000.00, 45, 0, 0, 'Buku populer yang mengajarkan konsep praktis untuk melindungi energi mental dengan berhenti mencoba mengontrol orang lain atau terlalu memikirkan validasi eksternal, serta fokus pada diri sendiri dan prioritas hidup.', 'products/images/a29Q7OmT5snnIBnvOlJu3zKpJfl0HGr0VRVPa616.jpg', 'published', '2026-07-22 00:55:13', '2026-07-22 01:05:52', 0, 0, 0, 0),
(4, 3, NULL, 'Teka-Teki Rumah Aneh (The Strange House Puzzle)', 'teka-teki-rumah-aneh-the-strange-house-puzzle', 'Uketsu', 'Binus Press', '978-602-06-7455-8', NULL, 'physical', NULL, 'Fiksi', 'Indonesia', 288, '2022', 115000.00, 10.00, 99000.00, 60, 0, 0, 'Novel misteri unik yang memuat denah rumah dan teka-teki visual. Setiap detail kecil dari denah tersebut menyimpan kejanggalan mengerikan yang memancing rasa penasaran pembaca hingga halaman terakhir.', 'products/images/kfJ8NqiYFE73UCBuqXs45XPaY44Abi5prYiczEab.jpg', 'published', '2026-07-22 00:56:33', '2026-07-22 01:05:55', 0, 0, 0, 0),
(5, 4, NULL, 'Seorang Pria yang Melalui Duka dengan Mencuci Piring', 'seorang-pria-yang-melalui-duka-dengan-mencuci-piring', 'dr. Andreas Kurniawan, Sp.KJ.', 'UIPress', '978-602-48-1999-3', NULL, 'physical', NULL, 'Psikologi', 'Indonesia', 210, '2025', 98000.00, 10.00, 85000.00, 30, 0, 0, 'Ditulis oleh seorang psikiater, buku ini menyajikan kisah dan refleksi yang hangat, reflektif, serta diselingi humor tentang bagaimana seseorang menghadapi kehilangan besar dan berdamai dengan duka.', 'products/images/7jUZXenWFdQ2Nh86CpDwbSMmCvPLssbXLFdvyWj2.jpg', 'published', '2026-07-22 00:58:23', '2026-07-22 01:05:48', 0, 0, 0, 0),
(6, 4, NULL, 'Funiculi Funicula 2: Kisah-Kisah yang Baru Terungkap (Tales from the Cafe)', 'funiculi-funicula-2-kisah-kisah-yang-baru-terungkap-tales-from-the-cafe', 'Toshikazu Kawaguchi', 'UIPress', '978-602-06-5123-9', NULL, 'physical', NULL, 'Fiksi', 'Indonesia', 256, '2023', 99000.00, 10.00, 88000.00, 40, 0, 0, 'Kelanjutan dari serial megahit kafe penjelajah waktu. Kembali menghadirkan kisah-kisah mengharukan tentang orang-orang yang ingin mengubah masa lalu demi menemui seseorang yang mereka cintai.', 'products/images/j1aYRxYE5ghPN7pqWnHozSzIZnvlM7Qk9dvPJNQd.png', 'published', '2026-07-22 01:00:10', '2026-07-22 01:05:44', 0, 0, 0, 0),
(7, 5, NULL, 'Bicara Itu Ada Seninya: Rahasia Berkomunikasi Efektif dan Memenangkan Hati Lawan Bicara', 'bicara-itu-ada-seninya-rahasia-berkomunikasi-efektif-dan-memenangkan-hati-lawan-bicara', 'Oh Su Hyang', 'IPB Press', '978-602-394-884-0', NULL, 'physical', NULL, 'Komunikasi', 'Indonesia', 238, '2018', 85000.00, 10.00, 75000.00, 55, 0, 0, 'Buku panduan komunikasi praktis asal Korea Selatan yang membongkar rahasia bagaimana berbicara secara efektif, membangun kepercayaan diri, dan memenangkan hati lawan bicara di berbagai situasi sosial maupun karier.', 'products/images/G6qaSLqMdzdDzyPu82uG8jNPVkvckvU2XbSjvC7j.jpg', 'published', '2026-07-22 01:02:04', '2026-07-22 01:05:40', 0, 0, 0, 0),
(8, 5, NULL, 'The Call of the Wild', 'the-call-of-the-wild', 'Jack London', 'IPB Press', '978-602-03-8898-9', NULL, 'digital', 'products/digital/1UJCyHZvd6jZOBCc6XDEhfiHcjMuZc1eZu8qzQVr.pdf', 'Novel', 'Indonesia', 176, '2023', 65000.00, 10.00, 50000.00, 0, 0, 0, 'Novel klasik legendaris karya Jack London yang mengisahkan tentang Buck, seekor anjing peliharaan kesayangan yang diculik dan dijual ke wilayah Yukon, Kanada, di tengah kerasnya masa \"Demam Emas\". Buku ini mengikuti perjalanan emosional dan fisik Buck saat ia beradaptasi dengan alam liar dan menemukan panggilan insting purbanya.', 'products/images/mOjMlzfjBtHd6jNvEasw1XEWVg1Akl2Qfc5dSxnb.jpg', 'published', '2026-07-22 01:04:26', '2026-07-22 01:05:37', 0, 0, 0, 0),
(9, 6, NULL, 'Slow Dance', 'slow-dance', 'Rainbow Rowell', 'UPH Press', '9780063389823', NULL, 'physical', NULL, 'Sosial', 'Inggris', 400, '2025', 350000.00, 10.00, 315000.00, 50, 0, 0, 'A Reese\'s book club pick an instant New York Times Bestseller from #1 New York Times bestselling author Rainbow Rowell comes Slow Dance--her smartest, funniest, most powerful novel yet \"If you, like me, think thirty-somethings methodically working through their issues is very hot, Slow Dance is the book for you. The people in it feel like people you know or maybe even people you\'ve been. Slow Dance is sexy, sweet, wise, and nostalgic--Jane Austen\'s Persuasion for our times.\"\r\n-Gabrielle Zevin, New York Times bestselling author of Tomorrow, and Tomorrow, and Tomorrow\r\n\r\nShiloh Butler was supposed to get out of north Omaha. She used to sit out on the front porch with her best friend, Cary, and plot their escape. Shiloh was going to be an actress - she had a scholarship to a good school - and Cary was laser-focused on the Navy. Sharp, stoic, golden-eyed Cary . . . thin as a stick of gum and poor as dirt. He was probably the most decent person Shiloh has ever known. She hasn\'t spoken to him in fourteen years. When Shiloh gets an invitation to a high school friend\'s wedding, Cary is the first and only thing on her mind. She desperately wants to see him again, but she doesn\'t know if she can bear being seen by him. What would Cary think of Shiloh at thirty-three? A divorced mom living in the same house she grew up in. Someone who works behind a desk, not onstage. Would Cary even want to see Shiloh after all this time? After everything? The answer, it turns out, is yes. In her triumphant return to adult fiction, Rainbow Rowell has written a love story so honest and human - so cathartic - you\'ll feel it in your bones. Slow Dance is a power ballad of a book, brimming with Rowell\'s signature compassion and wit. It\'s deeply affecting and profoundly romantic.', 'products/images/G5LxpsyGfkuYWrR0WHLi2PPS0oCiaEhFkxZIEjOn.jpg', 'published', '2026-07-22 19:00:58', '2026-07-22 19:12:55', 0, 0, 0, 0),
(10, 6, NULL, 'The Odyssey', 'the-odyssey', 'Homer', 'UPH Press', '9780099511687', NULL, 'physical', NULL, 'Sejarah', 'Inggris', 480, '2026', 321000.00, 10.00, NULL, 15, 0, 0, 'Penelope has been waiting for her husband Odysseus to return from Troy for many years. Little does she know that his path back to her has been blocked by astonishing and terrifying trials. Will he overcome the hideous monsters, beautiful witches and treacherous seas that confront him? And what new tests await him if he ever finally reaches his home shore?\r\n\r\n***\r\n\r\nHave you ever wondered how fascinating the world can be when it opens through the pages of a book? Reading is not just a routine activity; it is an endless adventure into imagination and knowledge.\r\n\r\nReading sharpens the mind, broadens perspectives, and enriches vocabulary. It is a gateway to a world beyond ourselves—limitless and full of possibilities.\r\n\r\nSet aside a specific time to read every day. Whether it’s reading before bed or taking a moment in the morning, a reading habit can be built through consistency.\r\n\r\nChoose books that match your interests and literacy level. Start with books that suit your preferences and reading ability.\r\n\r\nFind a quiet and comfortable place to read. Adequate lighting, a comfortable chair, and a little background music can create a better reading experience.\r\n\r\nKeep notes or a journal about the books you have read. Write down your thoughts, impressions, and the lessons you gain from them.', 'products/images/gjMnDWn1WutV2imNu6V8tak71mYX5D8Ocj1K15Nx.jpg', 'published', '2026-07-22 19:04:26', '2026-08-11 23:57:08', 0, 0, 0, 0),
(11, 7, NULL, 'Language Hacking German', 'language-hacking-german', 'Benny Lewis', 'SGU Press', '9786024772666', NULL, 'physical', NULL, 'Komunikasi', 'Indonesia, German', 260, '2023', 175000.00, 10.00, 150000.00, 60, 0, 0, 'PANDUAN PEMBELAJARAN\r\n\r\nKeluhan yang paling sering saya dengar dari pembelajar bahasa Jerman adalah:\r\n\r\nSaya sudah belajar bahasa Jerman bertahun-tahun. Saya bisa mengenali beberapa kata-kata yang saya lihat, dan kadang saat mendengarnya, tapi saya masih tidak bisa bicara dalam bahasa itu\'\r\n\r\n#Meretas Bahasa bukan seperti kursus bahasa pada umumnya yang berfokus pada tata bahasa. Ini adalah pembelajaran dengan bicara, yang berarti kamu akan fokus membangun keahlian bahasa yang kamu perlukan untuk bisa segera bercakap-cakap dengan orang lain dalam bahasa Jerman. Pada akhir pembelajaran ini, kamu akan mampu memperkenalkan diri serta mengajukan dan menjawab ratusan pertanyan umum dalam bahasa Jerman. Kamu akan tahu bagaimana caranya menemukan dan terhubung dengan pembicara Jerman, di mana pun kamu tinggal. Kamu juga akan memperoleh keahlian dan strategi untuk mulai bercakap-cakap tentang berbagai hal dalam bahasa Jerman serta kepercayaan diri untuk meneruskan percakapan tersebut.\r\n\r\n#Meretas Bahasa dapat digunakan sendiri atau bersama dengan metode pembelajaran bahasa lainnya, baik secara tertulis, online, atau di ruang kelas.\r\n\r\nAPA YANG AKAN KAMU TEMUKAN DI BUKU INI\r\n\r\nSeri pembelajaran ini akan menantang kamu untuk bicara sejak hari pertama dengan menyelesaikan sepuluh misi, yang akan meningkatkan kemampuan kamu berbicara dalam bahasa Jerman. Untuk memenuhi janji itu, saya mengundang kamu untuk bergabung dalam komunitas peretas bahasa, yang dibangun berdasarkan seri pembelajaran ini, dan menyediakan ruang yang aman dan menyenangkan bagi kamu untuk dapat berkomunikasi dengan pembelajar lain yang berpikiran serupa dan sama-sama berniat gigih. Kamu bisa menyelesaikan misi kamu seorang diri, tapi kamu akan memperoleh kemajuan jauh lebih pesat jika kamu menggunakan bahasa tersebut bersama orangorang betulan. Jadi, saya menyarankan kamu agar mengirimkan hasil misi kamu ke komunitas online #MeretasBahasa (#LanguageHacking) di www.teachyourself.com /languagehacking untuk mendapat umpan balik (dan misi rahasia kecil-kecilan).\r\n\r\nBICARA SEJAK HARI PERTAMA\r\n\r\nKamu tidak akan bisa memainkan piano jika kamu tidak duduk dan menyentuh tuts-tutsnya dengan jari kamu. Kamu tidak akan bisa bermain tenis sebelum kamu memegang raket. Jadi, kamu pun tidak akan bisa belajar bahasa tanpa memakainya dalam pembicaraan. Dengan mulai bicara sejak hari pertama, kamu akan:\r\n\r\nmempelajari ungkapan dan unsur bahasa secara otomatis dari orang lain\r\n\r\nmenyadari adanya kekurangan ungkapan pada bahasa kamu yang perlu kamu lengkapi\r\n\r\nmenyadari bagaimana orang lain mengucapkan sesuatu\r\n\r\nmendapat umpan balik dari orang lain\r\n\r\nmengasah pengucapan dan kelancaran kamu berbicara\r\n\r\nmengatasi rasa takut dalam mempelajari bahasa baru\r\n\r\n→ menambah motivasi karena merasakan kemajuan diri kamu.', 'products/images/bkd6rn77nWOCccxRit5haNtNnh3CgRWtajuWictT.jpg', 'published', '2026-07-22 19:08:01', '2026-07-22 19:13:02', 0, 0, 0, 0),
(12, 7, NULL, 'Big Swiss', 'big-swiss', 'Jen Beagin', 'SGU Press', '978-1982153083', NULL, 'physical', NULL, 'Fiksi', 'Inggris', 336, '2023', 250000.00, 10.00, 200000.00, 38, 0, 0, 'Big Swiss. That\'s Greta\'s nickname for her - she is tall, and she is from Switzerland. Greta can see her now: dressed top to toe in white, that adorable gap between her two front teeth, her penetrating blue eyes. She\'s a head-turner: including the heads of infants and dogs.\r\n\r\nWell that\'s how Greta imagines seeing her; they haven\'t actually ever met in person. Nor has Greta actually ever been to Switzerland.\r\n\r\nGreta and Big Swiss are not in the same room, or even the same building. Greta is miles away, sitting at a desk in her own house, wearing only headphones, fingerless gloves, a kimono, and legwarmers, transcribing this disembodied voice.\r\n\r\nWhat Greta doesn\'t know is that she\'s about to bump into Big Swiss in the local dog park. A new - and not entirely honest - relationship is going to be born.', 'products/images/jhJluVnG3P9EGik7cNQqHQuIHarXD0K0rCNXtZ2J.jpg', 'published', '2026-07-22 19:12:25', '2026-08-04 00:18:56', 0, 0, 0, 0),
(13, NULL, 4, 'How to Stand Up to a Dictator', 'how-to-stand-up-to-a-dictator-VjUH9', 'Maria Ressa', 'Water Lily Literary', '9780753559215', NULL, 'physical', NULL, 'Hukum', 'English', 288, '2026', 292000.00, 10.00, NULL, 20, 0, 0, 'What will you sacrifice for the truth?\r\n\r\nMaria Ressa has spent decades speaking truth to power. But her work tracking disinformation networks seeded by her own government, spreading lies to its own citizens laced with anger and hate, has landed her in trouble with the most powerful man in the country: President Duterte.\r\n\r\nNow, hounded by the state, she has multiple arrest warrants against her name, and a potential 100+ years behind bars to prepare for—while she stands trial for speaking the truth.\r\n\r\nHow to Stand Up to a Dictator is the story of how democracy dies by a thousand cuts, and how an invisible atom bomb has exploded online that is killing our freedoms. It maps a network of disinformation—a heinous web of cause and effect—that has netted the globe: from Duterte\'s drug wars, to America\'s Capitol Hill, to Britain\'s Brexit, to Russian and Chinese cyber-warfare, to Facebook and Silicon Valley, to our own clicks and our own votes.\r\n\r\nTold from the frontline of the digital war, this is Maria Ressa\'s urgent cry for us to wake up and hold the line, before it is too late.\r\n\r\n***\r\n\r\nHave you ever wondered how fascinating the world can be when it opens through the pages of a book? Reading is not just a routine activity; it is an endless adventure into imagination and knowledge.\r\n\r\nReading sharpens the mind, broadens perspectives, and enriches vocabulary. It is a gateway to a world beyond ourselves—limitless and full of possibilities.\r\n\r\nSet aside a specific time to read every day. Whether it’s reading before bed or taking a moment in the morning, a reading habit can be built through consistency.\r\n\r\nChoose books that match your interests and literacy level. Start with books that suit your preferences and reading ability.\r\n\r\nFind a quiet and comfortable place to read. Adequate lighting, a comfortable chair, and a little background music can create a better reading experience.\r\n\r\nKeep notes or a journal about the books you have read. Write down your thoughts, impressions, and the lessons you gain from them.', 'products/images/luKrDsuDlTvyAaxW2AbSMtxRyOrPbYdPY4C63Azv.jpg', 'published', '2026-07-23 18:59:18', '2026-07-23 18:59:40', 0, 0, 0, 0),
(14, 5, NULL, 'Komodo dan Masa Depannya', 'komodo-dan-masa-depannya', 'Dr. Irman Firmansyah, S.Hut., M.Si', 'IPB Press', '978-602-440-123-4', NULL, 'physical', NULL, 'Fauna / Flora / Flora dan Fauna', 'Indonesia', 250, '2023', 120000.00, 10.00, 100000.00, 15, 0, 0, '\"Komodo dan Masa Depannya\" membahas secara mendalam tentang daya dukung dan daya tampung lingkungan hidup berbasis jasa ekosistem di Taman Nasional Komodo. Buku ini memberikan pandangan strategis mengenai pelestarian habitat serta tantangan ekologis di masa depan.', 'products/images/Eu1AeoGrGCUX7jbQmLl20WYFBMuyDrdlK2u0ncBw.jpg', 'published', '2026-07-27 00:34:28', '2026-07-27 00:44:04', 0, 0, 0, 0),
(15, 5, NULL, 'Sistem Dinamik Untuk Pembangunan Berkelanjutan', 'sistem-dinamik-untuk-pembangunan-berkelanjutan', 'Rokhmin dahuri, Medrilzam.', 'Indonesian System Dynamics Experts Association', '978-602-550-987-1', NULL, 'physical', NULL, 'Manajemen', 'Indonesia', 320, '2021', 135000.00, 10.00, 115000.00, 20, 0, 0, 'Buku ini membahas penerapan metode sistem dinamik dalam mendukung pembangunan berkelanjutan di berbagai sektor, mulai dari agropolitan, energi, hidrologi, kelautan & perikanan, kesehatan, pariwisata, pertambangan, pertanian, peternakan, sosial, statistik ekonomi, hingga transportasi. Diterbitkan oleh Asosiasi Ahli Sistem Dinamik Indonesia (ASDI) dengan Editor Irman Firmansyah.', 'products/images/laGo3mWHjJvkZunkpZU6MZnAkfBl8HOq0vmnxztl.jpg', 'published', '2026-07-27 00:40:58', '2026-07-27 00:44:02', 0, 0, 0, 0),
(16, 5, NULL, 'Looking at the Future of Cities in Eastern Indonesia', 'looking-at-the-future-of-cities-in-eastern-indonesia', 'Dica Erly Andjarwati', 'Andi Publisher', '978-623-010-456-7', NULL, 'physical', NULL, 'Ekologi Manusia', 'Indonesia', 2000, '2018', 110000.00, 10.00, 95000.00, 10, 0, 0, '\"Menatap Masa Depan Kota-Kota di Timur Indonesia\" karya Dica Erly Andjarwati, Irman Firmansyah, FX. Hermawan Kusumartono, dan Adji Krisbandono ini mengupas tuntas dinamika, tantangan, serta potensi pengembangan kawasan perkotaan di wilayah Indonesia Timur secara komprehensif. Diterbitkan oleh Penerbit Andi.', 'products/images/BgfwWEqp13iFMPMI44jicfu6MNPyGIYWjOK1iAPd.jpg', 'published', '2026-07-27 00:43:36', '2026-07-27 00:43:58', 0, 0, 0, 0);

-- --------------------------------------------------------

--
-- Table structure for table `product_images`
--

CREATE TABLE `product_images` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `product_id` bigint(20) UNSIGNED NOT NULL,
  `image` varchar(255) NOT NULL,
  `sort_order` int(11) NOT NULL DEFAULT 0,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `reviews`
--

CREATE TABLE `reviews` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `user_id` bigint(20) UNSIGNED NOT NULL,
  `product_id` bigint(20) UNSIGNED NOT NULL,
  `rating` tinyint(3) UNSIGNED NOT NULL,
  `comment` text DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `sessions`
--

CREATE TABLE `sessions` (
  `id` varchar(255) NOT NULL,
  `user_id` bigint(20) UNSIGNED DEFAULT NULL,
  `ip_address` varchar(45) DEFAULT NULL,
  `user_agent` text DEFAULT NULL,
  `payload` longtext NOT NULL,
  `last_activity` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `universities`
--

CREATE TABLE `universities` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `name` varchar(255) NOT NULL,
  `slug` varchar(255) NOT NULL,
  `logo` varchar(255) DEFAULT NULL,
  `banner` varchar(255) DEFAULT NULL,
  `email` varchar(255) NOT NULL,
  `phone` varchar(255) DEFAULT NULL,
  `website` varchar(255) DEFAULT NULL,
  `address` text DEFAULT NULL,
  `description` longtext DEFAULT NULL,
  `registration_letter` varchar(255) DEFAULT NULL,
  `rejection_reason` text DEFAULT NULL,
  `status` enum('pending','active','rejected') NOT NULL DEFAULT 'pending',
  `verified_at` timestamp NULL DEFAULT NULL,
  `sort_order` int(11) NOT NULL DEFAULT 0,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `universities`
--

INSERT INTO `universities` (`id`, `name`, `slug`, `logo`, `banner`, `email`, `phone`, `website`, `address`, `description`, `registration_letter`, `rejection_reason`, `status`, `verified_at`, `sort_order`, `created_at`, `updated_at`) VALUES
(1, 'Universitas Indonesia Press', 'universitas-indonesia-press', NULL, NULL, 'uipress@ui.ac.id', '021123456', NULL, NULL, NULL, NULL, NULL, 'active', '2026-07-21 21:16:27', 0, '2026-07-21 21:16:27', '2026-08-05 00:54:48'),
(2, 'Universitas Gadjah Mada', 'lspr-communication-and-business-institute-eqfta', 'universities/logos/Pr7kKW4LtrUBwYf0vtY0WvjWZubEPidQCXdj8fvR.jpg', 'universities/banners/3qmBuR83QovcDLJ03SFuLrXJCsW1H45s4E1D6HMc.jpg', 'press@ugm.ac.id', '083333333333', 'https://www.lspr.ac.id/', 'Jl. Grafika No. 1, Bulaksumur, Kampus UGM, Sinduadi, Kec. Mlati, Kabupaten Sleman, Daerah Istimewa Yogyakarta 55281', 'UGM Press adalah lembaga penerbitan resmi Universitas Gadjah Mada yang berfokus pada publikasi buku-buku teks akademik, jurnal ilmiah, monograf, dan literatur riset berkualitas tinggi untuk mendukung pendidikan dan sains di Indonesia.', 'registration_letters/h96fw1NuUqubPOBhGqcTNUkhkoPo7DrC88bBeKn6.pdf', NULL, 'active', '2026-07-21 21:30:10', 3, '2026-07-21 21:29:51', '2026-08-05 00:54:48'),
(3, 'Institut Teknologi Bandung', 'binus-university-vqpo0', 'universities/logos/5dYGbHcuc2yR2c9mf0mQe1AQ2422rUFcWGCOc5QZ.jpg', 'universities/banners/yn7EcCttTcEE451MSa6lIFdx94ilrlrWYGfbl5kE.jpg', 'itbpress@itb.ac.id', '081111111111', 'https://binus.ac.id/', 'Gedung ITB Press, Jl. Ganesa No. 10, Lb. Siliwangi, Kec. Coblong, Kota Bandung, Jawa Barat 40132', 'ITB Press merupakan unit penerbitan terkemuka di Institut Teknologi Bandung yang menerbitkan berbagai buku teks sains, teknologi, rekayasa, seni, dan bisnis untuk jenjang sarjana maupun pascasarjana.', 'registration_letters/WLsnGEvSyXcHYEvmM4hpXzmpwYocwoK942dO8WLa.png', NULL, 'active', '2026-07-22 00:46:18', 4, '2026-07-22 00:38:42', '2026-08-05 00:54:48'),
(4, 'Universitas Indonesia', 'universitas-indonesia-9hgq3', 'universities/logos/GwJ721cfg6Ht4okUNdESretsexeCy0Aei9ptJGiZ.jpg', 'universities/banners/z9K7nbF7gRGdVLRLAD5hNlzV6dQJOBTxqNT7LwmM.jpg', 'adminui@gmail.com', '0866666666', 'https://www.ui.ac.id/', 'Komplek Kampus UI Depok, Pondok Cina, Kecamatan Beji, Kota Depok, Jawa Barat 16424', 'Universitas Indonesia (UI) adalah perguruan tinggi negeri (PTN) berkaliber dunia yang berlokasi di Depok, Jawa Barat, dan Salemba, Jakarta Pusat. Sebagai salah satu kampus tertua dan paling bergengsi di Indonesia, UI secara konsisten menjadi pusat keunggulan akademik, riset ilmiah, serta pencetak pemimpin bangsa di berbagai bidang sains, sosial humaniora, kedokteran, dan teknik.', 'registration_letters/jFDihJLzyncQHLSuEgv8e3qXA2nyL5SgdK37dNn7.pdf', NULL, 'active', '2026-07-22 00:46:14', 2, '2026-07-22 00:40:24', '2026-08-05 00:54:48'),
(5, 'IPB University', 'ipb-university-xre0d', 'universities/logos/CAkXZjmpyjcj6AWfekWIp2miQCbre35mZHnoPN0P.jpg', 'universities/banners/j7lrefPpuSBhQMDvdbM8uZZpRsLOWocBXSQyQXHO.jpg', 'adminipb@gmail.com', '082222222222', 'https://www.ipb.ac.id/', 'Jl. Raya Dramaga, Kampus IPB Dramaga, Bogor 16680, Jawa Barat', 'IPB University adalah perguruan tinggi negeri (PTN) terkemuka di Indonesia yang berkedudukan di Bogor, Jawa Barat. Berdiri secara resmi pada 1 September 1963 (setelah sebelumnya menjadi bagian dari Universitas Indonesia), IPB dikenal luas sebagai institusi pendidikan tinggi terbaik di bidang pertanian, sains, teknologi, biosains, dan socio-entrepreneurship yang menghasilkan berbagai inovasi terkemuka di Indonesia.', 'registration_letters/th8DHobaCtFQyWYKslWILeb8GoiJnX2PG8PCUUTn.pdf', NULL, 'active', '2026-07-22 00:46:09', 1, '2026-07-22 00:43:04', '2026-08-05 00:54:48'),
(6, 'Universitas Negeri Jakarta', 'universitas-pelita-harapan-d9mal', 'universities/logos/a16Sx2pDN1GRRsP92vvPxZ3LDGeHxhTT53Pdrlvh.jpg', 'universities/banners/mA9porqGlWTkvd2Ocnb4IqZlfkQ1B5xpYgezZxU2.jpg', 'unjpress@unj.ac.id', '085555555555', 'https://www.uph.edu/', 'Gedung Posdaya UNJ, Jl. Rawamangun Muka, RT.11/RW.14, Rawamangun, Kec. Pulo Gadung, Kota Jakarta Timur, DKI Jakarta 13220', 'UNJ Press adalah badan penerbitan Universitas Negeri Jakarta yang mempublikasikan literatur akademik, buku bidang keguruan/pendidikan, humaniora, serta jurnal ilmiah pendukung pembelajaran masyarakat.', 'registration_letters/pKeq8W3KEBSsUfEhyjxsFJKE62sotGsKuyhuHnAj.pdf', NULL, 'active', '2026-07-22 18:49:29', 5, '2026-07-22 18:44:22', '2026-08-05 00:54:48'),
(7, 'Universitas Udayana', 'swiss-german-university-hg663', 'universities/logos/hD9LBs6ffZahNXIX8fnRaOLwH69mpm9mYZhDSGku.jpg', 'universities/banners/BhJcqygtY0FSwx1zcHjiQZluxTpP6JeiB7H1EpQG.jpg', 'unudpress@unud.ac.id', '087777777777', 'https://sgu.ac.id/', 'Kampus Sudirman, Jl. PB Sudirman, Dangin Puri Klod, Kec. Denpasar Barat, Kota Denpasar, Bali 80232', 'Udayana University Press adalah unit penerbitan dan percetakan di Universitas Udayana yang bertugas mempublikasikan karya ilmiah, buku ajar, modul kuliah, serta riset kebudayaan dan ilmu pengetahuan.', 'registration_letters/SaY0Qbtph3Ypkyu5vzxkRje82fWTdoROEGY4FzQ7.pdf', NULL, 'active', '2026-07-22 18:49:33', 6, '2026-07-22 18:48:44', '2026-08-05 00:54:48'),
(8, 'Binus University', 'binus-university-a5goz', 'universities/logos/dwaM1pUdwJBcdqycAqNxOgqU7cTAjaQx5vaRuhuw.jpg', 'universities/banners/A2JNF4pVLR8DlGhAQ8PmQIoVljpEPFybQFFxFu2w.jpg', 'adminbinus2@gmail.com', '089999999999', 'https://binus.ac.id/', 'Kampus Syahdan: Jl. K. H. Syahdan No. 9, Kemanggisan, Palmerah, Jakarta Barat 11480', 'BINUS University adalah salah satu perguruan tinggi swasta terkemuka di Indonesia yang berfokus pada bidang teknologi informasi, bisnis, desain, dan pendidikan global. Berawal dari sebuah lembaga kursus komputer Modern Computer Course pada tahun 1974, institusi ini berkembang pesat dan resmi menjadi universitas pada tahun 1996. BINUS terkenal dengan komitmennya terhadap kualitas enterpreneurship, pemanfaatan teknologi digital, serta program penempatan kerja alumni yang kuat.', 'registration_letters/mYiyCtuPZBzCM7DD3mUzglCUlhQuczC8nFxcYnYa.pdf', NULL, 'active', '2026-08-05 00:52:42', 7, '2026-08-05 00:52:21', '2026-08-05 00:54:48');

-- --------------------------------------------------------

--
-- Table structure for table `users`
--

CREATE TABLE `users` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `first_name` varchar(255) NOT NULL,
  `last_name` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `google_id` varchar(255) DEFAULT NULL,
  `google_token` varchar(255) DEFAULT NULL,
  `phone` varchar(255) DEFAULT NULL,
  `gender` enum('male','female') DEFAULT NULL,
  `birth_date` date DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `avatar` varchar(255) DEFAULT NULL,
  `points_balance` int(11) NOT NULL DEFAULT 0,
  `role` varchar(255) NOT NULL DEFAULT 'user',
  `seller_status` enum('pending','approved','rejected') DEFAULT NULL,
  `store_name` varchar(255) DEFAULT NULL,
  `store_description` text DEFAULT NULL,
  `store_address` varchar(255) DEFAULT NULL,
  `store_banner` varchar(255) DEFAULT NULL,
  `seller_rejection_reason` varchar(255) DEFAULT NULL,
  `seller_verified_at` timestamp NULL DEFAULT NULL,
  `university_id` bigint(20) UNSIGNED DEFAULT NULL,
  `remember_token` varchar(100) DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `users`
--

INSERT INTO `users` (`id`, `first_name`, `last_name`, `email`, `google_id`, `google_token`, `phone`, `gender`, `birth_date`, `password`, `avatar`, `points_balance`, `role`, `seller_status`, `store_name`, `store_description`, `store_address`, `store_banner`, `seller_rejection_reason`, `seller_verified_at`, `university_id`, `remember_token`, `created_at`, `updated_at`) VALUES
(1, 'Admin', 'Press', 'admin@gmail.com', NULL, NULL, '081234567890', NULL, '1990-01-01', '$2y$12$GBqnbIcMgLcroBWGOK4Tf.1HJ209liVtnKGM.vTjf46OWCaXYdmbe', NULL, 0, 'admin', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-21 21:16:28', '2026-08-06 01:04:23'),
(2, 'John', 'Doe', 'user@gmail.com', NULL, NULL, '081234567891', 'male', '1995-05-05', '$2y$12$wnADvAVil9D5m5OXqkQGyuvIsQIbD7Hwc6jQ/E.xrNAtkdqA84FmO', NULL, 0, 'user', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-21 21:16:28', '2026-08-06 01:04:24'),
(3, 'Greesella', 'Adhalia', 'adminlspr@gmail.com', NULL, NULL, '083333333333', NULL, '2026-07-22', '$2y$12$DCiwBpe6p5T8GHkGJnQJTu7NJGCUQa0xKyPnatZ9cmsaKYggK/8mi', 'avatars/iei7DCvKSnHbSmbkyBPhFaWY09FVNvRzWAWjd0S9.jpg', 657, 'university', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-21 21:29:52', '2026-08-12 00:34:44'),
(4, 'Faiz', 'Bayu', 'faizbayu91@gmail.com', NULL, NULL, '085889126070', 'male', '2009-05-27', '$2y$12$IRS9OMhIkeDhf/QzLATBNOVcZ95.CjCby4x/RU5ybAc1ZwR7gi1d2', 'avatars/k5xuEYnV1NKZJPlsmI9WaqcUdAOOmiu3Rhi2vqUD.jpg', 3202, 'seller', 'approved', 'FaBa Book Store', NULL, 'Bogor, Jawa Barat', 'seller/banners/OSuIyEYt3F93VNwkmF1PrldQiWQOiGqLOHRAlr0M.jpg', NULL, '2026-07-23 18:55:42', NULL, NULL, '2026-07-21 23:53:22', '2026-08-12 00:34:44'),
(5, 'Cathleen', 'Nixie', 'adminbinus@gmail.com', NULL, NULL, '081111111111', NULL, '2026-07-22', '$2y$12$DCiwBpe6p5T8GHkGJnQJTu7NJGCUQa0xKyPnatZ9cmsaKYggK/8mi', 'avatars/rvfZzkGkr7tqpb1cw7YCkO6W6rNuXxCh45NJ1YeC.jpg', 0, 'university', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-22 00:38:43', '2026-08-12 00:08:04'),
(6, 'Federico', 'Pratama', 'adminui@gmail.com', NULL, NULL, '0866666666', NULL, '2026-07-22', '$2y$12$DCiwBpe6p5T8GHkGJnQJTu7NJGCUQa0xKyPnatZ9cmsaKYggK/8mi', NULL, 0, 'university', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-22 00:40:25', '2026-08-12 00:08:04'),
(7, 'Lamine', 'Yamal', 'adminipb@gmail.com', NULL, NULL, '082222222222', NULL, '2026-07-22', '$2y$12$DCiwBpe6p5T8GHkGJnQJTu7NJGCUQa0xKyPnatZ9cmsaKYggK/8mi', NULL, 0, 'university', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-22 00:43:04', '2026-08-12 00:08:04'),
(8, 'Alex', 'Sanches', 'adminuph@gmail.com', NULL, NULL, '085555555555', NULL, '2026-07-23', '$2y$12$DCiwBpe6p5T8GHkGJnQJTu7NJGCUQa0xKyPnatZ9cmsaKYggK/8mi', NULL, 0, 'university', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-22 18:44:22', '2026-08-12 00:08:04'),
(9, 'Michael', 'Ballack', 'adminsgu@gmail.com', NULL, NULL, '087777777777', NULL, '2026-07-23', '$2y$12$DCiwBpe6p5T8GHkGJnQJTu7NJGCUQa0xKyPnatZ9cmsaKYggK/8mi', NULL, 0, 'university', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-22 18:48:45', '2026-08-12 00:08:04'),
(10, 'faiz', '1', 'faizbayu1888@gmail.com', '113445295475807106194', NULL, NULL, NULL, NULL, NULL, NULL, 0, 'customer', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2026-07-22 21:23:12', '2026-07-22 21:23:12'),
(11, 'Brian', 'Alexandra', 'adminbinus2@gmail.com', NULL, NULL, '089999999999', NULL, '2026-08-05', '$2y$12$DCiwBpe6p5T8GHkGJnQJTu7NJGCUQa0xKyPnatZ9cmsaKYggK/8mi', NULL, 0, 'university', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2026-08-05 00:52:22', '2026-08-12 00:08:04'),
(12, 'Universitas Indonesia Press', '', 'uipress@ui.ac.id', NULL, NULL, NULL, NULL, NULL, '$2y$12$Ueuf9vL58gtZiQrdKHrmc.c7G9ckeDrmamTy.QWE1lcQvwng4XAnW', NULL, 0, 'university', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2026-08-12 00:14:11', '2026-08-12 00:14:11'),
(13, 'Universitas Gadjah Mada', '', 'press@ugm.ac.id', NULL, NULL, NULL, NULL, NULL, '$2y$12$ueqUrHK8YVjGAZD0nTExVut2BVROVisHsoZghbGYpZ.Ys3DYj.w/e', NULL, 0, 'university', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2026-08-12 00:14:11', '2026-08-12 00:14:11'),
(14, 'Institut Teknologi Bandung', '', 'itbpress@itb.ac.id', NULL, NULL, NULL, NULL, NULL, '$2y$12$rPm8ZtvVL5JxK3sUJqtlmeCzBgVz.fXeoP/Zrfi05zVSRy59tq/t2', NULL, 0, 'university', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2026-08-12 00:14:11', '2026-08-12 00:14:11'),
(15, 'Universitas Negeri Jakarta', '', 'unjpress@unj.ac.id', NULL, NULL, NULL, NULL, NULL, '$2y$12$yRkwymaKiQd8nDdQ6rzAR.KTcox.gmDy6E7hbrr2N0etbGZzMRGiu', NULL, 0, 'university', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2026-08-12 00:14:12', '2026-08-12 00:14:12'),
(16, 'Universitas Udayana', '', 'unudpress@unud.ac.id', NULL, NULL, NULL, NULL, NULL, '$2y$12$804uWAmkpjAY6St984b9nesjq6WTnxmq7lrrEnbg4gOc9nHBkGhli', NULL, 0, 'university', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2026-08-12 00:14:12', '2026-08-12 00:14:12');

-- --------------------------------------------------------

--
-- Table structure for table `vouchers`
--

CREATE TABLE `vouchers` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `code` varchar(255) NOT NULL,
  `name` varchar(255) NOT NULL,
  `description` text DEFAULT NULL,
  `type` enum('percentage','flat') NOT NULL,
  `value` decimal(12,2) NOT NULL,
  `max_discount` decimal(12,2) DEFAULT NULL,
  `min_purchase` decimal(12,2) NOT NULL DEFAULT 0.00,
  `max_uses` int(11) DEFAULT NULL,
  `max_uses_per_user` int(11) NOT NULL DEFAULT 1,
  `used_count` int(11) NOT NULL DEFAULT 0,
  `is_active` tinyint(1) NOT NULL DEFAULT 1,
  `starts_at` timestamp NULL DEFAULT NULL,
  `expires_at` timestamp NULL DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `vouchers`
--

INSERT INTO `vouchers` (`id`, `code`, `name`, `description`, `type`, `value`, `max_discount`, `min_purchase`, `max_uses`, `max_uses_per_user`, `used_count`, `is_active`, `starts_at`, `expires_at`, `created_at`, `updated_at`) VALUES
(2, 'HEMAT10UP', 'Hemat 10%', 'Beli Produk Apa Saja Dapatkan Diskon Dengan Minimal Belanja Rp 200.000', 'percentage', 10.00, 100000.00, 200000.00, NULL, 1, 0, 1, '2026-08-06 01:04:24', '2027-08-06 01:04:24', '2026-07-26 23:23:41', '2026-08-02 21:42:47');

-- --------------------------------------------------------

--
-- Table structure for table `voucher_usages`
--

CREATE TABLE `voucher_usages` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `voucher_id` bigint(20) UNSIGNED NOT NULL,
  `user_id` bigint(20) UNSIGNED NOT NULL,
  `checkout_session_id` bigint(20) UNSIGNED DEFAULT NULL,
  `discount_amount` decimal(12,2) NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `voucher_usages`
--

INSERT INTO `voucher_usages` (`id`, `voucher_id`, `user_id`, `checkout_session_id`, `discount_amount`, `created_at`, `updated_at`) VALUES
(1, 2, 3, 2, 64200.00, '2026-07-26 23:26:34', '2026-07-26 23:26:34'),
(2, 2, 4, 3, 32100.00, '2026-08-02 21:42:47', '2026-08-02 21:42:47');

-- --------------------------------------------------------

--
-- Table structure for table `wishlists`
--

CREATE TABLE `wishlists` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `user_id` bigint(20) UNSIGNED NOT NULL,
  `product_id` bigint(20) UNSIGNED NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `wishlists`
--

INSERT INTO `wishlists` (`id`, `user_id`, `product_id`, `created_at`, `updated_at`) VALUES
(1, 4, 10, '2026-08-05 21:15:49', '2026-08-05 21:15:49');

--
-- Indexes for dumped tables
--

--
-- Indexes for table `addresses`
--
ALTER TABLE `addresses`
  ADD PRIMARY KEY (`id`),
  ADD KEY `addresses_user_id_foreign` (`user_id`);

--
-- Indexes for table `banners`
--
ALTER TABLE `banners`
  ADD PRIMARY KEY (`id`);

--
-- Indexes for table `blogs`
--
ALTER TABLE `blogs`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `blogs_slug_unique` (`slug`);

--
-- Indexes for table `cache`
--
ALTER TABLE `cache`
  ADD PRIMARY KEY (`key`),
  ADD KEY `cache_expiration_index` (`expiration`);

--
-- Indexes for table `cache_locks`
--
ALTER TABLE `cache_locks`
  ADD PRIMARY KEY (`key`),
  ADD KEY `cache_locks_expiration_index` (`expiration`);

--
-- Indexes for table `carts`
--
ALTER TABLE `carts`
  ADD PRIMARY KEY (`id`),
  ADD KEY `carts_user_id_foreign` (`user_id`),
  ADD KEY `carts_product_id_foreign` (`product_id`);

--
-- Indexes for table `cart_items`
--
ALTER TABLE `cart_items`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `cart_items_user_id_product_id_unique` (`user_id`,`product_id`),
  ADD KEY `cart_items_product_id_foreign` (`product_id`);

--
-- Indexes for table `categories`
--
ALTER TABLE `categories`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `categories_slug_unique` (`slug`);

--
-- Indexes for table `checkout_sessions`
--
ALTER TABLE `checkout_sessions`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `checkout_sessions_session_code_unique` (`session_code`),
  ADD KEY `checkout_sessions_user_id_index` (`user_id`),
  ADD KEY `checkout_sessions_status_index` (`status`),
  ADD KEY `checkout_sessions_voucher_id_foreign` (`voucher_id`);

--
-- Indexes for table `failed_jobs`
--
ALTER TABLE `failed_jobs`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `failed_jobs_uuid_unique` (`uuid`),
  ADD KEY `failed_jobs_connection_queue_failed_at_index` (`connection`,`queue`,`failed_at`);

--
-- Indexes for table `hero_sliders`
--
ALTER TABLE `hero_sliders`
  ADD PRIMARY KEY (`id`);

--
-- Indexes for table `jobs`
--
ALTER TABLE `jobs`
  ADD PRIMARY KEY (`id`),
  ADD KEY `jobs_queue_index` (`queue`);

--
-- Indexes for table `job_batches`
--
ALTER TABLE `job_batches`
  ADD PRIMARY KEY (`id`);

--
-- Indexes for table `migrations`
--
ALTER TABLE `migrations`
  ADD PRIMARY KEY (`id`);

--
-- Indexes for table `notifications`
--
ALTER TABLE `notifications`
  ADD PRIMARY KEY (`id`),
  ADD KEY `notifications_user_id_read_at_index` (`user_id`,`read_at`),
  ADD KEY `notifications_user_id_created_at_index` (`user_id`,`created_at`);

--
-- Indexes for table `orders`
--
ALTER TABLE `orders`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `orders_order_number_unique` (`order_number`),
  ADD KEY `orders_user_id_created_at_index` (`user_id`,`created_at`),
  ADD KEY `orders_status_index` (`status`),
  ADD KEY `orders_checkout_session_id_foreign` (`checkout_session_id`);

--
-- Indexes for table `order_items`
--
ALTER TABLE `order_items`
  ADD PRIMARY KEY (`id`),
  ADD KEY `order_items_order_id_foreign` (`order_id`),
  ADD KEY `order_items_product_id_foreign` (`product_id`),
  ADD KEY `order_items_university_id_foreign` (`university_id`);

--
-- Indexes for table `password_reset_tokens`
--
ALTER TABLE `password_reset_tokens`
  ADD PRIMARY KEY (`email`);

--
-- Indexes for table `payments`
--
ALTER TABLE `payments`
  ADD PRIMARY KEY (`id`),
  ADD KEY `payments_order_id_foreign` (`order_id`);

--
-- Indexes for table `payouts`
--
ALTER TABLE `payouts`
  ADD PRIMARY KEY (`id`),
  ADD KEY `payouts_university_id_foreign` (`university_id`);

--
-- Indexes for table `personal_access_tokens`
--
ALTER TABLE `personal_access_tokens`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `personal_access_tokens_token_unique` (`token`),
  ADD KEY `personal_access_tokens_tokenable_type_tokenable_id_index` (`tokenable_type`,`tokenable_id`),
  ADD KEY `personal_access_tokens_expires_at_index` (`expires_at`);

--
-- Indexes for table `point_transactions`
--
ALTER TABLE `point_transactions`
  ADD PRIMARY KEY (`id`),
  ADD KEY `point_transactions_user_id_foreign` (`user_id`),
  ADD KEY `point_transactions_order_id_foreign` (`order_id`);

--
-- Indexes for table `products`
--
ALTER TABLE `products`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `products_slug_unique` (`slug`),
  ADD KEY `products_approval_status_index` (`approval_status`),
  ADD KEY `products_university_id_index` (`university_id`),
  ADD KEY `products_approval_created_index` (`approval_status`,`created_at`),
  ADD KEY `products_approval_discount_index` (`approval_status`,`discount_price`),
  ADD KEY `products_approval_reviews_index` (`approval_status`,`reviews`),
  ADD KEY `products_seller_id_foreign` (`seller_id`);

--
-- Indexes for table `product_images`
--
ALTER TABLE `product_images`
  ADD PRIMARY KEY (`id`),
  ADD KEY `product_images_product_id_foreign` (`product_id`);

--
-- Indexes for table `reviews`
--
ALTER TABLE `reviews`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `reviews_user_id_product_id_unique` (`user_id`,`product_id`),
  ADD KEY `reviews_product_id_foreign` (`product_id`);

--
-- Indexes for table `sessions`
--
ALTER TABLE `sessions`
  ADD PRIMARY KEY (`id`),
  ADD KEY `sessions_user_id_index` (`user_id`),
  ADD KEY `sessions_last_activity_index` (`last_activity`);

--
-- Indexes for table `universities`
--
ALTER TABLE `universities`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `universities_slug_unique` (`slug`),
  ADD UNIQUE KEY `universities_email_unique` (`email`);

--
-- Indexes for table `users`
--
ALTER TABLE `users`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `users_email_unique` (`email`),
  ADD UNIQUE KEY `users_phone_unique` (`phone`),
  ADD UNIQUE KEY `users_google_id_unique` (`google_id`),
  ADD KEY `users_university_id_foreign` (`university_id`);

--
-- Indexes for table `vouchers`
--
ALTER TABLE `vouchers`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `vouchers_code_unique` (`code`),
  ADD KEY `vouchers_code_index` (`code`),
  ADD KEY `vouchers_is_active_index` (`is_active`),
  ADD KEY `vouchers_expires_at_index` (`expires_at`);

--
-- Indexes for table `voucher_usages`
--
ALTER TABLE `voucher_usages`
  ADD PRIMARY KEY (`id`),
  ADD KEY `voucher_usages_user_id_foreign` (`user_id`),
  ADD KEY `voucher_usages_checkout_session_id_foreign` (`checkout_session_id`),
  ADD KEY `voucher_usages_voucher_id_user_id_index` (`voucher_id`,`user_id`);

--
-- Indexes for table `wishlists`
--
ALTER TABLE `wishlists`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `wishlists_user_id_product_id_unique` (`user_id`,`product_id`),
  ADD KEY `wishlists_product_id_foreign` (`product_id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `addresses`
--
ALTER TABLE `addresses`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;

--
-- AUTO_INCREMENT for table `banners`
--
ALTER TABLE `banners`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;

--
-- AUTO_INCREMENT for table `blogs`
--
ALTER TABLE `blogs`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9;

--
-- AUTO_INCREMENT for table `carts`
--
ALTER TABLE `carts`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=17;

--
-- AUTO_INCREMENT for table `cart_items`
--
ALTER TABLE `cart_items`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT for table `categories`
--
ALTER TABLE `categories`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=65;

--
-- AUTO_INCREMENT for table `checkout_sessions`
--
ALTER TABLE `checkout_sessions`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;

--
-- AUTO_INCREMENT for table `failed_jobs`
--
ALTER TABLE `failed_jobs`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT for table `hero_sliders`
--
ALTER TABLE `hero_sliders`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;

--
-- AUTO_INCREMENT for table `jobs`
--
ALTER TABLE `jobs`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT for table `migrations`
--
ALTER TABLE `migrations`
  MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=48;

--
-- AUTO_INCREMENT for table `notifications`
--
ALTER TABLE `notifications`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=31;

--
-- AUTO_INCREMENT for table `orders`
--
ALTER TABLE `orders`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=14;

--
-- AUTO_INCREMENT for table `order_items`
--
ALTER TABLE `order_items`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=16;

--
-- AUTO_INCREMENT for table `payments`
--
ALTER TABLE `payments`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;

--
-- AUTO_INCREMENT for table `payouts`
--
ALTER TABLE `payouts`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT for table `personal_access_tokens`
--
ALTER TABLE `personal_access_tokens`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=52;

--
-- AUTO_INCREMENT for table `point_transactions`
--
ALTER TABLE `point_transactions`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9;

--
-- AUTO_INCREMENT for table `products`
--
ALTER TABLE `products`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=17;

--
-- AUTO_INCREMENT for table `product_images`
--
ALTER TABLE `product_images`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT for table `reviews`
--
ALTER TABLE `reviews`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT for table `universities`
--
ALTER TABLE `universities`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9;

--
-- AUTO_INCREMENT for table `users`
--
ALTER TABLE `users`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=17;

--
-- AUTO_INCREMENT for table `vouchers`
--
ALTER TABLE `vouchers`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;

--
-- AUTO_INCREMENT for table `voucher_usages`
--
ALTER TABLE `voucher_usages`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;

--
-- AUTO_INCREMENT for table `wishlists`
--
ALTER TABLE `wishlists`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;

--
-- Constraints for dumped tables
--

--
-- Constraints for table `addresses`
--
ALTER TABLE `addresses`
  ADD CONSTRAINT `addresses_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

--
-- Constraints for table `carts`
--
ALTER TABLE `carts`
  ADD CONSTRAINT `carts_product_id_foreign` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `carts_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

--
-- Constraints for table `cart_items`
--
ALTER TABLE `cart_items`
  ADD CONSTRAINT `cart_items_product_id_foreign` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `cart_items_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

--
-- Constraints for table `checkout_sessions`
--
ALTER TABLE `checkout_sessions`
  ADD CONSTRAINT `checkout_sessions_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `checkout_sessions_voucher_id_foreign` FOREIGN KEY (`voucher_id`) REFERENCES `vouchers` (`id`) ON DELETE SET NULL;

--
-- Constraints for table `notifications`
--
ALTER TABLE `notifications`
  ADD CONSTRAINT `notifications_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

--
-- Constraints for table `orders`
--
ALTER TABLE `orders`
  ADD CONSTRAINT `orders_checkout_session_id_foreign` FOREIGN KEY (`checkout_session_id`) REFERENCES `checkout_sessions` (`id`) ON DELETE SET NULL,
  ADD CONSTRAINT `orders_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

--
-- Constraints for table `order_items`
--
ALTER TABLE `order_items`
  ADD CONSTRAINT `order_items_order_id_foreign` FOREIGN KEY (`order_id`) REFERENCES `orders` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `order_items_product_id_foreign` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `order_items_university_id_foreign` FOREIGN KEY (`university_id`) REFERENCES `universities` (`id`) ON DELETE SET NULL;

--
-- Constraints for table `payments`
--
ALTER TABLE `payments`
  ADD CONSTRAINT `payments_order_id_foreign` FOREIGN KEY (`order_id`) REFERENCES `orders` (`id`) ON DELETE CASCADE;

--
-- Constraints for table `payouts`
--
ALTER TABLE `payouts`
  ADD CONSTRAINT `payouts_university_id_foreign` FOREIGN KEY (`university_id`) REFERENCES `universities` (`id`) ON DELETE CASCADE;

--
-- Constraints for table `point_transactions`
--
ALTER TABLE `point_transactions`
  ADD CONSTRAINT `point_transactions_order_id_foreign` FOREIGN KEY (`order_id`) REFERENCES `orders` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `point_transactions_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

--
-- Constraints for table `products`
--
ALTER TABLE `products`
  ADD CONSTRAINT `products_seller_id_foreign` FOREIGN KEY (`seller_id`) REFERENCES `users` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `products_university_id_foreign` FOREIGN KEY (`university_id`) REFERENCES `universities` (`id`) ON DELETE CASCADE;

--
-- Constraints for table `product_images`
--
ALTER TABLE `product_images`
  ADD CONSTRAINT `product_images_product_id_foreign` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

--
-- Constraints for table `reviews`
--
ALTER TABLE `reviews`
  ADD CONSTRAINT `reviews_product_id_foreign` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `reviews_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

--
-- Constraints for table `users`
--
ALTER TABLE `users`
  ADD CONSTRAINT `users_university_id_foreign` FOREIGN KEY (`university_id`) REFERENCES `universities` (`id`) ON DELETE SET NULL;

--
-- Constraints for table `voucher_usages`
--
ALTER TABLE `voucher_usages`
  ADD CONSTRAINT `voucher_usages_checkout_session_id_foreign` FOREIGN KEY (`checkout_session_id`) REFERENCES `checkout_sessions` (`id`) ON DELETE SET NULL,
  ADD CONSTRAINT `voucher_usages_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `voucher_usages_voucher_id_foreign` FOREIGN KEY (`voucher_id`) REFERENCES `vouchers` (`id`) ON DELETE CASCADE;

--
-- Constraints for table `wishlists`
--
ALTER TABLE `wishlists`
  ADD CONSTRAINT `wishlists_product_id_foreign` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `wishlists_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
