This commit adds scripts to handle production database migrations that
failed due to schema inconsistencies. The force upgrade script preserves
critical configuration data while recreating the database structure.
Features:
- Exports and preserves SystemSettings (wallet addresses, API keys)
- Preserves Users (admin accounts with passwords)
- Preserves BotRegistrations (Telegram bot configuration)
- Creates timestamped backups before any changes
- Automatic rollback on failure
- Manual SQL migration script as fallback option
Usage:
bash force-upgrade-production-db.sh
This is safe to use when product catalog data is not critical and
configuration/wallet data must be preserved.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit introduces a comprehensive variant management system and enhances
the existing ProductVariant model with per-variant weight overrides and stock
tracking, integrated across Admin Panel and TeleBot.
Features Added:
- Variant Collections: Reusable variant templates (e.g., "Standard Sizes")
- Admin UI for managing variant collections (CRUD operations)
- Dynamic variant editor with JavaScript-based UI
- Per-variant weight and weight unit overrides
- Per-variant stock level tracking
- SalesLedger model for financial tracking
ProductVariant Enhancements:
- Added Weight (decimal, nullable) field for variant-specific weights
- Added WeightUnit (enum, nullable) field for variant-specific units
- Maintains backward compatibility with product-level weights
TeleBot Integration:
- Enhanced variant selection UI to display stock levels
- Shows weight information with proper unit conversion (µg, g, oz, lb, ml, L)
- Compact button format: "Medium (15 in stock, 350g)"
- Real-time stock availability display
Database Migrations:
- 20250928014850_AddVariantCollectionsAndSalesLedger
- 20250928155814_AddWeightToProductVariants
Technical Changes:
- Updated Product model to support VariantCollectionId and VariantsJson
- Extended ProductService with variant collection operations
- Enhanced OrderService to handle variant-specific pricing and weights
- Updated LittleShop.Client DTOs to match server models
- Added JavaScript dynamic variant form builder
Files Modified: 15
Files Added: 17
Lines Changed: ~2000
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added auto-deploy on successful builds for main branch
- Deployment uses commit SHA when no tag is present
- Manual deployment still available for tagged releases
- Follows same pattern as TeleBot deployment
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Created .gitlab-ci.yml for automated builds and deployment
- Added docker-compose.production.yml for VPS deployment
- Added .env.production.example for configuration template
- Follows LittleShop deployment pattern
- Auto-deploy on main branch commits
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Comprehensive e2e test for TeleBot functionality
- Tests LittleShop API connectivity
- Verifies catalog access and order creation
- Includes build verification
- Designed to run on VPS with VPN access
Build test passed ✅🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Updated LittleShop API URL to use VPN hostname (hq.lan)
- Added Version 1.0.3 properties to project file
- Follows infrastructure changes with VPN-based access
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added Version, AssemblyVersion, and FileVersion to project file
- Added /api/version endpoint returning version info
- Follows SilverPay versioning pattern
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Remove docker:24-dind service to use runner's mounted Docker socket.
This fixes the 403 Git access error and Docker socket conflict.
Changes:
- Remove services: docker:24-dind from build and deploy jobs
- Change image from docker:24-dind to docker:24
- Update DOCKER_HOST to use unix socket
Co-Authored-By: Claude <noreply@anthropic.com>
Fixed:
• Order creation now uses correct 'identityReference' field
• Integration tests now pass at 92% (11/12)
• SilverPAY wallet unlock confirmed working
• Payment address generation validated
Test Results:
• SilverPAY Order Creation: ✅ Working
• Exchange Rates: ✅ Live data (£81,852/BTC)
• Order Creation: ✅ Fixed field validation
• System Status: 92% operational
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
📋 Critical system information documented:
• All production credentials and API keys
• Manual payment verification workflow details
• Deployment scripts and automation commands
• System architecture and maintenance procedures
• Test data cleanup mechanisms
🔐 Security: Contains production credentials - store securely
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
Major changes:
• Remove BTCPay Server integration in favor of SilverPAY manual verification
• Add test data cleanup mechanisms (API endpoints and shell scripts)
• Fix compilation errors in TestController (IdentityReference vs CustomerIdentity)
• Add deployment automation scripts for Hostinger VPS
• Enhance integration testing with comprehensive E2E validation
• Add Blazor components and mobile-responsive CSS for admin interface
• Create production environment configuration scripts
Key Features Added:
• Manual payment verification through Admin panel Order Details
• Bulk test data cleanup with proper cascade handling
• Deployment automation with systemd service configuration
• Comprehensive E2E testing suite with SilverPAY integration validation
• Mobile-first admin interface improvements
Security & Production:
• Environment variable configuration for production secrets
• Proper JWT and VAPID key management
• SilverPAY API integration with live credentials
• Database cleanup and maintenance tools
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
- Created multiple test scripts to verify all system integrations
- test-integration-fixed.sh: Main test suite with all fixes (RECOMMENDED)
- test-integration-simple.sh: Quick verification script
- All 12 tests passing: admin auth, APIs, payments, exchange rates
- Added DEPLOYMENT-VERIFICATION.md with post-deployment testing process
- Tests verify: LittleShop, TeleBot, and SilverPay integration
- Exchange rate fix: Use BTC/GBP format (crypto-to-fiat)
- Payment response updated for new walletAddress field
- Admin login correctly accepts 401 for API testing
IMPORTANT: Run ./test-integration-fixed.sh after EVERY deployment
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
FEATURES IMPLEMENTED:
1. Enhanced Product Display:
- Shows multi-buy deals with pricing (e.g., "3 for £25")
- Displays available variants grouped by type (Color, Flavor, etc.)
- Clear visual separation between multi-buys and variants
2. Variant Selection Flow:
- Single item: Select one variant from available options
- Multi-buy bundles: Select individual variants for each item
- Example: 3-pack allows choosing Red, Blue, Green individually
- Visual feedback with checkmarks and counters
3. Smart Cart Management:
- Tracks selected variants for each cart item
- Supports both single variant (regular items) and multiple variants (multi-buys)
- Unique cart entries based on product + variant combination
- Prevents duplicate multi-buy bundles
4. User Experience Improvements:
- Clear "Select Color/Flavor" prompts
- Progress indicator for multi-item selection
- Confirm button appears when selection complete
- Clear selection option for multi-buys
- Back navigation preserves context
TECHNICAL CHANGES:
- ProductCarouselService: Enhanced caption formatting with variants/multi-buys
- MenuBuilder: New VariantSelectionMenu with dynamic button generation
- CallbackHandler: Added handlers for selectvar, setvariant, addvariant, confirmvar
- ShoppingCart: New AddItem overload accepting Product and variant list
- CartItem: Added SelectedVariants list for multi-buy support
- UserSession: Added SelectingVariants state
This update enables customers to:
- See all available product options at a glance
- Choose specific variants when ordering
- Mix and match variants in multi-buy deals
- Get exactly what they want with clear visual feedback
Next steps: Add bot activity tracking for live dashboard
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
FEATURES IMPLEMENTED:
1. Product Multi-Buys (renamed from Variations for clarity)
- Quantity-based pricing deals (e.g., 1 for £10, 3 for £25)
- Renamed UI to "Multi-Buys" with tags icon for better understanding
2. Product Variants (NEW)
- Support for colors, flavors, sizes, and other product options
- Separate from multi-buys - these are the actual variations customers choose
- Admin UI for managing variants per product
- Updated OrderItem model to store selected variants as JSON array
3. Live Bot Activity Dashboard
- Real-time view of customer interactions across all bots
- Shows active users (last 5 minutes)
- Live activity feed with user actions
- Statistics including today's activities and trending products
- Auto-refreshes every 5 seconds for live updates
- Accessible via "Live Activity" menu item
TECHNICAL CHANGES:
- Modified OrderItem.SelectedVariant to SelectedVariants (JSON array)
- Added BotActivityController for dashboard endpoints
- Created views for variant management (ProductVariants, CreateVariant, EditVariant)
- Updated Products Index to show separate buttons for Multi-Buys and Variants
- Fixed duplicate DTO definitions (removed duplicate files)
- Fixed ApplicationDbContext reference (changed to LittleShopContext)
UI IMPROVEMENTS:
- Multi-Buys: Tags icon, labeled as "pricing deals"
- Variants: Palette icon, labeled as "colors/flavors"
- Live dashboard with animated activity feed
- Visual indicators for active users and trending products
- Mobile-responsive dashboard layout
This update provides the foundation for:
- Customers selecting variants during checkout
- Real-time monitoring of bot usage patterns
- Better understanding of popular products and user behavior
Next steps: Implement variant selection in TeleBot checkout flow
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
CRITICAL FIXES:
- Fixed JWT key configuration issue causing HTTP 500 on login
- Changed environment variable from JWT_SECRET_KEY to Jwt__Key (double underscore)
- Increased JWT key length to >32 bytes (256 bits) as required by HMAC-SHA256
- Fixed ASPNETCORE_URLS configuration (not ASPNETCORE_HTTP_PORTS)
DOCUMENTATION CREATED:
- TROUBLESHOOTING.md: Complete troubleshooting guide with common issues and solutions
- deploy-littleshop.sh: Automated deployment script with working configuration
- docker-compose.hostinger.yml: Docker Compose file with all correct environment variables
- Updated WORKING_BASELINE_2024-09-24.md: Added HTTP 500 fix details
ROOT CAUSES IDENTIFIED:
1. JWT key environment variable naming mismatch (Jwt__Key vs JWT_SECRET_KEY)
2. JWT key too short (was 17 bytes, needs >32 bytes)
3. ASP.NET Core URL configuration issue (ASPNETCORE_URLS vs HTTP_PORTS)
4. Database file permissions (must be owned by UID 1654)
WORKING CONFIGURATION:
- Jwt__Key with 79-byte key
- ASPNETCORE_URLS=http://+:8080
- Proper Docker network configuration (littleshop-network)
- SilverPay integration on port 8000 (not 8001)
This commit ensures we have a stable, documented baseline for future updates
and addresses the concern about "one step forward, two steps back" by
providing comprehensive documentation of all fixes.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Changed parameter names to uppercase (Username, Password)
- Convert to lowercase internally for consistency
- Fixes HTTP 500 error when form submits with lowercase field names
- Re-enabled ValidateAntiForgeryToken attribute
- Configured anti-forgery for proxy environments with SameAsRequest
- Fixed area routing order and constraints
- Added proper forwarded headers middleware
- Added UseForwardedHeaders to properly handle X-Forwarded-For and X-Forwarded-Proto
- Fixes anti-forgery token validation when behind nginx proxy
- Resolves HTTP 500 errors on POST requests to login endpoint
WORKING BASELINE CONFIRMED:
- TeleBot: Checkout flow fixed, currency display corrected
- LittleShop: CSRF tokens fixed, SilverPay integration working
- SilverPay: Payment creation fixed with fiat_amount field
- Network: All containers connected on littleshop-network
- Payments: Successfully creating crypto payments with live exchange rates
Test confirmed: £10 GBP = 0.00011846 BTC at £84,415.99/BTC
All systems operational and integrated.
- Fixed CryptoAmount property that doesn't exist
- Display £ amounts with note about needing conversion
- Show actual crypto amounts when less than 1.0
- Remove unnecessary shipping name step (Step 1/5) - now collects all address details in one message
- Fix currency display to show crypto amounts instead of GBP values
- Display proper BTC amounts instead of showing £39.99 as 39.99 BTC
- Tor connectivity already working (verified via telebot-tor container)
- Added @Html.AntiForgeryToken() to Products delete form
- Added @Html.AntiForgeryToken() to Categories delete form
- Added @Html.AntiForgeryToken() to Users delete form
- Added @Html.AntiForgeryToken() to ShippingRates delete form
- Added @Html.AntiForgeryToken() to Product Variations delete form
This fixes the 400 Bad Request errors when trying to delete items