refactor: update AS entry handling in API and database to support ASN-only entries. Remove prefix field from AS entry structure and adjust related functions and tests. Enhance OpenAPI specifications and documentation to reflect changes in AS entry representation.

This commit is contained in:
Denozordec
2026-04-05 22:38:17 +07:00
parent 73d0003281
commit 1db6b5b7b2
19 changed files with 218 additions and 115 deletions
@@ -0,0 +1,9 @@
DELETE FROM revision_materialized_prefix WHERE prefix LIKE 'as:%';
ALTER TABLE revision_materialized_prefix
ALTER COLUMN prefix TYPE CIDR USING prefix::cidr;
ALTER TABLE module_as_entry ADD COLUMN prefix CIDR;
ALTER TABLE module_as_entry ALTER COLUMN asn DROP NOT NULL;
ALTER TABLE module_as_entry
ADD CONSTRAINT module_as_entry_asn_or_prefix_chk CHECK (asn IS NOT NULL OR prefix IS NOT NULL);
@@ -0,0 +1,9 @@
-- AS-запись: только ASN + community; снимок ревизии может хранить ключи вида as:<asn>.
ALTER TABLE revision_materialized_prefix
ALTER COLUMN prefix TYPE TEXT USING prefix::text;
DELETE FROM module_as_entry WHERE asn IS NULL;
ALTER TABLE module_as_entry DROP CONSTRAINT module_as_entry_asn_or_prefix_chk;
ALTER TABLE module_as_entry DROP COLUMN prefix;
ALTER TABLE module_as_entry ALTER COLUMN asn SET NOT NULL;
@@ -0,0 +1,18 @@
CREATE TABLE module_as_entry_old (
id TEXT PRIMARY KEY NOT NULL,
module_id TEXT NOT NULL REFERENCES module (id) ON DELETE CASCADE,
asn INTEGER,
prefix TEXT,
community_id TEXT REFERENCES bgp_community (id) ON DELETE SET NULL,
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
CHECK (asn IS NOT NULL OR prefix IS NOT NULL)
);
INSERT INTO module_as_entry_old (id, module_id, asn, prefix, community_id, created_at, updated_at)
SELECT id, module_id, asn, NULL, community_id, created_at, updated_at FROM module_as_entry;
DROP TABLE module_as_entry;
ALTER TABLE module_as_entry_old RENAME TO module_as_entry;
CREATE INDEX idx_module_as_entry_module ON module_as_entry (module_id);
@@ -0,0 +1,20 @@
-- AS-запись: только ASN + community (revision_materialized_prefix.prefix уже TEXT).
DELETE FROM module_as_entry WHERE asn IS NULL;
CREATE TABLE module_as_entry_new (
id TEXT PRIMARY KEY NOT NULL,
module_id TEXT NOT NULL REFERENCES module (id) ON DELETE CASCADE,
asn INTEGER NOT NULL,
community_id TEXT REFERENCES bgp_community (id) ON DELETE SET NULL,
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
);
INSERT INTO module_as_entry_new (id, module_id, asn, community_id, created_at, updated_at)
SELECT id, module_id, asn, community_id, created_at, updated_at FROM module_as_entry;
DROP TABLE module_as_entry;
ALTER TABLE module_as_entry_new RENAME TO module_as_entry;
CREATE INDEX idx_module_as_entry_module ON module_as_entry (module_id);