diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..164c72a --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +schema/sqitch.plan merge=union diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e43b0f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store diff --git a/schema/deploy/appschema.sql b/schema/deploy/appschema.sql new file mode 100644 index 0000000..9e3f0ab --- /dev/null +++ b/schema/deploy/appschema.sql @@ -0,0 +1,7 @@ +-- Deploy onboarding:appschema to pg + +BEGIN; + +CREATE SCHEMA todo_app; + +COMMIT; diff --git a/schema/deploy/insert_todo.sql b/schema/deploy/insert_todo.sql new file mode 100644 index 0000000..375e6ce --- /dev/null +++ b/schema/deploy/insert_todo.sql @@ -0,0 +1,14 @@ +-- Deploy onboarding:insert_todo to pg +-- requires: todos +-- requires: appschema + +BEGIN; + +CREATE OR REPLACE FUNCTION todo_app.insert_todo( + task TEXT, + completed BOOLEAN +) RETURNS VOID LANGUAGE SQL SECURITY DEFINER AS $$ + INSERT INTO todo_app.todos (task, completed) VALUES($1, $2); +$$; + +COMMIT; diff --git a/schema/deploy/seed_todo.sql b/schema/deploy/seed_todo.sql new file mode 100644 index 0000000..1c0a3f3 --- /dev/null +++ b/schema/deploy/seed_todo.sql @@ -0,0 +1,17 @@ +-- Deploy onboarding:seed_todo to pg +-- requires: insert_todo +-- requires: todos +-- requires: appschema + +BEGIN; + +DO $$ +BEGIN + PERFORM todo_app.insert_todo('Task 1', false); + PERFORM todo_app.insert_todo('Task 2', false); + PERFORM todo_app.insert_todo('Task 3', false); + PERFORM todo_app.insert_todo('Unfinished Task', false); + PERFORM todo_app.insert_todo('Finished Task', true); +END$$; + +COMMIT; diff --git a/schema/deploy/todos.sql b/schema/deploy/todos.sql new file mode 100644 index 0000000..6ad37f2 --- /dev/null +++ b/schema/deploy/todos.sql @@ -0,0 +1,16 @@ +-- Deploy onboarding:todos to pg +-- requires: appschema + +BEGIN; + +SET client_min_messages = 'warning'; + +CREATE TABLE todo_app.todos ( + id SERIAL PRIMARY KEY, + task TEXT NOT NULL, + completed BOOLEAN NOT NULL DEFAULT FALSE, + date_created TIMESTAMPTZ NOT NULL DEFAULT NOW(), + date_updated TIMESTAMPTZ NOT NULL DEFAULT NOW() +); + +COMMIT; diff --git a/schema/revert/appschema.sql b/schema/revert/appschema.sql new file mode 100644 index 0000000..4b8a0c4 --- /dev/null +++ b/schema/revert/appschema.sql @@ -0,0 +1,7 @@ +-- Revert onboarding:appschema from pg + +BEGIN; + +DROP SCHEMA todo_app; + +COMMIT; diff --git a/schema/revert/insert_todo.sql b/schema/revert/insert_todo.sql new file mode 100644 index 0000000..940a8b1 --- /dev/null +++ b/schema/revert/insert_todo.sql @@ -0,0 +1,7 @@ +-- Revert onboarding:insert_todo from pg + +BEGIN; + +DROP FUNCTION todo_app.insert_todo(TEXT, BOOLEAN); + +COMMIT; diff --git a/schema/revert/seed_todo.sql b/schema/revert/seed_todo.sql new file mode 100644 index 0000000..eb285e3 --- /dev/null +++ b/schema/revert/seed_todo.sql @@ -0,0 +1,8 @@ +-- Revert onboarding:seed_todo from pg + +BEGIN; + +DELETE FROM todo_app.todos; +ALTER SEQUENCE todo_app.todos_id_seq RESTART; + +COMMIT; diff --git a/schema/revert/todos.sql b/schema/revert/todos.sql new file mode 100644 index 0000000..38e5bd4 --- /dev/null +++ b/schema/revert/todos.sql @@ -0,0 +1,7 @@ +-- Revert onboarding:todos from pg + +BEGIN; + +DROP TABLE todo_app.todos; + +COMMIT; diff --git a/schema/sqitch.conf b/schema/sqitch.conf new file mode 100644 index 0000000..425c449 --- /dev/null +++ b/schema/sqitch.conf @@ -0,0 +1,10 @@ +[core] + engine = pg +[deploy] + verify = true +[rebase] + verify = true +[target "todo_app"] + uri = db:pg:todo_app +[engine "pg"] + target = todo_app diff --git a/schema/sqitch.plan b/schema/sqitch.plan new file mode 100644 index 0000000..8f63a8c --- /dev/null +++ b/schema/sqitch.plan @@ -0,0 +1,8 @@ +%syntax-version=1.0.0 +%project=onboarding +%uri=https://github.com/naomiaro/button-onboarding + +appschema 2021-03-19T20:12:31Z Naomi Aro # Add schema for all onboarding objects. +todos [appschema] 2021-03-23T18:08:10Z Naomi Aro # Creates a table for the todos. +insert_todo [todos appschema] 2021-03-23T20:44:59Z Naomi Aro # Function to insert TODO +seed_todo [insert_todo todos appschema] 2021-03-23T23:22:49Z Naomi Aro # seed todos table diff --git a/schema/verify/appschema.sql b/schema/verify/appschema.sql new file mode 100644 index 0000000..7779b2c --- /dev/null +++ b/schema/verify/appschema.sql @@ -0,0 +1,7 @@ +-- Verify onboarding:appschema on pg + +BEGIN; + +SELECT pg_catalog.has_schema_privilege('todo_app', 'usage'); + +ROLLBACK; diff --git a/schema/verify/insert_todo.sql b/schema/verify/insert_todo.sql new file mode 100644 index 0000000..782a6ac --- /dev/null +++ b/schema/verify/insert_todo.sql @@ -0,0 +1,7 @@ +-- Verify onboarding:insert_todo on pg + +BEGIN; + +SELECT has_function_privilege('todo_app.insert_todo(text, boolean)', 'execute'); + +ROLLBACK; diff --git a/schema/verify/seed_todo.sql b/schema/verify/seed_todo.sql new file mode 100644 index 0000000..eb3e52a --- /dev/null +++ b/schema/verify/seed_todo.sql @@ -0,0 +1,13 @@ +-- Verify onboarding:seed_todo on pg + +BEGIN; + +DO $$ +DECLARE + todos_count INTEGER; +BEGIN + todos_count := (SELECT last_value FROM todo_app.todos_id_seq); + ASSERT todos_count = 5; +END $$; + +ROLLBACK; diff --git a/schema/verify/todos.sql b/schema/verify/todos.sql new file mode 100644 index 0000000..b383d21 --- /dev/null +++ b/schema/verify/todos.sql @@ -0,0 +1,9 @@ +-- Verify onboarding:todos on pg + +BEGIN; + +SELECT id, task, completed, date_created, date_updated + FROM todo_app.todos + WHERE FALSE; + +ROLLBACK;