Files
api/services/nginx/app/classes/economic_transfer_queue_schema_bootstrap.php
T
Jeppe Bundgaard 6d4066be1c Add unit tests for InvoicingPeriodDraftOverlay and reference suggestion logic, including fake DB integration and aggregation methods
- Implemented `InvoicingPeriodDraftOverlayTest` with coverage for blocking and permitting invoicing actions based on draft states, transactions, and metadata.
- Created `ReferenceSuggestionsApiTest` to validate ranked and filtered suggestions across bookings, orders, and vehicles with varied match relevance, context, and frequency.
- Added `order_reference_suggestions_service` class, including query methods, normalization utilities, and aggregation logic for reference suggestions.
- Enhanced query handling in `InvoicingPeriodDraftOverlayFakeDb` to validate SQL constraints and column cache resets in overlapping invoicing contexts.
2026-05-11 18:18:08 +02:00

60 lines
2.3 KiB
PHP

<?php
namespace classes;
/**
* Ensures additive schema for e-conomic transfer queue jobs.
*/
class economic_transfer_queue_schema_bootstrap
{
private static bool $initialized = false;
public static function ensureTables(): void
{
if (self::$initialized) {
return;
}
global $db;
$db->query(
"CREATE TABLE IF NOT EXISTS economic_transfer_queue_jobs (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
transfer_type VARCHAR(64) NOT NULL,
payload_json JSON NOT NULL,
status VARCHAR(32) NOT NULL DEFAULT 'QUEUED',
progress_percent TINYINT UNSIGNED NOT NULL DEFAULT 0,
progress_message VARCHAR(255) NULL,
attempts INT NOT NULL DEFAULT 0,
max_attempts INT NOT NULL DEFAULT 3,
error_message TEXT NULL,
result_json JSON NULL,
created_by INT NULL,
started_at DATETIME NULL,
completed_at DATETIME NULL,
next_retry_at DATETIME NULL,
locked_at DATETIME NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_economic_transfer_queue_jobs_status_created (status, created_at),
INDEX idx_economic_transfer_queue_jobs_next_retry (next_retry_at),
INDEX idx_economic_transfer_queue_jobs_transfer_type (transfer_type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci"
);
$db->query(
"CREATE TABLE IF NOT EXISTS economic_transfer_queue_job_dismissals (
queue_job_id BIGINT UNSIGNED NOT NULL,
user_id INT NOT NULL,
dismissed_status VARCHAR(32) NOT NULL,
dismissed_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (queue_job_id, user_id),
INDEX idx_economic_transfer_queue_job_dismissals_user_status (user_id, dismissed_status),
INDEX idx_economic_transfer_queue_job_dismissals_job (queue_job_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci"
);
self::$initialized = true;
}
}