refactor: enhance department and user data insertion with CTEs and streamline role authority assignments
This commit is contained in:
@@ -59,14 +59,41 @@ CREATE INDEX departments_name_index ON departments (name);
|
||||
CREATE INDEX departments_parent_id_index ON departments (parent_id);
|
||||
|
||||
--- Departments Data Insertion ---
|
||||
INSERT INTO departments (id, name, parent_id, sort, status)
|
||||
VALUES (1, 'Company HQ', NULL, 1, 'ACTIVE'::STATUS),
|
||||
(2, 'Human Resources', 1, 1, 'ACTIVE'::STATUS),
|
||||
(3, 'Finance', 1, 2, 'ACTIVE'::STATUS),
|
||||
(4, 'Technology', 1, 3, 'ACTIVE'::STATUS),
|
||||
(5, 'IT Support', 4, 1, 'ACTIVE'::STATUS),
|
||||
(6, 'Software Development', 4, 2, 'ACTIVE'::STATUS),
|
||||
(7, 'Operations', 1, 4, 'INACTIVE'::STATUS);
|
||||
WITH company_hq AS (
|
||||
INSERT INTO departments (name, parent_id, sort, status)
|
||||
VALUES ('Company HQ', NULL, 1, 'ACTIVE'::STATUS)
|
||||
RETURNING id),
|
||||
human_resources AS (
|
||||
INSERT INTO departments (name, parent_id, sort, status)
|
||||
SELECT 'Human Resources', company_hq.id, 1, 'ACTIVE'::STATUS
|
||||
FROM company_hq
|
||||
RETURNING id),
|
||||
finance AS (
|
||||
INSERT INTO departments (name, parent_id, sort, status)
|
||||
SELECT 'Finance', company_hq.id, 2, 'ACTIVE'::STATUS
|
||||
FROM company_hq
|
||||
RETURNING id),
|
||||
technology AS (
|
||||
INSERT INTO departments (name, parent_id, sort, status)
|
||||
SELECT 'Technology', company_hq.id, 3, 'ACTIVE'::STATUS
|
||||
FROM company_hq
|
||||
RETURNING id),
|
||||
it_support AS (
|
||||
INSERT INTO departments (name, parent_id, sort, status)
|
||||
SELECT 'IT Support', technology.id, 1, 'ACTIVE'::STATUS
|
||||
FROM technology
|
||||
RETURNING id),
|
||||
software_development AS (
|
||||
INSERT INTO departments (name, parent_id, sort, status)
|
||||
SELECT 'Software Development', technology.id, 2, 'ACTIVE'::STATUS
|
||||
FROM technology
|
||||
RETURNING id),
|
||||
operations AS (
|
||||
INSERT INTO departments (name, parent_id, sort, status)
|
||||
SELECT 'Operations', company_hq.id, 4, 'INACTIVE'::STATUS
|
||||
FROM company_hq
|
||||
RETURNING id)
|
||||
SELECT NULL;
|
||||
|
||||
--- Positions Table ---
|
||||
DROP TABLE IF EXISTS positions CASCADE;
|
||||
@@ -87,27 +114,30 @@ CREATE INDEX positions_code_index ON positions (code);
|
||||
CREATE INDEX positions_name_code_index ON positions (name, code);
|
||||
|
||||
--- Positions Data Insertion ---
|
||||
INSERT INTO positions (id, name, code, description, sort, status)
|
||||
VALUES (1, 'HR Manager', 'HR-MGR',
|
||||
INSERT INTO positions (name, code, description, sort, status)
|
||||
VALUES ('HR Manager', 'HR-MGR',
|
||||
'Responsible for overseeing recruitment, employee relations, and staff wellbeing.', 1,
|
||||
'ACTIVE'),
|
||||
(2, 'Finance Officer', 'FIN-OFC',
|
||||
('Finance Officer', 'FIN-OFC',
|
||||
'Handles accounts, prepares financial statements, and ensures compliance with regulations.',
|
||||
2, 'ACTIVE'),
|
||||
(3, 'IT Support Specialist', 'IT-SPT',
|
||||
('IT Support Specialist', 'IT-SPT',
|
||||
'Provides technical assistance, manages helpdesk queries, and maintains computer systems.',
|
||||
3, 'ACTIVE'),
|
||||
(4, 'Software Engineer', 'SWE-ENG',
|
||||
('Software Engineer', 'SWE-ENG',
|
||||
'Develops and maintains in-house applications, ensuring code quality and system reliability.',
|
||||
4, 'ACTIVE'),
|
||||
(5, 'Operations Coordinator', 'OPS-CRD',
|
||||
('Operations Coordinator', 'OPS-CRD',
|
||||
'Assists with day-to-day logistics, procurement, and office organisation.', 5, 'INACTIVE');
|
||||
|
||||
--- Users Table ---
|
||||
DROP TABLE IF EXISTS users CASCADE;
|
||||
DROP SEQUENCE IF EXISTS users_id_seq CASCADE;
|
||||
CREATE SEQUENCE users_id_seq START WITH 1;
|
||||
|
||||
CREATE TABLE users
|
||||
(
|
||||
id BIGINT PRIMARY KEY,
|
||||
id BIGINT PRIMARY KEY DEFAULT nextval('users_id_seq'),
|
||||
username VARCHAR(64) UNIQUE NOT NULL,
|
||||
password VARCHAR(255),
|
||||
full_name VARCHAR(128) NOT NULL,
|
||||
@@ -127,14 +157,33 @@ CREATE INDEX users_username_index ON users (username);
|
||||
|
||||
--- Users Data Insertion ---
|
||||
-- NOTE: All phone numbers are generated by ChatGPT, they should not be connected any real person.
|
||||
INSERT INTO users(id, username, password, full_name, email, region_abbreviation, phone_number,
|
||||
INSERT INTO users(username, password, full_name, email, region_abbreviation, phone_number,
|
||||
avatar_url, department_id, position_id, created_at, updated_at)
|
||||
VALUES (1, 'helix', null, 'Helix Admin', 'admin@helix.onixbyte.dev', 'GB', '7000000000',
|
||||
'https://gravatar.com/avatar/6ef4c4033f6aa8e43d06bd5e462a6173cc2a960633473721a6f1289cd1b5146f',
|
||||
1, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
|
||||
(2, 'johndoe', null, 'John Doe', 'johndoe@helix.onixbyte.dev', 'GB', '7000000001',
|
||||
'https://gravatar.com/avatar/41bcebddd573747d1bd35ef7fae72ebefd6b47f077d42442a2510d35b0c2db92',
|
||||
6, 4, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
|
||||
SELECT 'helix',
|
||||
null,
|
||||
'Helix Admin',
|
||||
'admin@helix.onixbyte.dev',
|
||||
'GB',
|
||||
'7000000000',
|
||||
'https://gravatar.com/avatar/6ef4c4033f6aa8e43d06bd5e462a6173cc2a960633473721a6f1289cd1b5146f',
|
||||
(SELECT id FROM departments WHERE name = 'Company HQ'),
|
||||
(SELECT id FROM positions WHERE code = 'HR-MGR'),
|
||||
CURRENT_TIMESTAMP,
|
||||
CURRENT_TIMESTAMP;
|
||||
|
||||
INSERT INTO users(username, password, full_name, email, region_abbreviation, phone_number,
|
||||
avatar_url, department_id, position_id, created_at, updated_at)
|
||||
SELECT 'johndoe',
|
||||
null,
|
||||
'John Doe',
|
||||
'johndoe@helix.onixbyte.dev',
|
||||
'GB',
|
||||
'7000000001',
|
||||
'https://gravatar.com/avatar/41bcebddd573747d1bd35ef7fae72ebefd6b47f077d42442a2510d35b0c2db92',
|
||||
(SELECT id FROM departments WHERE name = 'Software Development'),
|
||||
(SELECT id FROM positions WHERE code = 'SWE-ENG'),
|
||||
CURRENT_TIMESTAMP,
|
||||
CURRENT_TIMESTAMP;
|
||||
|
||||
--- User Identities Table ---
|
||||
DROP TABLE IF EXISTS user_identities CASCADE;
|
||||
@@ -187,9 +236,12 @@ CREATE TABLE user_roles
|
||||
);
|
||||
|
||||
--- User Roles Data Insertion ---
|
||||
INSERT INTO user_roles
|
||||
VALUES (1, 1),
|
||||
(2, 2);
|
||||
INSERT INTO user_roles (user_id, role_id)
|
||||
SELECT u.id, r.id
|
||||
FROM users u
|
||||
CROSS JOIN roles r
|
||||
WHERE (u.username = 'helix' AND r.code = 'admin')
|
||||
OR (u.username = 'johndoe' AND r.code = 'user');
|
||||
|
||||
--- Authorities Table ---
|
||||
DROP TABLE IF EXISTS authorities CASCADE;
|
||||
@@ -247,27 +299,26 @@ CREATE TABLE role_authorities
|
||||
);
|
||||
|
||||
--- Role Authorities Data Insertion ---
|
||||
INSERT INTO role_authorities
|
||||
VALUES (1, 1, CURRENT_TIMESTAMP),
|
||||
(1, 2, CURRENT_TIMESTAMP),
|
||||
(1, 3, CURRENT_TIMESTAMP),
|
||||
(1, 4, CURRENT_TIMESTAMP),
|
||||
(1, 5, CURRENT_TIMESTAMP),
|
||||
(1, 6, CURRENT_TIMESTAMP),
|
||||
(1, 7, CURRENT_TIMESTAMP),
|
||||
(1, 8, CURRENT_TIMESTAMP),
|
||||
(1, 9, CURRENT_TIMESTAMP),
|
||||
(1, 10, CURRENT_TIMESTAMP),
|
||||
(1, 11, CURRENT_TIMESTAMP),
|
||||
(1, 12, CURRENT_TIMESTAMP),
|
||||
(1, 13, CURRENT_TIMESTAMP),
|
||||
(2, 1, CURRENT_TIMESTAMP),
|
||||
(2, 2, CURRENT_TIMESTAMP),
|
||||
(2, 3, CURRENT_TIMESTAMP),
|
||||
(2, 5, CURRENT_TIMESTAMP),
|
||||
(2, 7, CURRENT_TIMESTAMP),
|
||||
(2, 9, CURRENT_TIMESTAMP),
|
||||
(2, 11, CURRENT_TIMESTAMP);
|
||||
-- Admin role gets all authorities
|
||||
INSERT INTO role_authorities (role_id, authority_id, created_at)
|
||||
SELECT r.id, a.id, CURRENT_TIMESTAMP
|
||||
FROM roles r
|
||||
CROSS JOIN authorities a
|
||||
WHERE r.code = 'admin';
|
||||
|
||||
-- Normal user role gets specific authorities
|
||||
INSERT INTO role_authorities (role_id, authority_id, created_at)
|
||||
SELECT r.id, a.id, CURRENT_TIMESTAMP
|
||||
FROM roles r
|
||||
CROSS JOIN authorities a
|
||||
WHERE r.code = 'user'
|
||||
AND a.code IN ('system:dashboard:read',
|
||||
'system:user:read',
|
||||
'system:user_detail:read',
|
||||
'system:department:read',
|
||||
'system:role:read',
|
||||
'system:authority:read',
|
||||
'system:audit_log:read');
|
||||
|
||||
DROP TABLE IF EXISTS assets;
|
||||
CREATE TABLE assets
|
||||
|
||||
Reference in New Issue
Block a user