-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdatbase.sql
More file actions
244 lines (216 loc) · 9.47 KB
/
datbase.sql
File metadata and controls
244 lines (216 loc) · 9.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
-- ============================================
-- BUYBUZZ DATASPOT - COMPLETE DATABASE SCHEMA
-- ============================================
-- Create database if it doesn't exist
CREATE DATABASE IF NOT EXISTS buybuzz_datahub;
USE buybuzz_datahub;
-- ========== USERS TABLE ==========
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
full_name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
phone VARCHAR(20) NOT NULL,
password_hash VARCHAR(255) NOT NULL,
status ENUM('active', 'suspended', 'banned') DEFAULT 'active',
role ENUM('user', 'admin', 'super_admin') DEFAULT 'user',
last_login TIMESTAMP NULL,
profile_image VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_email (email),
INDEX idx_status (status),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ========== WALLETS TABLE ==========
CREATE TABLE IF NOT EXISTS wallets (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT UNIQUE NOT NULL,
balance DECIMAL(10,2) DEFAULT 0.00,
level ENUM('Bronze', 'Silver', 'Gold', 'Platinum') DEFAULT 'Bronze',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
INDEX idx_user_id (user_id),
INDEX idx_level (level)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ========== WALLET TRANSACTIONS TABLE ==========
CREATE TABLE IF NOT EXISTS wallet_transactions (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
transaction_id VARCHAR(50) UNIQUE NOT NULL,
reference VARCHAR(100),
type ENUM('credit', 'debit', 'transfer_in', 'transfer_out', 'purchase', 'refund') NOT NULL,
amount DECIMAL(10,2) NOT NULL,
status ENUM('pending', 'completed', 'failed', 'cancelled') DEFAULT 'pending',
description TEXT,
metadata JSON,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
INDEX idx_user_id (user_id),
INDEX idx_transaction_id (transaction_id),
INDEX idx_reference (reference),
INDEX idx_type (type),
INDEX idx_status (status),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ========== ORDERS TABLE ==========
CREATE TABLE IF NOT EXISTS orders (
id INT AUTO_INCREMENT PRIMARY KEY,
order_id VARCHAR(50) UNIQUE NOT NULL,
user_id INT NOT NULL,
order_type ENUM('data_bundle', 'results_checker', 'afa_bundle', 'top_up', 'flyer_generation') NOT NULL,
product_name VARCHAR(100),
network ENUM('MTN', 'Telecel', 'AirtelTigo', 'other') DEFAULT 'other',
bundle_size VARCHAR(50),
amount DECIMAL(10,2) NOT NULL,
beneficiary_number VARCHAR(20),
payment_reference VARCHAR(100),
status ENUM('pending_payment', 'processing', 'completed', 'failed', 'refunded', 'cancelled') DEFAULT 'pending_payment',
admin_notes TEXT,
delivery_response JSON,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
delivered_at TIMESTAMP NULL,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
INDEX idx_order_id (order_id),
INDEX idx_user_id (user_id),
INDEX idx_status (status),
INDEX idx_network (network),
INDEX idx_created_at (created_at),
INDEX idx_order_type (order_type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ========== DATA BUNDLE PRODUCTS TABLE ==========
CREATE TABLE IF NOT EXISTS data_bundle_products (
id INT AUTO_INCREMENT PRIMARY KEY,
network ENUM('MTN', 'Telecel', 'AirtelTigo') NOT NULL,
bundle_size VARCHAR(20) NOT NULL,
price DECIMAL(10,2) NOT NULL,
validity_days INT DEFAULT 30,
status ENUM('active', 'inactive') DEFAULT 'active',
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY unique_network_size (network, bundle_size),
INDEX idx_network (network),
INDEX idx_status (status),
INDEX idx_price (price)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ========== ORDER SEQUENCE TABLE ==========
CREATE TABLE IF NOT EXISTS order_sequence (
id INT AUTO_INCREMENT PRIMARY KEY,
last_number INT DEFAULT 4000,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ========== ADMIN ACTIVITY LOGS ==========
CREATE TABLE IF NOT EXISTS admin_activity_logs (
id INT AUTO_INCREMENT PRIMARY KEY,
admin_id INT NOT NULL,
action VARCHAR(100) NOT NULL,
target_type VARCHAR(50),
target_id INT,
details JSON,
ip_address VARCHAR(45),
user_agent TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (admin_id) REFERENCES users(id) ON DELETE CASCADE,
INDEX idx_admin_id (admin_id),
INDEX idx_action (action),
INDEX idx_created_at (created_at),
INDEX idx_target (target_type, target_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ========== USER BUSINESS PROFILES ==========
CREATE TABLE IF NOT EXISTS user_business_profiles (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT UNIQUE NOT NULL,
business_name VARCHAR(100),
business_email VARCHAR(100),
business_phone VARCHAR(20),
whatsapp_number VARCHAR(20),
business_location TEXT,
business_description TEXT,
theme_color VARCHAR(7) DEFAULT '#7f5af0',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
INDEX idx_user_id (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ========== WITHDRAWALS TABLE ==========
CREATE TABLE IF NOT EXISTS withdrawals (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
amount DECIMAL(10,2) NOT NULL,
status ENUM('pending', 'approved', 'rejected', 'completed') DEFAULT 'pending',
paystack_reference VARCHAR(100),
admin_notes TEXT,
processed_at TIMESTAMP NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
INDEX idx_user_id (user_id),
INDEX idx_status (status),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ========== API KEYS TABLE ==========
CREATE TABLE IF NOT EXISTS api_keys (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
api_key VARCHAR(64) UNIQUE NOT NULL,
api_secret VARCHAR(128) NOT NULL,
name VARCHAR(100),
status ENUM('active', 'revoked') DEFAULT 'active',
last_used TIMESTAMP NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
INDEX idx_user_id (user_id),
INDEX idx_api_key (api_key),
INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ========== RESULTS VOUCHERS TABLE ==========
CREATE TABLE IF NOT EXISTS results_vouchers (
id INT AUTO_INCREMENT PRIMARY KEY,
voucher_type ENUM('BECE', 'WASSCE') NOT NULL,
pin VARCHAR(100) UNIQUE NOT NULL,
serial VARCHAR(100) UNIQUE NOT NULL,
status ENUM('available', 'allocated', 'used') DEFAULT 'available',
assigned_to_order VARCHAR(50),
assigned_at TIMESTAMP NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_voucher_type (voucher_type),
INDEX idx_status (status),
INDEX idx_pin (pin)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ========== WHATSAPP JOIN LOGS ==========
CREATE TABLE IF NOT EXISTS whatsapp_join_logs (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
action VARCHAR(50) DEFAULT 'join_clicked',
device_info TEXT,
ip_address VARCHAR(45),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_user_id (user_id),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ========== USER LOGIN LOGS ==========
CREATE TABLE IF NOT EXISTS user_login_logs (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
ip_address VARCHAR(45),
user_agent TEXT,
success BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_user_id (user_id),
INDEX idx_created_at (created_at),
INDEX idx_success (success)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ========== PAYSTACK WEBHOOK LOGS ==========
CREATE TABLE IF NOT EXISTS paystack_webhook_logs (
id INT AUTO_INCREMENT PRIMARY KEY,
event_type VARCHAR(100) NOT NULL,
reference VARCHAR(100),
payload JSON,
status VARCHAR(50),
processed_at TIMESTAMP NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_reference (reference),
INDEX idx_event_type (event_type),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;