-- +goose Up -- +goose StatementBegin CREATE TABLE line_stages ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, description TEXT, stage_order INT NOT NULL UNIQUE, equipment VARCHAR(200), mqtt_topic VARCHAR(200) ); CREATE TABLE sensor_readings ( id SERIAL PRIMARY KEY, stage_id INT REFERENCES line_stages(id) ON DELETE CASCADE, sensor VARCHAR(100) NOT NULL, value DOUBLE PRECISION NOT NULL, unit VARCHAR(20), timestamp TIMESTAMPTZ NOT NULL DEFAULT NOW() ); CREATE TABLE production_events ( id SERIAL PRIMARY KEY, stage_id INT REFERENCES line_stages(id) ON DELETE CASCADE, event_type VARCHAR(100) NOT NULL, data TEXT, timestamp TIMESTAMPTZ NOT NULL DEFAULT NOW() ); -- Индексы для производительности CREATE INDEX idx_sensor_readings_stage ON sensor_readings(stage_id, timestamp DESC); CREATE INDEX idx_production_events_stage ON production_events(stage_id, timestamp DESC); -- Начальные данные этапов линии INSERT INTO line_stages (name, description, stage_order, equipment, mqtt_topic) VALUES ('Разгрузка', 'Приемка лома, взвешивание', 1, 'Рампа, весы', '/sensor/weight/party'), ('QR Сортировка', 'Сканирование QR-кодов', 2, 'Camera Module v3', '/qr/result'), ('Подача', 'Загрузка на конвейер', 3, 'Danfoss VLT FC 302', '/drive/telemetry'), ('Дробление', 'Шредер / Дробилка', 4, 'SEW MOVITRAC', '/drive/vibration'), ('Мойка', 'Очистка, флотация', 5, 'Ванна, насосы', '/sensor/level'), ('Сушка', 'Удаление влаги', 6, 'Центрифуга', '/sensor/dry/temp'), ('Экструзия', 'Плавление, грануляция', 7, 'ABB ACS880', '/extruder/pressure'), ('Манипулятор', 'Упаковка, паллетирование', 8, 'Робот-упаковщик', '/robot/cycle'); -- +goose StatementEnd -- +goose Down -- +goose StatementBegin DROP TABLE IF EXISTS production_events; DROP TABLE IF EXISTS sensor_readings; DROP TABLE IF EXISTS line_stages; -- +goose StatementEnd