18 lines
1 KiB
MySQL
18 lines
1 KiB
MySQL
|
|
-- Up migration: Create activity_logs table
|
||
|
|
CREATE TABLE IF NOT EXISTS activity_logs (
|
||
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
|
|
actor_id UUID NOT NULL, -- User or Employee who performed the action
|
||
|
|
actor_type VARCHAR(20) NOT NULL, -- 'USER' or 'EMPLOYEE'
|
||
|
|
entity_id UUID NOT NULL, -- Target of the action (User ID, Job ID, etc.)
|
||
|
|
entity_type VARCHAR(50) NOT NULL, -- 'USER', 'JOB', 'REQUIREMENT', 'EMPLOYEE', etc.
|
||
|
|
action VARCHAR(100) NOT NULL, -- 'APPROVE', 'REJECT', 'STATUS_CHANGE', 'DELETE', etc.
|
||
|
|
metadata JSONB, -- Optional extra context: { "old_status": "PENDING", "new_status": "APPROVED", "reason": "..." }
|
||
|
|
ip_address VARCHAR(45),
|
||
|
|
user_agent TEXT,
|
||
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_activity_logs_entity ON activity_logs (entity_type, entity_id);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_activity_logs_actor ON activity_logs (actor_type, actor_id);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_activity_logs_created_at ON activity_logs (created_at DESC);
|