Compare commits

..

No commits in common. "1652419d9433af858b2491c1d0193d4bdd1e6502" and "f3cab8759299726da5599ab35a03693295fcc331" have entirely different histories.

7 changed files with 138 additions and 69 deletions

View file

@ -39,7 +39,7 @@ start-release: start-postgres-dev clean-podman init-sqlx build-container-release
init-sqlx: init-sqlx:
echo {{env_local}} > server/.env echo {{env_local}} > server/.env
cd server && sqlx database create --connect-timeout 40 # Postgres takes a while to start up cd server && sqlx database create --connect-timeout 40 # Postgres takes a while to start up
cd server && sqlx migrate run cd server && sqlx migrate run --source migrations_pg
cd server && cargo sqlx prepare cd server && cargo sqlx prepare
# Starts a postgres container for development # Starts a postgres container for development
@ -72,4 +72,4 @@ clean: clean-podman clean-images
rm -rf client-solid/node_modules rm -rf client-solid/node_modules
rm -rf server/public rm -rf server/public
rm -rf server/target rm -rf server/target
@echo "Cleaned up! Make sure to clean up podman volumes and networks." @echo "Cleaned up! Make sure to clean up podman volumes and networks."

View file

@ -1,38 +1,31 @@
CREATE TABLE IF NOT EXISTS users ( CREATE TABLE
id BIGSERIAL PRIMARY KEY, IF NOT EXISTS users (
username TEXT NOT NULL UNIQUE, id INTEGER PRIMARY KEY NOT NULL,
password TEXT NOT NULL, username TEXT NOT NULL UNIQUE,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, password TEXT NOT NULL,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 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 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; END;
$$ LANGUAGE plpgsql;
-- Create a trigger to call the function after INSERT -- Create a trigger to set updated_at on UPDATE
CREATE TRIGGER set_timestamps_on_insert CREATE TRIGGER IF NOT EXISTS set_updated_at AFTER
BEFORE INSERT ON users UPDATE ON users BEGIN
FOR EACH ROW UPDATE users
EXECUTE FUNCTION set_timestamps_on_insert(); SET
updated_at = CURRENT_TIMESTAMP
WHERE
id = NEW.id;
-- 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; 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); CREATE INDEX users_username_index ON users (username);

View file

@ -1,43 +1,38 @@
CREATE TABLE IF NOT EXISTS posts ( CREATE TABLE
id BIGSERIAL PRIMARY KEY, IF NOT EXISTS posts (
user_id BIGINT NOT NULL, id INTEGER PRIMARY KEY NOT NULL,
content TEXT NOT NULL, user_id INTEGER NOT NULL,
upvotes INTEGER NOT NULL DEFAULT 0, content TEXT NOT NULL,
downvotes INTEGER NOT NULL DEFAULT 0, upvotes INTEGER NOT NULL DEFAULT 0,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, downvotes INTEGER NOT NULL DEFAULT 0,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users (id) 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 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; END;
$$ LANGUAGE plpgsql;
-- Create a trigger to call the function after INSERT -- Create a trigger to set updated_at on UPDATE
CREATE TRIGGER set_timestamps_on_insert CREATE TRIGGER IF NOT EXISTS set_updated_at AFTER
BEFORE INSERT ON posts UPDATE ON posts BEGIN
FOR EACH ROW UPDATE posts
EXECUTE FUNCTION set_timestamps_on_insert(); SET
updated_at = CURRENT_TIMESTAMP
WHERE
id = NEW.id;
-- 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; END;
$$ LANGUAGE plpgsql;
-- Create a trigger to call the function after UPDATE create INDEX IF NOT EXISTS posts_user_id_index ON posts (user_id);
CREATE TRIGGER set_updated_at
BEFORE UPDATE ON posts create INDEX IF NOT EXISTS posts_id_index ON posts (id);
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); CREATE INDEX idx_created_at_desc ON posts (created_at DESC);

View file

@ -0,0 +1,38 @@
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);

View file

@ -0,0 +1,43 @@
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);

View file

@ -43,7 +43,7 @@ impl ServerState {
.await .await
.unwrap(); .unwrap();
sqlx::migrate!("./migrations").run(&pool).await.unwrap(); sqlx::migrate!("./migrations_pg").run(&pool).await.unwrap();
match crate::db::db_new_user("imbus".to_string(), "kartellen1234".to_string(), &pool).await match crate::db::db_new_user("imbus".to_string(), "kartellen1234".to_string(), &pool).await
{ {