state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
- Copyright (C) 2023 Jakub Czajka <jakub@ekhem.eu.org>
+ Copyright (C) 2023-2024 Jakub Czajka <jakub@ekhem.eu.org>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
- gym Copyright (C) 2023 Jakub Czajka <jakub@ekhem.eu.org>
+ gym Copyright (C) 2023-2024 Jakub Czajka <jakub@ekhem.eu.org>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
-/* Copyright (c) 2023 Jakub Czajka <jakub@ekhem.eu.org>
+/* Copyright (c) 2023-2024 Jakub Czajka <jakub@ekhem.eu.org>
License: GPL-3.0 or later. */
+CREATE TABLE IF NOT EXISTS categories (
+ id SERIAL PRIMARY KEY,
+ name VARCHAR(128) NOT NULL UNIQUE
+);
+
CREATE TABLE IF NOT EXISTS exercises (
id SERIAL PRIMARY KEY,
name VARCHAR(128) NOT NULL UNIQUE
);
+CREATE TABLE IF NOT EXISTS exercises_categories (
+ exercise_id INTEGER REFERENCES exercises (id),
+ category_id INTEGER REFERENCES categories (id),
+ PRIMARY KEY (exercise_id, category_id)
+);
+
CREATE TABLE IF NOT EXISTS gyms (
id SERIAL PRIMARY KEY,
name VARCHAR(128) NOT NULL UNIQUE
CREATE ROLE gym_tracker LOGIN;
GRANT SELECT
- ON TABLE exercises, gyms, gyms_records, records, workouts, workouts_exercises
+ ON categories, exercises, exercises_categories, gyms, gyms_records,
+ records, workouts, workouts_exercises
TO gym_tracker;
GRANT INSERT
- ON TABLE exercises, gyms, gyms_records, records, workouts, workouts_exercises, workouts_gyms
+ ON categories, exercises, exercises_categories, gyms, gyms_records,
+ records, workouts, workouts_exercises, workouts_gyms
TO gym_tracker;
GRANT UPDATE
- ON TABLE exercises, gyms, gyms_records, records
+ ON exercises, gyms, gyms_records, records
TO gym_tracker;
GRANT USAGE, SELECT
- ON SEQUENCE exercises_id_seq, gyms_id_seq, workouts_id_seq
+ ON SEQUENCE categories_id_seq, exercises_id_seq, gyms_id_seq,
+ workouts_id_seq
TO gym_tracker;
/* Execute for the current database. */
-/* Copyright (c) 2023 Jakub Czajka <jakub@ekhem.eu.org>
+/* Copyright (c) 2023-2024 Jakub Czajka <jakub@ekhem.eu.org>
License: GPL-3.0 or later. */
DO $$
IF EXISTS (SELECT * FROM pg_user WHERE usename = 'gym_tracker')
THEN
REVOKE SELECT
- ON TABLE exercises, gyms, gyms_records, records, workouts, workouts_exercises
+ ON exercises, categories, exercises_categories, gyms, gyms_records,
+ records, workouts, workouts_exercises
FROM gym_tracker;
REVOKE INSERT
- ON TABLE exercises, gyms, gyms_records, records, workouts, workouts_exercises, workouts_gyms
+ ON exercises, categories, exercises_categories, gyms, gyms_records,
+ records, workouts, workouts_exercises, workouts_gyms
FROM gym_tracker;
REVOKE UPDATE
- ON TABLE exercises, gym, gyms_records, records
+ ON exercises, gym, gyms_records, records
FROM gym_tracker;
REVOKE USAGE, SELECT
- ON SEQUENCE exercises_id_seq, gyms_id_seq, workouts_id_seq
+ ON SEQUENCE exercises_id_seq, categories_id_seq, gyms_id_seq,
+ workouts_id_seq
FROM gym_tracker;
EXECUTE
DROP TABLE IF EXISTS gyms_records;
DROP TABLE IF EXISTS workouts;
DROP TABLE IF EXISTS gyms;
+DROP TABLE IF EXISTS exercises_categories;
+DROP TABLE IF EXISTS categories;
DROP TABLE IF EXISTS exercises;