CREATE TABLE neuralnet_privacy ( username VARCHAR(100) PRIMARY KEY REFERENCES users(username) ON DELETE CASCADE ON UPDATE CASCADE, enabled BOOLEAN NOT NULL DEFAULT FALSE ); CREATE TABLE neuralnet_connections ( id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, requester VARCHAR(100) NOT NULL REFERENCES users(username) ON DELETE CASCADE ON UPDATE CASCADE, addressee VARCHAR(100) NOT NULL REFERENCES users(username) ON DELETE CASCADE ON UPDATE CASCADE, status VARCHAR(20) NOT NULL DEFAULT 'PENDING', created_at TIMESTAMP NOT NULL, responded_at TIMESTAMP, CONSTRAINT uq_neuralnet_connection UNIQUE (requester, addressee), CONSTRAINT chk_neuralnet_no_self CHECK (requester <> addressee) ); CREATE INDEX idx_neuralnet_connection_addressee ON neuralnet_connections(addressee, status); CREATE TABLE neuralnet_messages ( id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, sender VARCHAR(100) NOT NULL REFERENCES users(username) ON DELETE CASCADE ON UPDATE CASCADE, recipient VARCHAR(100) NOT NULL REFERENCES users(username) ON DELETE CASCADE ON UPDATE CASCADE, body VARCHAR(2000) NOT NULL, sent_at TIMESTAMP NOT NULL, read_at TIMESTAMP, reported BOOLEAN NOT NULL DEFAULT FALSE ); CREATE INDEX idx_neuralnet_message_pair ON neuralnet_messages(sender, recipient, sent_at); CREATE INDEX idx_neuralnet_message_unread ON neuralnet_messages(recipient, read_at);