Audit Trail & Event Sourcing — Database

Audit Trail Audit trail adalah catatan semua perubahan yang terjadi pada data. Penting untuk compliance, debugging, dan memahami riwayat data. Implementasi Audi

Audit Trail

Audit trail adalah catatan semua perubahan yang terjadi pada data. Penting untuk compliance, debugging, dan memahami riwayat data.

Implementasi Audit Trail

CREATE TABLE audit_logs (
    id SERIAL PRIMARY KEY,
    table_name VARCHAR(100) NOT NULL,
    record_id INT NOT NULL,
    action VARCHAR(10) NOT NULL, -- INSERT, UPDATE, DELETE
    old_values JSONB,
    new_values JSONB,
    user_id INT,
    created_at TIMESTAMP DEFAULT NOW()
);

-- Contoh data audit
-- | action | table  | record_id | old_values           | new_values           |
-- | UPDATE | users  | 1         | {"name": "Budi"}     | {"name": "Budi S."}  |
-- | DELETE | posts  | 5         | {"title": "Draft"}   | null                 |

Trigger-based Audit

-- PostgreSQL trigger untuk audit otomatis
CREATE OR REPLACE FUNCTION audit_trigger()
RETURNS TRIGGER AS $
BEGIN
    INSERT INTO audit_logs (table_name, record_id, action, old_values, new_values)
    VALUES (
        TG_TABLE_NAME,
        COALESCE(NEW.id, OLD.id),
        TG_OP,
        row_to_json(OLD),
        row_to_json(NEW)
    );
    RETURN NEW;
END;
$ LANGUAGE plpgsql;

CREATE TRIGGER users_audit
AFTER INSERT OR UPDATE OR DELETE ON users
FOR EACH ROW EXECUTE FUNCTION audit_trigger();

Event Sourcing

Event sourcing menyimpan setiap event yang terjadi, bukan state akhir. State direkonstruksi dengan "replay" semua event.

-- Event store
CREATE TABLE events (
    id SERIAL PRIMARY KEY,
    aggregate_type VARCHAR(100),
    aggregate_id INT,
    event_type VARCHAR(100),
    payload JSONB,
    created_at TIMESTAMP DEFAULT NOW()
);

-- Contoh events untuk Order #1:
-- OrderCreated  → {"total": 100000}
-- ItemAdded     → {"product": "Laptop", "qty": 1}
-- PaymentMade   → {"amount": 100000, "method": "transfer"}
-- OrderShipped  → {"tracking": "JNE123"}

Audit Trail vs Event Sourcing

Laravel: spatie/laravel-activitylog

Package spatie/laravel-activitylog mempermudah implementasi audit trail di Laravel. Cukup tambahkan trait LogsActivity pada model, dan setiap perubahan otomatis tercatat.

Yang akan kamu pelajari