pub const CREATE_WORK_TIME_ENUM: &str = r#" DO $$ BEGIN CREATE TYPE work_time AS ENUM ('morning', 'afternoon', 'evening'); EXCEPTION WHEN duplicate_object THEN NULL; END $$; "#; pub const CREATE_DAY_OF_WEEK_ENUM: &str = r#" DO $$ BEGIN CREATE TYPE day_of_week AS ENUM ( 'sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday' ); EXCEPTION WHEN duplicate_object THEN NULL; END $$; "#; pub const CREATE_COMPANIES_TABLE: &str = r#" CREATE TABLE IF NOT EXISTS companies ( id SERIAL PRIMARY KEY, name TEXT NOT NULL UNIQUE, date_created TIMESTAMP NOT NULL DEFAULT NOW(), date_updated TIMESTAMP NOT NULL DEFAULT NOW() ); "#; pub const CREATE_USERS_TABLE: &str = r#" CREATE TABLE IF NOT EXISTS users ( id SERIAL PRIMARY KEY, name TEXT NOT NULL, last_name TEXT NOT NULL, preference work_time NOT NULL, date_created TIMESTAMP NOT NULL DEFAULT NOW(), date_updated TIMESTAMP NOT NULL DEFAULT NOW() ); "#; pub const CREATE_COMPANY_USERS_TABLE: &str = r#" CREATE TABLE IF NOT EXISTS company_users ( id SERIAL PRIMARY KEY, user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, company_id INTEGER NOT NULL REFERENCES companies(id) ON DELETE CASCADE, date_created TIMESTAMP NOT NULL DEFAULT NOW(), date_updated TIMESTAMP NOT NULL DEFAULT NOW(), UNIQUE (user_id, company_id) ); "#; pub const CREATE_SCHEDULES_TABLE: &str = r#" CREATE TABLE IF NOT EXISTS schedules ( id SERIAL PRIMARY KEY, user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, enter_time TIMESTAMP NOT NULL, day_of_week day_of_week NOT NULL, out_time TIMESTAMP, shift work_time NOT NULL, date_created TIMESTAMP NOT NULL DEFAULT NOW(), date_updated TIMESTAMP NOT NULL DEFAULT NOW() ); "#; pub const CREATE_WEEKLY_PREFERENCES_TABLE: &str = r#" CREATE TABLE IF NOT EXISTS weekly_preferences ( id SERIAL PRIMARY KEY, user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, day_of_week day_of_week NOT NULL, first work_time NOT NULL, second work_time NOT NULL, third work_time NOT NULL, date_created TIMESTAMP NOT NULL DEFAULT NOW(), date_updated TIMESTAMP NOT NULL DEFAULT NOW(), UNIQUE (user_id, day_of_week) ); "#; pub const ALTER_SCHEDULES_ADD_SHIFT: &str = r#" ALTER TABLE schedules ADD COLUMN IF NOT EXISTS shift work_time; "#; pub const UPDATE_SCHEDULES_DEFAULT_SHIFT: &str = r#" UPDATE schedules SET shift = 'morning' WHERE shift IS NULL; "#; pub const ALTER_SCHEDULES_SHIFT_SET_NOT_NULL: &str = r#" ALTER TABLE schedules ALTER COLUMN shift SET NOT NULL; "#; pub const ALTER_SCHEDULES_DROP_OUT_TIME_NOT_NULL: &str = r#" ALTER TABLE schedules ALTER COLUMN out_time DROP NOT NULL; "#; pub const CREATE_SCHEMA_QUERIES: [&str; 11] = [ CREATE_WORK_TIME_ENUM, CREATE_DAY_OF_WEEK_ENUM, CREATE_COMPANIES_TABLE, CREATE_USERS_TABLE, CREATE_COMPANY_USERS_TABLE, CREATE_SCHEDULES_TABLE, CREATE_WEEKLY_PREFERENCES_TABLE, ALTER_SCHEDULES_ADD_SHIFT, UPDATE_SCHEDULES_DEFAULT_SHIFT, ALTER_SCHEDULES_SHIFT_SET_NOT_NULL, ALTER_SCHEDULES_DROP_OUT_TIME_NOT_NULL, ];