From 39af0b2c10a72334a5846428f7bd00e96cbe4be5 Mon Sep 17 00:00:00 2001 From: nefrace Date: Sun, 6 Nov 2022 02:39:13 +0300 Subject: [PATCH] Diesel migrations --- diesel.toml | 8 ++ migrations/.keep | 0 .../down.sql | 6 ++ .../up.sql | 36 +++++++++ .../2022-11-04-171408_create_chats/down.sql | 2 + .../2022-11-04-171408_create_chats/up.sql | 5 ++ .../2022-11-04-172210_create_users/down.sql | 2 + .../2022-11-04-172210_create_users/up.sql | 11 +++ .../down.sql | 2 + .../2022-11-04-173323_create_chat_tags/up.sql | 6 ++ .../2022-11-04-173903_create_karma/down.sql | 2 + .../2022-11-04-173903_create_karma/up.sql | 11 +++ .../down.sql | 3 + .../2022-11-04-174746_create_warnings/up.sql | 12 +++ .../down.sql | 2 + .../2022-11-04-175349_create_triggers/up.sql | 7 ++ src/godette/models.rs | 35 +++++++++ src/schema.rs | 75 +++++++++++++++++++ 18 files changed, 225 insertions(+) create mode 100644 diesel.toml create mode 100644 migrations/.keep create mode 100644 migrations/00000000000000_diesel_initial_setup/down.sql create mode 100644 migrations/00000000000000_diesel_initial_setup/up.sql create mode 100644 migrations/2022-11-04-171408_create_chats/down.sql create mode 100644 migrations/2022-11-04-171408_create_chats/up.sql create mode 100644 migrations/2022-11-04-172210_create_users/down.sql create mode 100644 migrations/2022-11-04-172210_create_users/up.sql create mode 100644 migrations/2022-11-04-173323_create_chat_tags/down.sql create mode 100644 migrations/2022-11-04-173323_create_chat_tags/up.sql create mode 100644 migrations/2022-11-04-173903_create_karma/down.sql create mode 100644 migrations/2022-11-04-173903_create_karma/up.sql create mode 100644 migrations/2022-11-04-174746_create_warnings/down.sql create mode 100644 migrations/2022-11-04-174746_create_warnings/up.sql create mode 100644 migrations/2022-11-04-175349_create_triggers/down.sql create mode 100644 migrations/2022-11-04-175349_create_triggers/up.sql create mode 100644 src/godette/models.rs create mode 100644 src/schema.rs diff --git a/diesel.toml b/diesel.toml new file mode 100644 index 0000000..35a12ff --- /dev/null +++ b/diesel.toml @@ -0,0 +1,8 @@ +# For documentation on how to configure this file, +# see https://diesel.rs/guides/configuring-diesel-cli + +[print_schema] +file = "src/schema.rs" + +[migrations_directory] +dir = "migrations" diff --git a/migrations/.keep b/migrations/.keep new file mode 100644 index 0000000..e69de29 diff --git a/migrations/00000000000000_diesel_initial_setup/down.sql b/migrations/00000000000000_diesel_initial_setup/down.sql new file mode 100644 index 0000000..a9f5260 --- /dev/null +++ b/migrations/00000000000000_diesel_initial_setup/down.sql @@ -0,0 +1,6 @@ +-- This file was automatically created by Diesel to setup helper functions +-- and other internal bookkeeping. This file is safe to edit, any future +-- changes will be added to existing projects as new migrations. + +DROP FUNCTION IF EXISTS diesel_manage_updated_at(_tbl regclass); +DROP FUNCTION IF EXISTS diesel_set_updated_at(); diff --git a/migrations/00000000000000_diesel_initial_setup/up.sql b/migrations/00000000000000_diesel_initial_setup/up.sql new file mode 100644 index 0000000..d68895b --- /dev/null +++ b/migrations/00000000000000_diesel_initial_setup/up.sql @@ -0,0 +1,36 @@ +-- This file was automatically created by Diesel to setup helper functions +-- and other internal bookkeeping. This file is safe to edit, any future +-- changes will be added to existing projects as new migrations. + + + + +-- Sets up a trigger for the given table to automatically set a column called +-- `updated_at` whenever the row is modified (unless `updated_at` was included +-- in the modified columns) +-- +-- # Example +-- +-- ```sql +-- CREATE TABLE users (id SERIAL PRIMARY KEY, updated_at TIMESTAMP NOT NULL DEFAULT NOW()); +-- +-- SELECT diesel_manage_updated_at('users'); +-- ``` +CREATE OR REPLACE FUNCTION diesel_manage_updated_at(_tbl regclass) RETURNS VOID AS $$ +BEGIN + EXECUTE format('CREATE TRIGGER set_updated_at BEFORE UPDATE ON %s + FOR EACH ROW EXECUTE PROCEDURE diesel_set_updated_at()', _tbl); +END; +$$ LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION diesel_set_updated_at() RETURNS trigger AS $$ +BEGIN + IF ( + NEW IS DISTINCT FROM OLD AND + NEW.updated_at IS NOT DISTINCT FROM OLD.updated_at + ) THEN + NEW.updated_at := current_timestamp; + END IF; + RETURN NEW; +END; +$$ LANGUAGE plpgsql; diff --git a/migrations/2022-11-04-171408_create_chats/down.sql b/migrations/2022-11-04-171408_create_chats/down.sql new file mode 100644 index 0000000..aa607d0 --- /dev/null +++ b/migrations/2022-11-04-171408_create_chats/down.sql @@ -0,0 +1,2 @@ +-- This file should undo anything in `up.sql` +DROP TABLE chats \ No newline at end of file diff --git a/migrations/2022-11-04-171408_create_chats/up.sql b/migrations/2022-11-04-171408_create_chats/up.sql new file mode 100644 index 0000000..acc09cb --- /dev/null +++ b/migrations/2022-11-04-171408_create_chats/up.sql @@ -0,0 +1,5 @@ +-- Your SQL goes here +CREATE TABLE chats ( + id BIGINT PRIMARY KEY, + name TEXT NOT NULL +) \ No newline at end of file diff --git a/migrations/2022-11-04-172210_create_users/down.sql b/migrations/2022-11-04-172210_create_users/down.sql new file mode 100644 index 0000000..c8b9a69 --- /dev/null +++ b/migrations/2022-11-04-172210_create_users/down.sql @@ -0,0 +1,2 @@ +-- This file should undo anything in `up.sql` +DROP TABLE users \ No newline at end of file diff --git a/migrations/2022-11-04-172210_create_users/up.sql b/migrations/2022-11-04-172210_create_users/up.sql new file mode 100644 index 0000000..1758b95 --- /dev/null +++ b/migrations/2022-11-04-172210_create_users/up.sql @@ -0,0 +1,11 @@ +-- Your SQL goes here + +-- Your SQL goes here +CREATE TABLE users ( + id BIGINT PRIMARY KEY, + first_name TEXT NOT NULL, + last_name TEXT, + username TEXT, + karma INT DEFAULT 0, + messages_count INT DEFAULT 0 +) \ No newline at end of file diff --git a/migrations/2022-11-04-173323_create_chat_tags/down.sql b/migrations/2022-11-04-173323_create_chat_tags/down.sql new file mode 100644 index 0000000..12d38f7 --- /dev/null +++ b/migrations/2022-11-04-173323_create_chat_tags/down.sql @@ -0,0 +1,2 @@ +-- This file should undo anything in `up.sql` +DROP TABLE chat_tags \ No newline at end of file diff --git a/migrations/2022-11-04-173323_create_chat_tags/up.sql b/migrations/2022-11-04-173323_create_chat_tags/up.sql new file mode 100644 index 0000000..5f77e00 --- /dev/null +++ b/migrations/2022-11-04-173323_create_chat_tags/up.sql @@ -0,0 +1,6 @@ +-- Your SQL goes here +CREATE TABLE chat_tags ( + id BIGSERIAL PRIMARY KEY, + chat_id BIGINT references chats(id) NOT NULL, + tag varchar(16) NOT NULL +) \ No newline at end of file diff --git a/migrations/2022-11-04-173903_create_karma/down.sql b/migrations/2022-11-04-173903_create_karma/down.sql new file mode 100644 index 0000000..ccef817 --- /dev/null +++ b/migrations/2022-11-04-173903_create_karma/down.sql @@ -0,0 +1,2 @@ +-- This file should undo anything in `up.sql` +DROP TABLE karma \ No newline at end of file diff --git a/migrations/2022-11-04-173903_create_karma/up.sql b/migrations/2022-11-04-173903_create_karma/up.sql new file mode 100644 index 0000000..0407b47 --- /dev/null +++ b/migrations/2022-11-04-173903_create_karma/up.sql @@ -0,0 +1,11 @@ +-- Your SQL goes here +create TABLE karma ( + id BIGSERIAL PRIMARY KEY, + chat_id BIGINT REFERENCES chats(id) NOT NULL, + user_from BIGINT REFERENCES users(id) NOT NULL, + user_to BIGINT REFERENCES users(id) NOT NULL, + karma SMALLINT NOT NULL, + message_id BIGINT NOT NULL, + message_text TEXT, + created TIMESTAMPTZ NOT NULL DEFAULT NOW() +) \ No newline at end of file diff --git a/migrations/2022-11-04-174746_create_warnings/down.sql b/migrations/2022-11-04-174746_create_warnings/down.sql new file mode 100644 index 0000000..4267f42 --- /dev/null +++ b/migrations/2022-11-04-174746_create_warnings/down.sql @@ -0,0 +1,3 @@ +-- This file should undo anything in `up.sql` + +DROP TABLE warnings \ No newline at end of file diff --git a/migrations/2022-11-04-174746_create_warnings/up.sql b/migrations/2022-11-04-174746_create_warnings/up.sql new file mode 100644 index 0000000..685ca77 --- /dev/null +++ b/migrations/2022-11-04-174746_create_warnings/up.sql @@ -0,0 +1,12 @@ +-- Your SQL goes here +create TABLE warnings ( + id BIGSERIAL PRIMARY KEY, + chat_id BIGINT REFERENCES chats(id) NOT NULL, + user_from BIGINT REFERENCES users(id) NOT NULL, + user_to BIGINT REFERENCES users(id) NOT NULL, + reason TEXT, + message_id BIGINT, + message_text TEXT, + created TIMESTAMPTZ NOT NULL DEFAULT NOW(), + active BOOLEAN NOT NULL DEFAULT TRUE +) \ No newline at end of file diff --git a/migrations/2022-11-04-175349_create_triggers/down.sql b/migrations/2022-11-04-175349_create_triggers/down.sql new file mode 100644 index 0000000..4d4f7c3 --- /dev/null +++ b/migrations/2022-11-04-175349_create_triggers/down.sql @@ -0,0 +1,2 @@ +-- This file should undo anything in `up.sql` +DROP TABLE triggers \ No newline at end of file diff --git a/migrations/2022-11-04-175349_create_triggers/up.sql b/migrations/2022-11-04-175349_create_triggers/up.sql new file mode 100644 index 0000000..f725d7e --- /dev/null +++ b/migrations/2022-11-04-175349_create_triggers/up.sql @@ -0,0 +1,7 @@ +-- Your SQL goes here + +CREATE TABLE triggers ( + id BIGSERIAL PRIMARY KEY, + tag VARCHAR(16) NOT NULL, + text TEXT NOT NULL +) \ No newline at end of file diff --git a/src/godette/models.rs b/src/godette/models.rs new file mode 100644 index 0000000..c6e0ca3 --- /dev/null +++ b/src/godette/models.rs @@ -0,0 +1,35 @@ +use diesel::prelude::*; +use crate::schema::{chats, users}; + +#[derive(Queryable)] +pub struct Chat { + pub id: i64, + pub name: String +} + +#[derive(Insertable)] +#[diesel(table_name = chats)] +pub struct NewChat { + pub id: i64, + pub name: &str, +} + +#[derive(Queryable)] +pub struct User { + pub id: i64, + pub first_name: String, + pub last_name: Option, + pub username: Option, + pub karma: i32, + pub messages_count: i32, +} + +#[derive(Insertable)] +pub struct NewUser<'a> { + pub id: i64, + pub first_name: &'a str, + pub last_name: &'a str, + pub username: &'a str, + pub karma: i32, + pub messages_count: i32, +} \ No newline at end of file diff --git a/src/schema.rs b/src/schema.rs new file mode 100644 index 0000000..85be307 --- /dev/null +++ b/src/schema.rs @@ -0,0 +1,75 @@ +// @generated automatically by Diesel CLI. + +diesel::table! { + chat_tags (id) { + id -> Int8, + chat_id -> Int8, + tag -> Varchar, + } +} + +diesel::table! { + chats (id) { + id -> Int8, + name -> Text, + } +} + +diesel::table! { + karma (id) { + id -> Int8, + chat_id -> Int8, + user_from -> Int8, + user_to -> Int8, + karma -> Int2, + message_id -> Int8, + message_text -> Nullable, + created -> Timestamptz, + } +} + +diesel::table! { + triggers (id) { + id -> Int8, + tag -> Varchar, + text -> Text, + } +} + +diesel::table! { + users (id) { + id -> Int8, + first_name -> Text, + last_name -> Nullable, + username -> Nullable, + karma -> Nullable, + messages_count -> Nullable, + } +} + +diesel::table! { + warnings (id) { + id -> Int8, + chat_id -> Int8, + user_from -> Int8, + user_to -> Int8, + reason -> Nullable, + message_id -> Nullable, + message_text -> Nullable, + created -> Timestamptz, + active -> Bool, + } +} + +diesel::joinable!(chat_tags -> chats (chat_id)); +diesel::joinable!(karma -> chats (chat_id)); +diesel::joinable!(warnings -> chats (chat_id)); + +diesel::allow_tables_to_appear_in_same_query!( + chat_tags, + chats, + karma, + triggers, + users, + warnings, +);