Add 76 missing Bambu Lab colors and expand filament type support
- Added comprehensive color migration with 76 new Bambu Lab colors - Includes glow, metallic, sparkle, gradient, ABS, and translucent variants - Added PAHT material type with CF and Bez Finisha finish support - Added Tough+ finish option for PLA filaments - Fixed refill/spulna restrictions for specific combinations: - ABS GF Yellow/Orange now refill-only - TPU 95A HF now refill-only - Removed spool restrictions for Galaxy and Basic finishes - Updated frontend color mappings with all new colors - All colors now available in admin panel for inventory management
This commit is contained in:
117
CLAUDE.md
117
CLAUDE.md
@@ -28,13 +28,18 @@ npm test # Run Jest tests
|
||||
npm run test:watch # Run Jest in watch mode
|
||||
|
||||
# Security & Quality
|
||||
npm run security:check # Check for credential leaks
|
||||
npm run test:build # Test if build succeeds
|
||||
./scripts/pre-commit.sh # Runs security, build, and test checks (use before commits)
|
||||
npm run security:check # Check for credential leaks (scripts/security/security-check.js)
|
||||
npm run test:build # Test if build succeeds without creating files
|
||||
./scripts/pre-commit.sh # Runs security, build, and test checks (triggered by husky)
|
||||
|
||||
# Database Migrations
|
||||
npm run migrate # Run pending migrations
|
||||
npm run migrate:clear # Clear migration history
|
||||
npm run migrate # Run pending migrations locally
|
||||
npm run migrate:clear # Clear migration history (development only)
|
||||
scripts/update-db-via-aws.sh # Run migrations on production RDS via EC2
|
||||
|
||||
# Deployment
|
||||
scripts/deploy-api-update.sh # Deploy API to EC2 via AWS SSM (recommended)
|
||||
scripts/deploy-frontend.sh # Manual frontend deployment helper
|
||||
```
|
||||
|
||||
## Architecture
|
||||
@@ -119,10 +124,12 @@ color_requests: {
|
||||
- Security check runs during build (amplify.yml preBuild phase)
|
||||
|
||||
### API Server (EC2)
|
||||
- Manual deployment via `scripts/deploy-api.sh` or `scripts/deploy-api-update.sh`
|
||||
- Server: `3.71.161.51`
|
||||
- Deployment via `scripts/deploy-api-update.sh` (uses AWS SSM to push updates)
|
||||
- Instance ID: `i-03956ecf32292d7d9`
|
||||
- Server IP: `3.71.161.51`
|
||||
- Domain: `api.filamenteka.rs`
|
||||
- Service: `node-api` (systemd)
|
||||
- Deploy script pulls from GitHub main branch and restarts service
|
||||
- IMPORTANT: When deploying API, remember to build for AMD64 Linux (not ARM macOS)
|
||||
|
||||
### Database (RDS PostgreSQL)
|
||||
@@ -136,19 +143,26 @@ color_requests: {
|
||||
## Important Patterns
|
||||
|
||||
### API Communication
|
||||
- All API calls use axios interceptors for auth (`src/services/api.ts`)
|
||||
- Auth token stored in localStorage
|
||||
- Automatic redirect on 401/403 in admin routes
|
||||
- All API calls organized in service modules (`src/services/api.ts`)
|
||||
- Services: `authService`, `colorService`, `filamentService`, `colorRequestService`
|
||||
- Axios instance with interceptors for automatic auth token injection
|
||||
- Auth token stored in localStorage with 24h expiry
|
||||
- Automatic redirect on 401/403 in admin routes (via response interceptor)
|
||||
- Cache busting on filament fetches with timestamp query param
|
||||
|
||||
### Color Management
|
||||
- Colors defined in `src/data/bambuLabColors.ts` and `bambuLabColorsComplete.ts`
|
||||
- Automatic row coloring based on filament color
|
||||
- Special handling for gradient filaments
|
||||
- Frontend color mappings in `src/data/bambuLabColors.ts` and `bambuLabColorsComplete.ts`
|
||||
- Database color definitions in `colors` table with pricing (cena_refill, cena_spulna)
|
||||
- ColorMapping interface supports both solid colors (hex string) and gradients (hex array)
|
||||
- Automatic row coloring via ColorCell component based on filament.boja
|
||||
- Special handling for gradient filaments (e.g., Cotton Candy Cloud)
|
||||
- Foreign key constraint: filaments.boja → colors.name (ON UPDATE CASCADE)
|
||||
|
||||
### State Management
|
||||
- React hooks for local state
|
||||
- React hooks for local component state
|
||||
- No global state management library
|
||||
- Data fetching in components with useEffect
|
||||
- Service layer handles all API interactions
|
||||
|
||||
### Testing
|
||||
- Jest + React Testing Library
|
||||
@@ -174,22 +188,36 @@ PORT=80
|
||||
|
||||
## Security Considerations
|
||||
|
||||
- Admin routes protected by JWT authentication (24h expiry)
|
||||
- Password hashing with bcrypt (for future multi-user support)
|
||||
- SQL injection prevention via parameterized queries
|
||||
- Credential leak detection in pre-commit hooks (`scripts/security/security-check.js`)
|
||||
- CORS configured to allow all origins (update for production hardening)
|
||||
- Auth token interceptors handle 401/403 automatically
|
||||
- Pre-commit hook runs security checks, build tests, and unit tests
|
||||
- **Authentication**: JWT tokens with 24h expiry (hardcoded admin user for now)
|
||||
- **Password**: Stored in environment variable ADMIN_PASSWORD (bcrypt ready for multi-user)
|
||||
- **SQL Injection**: Prevented via parameterized queries in all database operations
|
||||
- **Credential Leak Detection**: Pre-commit hook runs `scripts/security/security-check.js`
|
||||
- **CORS**: Currently allows all origins (origin: true) - consider hardening for production
|
||||
- **Auth Interceptors**: Automatic 401/403 handling with redirect to login
|
||||
- **Pre-commit Checks**: Husky runs `scripts/pre-commit.sh` which executes:
|
||||
1. Author mention check (blocks commits with attribution)
|
||||
2. Security check (credential leaks)
|
||||
3. Build test (ensures code compiles)
|
||||
4. Unit tests (Jest with --passWithNoTests)
|
||||
|
||||
## Database Operations
|
||||
## Development Workflows
|
||||
|
||||
### Adding New Colors
|
||||
1. Add color to database via admin panel (`/upadaj/colors`) OR via migration
|
||||
2. Update frontend color mappings in `src/data/bambuLabColors.ts`:
|
||||
```typescript
|
||||
'Color Name': { hex: '#HEXCODE' } // Solid color
|
||||
'Gradient Name': { hex: ['#HEX1', '#HEX2'], isGradient: true } // Gradient
|
||||
```
|
||||
3. Color names must match exactly between database and filament.boja
|
||||
|
||||
### Database Migrations
|
||||
When modifying the database:
|
||||
1. Create migration file in `/database/migrations/` with sequential numbering
|
||||
2. Test locally first
|
||||
1. Create migration file in `/database/migrations/` with sequential numbering (e.g., `019_add_new_feature.sql`)
|
||||
2. Test locally first with `npm run migrate`
|
||||
3. Run migration on production:
|
||||
- Use `scripts/update-db-via-aws.sh` for remote execution
|
||||
- Or use `npm run migrate` for local/scripted execution
|
||||
- Use `scripts/update-db-via-aws.sh` for remote execution via EC2
|
||||
- Or SSH to EC2 and run migration directly
|
||||
4. Update corresponding TypeScript types in `/src/types/`
|
||||
|
||||
Important database constraints:
|
||||
@@ -197,12 +225,35 @@ Important database constraints:
|
||||
- `filaments.kolicina` has check constraint: `kolicina = refill + spulna`
|
||||
- Always update `colors` table first before adding filaments with new colors
|
||||
|
||||
## Terraform Infrastructure
|
||||
### API Deployment Workflow
|
||||
1. Make changes to `/api/server.js`
|
||||
2. Commit and push to main branch
|
||||
3. Run `./scripts/deploy-api-update.sh` (uses AWS SSM to pull from GitHub and restart)
|
||||
4. Verify deployment: `curl https://api.filamenteka.rs/` should return `{"status":"ok"}`
|
||||
|
||||
### Frontend Deployment Workflow
|
||||
1. Make changes to app/components/pages
|
||||
2. Test locally: `npm run dev`
|
||||
3. Run pre-commit checks: `./scripts/pre-commit.sh`
|
||||
4. Commit and push to main branch
|
||||
5. AWS Amplify automatically builds and deploys (monitors main branch)
|
||||
|
||||
## Infrastructure
|
||||
|
||||
### Terraform (IaC)
|
||||
Infrastructure as Code in `/terraform/`:
|
||||
- VPC and networking setup
|
||||
- EC2 instance for API
|
||||
- RDS PostgreSQL database
|
||||
- Application Load Balancer
|
||||
- ECR for Docker images
|
||||
- Cloudflare DNS integration
|
||||
- **VPC**: `vpc.tf` - Network setup with subnets and routing
|
||||
- **EC2**: `ec2-api.tf` - API server instance (i-03956ecf32292d7d9)
|
||||
- **RDS**: `rds.tf` - PostgreSQL database
|
||||
- **ALB**: `alb.tf` - Application Load Balancer
|
||||
- **ECR**: `ecr.tf` - Docker image registry
|
||||
- **CloudFront**: `cloudfront-frontend.tf` - Frontend CDN distribution
|
||||
- **Cloudflare**: `cloudflare-api.tf` - DNS integration for api.filamenteka.rs
|
||||
- **Configuration**: `variables.tf`, `outputs.tf`, `main.tf`
|
||||
|
||||
### Current Stack
|
||||
- **Frontend**: AWS CloudFront + S3 (static Next.js export)
|
||||
- **API**: EC2 instance running Node.js/Express with systemd service
|
||||
- **Database**: AWS RDS PostgreSQL (eu-central-1)
|
||||
- **DNS**: Cloudflare for api.filamenteka.rs
|
||||
- **Deployment**: AWS Amplify for frontend, SSM for API updates
|
||||
Reference in New Issue
Block a user