39 lines
1.5 KiB
PL/PgSQL
39 lines
1.5 KiB
PL/PgSQL
-- Network wall outlets attached to buildings, floors, or rooms.
|
|
CREATE TABLE IF NOT EXISTS locations_wall_outlets (
|
|
id SERIAL PRIMARY KEY,
|
|
location_id INTEGER NOT NULL REFERENCES locations_locations(id) ON DELETE CASCADE,
|
|
outlet_number VARCHAR(100) NOT NULL,
|
|
category VARCHAR(50),
|
|
patch_panel VARCHAR(255),
|
|
patch_port VARCHAR(100),
|
|
switch_name VARCHAR(255),
|
|
switch_port VARCHAR(100),
|
|
status VARCHAR(20) NOT NULL DEFAULT 'unknown'
|
|
CHECK (status IN ('available', 'active', 'reserved', 'faulty', 'unknown')),
|
|
notes TEXT,
|
|
is_active BOOLEAN NOT NULL DEFAULT TRUE,
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
deleted_at TIMESTAMP
|
|
);
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_locations_wall_outlets_unique_location_number
|
|
ON locations_wall_outlets(location_id, lower(outlet_number))
|
|
WHERE deleted_at IS NULL;
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_locations_wall_outlets_location ON locations_wall_outlets(location_id);
|
|
CREATE INDEX IF NOT EXISTS idx_locations_wall_outlets_status ON locations_wall_outlets(status) WHERE deleted_at IS NULL;
|
|
|
|
CREATE OR REPLACE FUNCTION update_locations_wall_outlets_updated_at()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
NEW.updated_at = NOW();
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
DROP TRIGGER IF EXISTS trg_locations_wall_outlets_updated_at ON locations_wall_outlets;
|
|
CREATE TRIGGER trg_locations_wall_outlets_updated_at
|
|
BEFORE UPDATE ON locations_wall_outlets
|
|
FOR EACH ROW EXECUTE FUNCTION update_locations_wall_outlets_updated_at();
|