116 lines
3.1 KiB
Rust
116 lines
3.1 KiB
Rust
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,
|
|
];
|