diff --git a/justfile b/justfile index 20a3fa9..0b6f273 100644 --- a/justfile +++ b/justfile @@ -39,7 +39,7 @@ start-release: start-postgres-dev clean-podman init-sqlx build-container-release init-sqlx: echo {{env_local}} > server/.env cd server && sqlx database create --connect-timeout 40 # Postgres takes a while to start up - cd server && sqlx migrate run --source migrations_pg + cd server && sqlx migrate run cd server && cargo sqlx prepare # Starts a postgres container for development @@ -72,4 +72,4 @@ clean: clean-podman clean-images rm -rf client-solid/node_modules rm -rf server/public rm -rf server/target - @echo "Cleaned up! Make sure to clean up podman volumes and networks." \ No newline at end of file + @echo "Cleaned up! Make sure to clean up podman volumes and networks." diff --git a/server/migrations/0001_users_table.sql b/server/migrations/0001_users_table.sql index b9ccfdb..bdeee93 100644 --- a/server/migrations/0001_users_table.sql +++ b/server/migrations/0001_users_table.sql @@ -1,31 +1,38 @@ -CREATE TABLE - IF NOT EXISTS users ( - id INTEGER PRIMARY KEY NOT NULL, - username TEXT NOT NULL UNIQUE, - password TEXT NOT NULL, - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP - ); - --- Create a trigger to set created_at and updated_at on INSERT -CREATE TRIGGER IF NOT EXISTS set_created_at AFTER INSERT ON users BEGIN -UPDATE users -SET - created_at = CURRENT_TIMESTAMP -WHERE - id = NEW.id; +CREATE TABLE IF NOT EXISTS users ( + id BIGSERIAL PRIMARY KEY, + username TEXT NOT NULL UNIQUE, + password TEXT NOT NULL, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP +); +-- Create a function to set created_at and updated_at on INSERT +CREATE OR REPLACE FUNCTION set_timestamps_on_insert() RETURNS TRIGGER AS $$ +BEGIN + NEW.created_at = NOW(); + NEW.updated_at = NOW(); + RETURN NEW; END; +$$ LANGUAGE plpgsql; --- Create a trigger to set updated_at on UPDATE -CREATE TRIGGER IF NOT EXISTS set_updated_at AFTER -UPDATE ON users BEGIN -UPDATE users -SET - updated_at = CURRENT_TIMESTAMP -WHERE - id = NEW.id; +-- Create a trigger to call the function after INSERT +CREATE TRIGGER set_timestamps_on_insert +BEFORE INSERT ON users +FOR EACH ROW +EXECUTE FUNCTION set_timestamps_on_insert(); +-- Create a function to set updated_at on UPDATE +CREATE OR REPLACE FUNCTION set_updated_at() RETURNS TRIGGER AS $$ +BEGIN + NEW.updated_at = NOW(); + RETURN NEW; END; +$$ LANGUAGE plpgsql; + +-- Create a trigger to call the function after UPDATE +CREATE TRIGGER set_updated_at +BEFORE UPDATE ON users +FOR EACH ROW +EXECUTE FUNCTION set_updated_at(); CREATE INDEX users_username_index ON users (username); \ No newline at end of file diff --git a/server/migrations/0002_posts_table.sql b/server/migrations/0002_posts_table.sql index 1b9601b..5042a86 100644 --- a/server/migrations/0002_posts_table.sql +++ b/server/migrations/0002_posts_table.sql @@ -1,38 +1,43 @@ -CREATE TABLE - IF NOT EXISTS posts ( - id INTEGER PRIMARY KEY NOT NULL, - user_id INTEGER NOT NULL, - content TEXT NOT NULL, - upvotes INTEGER NOT NULL DEFAULT 0, - downvotes INTEGER NOT NULL DEFAULT 0, - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - FOREIGN KEY (user_id) REFERENCES users (id) - ); - --- Create a trigger to set created_at and updated_at on INSERT -CREATE TRIGGER IF NOT EXISTS set_created_at AFTER INSERT ON posts BEGIN -UPDATE posts -SET - created_at = CURRENT_TIMESTAMP -WHERE - id = NEW.id; +CREATE TABLE IF NOT EXISTS posts ( + id BIGSERIAL PRIMARY KEY, + user_id BIGINT NOT NULL, + content TEXT NOT NULL, + upvotes INTEGER NOT NULL DEFAULT 0, + downvotes INTEGER NOT NULL DEFAULT 0, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (user_id) REFERENCES users (id) +); +-- Create a function to set created_at and updated_at on INSERT +CREATE OR REPLACE FUNCTION set_timestamps_on_insert() RETURNS TRIGGER AS $$ +BEGIN + NEW.created_at = NOW(); + NEW.updated_at = NOW(); + RETURN NEW; END; +$$ LANGUAGE plpgsql; --- Create a trigger to set updated_at on UPDATE -CREATE TRIGGER IF NOT EXISTS set_updated_at AFTER -UPDATE ON posts BEGIN -UPDATE posts -SET - updated_at = CURRENT_TIMESTAMP -WHERE - id = NEW.id; +-- Create a trigger to call the function after INSERT +CREATE TRIGGER set_timestamps_on_insert +BEFORE INSERT ON posts +FOR EACH ROW +EXECUTE FUNCTION set_timestamps_on_insert(); +-- Create a function to set updated_at on UPDATE +CREATE OR REPLACE FUNCTION set_updated_at() RETURNS TRIGGER AS $$ +BEGIN + NEW.updated_at = NOW(); + RETURN NEW; END; +$$ LANGUAGE plpgsql; -create INDEX IF NOT EXISTS posts_user_id_index ON posts (user_id); - -create INDEX IF NOT EXISTS posts_id_index ON posts (id); +-- Create a trigger to call the function after UPDATE +CREATE TRIGGER set_updated_at +BEFORE UPDATE ON posts +FOR EACH ROW +EXECUTE FUNCTION set_updated_at(); +CREATE INDEX posts_user_id_index ON posts (user_id); +CREATE INDEX posts_id_index ON posts (id); CREATE INDEX idx_created_at_desc ON posts (created_at DESC); \ No newline at end of file diff --git a/server/migrations_pg/0003_comments_table.sql b/server/migrations/0003_comments_table.sql similarity index 100% rename from server/migrations_pg/0003_comments_table.sql rename to server/migrations/0003_comments_table.sql diff --git a/server/migrations_pg/0001_users_table.sql b/server/migrations_pg/0001_users_table.sql deleted file mode 100644 index bdeee93..0000000 --- a/server/migrations_pg/0001_users_table.sql +++ /dev/null @@ -1,38 +0,0 @@ -CREATE TABLE IF NOT EXISTS users ( - id BIGSERIAL PRIMARY KEY, - username TEXT NOT NULL UNIQUE, - password TEXT NOT NULL, - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP -); - --- Create a function to set created_at and updated_at on INSERT -CREATE OR REPLACE FUNCTION set_timestamps_on_insert() RETURNS TRIGGER AS $$ -BEGIN - NEW.created_at = NOW(); - NEW.updated_at = NOW(); - RETURN NEW; -END; -$$ LANGUAGE plpgsql; - --- Create a trigger to call the function after INSERT -CREATE TRIGGER set_timestamps_on_insert -BEFORE INSERT ON users -FOR EACH ROW -EXECUTE FUNCTION set_timestamps_on_insert(); - --- Create a function to set updated_at on UPDATE -CREATE OR REPLACE FUNCTION set_updated_at() RETURNS TRIGGER AS $$ -BEGIN - NEW.updated_at = NOW(); - RETURN NEW; -END; -$$ LANGUAGE plpgsql; - --- Create a trigger to call the function after UPDATE -CREATE TRIGGER set_updated_at -BEFORE UPDATE ON users -FOR EACH ROW -EXECUTE FUNCTION set_updated_at(); - -CREATE INDEX users_username_index ON users (username); \ No newline at end of file diff --git a/server/migrations_pg/0002_posts_table.sql b/server/migrations_pg/0002_posts_table.sql deleted file mode 100644 index 5042a86..0000000 --- a/server/migrations_pg/0002_posts_table.sql +++ /dev/null @@ -1,43 +0,0 @@ -CREATE TABLE IF NOT EXISTS posts ( - id BIGSERIAL PRIMARY KEY, - user_id BIGINT NOT NULL, - content TEXT NOT NULL, - upvotes INTEGER NOT NULL DEFAULT 0, - downvotes INTEGER NOT NULL DEFAULT 0, - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - FOREIGN KEY (user_id) REFERENCES users (id) -); - --- Create a function to set created_at and updated_at on INSERT -CREATE OR REPLACE FUNCTION set_timestamps_on_insert() RETURNS TRIGGER AS $$ -BEGIN - NEW.created_at = NOW(); - NEW.updated_at = NOW(); - RETURN NEW; -END; -$$ LANGUAGE plpgsql; - --- Create a trigger to call the function after INSERT -CREATE TRIGGER set_timestamps_on_insert -BEFORE INSERT ON posts -FOR EACH ROW -EXECUTE FUNCTION set_timestamps_on_insert(); - --- Create a function to set updated_at on UPDATE -CREATE OR REPLACE FUNCTION set_updated_at() RETURNS TRIGGER AS $$ -BEGIN - NEW.updated_at = NOW(); - RETURN NEW; -END; -$$ LANGUAGE plpgsql; - --- Create a trigger to call the function after UPDATE -CREATE TRIGGER set_updated_at -BEFORE UPDATE ON posts -FOR EACH ROW -EXECUTE FUNCTION set_updated_at(); - -CREATE INDEX posts_user_id_index ON posts (user_id); -CREATE INDEX posts_id_index ON posts (id); -CREATE INDEX idx_created_at_desc ON posts (created_at DESC); \ No newline at end of file diff --git a/server/src/state.rs b/server/src/state.rs index aafca2b..ae75e23 100644 --- a/server/src/state.rs +++ b/server/src/state.rs @@ -43,7 +43,7 @@ impl ServerState { .await .unwrap(); - sqlx::migrate!("./migrations_pg").run(&pool).await.unwrap(); + sqlx::migrate!("./migrations").run(&pool).await.unwrap(); match crate::db::db_new_user("imbus".to_string(), "kartellen1234".to_string(), &pool).await {