bmc_hub/migrations/209_internet_customer_documents.sql
Christian 3311b8e590 Add comprehensive tests for internet connections module, invoice parsing, and subscription provisioning
- Implement tests for the internet connections module, covering routes, IP range creation, and connection validation.
- Add tests for the Invoice2DataService to validate extraction from GlobalConnect invoices.
- Create tests for subscription network provisioning, ensuring proper handling of network items and IP allocations.
- Include validation checks for subtotal mismatches and ensure error handling for missing IP selections.
2026-07-09 23:44:30 +02:00

69 lines
2.8 KiB
PL/PgSQL

CREATE TABLE IF NOT EXISTS internet_connections_customer_documents (
id SERIAL PRIMARY KEY,
customer_id INTEGER REFERENCES customers(id) ON DELETE SET NULL,
connection_id INTEGER REFERENCES internet_connections_connections(id) ON DELETE SET NULL,
filename VARCHAR(500) NOT NULL,
original_filename VARCHAR(500) NOT NULL,
file_path VARCHAR(1000) NOT NULL,
file_size INTEGER,
mime_type VARCHAR(120),
checksum VARCHAR(64) NOT NULL,
extracted_text TEXT,
notes TEXT,
uploaded_by INTEGER,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP
);
CREATE INDEX IF NOT EXISTS idx_internet_customer_documents_customer
ON internet_connections_customer_documents(customer_id)
WHERE deleted_at IS NULL;
CREATE INDEX IF NOT EXISTS idx_internet_customer_documents_connection
ON internet_connections_customer_documents(connection_id)
WHERE deleted_at IS NULL;
CREATE INDEX IF NOT EXISTS idx_internet_customer_documents_checksum
ON internet_connections_customer_documents(checksum);
CREATE INDEX IF NOT EXISTS idx_internet_customer_documents_created_at
ON internet_connections_customer_documents(created_at DESC)
WHERE deleted_at IS NULL;
CREATE OR REPLACE FUNCTION update_internet_customer_documents_updated_at()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = CURRENT_TIMESTAMP;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
DROP TRIGGER IF EXISTS trigger_update_internet_customer_documents_updated_at
ON internet_connections_customer_documents;
CREATE TRIGGER trigger_update_internet_customer_documents_updated_at
BEFORE UPDATE ON internet_connections_customer_documents
FOR EACH ROW
EXECUTE FUNCTION update_internet_customer_documents_updated_at();
COMMENT ON TABLE internet_connections_customer_documents IS 'Kundeoplaeste tekstfiler til internetforbindelser og historisk research';
COMMENT ON COLUMN internet_connections_customer_documents.extracted_text IS 'Udtrukket/forsynlig tekst som wizard v2 og AI kan soege i';
CREATE TABLE IF NOT EXISTS internet_connections_customer_document_segments (
id SERIAL PRIMARY KEY,
document_id INTEGER NOT NULL REFERENCES internet_connections_customer_documents(id) ON DELETE CASCADE,
block_index INTEGER NOT NULL,
block_title VARCHAR(255),
content TEXT NOT NULL,
ip_addresses JSONB NOT NULL DEFAULT '[]'::jsonb,
cidr_blocks JSONB NOT NULL DEFAULT '[]'::jsonb,
references_json JSONB NOT NULL DEFAULT '[]'::jsonb,
socket_numbers JSONB NOT NULL DEFAULT '[]'::jsonb,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
UNIQUE(document_id, block_index)
);
CREATE INDEX IF NOT EXISTS idx_internet_customer_document_segments_document
ON internet_connections_customer_document_segments(document_id);