brand-master/SYSTEM_UPDATE_GUIDE.md
dvirlabs 29aa5c2f36
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Add the option to login with username or phone or email and fix the leave messages
2026-05-08 18:54:26 +03:00

299 lines
7.4 KiB
Markdown

# System Update - Quick Reference Guide
## Date
May 8, 2026
## Changes Implemented
### 1. Contact Messages System - FIXED
**Problem:** Database error when submitting contact form - column "full_name" did not exist
**Solution:**
- Applied migration `007_enhance_contact_messages.sql`
- Renamed `name``full_name` in database
- Added: `phone`, `is_read`, `status`, `admin_notes` columns
- Added status constraint and indexes for performance
**Features:**
- ✅ Public contact form with validation
- ✅ Admin dashboard tab with message management
- ✅ Unread counter badge
- ✅ Status tracking (New/Read/Replied)
- ✅ Admin notes for internal use
---
### 2. Flexible Login System - NEW
**Feature:** Users can now login with email, username, OR phone number
**Changes Made:**
#### Backend
- Added `username` column to users table (unique, indexed)
- Made `phone` column unique and indexed for login
- Updated `authenticate_user()` to search by email OR username OR phone
- Changed login endpoint to accept `identifier` instead of `email`
- Updated User model and schemas
#### Frontend
- Login form: "Email" → "Email, Username, or Phone"
- Register form: Added optional username and phone fields
- Updated API calls to use new login format
**Example Logins:**
```
Email: admin@brandmaster.com
Username: admin123 (if set)
Phone: 0504370045 (if set)
```
---
## Files Modified
### Backend (8 files)
1.`backend/migrations/007_enhance_contact_messages.sql` - NEW
2.`backend/migrations/008_add_username_to_users.sql` - NEW
3.`backend/app/models/user.py` - Added username, updated phone
4.`backend/app/models/contact_message.py` - Enhanced model
5.`backend/app/schemas/user.py` - Added username field
6.`backend/app/schemas/contact.py` - Enhanced schemas
7.`backend/app/services/auth.py` - Flexible authenticate_user()
8.`backend/app/routers/auth.py` - Updated login endpoint
9.`backend/app/routers/contact.py` - Admin endpoints
10.`backend/app/main.py` - Registered admin router
### Frontend (3 files)
1.`frontend/src/pages/Login.jsx` - Flexible login form
2.`frontend/src/pages/Register.jsx` - Added username/phone fields
3.`frontend/src/pages/Admin.jsx` - Contact Messages tab
4.`frontend/src/pages/Contact.jsx` - Enhanced form
### Documentation (2 files)
1.`DATABASE.md` - Updated schema documentation
2.`deploy-complete-update.bat` - Automated deployment script
---
## Deployment Steps
### Quick Deploy (Automated)
```bash
cd c:\Users\dvirl\OneDrive\Desktop\gitea\brand-master
deploy-complete-update.bat
```
### Manual Deploy
```bash
# 1. Apply migrations
apply-migration.bat 007_enhance_contact_messages.sql
apply-migration.bat 008_add_username_to_users.sql
# 2. Build images
cd backend && docker build -t harbor.dvirlabs.com/my-apps/brand-master-backend:latest .
cd ../frontend && docker build -t harbor.dvirlabs.com/my-apps/brand-master-frontend:latest .
# 3. Push to Harbor
docker push harbor.dvirlabs.com/my-apps/brand-master-backend:latest
docker push harbor.dvirlabs.com/my-apps/brand-master-frontend:latest
# 4. Deploy with Helm
cd brand-master-chart
helm upgrade brand-master . --namespace my-apps --wait
```
---
## Testing Checklist
### ✅ Contact Form Fix
- [ ] Navigate to https://brand-master.dvirlabs.com/contact
- [ ] Fill in all fields (name, email, phone, subject, message)
- [ ] Submit form
- [ ] Verify success message (should NOT get database error)
### ✅ Admin Contact Messages
- [ ] Login as admin
- [ ] Click "Contact Messages" tab
- [ ] Verify unread counter appears
- [ ] Click on message to open details
- [ ] Update status to "Read"
- [ ] Add admin notes
- [ ] Save changes
- [ ] Verify unread counter updates
### ✅ Flexible Login
- [ ] Test login with email: `admin@brandmaster.com`
- [ ] Register new user with username: `testuser123`
- [ ] Test login with username: `testuser123`
- [ ] Register user with phone: `0501234567`
- [ ] Test login with phone: `0501234567`
---
## Database Schema Changes
### contact_message Table
```sql
-- BEFORE
name VARCHAR -- Changed to full_name
email VARCHAR
subject VARCHAR
message TEXT
created_at TIMESTAMP
-- AFTER
full_name VARCHAR -- Renamed from 'name'
email VARCHAR
phone VARCHAR -- NEW (optional)
subject VARCHAR
message TEXT
created_at TIMESTAMP
is_read BOOLEAN -- NEW (default: false)
status VARCHAR -- NEW (new/read/replied)
admin_notes TEXT -- NEW (nullable)
```
### user Table
```sql
-- BEFORE
email VARCHAR (UNIQUE, INDEXED)
phone VARCHAR (NULLABLE)
-- AFTER
email VARCHAR (UNIQUE, INDEXED)
username VARCHAR (UNIQUE, INDEXED, NULLABLE) -- NEW
phone VARCHAR (UNIQUE, INDEXED, NULLABLE) -- Now unique & indexed
```
---
## API Changes
### Login Endpoint
```javascript
// BEFORE
POST /api/auth/login
{
email: "admin@brandmaster.com",
password: "Admin123!"
}
// AFTER
POST /api/auth/login
{
identifier: "admin@brandmaster.com", // Can be email, username, or phone
password: "Admin123!"
}
```
### Register Endpoint
```javascript
// BEFORE
POST /api/auth/register
{
email: "user@example.com",
password: "password123",
full_name: "John Doe"
}
// AFTER
POST /api/auth/register
{
email: "user@example.com",
username: "johndoe", // NEW (optional)
phone: "0501234567", // NEW (optional)
password: "password123",
full_name: "John Doe"
}
```
### New Admin Endpoints
```
GET /api/admin/contact-messages - List all messages
GET /api/admin/contact-messages/unread-count - Get unread count
GET /api/admin/contact-messages/{id} - Get single message
PUT /api/admin/contact-messages/{id} - Update message
DELETE /api/admin/contact-messages/{id} - Delete message
```
---
## Default Admin Credentials
**Email:** `admin@brandmaster.com`
**Password:** `Admin123!`
**Can also login with:**
- Email: `admin@brandmaster.com`
- Username: (not set by default)
- Phone: (not set by default)
To add username/phone to admin account:
```sql
UPDATE "user"
SET username = 'admin', phone = '0504370045'
WHERE email = 'admin@brandmaster.com';
```
---
## Troubleshooting
### Contact Form Still Shows Error
```bash
# Check if migration was applied
kubectl exec -it -n my-apps deployment/brand-master-postgres -- psql -U brand_master -d brand_master_db
# Run this query
\d contact_message
# Should show: full_name, phone, is_read, status, admin_notes columns
```
### Login with Username Doesn't Work
```bash
# Check if migration was applied
\d "user"
# Should show: username column with UNIQUE constraint
# Check indexes
\di idx_user_username
```
### Backend Logs Show Errors
```bash
kubectl logs -n my-apps deployment/brand-master-backend --tail=50
```
---
## Success Criteria
✅ No database errors when submitting contact form
✅ Contact messages appear in admin dashboard
✅ Unread counter shows correct number
✅ Can login with email
✅ Can login with username (when set)
✅ Can login with phone (when set)
✅ New users can register with username and phone
✅ All form validations work correctly
---
## Next Steps (Optional Enhancements)
1. Email notifications for new contact messages
2. Reply to messages from admin panel
3. Set username/phone for existing users via profile page
4. Bulk actions for messages (delete multiple, mark all as read)
5. Export contact messages to CSV
6. Advanced search and filtering
---
**Status:** ✅ Ready for Deployment
**Deployment Script:** `deploy-complete-update.bat`
**Estimated Deployment Time:** 5-10 minutes