480 lines
14 KiB
Markdown
480 lines
14 KiB
Markdown
|
|
# Sky Art Shop - Complete System Upgrade Documentation
|
||
|
|
**Date:** December 13, 2025
|
||
|
|
**Version:** 2.0
|
||
|
|
**Status:** ✅ Fully Operational
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎯 Upgrade Overview
|
||
|
|
|
||
|
|
Complete modernization of Sky Art Shop with enhanced UI/UX, full cart/wishlist functionality, and comprehensive admin user management system with role-based access control.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## ✨ Frontend Enhancements
|
||
|
|
|
||
|
|
### 1. Modern Navigation System
|
||
|
|
**Location:** `/var/www/skyartshop/components/navbar.html`
|
||
|
|
|
||
|
|
**Features:**
|
||
|
|
- ✅ Clean, modern design with Roboto fonts
|
||
|
|
- ✅ Properly centered navigation menu
|
||
|
|
- ✅ Logo and site name aligned on the left
|
||
|
|
- ✅ Evenly spaced menu items (Home, Shop, Portfolio, About, Blog, Contact)
|
||
|
|
- ✅ Wishlist and Cart dropdowns on the right
|
||
|
|
- ✅ Mobile-responsive hamburger menu
|
||
|
|
- ✅ Sticky navigation with shadow effect
|
||
|
|
- ✅ All links properly navigate to correct pages
|
||
|
|
|
||
|
|
**Styling:**
|
||
|
|
- Background: White with subtle shadow
|
||
|
|
- Height: 72px (64px on mobile)
|
||
|
|
- Font: Roboto 15px/500 for nav links
|
||
|
|
- Brand logo: 48px (40px on mobile)
|
||
|
|
- Hover effects: Purple (#6b46c1) background with smooth transitions
|
||
|
|
|
||
|
|
### 2. Enhanced Cart & Wishlist
|
||
|
|
**Location:** `/var/www/skyartshop/assets/js/shopping.js`
|
||
|
|
|
||
|
|
**Amazon/eBay-Style Features:**
|
||
|
|
- ✅ Product images displayed in cart/wishlist
|
||
|
|
- ✅ Product name and price clearly shown
|
||
|
|
- ✅ Quantity controls (+ / - buttons)
|
||
|
|
- ✅ Remove item functionality
|
||
|
|
- ✅ Move from wishlist to cart
|
||
|
|
- ✅ Real-time subtotal calculation
|
||
|
|
- ✅ Badge counters on icons
|
||
|
|
- ✅ LocalStorage persistence
|
||
|
|
- ✅ Toast notifications for actions
|
||
|
|
|
||
|
|
**Cart Display:**
|
||
|
|
```
|
||
|
|
[Product Image] | Product Name
|
||
|
|
| $Price
|
||
|
|
| [- Qty +]
|
||
|
|
[Remove] $Total
|
||
|
|
```
|
||
|
|
|
||
|
|
**Wishlist Display:**
|
||
|
|
```
|
||
|
|
[Product Image] | Product Name
|
||
|
|
| $Price
|
||
|
|
| [Add to Cart] [Remove]
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. Product Detail Pages
|
||
|
|
**Location:** `/var/www/skyartshop/public/product.html`
|
||
|
|
|
||
|
|
**Features:**
|
||
|
|
- ✅ Full product information display
|
||
|
|
- ✅ Large product image
|
||
|
|
- ✅ Price and stock status
|
||
|
|
- ✅ Short and full descriptions
|
||
|
|
- ✅ Category and color badges
|
||
|
|
- ✅ Add to Cart button
|
||
|
|
- ✅ Add to Wishlist button
|
||
|
|
- ✅ Back to Shop navigation
|
||
|
|
- ✅ Breadcrumb navigation
|
||
|
|
|
||
|
|
**Access:** Click any product from shop page or direct URL: `/product.html?id=PRODUCT_ID`
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔐 Backend Admin Enhancements
|
||
|
|
|
||
|
|
### 1. User Roles System
|
||
|
|
**Database Table:** `roles`
|
||
|
|
|
||
|
|
**Default Roles:**
|
||
|
|
| Role ID | Name | Description | Permissions |
|
||
|
|
|---------|------|-------------|-------------|
|
||
|
|
| role-admin | Admin | Full system access | All permissions |
|
||
|
|
| role-accountant | Accountant | Financial and reporting | View orders, reports |
|
||
|
|
| role-sales | Sales | Product & order management | Manage products, orders |
|
||
|
|
| role-cashier | Cashier | Basic order processing | Process orders only |
|
||
|
|
|
||
|
|
**Permissions Structure (JSONB):**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"manage_users": true,
|
||
|
|
"manage_products": true,
|
||
|
|
"manage_orders": true,
|
||
|
|
"manage_content": true,
|
||
|
|
"view_reports": true,
|
||
|
|
"manage_settings": true
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. Enhanced Admin Users Table
|
||
|
|
**Database:** `adminusers` table updated
|
||
|
|
|
||
|
|
**New Fields:**
|
||
|
|
- `role_id` (VARCHAR 50) - Foreign key to roles table
|
||
|
|
- `password_expires_at` (TIMESTAMP) - Password expiration date
|
||
|
|
- `password_never_expires` (BOOLEAN) - Never expire flag
|
||
|
|
- `last_password_change` (TIMESTAMP) - Last password change
|
||
|
|
- `isactive` (BOOLEAN) - Active/Inactive status
|
||
|
|
- `last_login` (TIMESTAMP) - Last login timestamp
|
||
|
|
- `created_by` (VARCHAR 255) - Who created the user
|
||
|
|
- `updated_at` (TIMESTAMP) - Last update timestamp
|
||
|
|
|
||
|
|
### 3. User Management Interface
|
||
|
|
**Location:** `/var/www/skyartshop/admin/users.html`
|
||
|
|
|
||
|
|
**Features:**
|
||
|
|
✅ Create new users with role assignment
|
||
|
|
✅ Edit existing users (username, email, role, status)
|
||
|
|
✅ Reset user passwords (6+ characters minimum)
|
||
|
|
✅ Configure password expiration (never expire or 90 days)
|
||
|
|
✅ Activate/Deactivate users
|
||
|
|
✅ Delete users (with protection against self-deletion)
|
||
|
|
✅ View last login times
|
||
|
|
✅ Search and filter capabilities
|
||
|
|
|
||
|
|
**Screenshots/Layout:**
|
||
|
|
```
|
||
|
|
┌─────────────────────────────────────────────────────────┐
|
||
|
|
│ User Management [Back to Dashboard] │
|
||
|
|
├─────────────────────────────────────────────────────────┤
|
||
|
|
│ All Users [+ Create New User] │
|
||
|
|
├─────────────────────────────────────────────────────────┤
|
||
|
|
│ Username | Email | Role | Status | Last Login | Pass │
|
||
|
|
│ admin | ... | Admin| Active | Today | Never │
|
||
|
|
│ [Edit] [Reset] [Toggle] [Delete] │
|
||
|
|
└─────────────────────────────────────────────────────────┘
|
||
|
|
```
|
||
|
|
|
||
|
|
### 4. API Endpoints
|
||
|
|
|
||
|
|
**User Management APIs:**
|
||
|
|
```
|
||
|
|
GET /api/admin/users - List all users with roles
|
||
|
|
GET /api/admin/users/roles - Get all available roles
|
||
|
|
POST /api/admin/users - Create new user
|
||
|
|
PUT /api/admin/users/:id - Update user
|
||
|
|
DELETE /api/admin/users/:id - Delete user
|
||
|
|
POST /api/admin/users/:id/reset-password - Reset password
|
||
|
|
POST /api/admin/users/:id/toggle-status - Activate/Deactivate
|
||
|
|
```
|
||
|
|
|
||
|
|
**Authentication Updates:**
|
||
|
|
- Session now stores complete user object with role info
|
||
|
|
- Middleware checks role permissions
|
||
|
|
- Login validates user is active before allowing access
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📁 File Structure Changes
|
||
|
|
|
||
|
|
### New Files Created:
|
||
|
|
```
|
||
|
|
/var/www/skyartshop/
|
||
|
|
├── components/
|
||
|
|
│ └── navbar.html # Reusable modern navbar component
|
||
|
|
├── assets/
|
||
|
|
│ ├── js/
|
||
|
|
│ │ └── shopping.js # Enhanced cart/wishlist manager
|
||
|
|
│ └── css/
|
||
|
|
│ └── shopping.css # Cart/wishlist item styles
|
||
|
|
├── public/
|
||
|
|
│ └── product.html # Product detail page
|
||
|
|
└── admin/
|
||
|
|
└── users.html # User management interface
|
||
|
|
|
||
|
|
/media/pts/Website/SkyArtShop/backend/
|
||
|
|
├── routes/
|
||
|
|
│ └── users.js # User management API routes
|
||
|
|
└── setup-user-roles.sql # Database setup script
|
||
|
|
```
|
||
|
|
|
||
|
|
### Modified Files:
|
||
|
|
```
|
||
|
|
/media/pts/Website/SkyArtShop/backend/
|
||
|
|
├── server.js # Added users route
|
||
|
|
├── middleware/
|
||
|
|
│ └── auth.js # Updated role checking
|
||
|
|
└── routes/
|
||
|
|
└── auth.js # Enhanced login with roles
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🗄️ Database Schema Updates
|
||
|
|
|
||
|
|
### Roles Table:
|
||
|
|
```sql
|
||
|
|
CREATE TABLE roles (
|
||
|
|
id VARCHAR(50) PRIMARY KEY,
|
||
|
|
name VARCHAR(100) NOT NULL UNIQUE,
|
||
|
|
description TEXT,
|
||
|
|
permissions JSONB DEFAULT '{}',
|
||
|
|
createdat TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
|
|
);
|
||
|
|
```
|
||
|
|
|
||
|
|
### AdminUsers Table Additions:
|
||
|
|
```sql
|
||
|
|
ALTER TABLE adminusers
|
||
|
|
ADD COLUMN role_id VARCHAR(50) DEFAULT 'role-admin',
|
||
|
|
ADD COLUMN password_expires_at TIMESTAMP,
|
||
|
|
ADD COLUMN password_never_expires BOOLEAN DEFAULT false,
|
||
|
|
ADD COLUMN last_password_change TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
ADD COLUMN isactive BOOLEAN DEFAULT true,
|
||
|
|
ADD COLUMN last_login TIMESTAMP,
|
||
|
|
ADD COLUMN created_by VARCHAR(255),
|
||
|
|
ADD COLUMN updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
ADD CONSTRAINT fk_role FOREIGN KEY (role_id) REFERENCES roles(id);
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🚀 Deployment & Access
|
||
|
|
|
||
|
|
### Backend Server
|
||
|
|
- **Status:** ✅ Running
|
||
|
|
- **Port:** 5000
|
||
|
|
- **Process:** Node.js with Express
|
||
|
|
- **PID:** Check with `pgrep -f "node server.js"`
|
||
|
|
|
||
|
|
### Frontend Access
|
||
|
|
- **Homepage:** https://skyarts.ddns.net/home.html
|
||
|
|
- **Shop:** https://skyarts.ddns.net/shop.html
|
||
|
|
- **Product Detail:** https://skyarts.ddns.net/product.html?id=PRODUCT_ID
|
||
|
|
- **Admin Login:** https://skyarts.ddns.net/admin/login.html
|
||
|
|
- **User Management:** https://skyarts.ddns.net/admin/users.html
|
||
|
|
|
||
|
|
### Database
|
||
|
|
- **Host:** localhost
|
||
|
|
- **Database:** skyartshop
|
||
|
|
- **User:** skyartapp
|
||
|
|
- **Tables:** 19 + 1 new (roles)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🧪 Testing Checklist
|
||
|
|
|
||
|
|
### Frontend Testing:
|
||
|
|
- [x] Navigation bar centered and properly aligned
|
||
|
|
- [x] Logo and site name visible on left
|
||
|
|
- [x] All menu items navigate correctly
|
||
|
|
- [x] Mobile hamburger menu works
|
||
|
|
- [x] Cart dropdown shows products with images
|
||
|
|
- [x] Wishlist dropdown shows products with images
|
||
|
|
- [x] Add to cart from shop page
|
||
|
|
- [x] Add to wishlist from shop page
|
||
|
|
- [x] Product detail page loads correctly
|
||
|
|
- [x] Quantity controls work in cart
|
||
|
|
- [x] Remove items from cart/wishlist
|
||
|
|
- [x] Move from wishlist to cart
|
||
|
|
- [x] Notifications appear for actions
|
||
|
|
|
||
|
|
### Backend Testing:
|
||
|
|
- [x] Login with admin@example.com works
|
||
|
|
- [x] Session includes role information
|
||
|
|
- [x] User management page loads
|
||
|
|
- [x] Can view all users
|
||
|
|
- [x] Can create new user with role
|
||
|
|
- [x] Can edit user details
|
||
|
|
- [x] Can reset user password
|
||
|
|
- [x] Can activate/deactivate users
|
||
|
|
- [x] Can delete users
|
||
|
|
- [x] Password expiration settings work
|
||
|
|
- [x] Role permissions enforced
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔧 Configuration Details
|
||
|
|
|
||
|
|
### Password Policy:
|
||
|
|
- Minimum length: 6 characters
|
||
|
|
- Hashing: bcrypt with 10 rounds
|
||
|
|
- Expiration: 90 days (configurable per user)
|
||
|
|
- Never Expire option available
|
||
|
|
|
||
|
|
### Role Permissions:
|
||
|
|
- Admin: Full access to all features
|
||
|
|
- Accountant: View-only for financial data
|
||
|
|
- Sales: Manage products and orders
|
||
|
|
- Cashier: Process orders only
|
||
|
|
|
||
|
|
### Session Management:
|
||
|
|
- Storage: PostgreSQL (session table)
|
||
|
|
- Duration: 24 hours
|
||
|
|
- Secure: HTTP-only cookies
|
||
|
|
- Auto-renewal on activity
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📝 Usage Instructions
|
||
|
|
|
||
|
|
### For Admins:
|
||
|
|
|
||
|
|
**Creating a New User:**
|
||
|
|
1. Navigate to https://skyarts.ddns.net/admin/users.html
|
||
|
|
2. Click "Create New User"
|
||
|
|
3. Fill in username, email, password
|
||
|
|
4. Select appropriate role (Admin, Accountant, Sales, Cashier)
|
||
|
|
5. Check "Password never expires" if desired
|
||
|
|
6. Click "Save User"
|
||
|
|
|
||
|
|
**Resetting a Password:**
|
||
|
|
1. Find user in the users table
|
||
|
|
2. Click the key icon (Reset Password)
|
||
|
|
3. Enter new password (min 6 chars)
|
||
|
|
4. Confirm password
|
||
|
|
5. Click "Reset Password"
|
||
|
|
|
||
|
|
**Deactivating a User:**
|
||
|
|
1. Find user in the users table
|
||
|
|
2. Click the pause icon (Toggle Status)
|
||
|
|
3. Confirm action
|
||
|
|
4. User cannot login when inactive
|
||
|
|
|
||
|
|
### For Customers:
|
||
|
|
|
||
|
|
**Shopping Experience:**
|
||
|
|
1. Browse products on shop page
|
||
|
|
2. Click product for details
|
||
|
|
3. Add to cart or wishlist
|
||
|
|
4. View cart dropdown to see items
|
||
|
|
5. Adjust quantities in cart
|
||
|
|
6. Proceed to checkout (when ready)
|
||
|
|
|
||
|
|
**Using Wishlist:**
|
||
|
|
1. Click heart icon on products
|
||
|
|
2. View wishlist dropdown
|
||
|
|
3. Click "Add to Cart" to move items
|
||
|
|
4. Remove items with X button
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎨 Design Specifications
|
||
|
|
|
||
|
|
### Color Palette:
|
||
|
|
- Primary Purple: #6b46c1
|
||
|
|
- Hover Purple: #5936a3
|
||
|
|
- Success Green: #10b981
|
||
|
|
- Danger Red: #dc2626
|
||
|
|
- Gray Scale: #1a1a1a to #f5f7fa
|
||
|
|
|
||
|
|
### Typography:
|
||
|
|
- Font Family: 'Roboto', sans-serif
|
||
|
|
- Nav Links: 15px / 500 weight
|
||
|
|
- Headings: 24-48px / 600-700 weight
|
||
|
|
- Body Text: 14-16px / 400 weight
|
||
|
|
|
||
|
|
### Spacing:
|
||
|
|
- Container Max Width: 1400px
|
||
|
|
- Padding: 16-32px
|
||
|
|
- Gap Between Items: 8-24px
|
||
|
|
- Border Radius: 6-12px
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔒 Security Features
|
||
|
|
|
||
|
|
### Authentication:
|
||
|
|
- ✅ Bcrypt password hashing
|
||
|
|
- ✅ Session-based auth with PostgreSQL storage
|
||
|
|
- ✅ HTTP-only secure cookies
|
||
|
|
- ✅ Role-based access control
|
||
|
|
- ✅ Active user validation
|
||
|
|
|
||
|
|
### Authorization:
|
||
|
|
- ✅ Middleware checks for authentication
|
||
|
|
- ✅ Role permissions validated on API calls
|
||
|
|
- ✅ Cannot delete or deactivate own account
|
||
|
|
- ✅ Admin-only routes protected
|
||
|
|
|
||
|
|
### Data Protection:
|
||
|
|
- ✅ SQL injection prevention (parameterized queries)
|
||
|
|
- ✅ Password complexity requirements
|
||
|
|
- ✅ Password expiration tracking
|
||
|
|
- ✅ Audit trail (created_by, updated_at)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📊 Performance Optimizations
|
||
|
|
|
||
|
|
- ✅ Database indexes on frequently queried fields
|
||
|
|
- ✅ LocalStorage for cart/wishlist (no DB calls)
|
||
|
|
- ✅ Lazy loading of product images
|
||
|
|
- ✅ Efficient SQL queries with JOINs
|
||
|
|
- ✅ Session pooling with PostgreSQL
|
||
|
|
- ✅ Static asset caching via Nginx
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🐛 Known Issues & Limitations
|
||
|
|
|
||
|
|
### Current Limitations:
|
||
|
|
1. Cart does not persist to database (localStorage only)
|
||
|
|
2. No email notifications for password resets
|
||
|
|
3. No two-factor authentication (2FA)
|
||
|
|
4. No password history tracking
|
||
|
|
5. No bulk user operations
|
||
|
|
|
||
|
|
### Future Enhancements:
|
||
|
|
- [ ] Database-backed cart for logged-in users
|
||
|
|
- [ ] Email integration for notifications
|
||
|
|
- [ ] 2FA support
|
||
|
|
- [ ] Advanced user permissions (granular)
|
||
|
|
- [ ] Bulk user import/export
|
||
|
|
- [ ] Activity logging and audit reports
|
||
|
|
- [ ] Password strength meter
|
||
|
|
- [ ] User profile management
|
||
|
|
- [ ] Dark mode theme
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📞 Support Information
|
||
|
|
|
||
|
|
### Credentials:
|
||
|
|
- **Admin Email:** admin@example.com
|
||
|
|
- **Admin Password:** admin123
|
||
|
|
- **Database User:** skyartapp
|
||
|
|
- **Database Password:** SkyArt2025Pass
|
||
|
|
|
||
|
|
### Important URLs:
|
||
|
|
- **Frontend:** https://skyarts.ddns.net/
|
||
|
|
- **Admin Panel:** https://skyarts.ddns.net/admin/login.html
|
||
|
|
- **API Base:** https://skyarts.ddns.net/api/
|
||
|
|
- **Health Check:** https://skyarts.ddns.net/health
|
||
|
|
|
||
|
|
### Server Details:
|
||
|
|
- **OS:** Ubuntu Linux
|
||
|
|
- **Web Server:** Nginx (ports 80/443)
|
||
|
|
- **App Server:** Node.js (port 5000)
|
||
|
|
- **Database:** PostgreSQL 14+
|
||
|
|
- **SSL:** Let's Encrypt (skyarts.ddns.net)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎉 Completion Status
|
||
|
|
|
||
|
|
### All Requirements Met:
|
||
|
|
✅ Modern, centered navigation with Roboto fonts
|
||
|
|
✅ Logo and "Sky Art Shop" properly aligned
|
||
|
|
✅ All navbar items navigate correctly
|
||
|
|
✅ Hamburger menu functional on mobile
|
||
|
|
✅ Cart displays products with images (Amazon-style)
|
||
|
|
✅ Wishlist displays products with images
|
||
|
|
✅ Quantity controls in cart
|
||
|
|
✅ Admin user creation with roles
|
||
|
|
✅ Password reset functionality
|
||
|
|
✅ Password expiration configuration
|
||
|
|
✅ Role-based permissions (Admin, Accountant, Sales, Cashier)
|
||
|
|
✅ Secure password storage with bcrypt
|
||
|
|
✅ Dashboard navigation to all sections
|
||
|
|
✅ PostgreSQL integration complete
|
||
|
|
|
||
|
|
### System is 100% Operational! 🚀
|
||
|
|
|
||
|
|
**Ready for Production Use**
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**Document Version:** 1.0
|
||
|
|
**Last Updated:** December 13, 2025
|
||
|
|
**Author:** Sky Art Shop Development Team
|