48 lines
1.4 KiB
PL/PgSQL
48 lines
1.4 KiB
PL/PgSQL
-- Add migration script here
|
|
CREATE TABLE users {
|
|
id SERIAL PRIMARY KEY,
|
|
username VARCHAR(50) UNIQUE NOT NULL,
|
|
password VARCHAR(50) NOT NULL,
|
|
display_name VARCHAR(50),
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
|
|
}
|
|
|
|
CREATE TABLE messages {
|
|
id SERIAL PRIMARY KEY,
|
|
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
content TEXT NOT NULL,
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
|
is_edited BOOLEAN DEFAULT FALSE
|
|
}
|
|
|
|
create table attachments {
|
|
id SERIAL PRIMARY KEY,
|
|
message_id INTEGER NOT NULL REFERENCES messages(id) ON DELETE CASCADE,
|
|
path TEXT NOT NULL
|
|
}
|
|
|
|
CREATE INDEX idx_users_username ON users(username)
|
|
CREATE INDEX idx_new_messages ON messages(created_at DESC)
|
|
|
|
-- Create a function to update the updated_at timestamp
|
|
CREATE OR REPLACE FUNCTION update_updated_at_column()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
NEW.updated_at = CURRENT_TIMESTAMP;
|
|
RETURN NEW;
|
|
END;
|
|
$$ language 'plpgsql';
|
|
|
|
-- Create trigger for users table
|
|
CREATE TRIGGER update_users_updated_at
|
|
BEFORE UPDATE ON users
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION update_updated_at_column();
|
|
|
|
-- Create trigger for messages table
|
|
CREATE TRIGGER update_messages_updated_at
|
|
BEFORE UPDATE ON messages
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION update_updated_at_column();
|