Files
Tempering-Machine-Control-S…/docs/08-migration-strategy.md
Sami Alzein 83b6a25fd5 Add migration strategy document for chocolate tempering machine control system
- Comprehensive analysis of current system and architectural debt
- Detailed recommendations for target architecture and technology stack
- Phase-based migration approach outlined with timelines and deliverables
- Risk mitigation strategies and data migration processes defined
- Database schema design to replace existing CSV storage
- Implementation recommendations including development best practices and performance optimization strategies
2025-08-06 21:41:21 +02:00

750 lines
50 KiB
Markdown

# Migration Strategy and Recommendations
## Overview
This document provides a comprehensive migration strategy for transforming the current chocolate tempering machine control system from its existing monolithic Avalonia/.NET architecture to a modern, maintainable, and scalable solution.
## Current System Analysis
### Architectural Debt Assessment
```
Technical Debt Analysis:
┌─────────────────────────────────────────────────────────────┐
│ DEBT CATEGORIES │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ CRITICAL │ │ HIGH │ │ MEDIUM │ │
│ │ ISSUES │ │ ISSUES │ │ ISSUES │ │
│ │ │ │ │ │ │ │
│ │ • Thread safety │ │ • Code │ │ • CSV storage │ │
│ │ • Memory leaks │ │ duplication │ │ • Hard-coded │ │
│ │ • Error │ │ • Monolithic │ │ values │ │
│ │ handling │ │ design │ │ • Limited │ │
│ │ • Resource │ │ • Testing │ │ logging │ │
│ │ management │ │ absence │ │ • Performance │ │
│ │ │ │ • Poor │ │ bottlenecks │ │
│ │ Impact: System │ │ separation │ │ │ │
│ │ instability │ │ of concerns │ │ Impact: │ │
│ │ │ │ │ │ Maintenance │ │
│ │ Risk: HIGH │ │ Risk: HIGH │ │ complexity │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
### Code Quality Metrics
| Metric | Current State | Target State | Priority |
|--------|---------------|--------------|----------|
| Cyclomatic Complexity | >50 (MainWindow) | <10 per method | Critical |
| Code Coverage | 0% | >80% | High |
| Thread Safety | None | Complete | Critical |
| Error Handling | Inconsistent | Comprehensive | Critical |
| Documentation | Minimal | Complete | Medium |
| Performance | Poor (polling) | Event-driven | High |
| Maintainability | Very Low | High | High |
## Recommended Target Architecture
### Modern Architecture Overview
```
Target System Architecture:
┌─────────────────────────────────────────────────────────────┐
│ PRESENTATION TIER │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ WEB-BASED USER INTERFACE ││
│ │ ││
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐││
│ │ │ React │ │ Vue.js │ │ Blazor │││
│ │ │ Frontend │ │ Frontend │ │ WebAssembly │││
│ │ │ │ │ │ │ │││
│ │ │ • Touch UI │ │ • Touch UI │ │ • Touch UI │││
│ │ │ • Real-time │ │ • Real-time │ │ • Real-time │││
│ │ │ • Responsive│ │ • Responsive│ │ • Responsive │││
│ │ └─────────────┘ └─────────────┘ └─────────────────────┘││
│ └─────────────────────────────────────────────────────────┘│
│ │ WebSocket/SignalR │
├────────────────────────────┼────────────────────────────────┤
│ APPLICATION TIER │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ MICROSERVICES ││
│ │ ││
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐││
│ │ │ Recipe │ │ Temperature │ │ Hardware │││
│ │ │ Service │ │ Service │ │ Service │││
│ │ │ │ │ │ │ │││
│ │ │ • Recipe │ │ • PID │ │ • Modbus │││
│ │ │ execution │ │ control │ │ communication │││
│ │ │ • Phase │ │ • Monitoring│ │ • I/O control │││
│ │ │ management│ │ • Safety │ │ • Motor management │││
│ │ └─────────────┘ └─────────────┘ └─────────────────────┘││
│ │ ││
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐││
│ │ │ Safety │ │ Gateway │ │ Logging │││
│ │ │ Service │ │ Service │ │ Service │││
│ │ │ │ │ │ │ │││
│ │ │ • Error │ │ • API │ │ • System logs │││
│ │ │ monitoring│ │ routing │ │ • Audit trails │││
│ │ │ • Interlocks│ │ • Auth │ │ • Performance │││
│ │ │ • Recovery │ │ • Rate │ │ • Analytics │││
│ │ │ │ │ limiting │ │ │││
│ │ └─────────────┘ └─────────────┘ └─────────────────────┘││
│ └─────────────────────────────────────────────────────────┘│
│ │ Message Bus │
├────────────────────────────┼────────────────────────────────┤
│ DATA TIER │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐││
│ │ │ PostgreSQL │ │ Redis │ │ InfluxDB │││
│ │ │ Database │ │ Cache │ │ Time Series │││
│ │ │ │ │ │ │ │││
│ │ │ • Config │ │ • Session │ │ • Temperature │││
│ │ │ • Recipes │ │ • State │ │ • Performance │││
│ │ │ • Users │ │ • Temp data │ │ • Historical data │││
│ │ │ • Audit │ │ │ │ │││
│ │ └─────────────┘ └─────────────┘ └─────────────────────┘││
│ └─────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘
```
### Technology Stack Recommendations
#### Option 1: .NET Microservices
```
.NET Stack Architecture:
┌─────────────────────────────────────────────────────────────┐
│ TECHNOLOGY STACK │
│ │
│ Frontend: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ • Blazor Server/WebAssembly │ │
│ │ • SignalR for real-time updates │ │
│ │ │ Progressive Web App (PWA) capabilities │ │
│ │ • Responsive design for touch interface │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Backend Services: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ • ASP.NET Core 8.0 Web APIs │ │
│ │ • MediatR for CQRS pattern │ │
│ │ • FluentValidation for input validation │ │
│ │ • Serilog for structured logging │ │
│ │ • AutoMapper for object mapping │ │
│ │ • Quartz.NET for scheduled tasks │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Communication: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ • RabbitMQ/Azure Service Bus for messaging │ │
│ │ • gRPC for inter-service communication │ │
│ │ • HTTP/REST for external APIs │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Data Layer: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ • Entity Framework Core │ │
│ │ • PostgreSQL for relational data │ │
│ │ • Redis for caching and session state │ │
│ │ • InfluxDB for time-series data │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Deployment: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ • Docker containers │ │
│ │ • Docker Compose for local development │ │
│ │ • Kubernetes for production (optional) │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
#### Option 2: Node.js/Python Stack
```
Alternative Stack Architecture:
┌─────────────────────────────────────────────────────────────┐
│ TECHNOLOGY STACK │
│ │
│ Frontend: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ • React/Vue.js with TypeScript │ │
│ │ • Socket.IO for real-time communication │ │
│ │ • PWA capabilities for offline operation │ │
│ │ • Material-UI/Ant Design for components │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Backend Services: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Control Services (Node.js): │ │
│ │ • Express.js/Fastify for APIs │ │
│ │ • TypeScript for type safety │ │
│ │ • Bull/Agenda for job queues │ │
│ │ │ │
│ │ Hardware Interface (Python): │ │
│ │ • FastAPI for high-performance APIs │ │
│ │ • pyModbus for Modbus communication │ │
│ │ • AsyncIO for concurrent operations │ │
│ │ • Pydantic for data validation │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Communication: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ • Redis for pub/sub messaging │ │
│ │ • RabbitMQ for reliable message queuing │ │
│ │ • GraphQL for flexible API queries │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Data Layer: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ • PostgreSQL with Prisma ORM (Node.js) │ │
│ │ • SQLAlchemy ORM (Python) │ │
│ │ • Redis for caching │ │
│ │ • InfluxDB for time-series data │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
## Migration Strategy
### Phase-Based Migration Approach
```
Migration Timeline (12-18 months):
┌─────────────────────────────────────────────────────────────┐
│ MIGRATION PHASES │
│ │
│ Phase 1: Foundation (Months 1-3) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ • Set up development environment │ │
│ │ • Create data models and database schema │ │
│ │ • Implement basic CRUD operations │ │
│ │ • Develop hardware communication service │ │
│ │ • Create basic API gateway │ │
│ │ • Set up CI/CD pipeline │ │
│ │ │ │
│ │ Deliverables: │ │
│ │ ✓ Database schema │ │
│ │ ✓ Hardware service (Modbus communication) │ │
│ │ ✓ Basic API endpoints │ │
│ │ ✓ Development environment │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Phase 2: Core Services (Months 4-6) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ • Implement recipe management service │ │
│ │ • Develop temperature control service │ │
│ │ • Create safety monitoring service │ │
│ │ • Implement error handling system │ │
│ │ • Add real-time data streaming │ │
│ │ • Create basic web interface │ │
│ │ │ │
│ │ Deliverables: │ │
│ │ ✓ Recipe execution engine │ │
│ │ ✓ Temperature control system │ │
│ │ ✓ Safety monitoring │ │
│ │ ✓ Basic web UI │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Phase 3: User Interface (Months 7-9) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ • Develop complete web-based UI │ │
│ │ • Implement touch-friendly interface │ │
│ │ • Add real-time monitoring dashboards │ │
│ │ • Create user management system │ │
│ │ • Implement role-based access control │ │
│ │ • Add mobile responsiveness │ │
│ │ │ │
│ │ Deliverables: │ │
│ │ ✓ Complete web interface │ │
│ │ ✓ User authentication/authorization │ │
│ │ ✓ Mobile-responsive design │ │
│ │ ✓ Real-time dashboards │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Phase 4: Integration & Testing (Months 10-12) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ • Comprehensive system integration │ │
│ │ • Performance optimization │ │
│ │ • Security hardening │ │
│ │ • Load testing and reliability testing │ │
│ │ • Documentation and training materials │ │
│ │ • Parallel running with existing system │ │
│ │ │ │
│ │ Deliverables: │ │
│ │ ✓ Production-ready system │ │
│ │ ✓ Performance benchmarks met │ │
│ │ ✓ Security audit passed │ │
│ │ ✓ Documentation complete │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Phase 5: Deployment & Transition (Months 13-15) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ • Production deployment │ │
│ │ • Data migration from CSV files │ │
│ │ • User training and change management │ │
│ │ • Gradual system transition │ │
│ │ • Monitoring and support setup │ │
│ │ • Old system decommissioning │ │
│ │ │ │
│ │ Deliverables: │ │
│ │ ✓ Live production system │ │
│ │ ✓ Data successfully migrated │ │
│ │ ✓ Users trained │ │
│ │ ✓ Old system retired │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Phase 6: Optimization & Enhancement (Months 16-18) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ • Performance tuning based on production data │ │
│ │ • Feature enhancements based on user feedback │ │
│ │ • Advanced analytics and reporting │ │
│ │ • Predictive maintenance features │ │
│ │ • System scalability improvements │ │
│ │ │ │
│ │ Deliverables: │ │
│ │ ✓ Optimized performance │ │
│ │ ✓ Enhanced features │ │
│ │ ✓ Analytics platform │ │
│ │ ✓ Scalability plan │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
### Risk Mitigation Strategy
```
Risk Management Approach:
┌─────────────────────────────────────────────────────────────┐
│ RISK ASSESSMENT │
│ │
│ High-Risk Areas: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 1. Hardware Communication │ │
│ │ Risk: Modbus communication failure │ │
│ │ Mitigation: │ │
│ │ • Parallel implementation during development │ │
│ │ • Comprehensive testing with hardware simulator │ │
│ │ • Gradual migration with fallback options │ │
│ │ │ │
│ │ 2. Real-time Performance │ │
│ │ Risk: System not meeting real-time requirements │ │
│ │ Mitigation: │ │
│ │ • Performance benchmarking early in development │ │
│ │ • Load testing with production-like scenarios │ │
│ │ • Optimize critical paths first │ │
│ │ │ │
│ │ 3. Data Migration │ │
│ │ Risk: Loss of existing configuration/recipe data │ │
│ │ Mitigation: │ │
│ │ • Automated migration tools with validation │ │
│ │ • Multiple backup strategies │ │
│ │ • Parallel data validation processes │ │
│ │ │ │
│ │ 4. User Adoption │ │
│ │ Risk: Resistance to new interface │ │
│ │ Mitigation: │ │
│ │ • Early user involvement in design process │ │
│ │ • Comprehensive training programs │ │
│ │ • Gradual interface transition options │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
## Data Migration Strategy
### CSV to Database Migration
```
Data Migration Process:
┌─────────────────────────────────────────────────────────────┐
│ MIGRATION WORKFLOW │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ CSV Analysis │───▶│ Schema Mapping │ │
│ │ │ │ │ │
│ │ • Parse existing│ │ • Recipe.csv │ │
│ │ CSV files │ │ ─▶ Recipes │ │
│ │ • Validate data │ │ • Machine.csv │ │
│ │ integrity │ │ ─▶ Machine │ │
│ │ • Identify │ │ Configuration │ │
│ │ inconsistencies│ │ • Mapping.csv │ │
│ │ • Clean data │ │ ─▶ Hardware │ │
│ │ │ │ Mappings │ │
│ └─────────────────┘ └─────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ TRANSFORMATION RULES │ │
│ │ │ │
│ │ Recipe Migration: │ │
│ │ • ID preservation for referential integrity │ │
│ │ • Boolean conversion (0/1 → true/false) │ │
│ │ • Temperature validation and unit conversion │ │
│ │ • Default value assignment for missing fields │ │
│ │ │ │
│ │ Machine Configuration: │ │
│ │ • Single record validation (ID=1 requirement) │ │
│ │ • Temperature limit validation │ │
│ │ • Timer value validation and range checking │ │
│ │ │ │
│ │ Hardware Mapping: │ │
│ │ • Bit number parsing (pipe-separated → array) │ │
│ │ • Address validation and format checking │ │
│ │ • Modbus function code assignment │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Database │◄───│ Validation & │ │
│ │ Population │ │ Verification │ │
│ │ │ │ │ │
│ │ • Insert │ │ • Cross- │ │
│ │ validated │ │ reference │ │
│ │ data │ │ validation │ │
│ │ • Create │ │ • Constraint │ │
│ │ indexes │ │ checking │ │
│ │ • Set up │ │ • Data │ │
│ │ relationships │ │ completeness │ │
│ └─────────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
### Database Schema Design
```sql
-- Modern Database Schema Design
-- Replaces CSV-based storage with proper relational model
-- Recipes table (replaces Recipe.csv)
CREATE TABLE recipes (
id SERIAL PRIMARY KEY,
name VARCHAR(50) UNIQUE NOT NULL,
description TEXT,
created_date TIMESTAMP DEFAULT NOW(),
modified_date TIMESTAMP DEFAULT NOW(),
is_active BOOLEAN DEFAULT true,
-- Temperature goals
heating_goal DECIMAL(4,1) CHECK (heating_goal BETWEEN 40 AND 60),
cooling_goal DECIMAL(4,1) CHECK (cooling_goal BETWEEN 20 AND 40),
pouring_goal DECIMAL(4,1) CHECK (pouring_goal BETWEEN 20 AND 60),
-- Motor settings
mixer_enabled BOOLEAN DEFAULT false,
fountain_enabled BOOLEAN DEFAULT false,
mold_heater_enabled BOOLEAN DEFAULT false,
vibration_enabled BOOLEAN DEFAULT false,
vib_heater_enabled BOOLEAN DEFAULT false,
-- Pedal configuration
pedal_mode VARCHAR(10) CHECK (pedal_mode IN ('manual', 'auto')),
pedal_on_time INTEGER CHECK (pedal_on_time > 0),
pedal_off_time INTEGER CHECK (pedal_off_time > 0),
-- Constraints
CONSTRAINT valid_temperature_range
CHECK (cooling_goal < heating_goal),
CONSTRAINT valid_pouring_range
CHECK (pouring_goal >= cooling_goal AND pouring_goal <= heating_goal)
);
-- Machine configuration (replaces Machine.csv)
CREATE TABLE machine_config (
id INTEGER PRIMARY KEY DEFAULT 1,
-- Temperature limits
tank_max_heat DECIMAL(4,1) NOT NULL DEFAULT 50,
pump_max_heat DECIMAL(4,1) NOT NULL DEFAULT 50,
pump_min_heat DECIMAL(4,1) NOT NULL DEFAULT -10,
abs_max_heat DECIMAL(4,1) NOT NULL DEFAULT 65,
abs_min_heat DECIMAL(4,1) NOT NULL DEFAULT -14,
pre_heating_temp DECIMAL(4,1) NOT NULL DEFAULT 5,
-- Timing parameters
pump_delay INTEGER NOT NULL DEFAULT 60,
mixer_delay INTEGER NOT NULL DEFAULT 60,
heating_delay INTEGER NOT NULL DEFAULT 60,
cooling_delay INTEGER NOT NULL DEFAULT 60,
pouring_delay INTEGER NOT NULL DEFAULT 60,
-- Temperature setpoint offsets
set_temp1 DECIMAL(4,1) DEFAULT 0,
set_temp2 DECIMAL(4,1) DEFAULT -10,
set_temp3 DECIMAL(4,1) DEFAULT 5,
set_temp4 DECIMAL(4,1) DEFAULT 0,
modified_date TIMESTAMP DEFAULT NOW(),
-- Ensure only one configuration record
CONSTRAINT single_config CHECK (id = 1)
);
-- Hardware mapping (replaces Mapping.csv)
CREATE TABLE hardware_mappings (
id SERIAL PRIMARY KEY,
name VARCHAR(50) UNIQUE NOT NULL,
modbus_address INTEGER NOT NULL,
is_read_operation BOOLEAN NOT NULL DEFAULT false,
bit_numbers INTEGER[] DEFAULT '{}',
function_code INTEGER,
data_type VARCHAR(20) DEFAULT 'uint16',
description TEXT,
is_active BOOLEAN DEFAULT true
);
-- PID Configuration (replaces Configuration.csv)
CREATE TABLE pid_configs (
id SERIAL PRIMARY KEY,
zone_name VARCHAR(50) NOT NULL,
zone_number INTEGER UNIQUE NOT NULL,
-- Temperature limits
max_temp DECIMAL(5,1) NOT NULL,
min_temp DECIMAL(5,1) NOT NULL,
-- PID parameters
kp DECIMAL(8,4) NOT NULL DEFAULT 1.0,
ki DECIMAL(8,4) NOT NULL DEFAULT 0.1,
kd DECIMAL(8,4) NOT NULL DEFAULT 0.01,
kl DECIMAL(8,4) NOT NULL DEFAULT 10.0,
-- Control configuration
fc_threshold DECIMAL(5,1) DEFAULT 50,
heat_control_range DECIMAL(4,1) DEFAULT 2.0,
-- Current limits
i_neutral DECIMAL(4,1) DEFAULT 5.0,
i_motor1 DECIMAL(4,1) DEFAULT 10.0,
i_motor2 DECIMAL(4,1) DEFAULT 10.0,
-- Output mappings (store as JSON)
heating_outputs JSONB DEFAULT '[]',
first_cooling_outputs JSONB DEFAULT '[]',
second_cooling_outputs JSONB DEFAULT '[]',
is_active BOOLEAN DEFAULT true
);
-- System settings (replaces Screen.csv)
CREATE TABLE system_settings (
id INTEGER PRIMARY KEY DEFAULT 1,
-- Communication settings
serial_port VARCHAR(20) DEFAULT 'COM1',
baud_rate INTEGER DEFAULT 9600,
parity INTEGER DEFAULT 0, -- 0=None, 1=Odd, 2=Even
stop_bits INTEGER DEFAULT 1,
sending_interval INTEGER DEFAULT 100, -- milliseconds
-- Error thresholds
warning_limit DECIMAL(3,1) DEFAULT 1.5,
error_limit DECIMAL(3,1) DEFAULT 3.0,
-- Display settings
brightness INTEGER DEFAULT 100,
dim_timeout INTEGER DEFAULT 30, -- seconds
screen_off_timeout INTEGER DEFAULT 60, -- seconds
modified_date TIMESTAMP DEFAULT NOW(),
CONSTRAINT single_settings CHECK (id = 1)
);
-- User management (replaces Users.csv)
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
role VARCHAR(20) NOT NULL DEFAULT 'operator',
full_name VARCHAR(100),
email VARCHAR(100),
is_active BOOLEAN DEFAULT true,
last_login TIMESTAMP,
created_date TIMESTAMP DEFAULT NOW(),
modified_date TIMESTAMP DEFAULT NOW(),
CONSTRAINT valid_role
CHECK (role IN ('operator', 'technician', 'admin'))
);
-- Error settings (replaces ErrorSettings.csv)
CREATE TABLE error_settings (
id INTEGER PRIMARY KEY DEFAULT 1,
-- Grid monitoring
grid_frequency DECIMAL(4,1) DEFAULT 50.0,
phase_count INTEGER DEFAULT 3,
voltage_high_limit DECIMAL(5,1) DEFAULT 242.0,
voltage_low_limit DECIMAL(5,1) DEFAULT 198.0,
current_high_limit DECIMAL(5,1) DEFAULT 20.0,
-- Temperature monitoring
temperature_high_limit DECIMAL(4,1) DEFAULT 70.0,
temperature_low_limit DECIMAL(4,1) DEFAULT -20.0,
modified_date TIMESTAMP DEFAULT NOW(),
CONSTRAINT single_error_settings CHECK (id = 1)
);
-- System logs (new - not in original CSV system)
CREATE TABLE system_logs (
id BIGSERIAL PRIMARY KEY,
timestamp TIMESTAMP DEFAULT NOW(),
level VARCHAR(10) NOT NULL, -- DEBUG, INFO, WARN, ERROR, FATAL
category VARCHAR(50), -- HARDWARE, RECIPE, SAFETY, USER, etc.
message TEXT NOT NULL,
details JSONB,
user_id INTEGER REFERENCES users(id),
recipe_id INTEGER REFERENCES recipes(id)
);
-- Recipe execution history (new - enhanced tracking)
CREATE TABLE recipe_executions (
id BIGSERIAL PRIMARY KEY,
recipe_id INTEGER NOT NULL REFERENCES recipes(id),
user_id INTEGER REFERENCES users(id),
started_at TIMESTAMP DEFAULT NOW(),
completed_at TIMESTAMP,
status VARCHAR(20) DEFAULT 'running', -- running, completed, aborted, error
-- Phase tracking
heating_duration INTEGER, -- seconds
cooling_duration INTEGER,
pouring_duration INTEGER,
-- Temperature data (summary)
max_heating_temp DECIMAL(4,1),
min_cooling_temp DECIMAL(4,1),
avg_pouring_temp DECIMAL(4,1),
-- Quality metrics
temperature_variance DECIMAL(4,2),
cycle_efficiency DECIMAL(5,2),
notes TEXT,
error_count INTEGER DEFAULT 0
);
-- Temperature data (new - time series for analytics)
CREATE TABLE temperature_readings (
timestamp TIMESTAMP DEFAULT NOW(),
zone INTEGER NOT NULL, -- 1=Tank Bottom, 2=Tank Wall, 3=Pump, 4=Fountain
temperature DECIMAL(5,2) NOT NULL,
setpoint DECIMAL(5,2),
recipe_execution_id BIGINT REFERENCES recipe_executions(id),
PRIMARY KEY (timestamp, zone)
);
-- Indexes for performance
CREATE INDEX idx_recipes_active ON recipes(is_active);
CREATE INDEX idx_recipe_executions_recipe ON recipe_executions(recipe_id);
CREATE INDEX idx_recipe_executions_user ON recipe_executions(user_id);
CREATE INDEX idx_recipe_executions_status ON recipe_executions(status);
CREATE INDEX idx_temperature_readings_time ON temperature_readings(timestamp);
CREATE INDEX idx_temperature_readings_zone ON temperature_readings(zone);
CREATE INDEX idx_system_logs_timestamp ON system_logs(timestamp);
CREATE INDEX idx_system_logs_level ON system_logs(level);
CREATE INDEX idx_system_logs_category ON system_logs(category);
```
## Implementation Recommendations
### Development Best Practices
```
Development Standards:
┌─────────────────────────────────────────────────────────────┐
│ CODE QUALITY │
│ │
│ 1. Architecture Patterns: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ • Domain-Driven Design (DDD) │ │
│ │ • Command Query Responsibility Segregation (CQRS) │ │
│ │ • Event Sourcing for audit trails │ │
│ │ • Repository pattern for data access │ │
│ │ • Unit of Work pattern for transactions │ │
│ │ • Factory pattern for hardware communication │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ 2. Testing Strategy: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ • Unit Tests: >90% coverage for business logic │ │
│ │ • Integration Tests: Database and external services │ │
│ │ • Hardware Simulation: Mock Modbus devices │ │
│ │ • End-to-End Tests: Complete user workflows │ │
│ │ • Performance Tests: Load and stress testing │ │
│ │ • Security Tests: Penetration and vulnerability │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ 3. Error Handling: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ • Result pattern for operation outcomes │ │
│ │ • Global exception handling middleware │ │
│ │ • Structured logging with correlation IDs │ │
│ │ • Circuit breaker pattern for external dependencies │ │
│ │ • Retry policies with exponential backoff │ │
│ │ • Health checks for all services │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ 4. Security Measures: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ • JWT tokens for authentication │ │
│ │ • Role-based authorization (RBAC) │ │
│ │ • Input validation and sanitization │ │
│ │ • SQL injection prevention │ │
│ │ • HTTPS/TLS encryption for all communications │ │
│ │ • Audit logging for all user actions │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
### Performance Optimization
```
Performance Requirements:
┌─────────────────────────────────────────────────────────────┐
│ PERFORMANCE TARGETS │
│ │
│ Response Time Requirements: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ • Temperature readings: < 100ms │ │
│ │ • Motor control commands: < 50ms │ │
│ │ • Recipe phase transitions: < 200ms │ │
│ │ • Error detection response: < 100ms │ │
│ │ • UI interactions: < 50ms │ │
│ │ • Database queries: < 100ms (95th percentile) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Throughput Requirements: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ • Modbus messages: 10-20 messages/second │ │
│ │ • Temperature samples: 1 sample/second per zone │ │
│ │ • UI updates: 30 fps for smooth animations │ │
│ │ • Log entries: 1000 entries/minute sustainable │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Resource Constraints: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ • RAM usage: < 512MB total system │ │
│ │ • CPU usage: < 50% average, < 80% peak │ │
│ │ • Storage: < 1GB for application and data │ │
│ │ • Network: < 1Mbps bandwidth usage │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Optimization Strategies: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ • Connection pooling for database access │ │
│ │ • Redis caching for frequently accessed data │ │
│ │ • Message queuing for asynchronous operations │ │
│ │ • Efficient serialization (JSON vs MessagePack) │ │
│ │ • Database indexing and query optimization │ │
│ │ • Memory pooling for object reuse │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
This migration strategy provides a comprehensive roadmap for transforming the chocolate tempering machine control system from its current problematic state to a modern, maintainable, and scalable solution. The phased approach minimizes risk while ensuring business continuity throughout the transition.