Skip to content

Commit 7c9c67f

Browse files
conc
2 parents a137f41 + 7a9030f commit 7c9c67f

34 files changed

Lines changed: 8466 additions & 13 deletions

document/Admin Dashboard - Đề Xuất Implementation.md

Lines changed: 923 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
# Checklist Debug Backend Admin
2+
3+
## 🔍 Kiểm Tra Lỗi 500
4+
5+
### Step 1: Kiểm Tra Database Connection
6+
```sql
7+
-- Test connection
8+
SELECT @@VERSION;
9+
```
10+
11+
### Step 2: Kiểm Tra Role Table
12+
```sql
13+
-- Xem tất cả roles
14+
SELECT * FROM Role;
15+
16+
-- Nếu thiếu ADMIN role:
17+
INSERT INTO Role (id, name) VALUES (NEWID(), 'ADMIN');
18+
```
19+
20+
### Step 3: Kiểm Tra Admin User
21+
```sql
22+
-- Xem users và roles
23+
SELECT
24+
u.id,
25+
u.email,
26+
u.username,
27+
u.isActive,
28+
r.id as role_id,
29+
r.name as role_name
30+
FROM Users u
31+
LEFT JOIN Role r ON u.Roleid = r.id;
32+
33+
-- Kiểm tra admin user cụ thể
34+
SELECT u.*, r.name as role
35+
FROM Users u
36+
JOIN Role r ON u.Roleid = r.id
37+
WHERE u.email = 'admin@labverse.com';
38+
```
39+
40+
### Step 4: Kiểm Tra Users Không Có Role
41+
```sql
42+
-- Users không có role sẽ gây lỗi
43+
SELECT u.*
44+
FROM Users u
45+
WHERE u.Roleid IS NULL;
46+
47+
-- Fix: Gán role mặc định
48+
UPDATE Users
49+
SET Roleid = (SELECT TOP 1 id FROM Role WHERE name = 'RESEARCHER')
50+
WHERE Roleid IS NULL;
51+
```
52+
53+
### Step 5: Test Query Trực Tiếp
54+
```sql
55+
-- Test query với NULL
56+
DECLARE @search NVARCHAR(255) = NULL;
57+
DECLARE @role NVARCHAR(255) = NULL;
58+
DECLARE @isActive BIT = NULL;
59+
60+
SELECT u.*
61+
FROM Users u
62+
LEFT JOIN Role r ON u.Roleid = r.id
63+
WHERE (@search IS NULL OR @search = '' OR
64+
LOWER(u.email) LIKE LOWER('%' + @search + '%') OR
65+
LOWER(u.username) LIKE LOWER('%' + @search + '%') OR
66+
LOWER(u.full_name) LIKE LOWER('%' + @search + '%'))
67+
AND (@role IS NULL OR @role = '' OR r.name = @role)
68+
AND (@isActive IS NULL OR u.is_active = @isActive);
69+
```
70+
71+
### Step 6: Kiểm Tra Application Logs
72+
Xem logs trong console để tìm stack trace cụ thể:
73+
```
74+
ERROR ... Exception: ...
75+
at com.se1853_jv.service.impl.AdminServiceImpl.getAllUsers(...)
76+
```
77+
78+
---
79+
80+
## 🛠️ Common Fixes
81+
82+
### Fix 1: Query Syntax Error
83+
Nếu lỗi về CONCAT, có thể SQL Server version không support:
84+
```java
85+
// Thay CONCAT bằng + operator (SQL Server)
86+
LOWER(u.email) LIKE LOWER('%' + :search + '%')
87+
```
88+
89+
### Fix 2: NullPointerException
90+
Đảm bảo tất cả users đều có role:
91+
```sql
92+
-- Check và fix
93+
UPDATE Users
94+
SET Roleid = (SELECT TOP 1 id FROM Role WHERE name = 'RESEARCHER')
95+
WHERE Roleid IS NULL;
96+
```
97+
98+
### Fix 3: LazyInitializationException
99+
Role đã có `FetchType.EAGER` nên không có vấn đề này.
100+
101+
### Fix 4: Transaction Issue
102+
Đảm bảo `@Transactional` được dùng đúng:
103+
- `getAllUsers()` không cần `@Transactional` (read-only)
104+
- Các methods modify cần `@Transactional`
105+
106+
---
107+
108+
## 📋 Test Checklist
109+
110+
- [ ] Database connection OK
111+
- [ ] ADMIN role exists
112+
- [ ] Admin user exists và có ADMIN role
113+
- [ ] Tất cả users đều có role (không có NULL)
114+
- [ ] Query test trực tiếp trong SQL Server OK
115+
- [ ] Backend service đang chạy
116+
- [ ] JWT token hợp lệ
117+
- [ ] Authorization header đúng format
118+
119+
---
120+
121+
## 🧪 Quick Test SQL
122+
123+
```sql
124+
-- 1. Check roles
125+
SELECT * FROM Role;
126+
127+
-- 2. Check admin user
128+
SELECT u.email, r.name
129+
FROM Users u
130+
JOIN Role r ON u.Roleid = r.id
131+
WHERE r.name = 'ADMIN';
132+
133+
-- 3. Check users without role
134+
SELECT COUNT(*) as users_without_role
135+
FROM Users
136+
WHERE Roleid IS NULL;
137+
138+
-- 4. Test query
139+
SELECT COUNT(*)
140+
FROM Users u
141+
JOIN Role r ON u.Roleid = r.id
142+
WHERE (NULL IS NULL OR NULL = '' OR 1=1)
143+
AND (NULL IS NULL OR NULL = '' OR 1=1)
144+
AND (NULL IS NULL OR u.is_active = NULL);
145+
```
146+

0 commit comments

Comments
 (0)