Files
manager_employees_rust/src/database/schema.rs
T
2026-09-18 21:59:31 -04:00

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,
];