--- task_id: sprint_2_story_1_task_1 story: sprint_2_story_1 status: not_started estimated_hours: 4 created_date: 2025-11-05 assignee: Backend Team --- # Task 1: Design AuditLog Database Schema and Create Migration **Story**: Story 1 - Audit Log Foundation (Phase 1) **Estimated**: 4 hours ## Description Design and implement the AuditLog database table schema with proper columns, data types, and indexes to support efficient audit querying and multi-tenant isolation. ## Acceptance Criteria - [ ] Database migration created with AuditLog table - [ ] All required columns defined with correct data types - [ ] Composite indexes created for query optimization - [ ] Multi-tenant isolation enforced (TenantId column) - [ ] Migration applied successfully ## Implementation Details **Table Schema**: ```sql CREATE TABLE AuditLogs ( Id UUID PRIMARY KEY, TenantId UUID NOT NULL, EntityType VARCHAR(100) NOT NULL, EntityId UUID NOT NULL, Action VARCHAR(20) NOT NULL, -- 'Create', 'Update', 'Delete' UserId UUID NULL, Timestamp TIMESTAMPTZ NOT NULL DEFAULT NOW(), OldValues JSONB NULL, NewValues JSONB NULL, CONSTRAINT FK_AuditLogs_Tenants FOREIGN KEY (TenantId) REFERENCES Tenants(Id) ON DELETE CASCADE ); -- Indexes for query performance CREATE INDEX IX_AuditLogs_TenantId_EntityType_EntityId ON AuditLogs(TenantId, EntityType, EntityId); CREATE INDEX IX_AuditLogs_Timestamp ON AuditLogs(Timestamp DESC); CREATE INDEX IX_AuditLogs_UserId ON AuditLogs(UserId); ``` **Files to Modify**: - Create: `colaflow-api/src/ColaFlow.Infrastructure/Data/Migrations/{timestamp}_AddAuditLogTable.cs` ## Technical Notes - Use PostgreSQL JSONB for `OldValues`/`NewValues` (flexible schema, indexed queries) - Composite index on `(TenantId, EntityType, EntityId)` for efficient entity history queries - `Timestamp` index with DESC order for recent logs queries - Consider table partitioning for future scalability (Phase 4) ## Testing - Verify migration runs without errors - Check indexes are created - Verify foreign key constraints work --- **Created**: 2025-11-05 by Backend Agent