diff --git a/db/mock-data.sql b/db/mock-data.sql new file mode 100644 index 0000000..7dd82ec --- /dev/null +++ b/db/mock-data.sql @@ -0,0 +1,112 @@ +-- 1. SETUP PROJECT & MEMBERSHIP +INSERT INTO projects (id, project_name, project_desc) +VALUES (1, 'Phoenix System Overhaul', 'Modernizing the core banking middleware and data services.'); + +-- Assign users to project (SuperAdmin, Editor, Validador, Admin) +INSERT INTO project_members (project_id, user_id) VALUES (1, 1), (1, 2), (1, 3), (1, 4); + +-- 2. CREATE RELATIONSHIP TYPES +INSERT INTO relationship_types (project_id, type_name, type_description, inverse_type_name) VALUES +(1, 'Depends On', 'Requirement cannot be completed without the target', 'Is Required By'), +(1, 'Relates To', 'General association', 'Relates To'); + +-- 3. INSERT REQUIREMENTS +-- Requirement A: Active (Regular) +INSERT INTO requirements (id, project_id, user_id, tag_id, status_id, req_name, req_desc, priority_id, version) +VALUES (101, 1, 2, 1, 2, 'API Rate Limiting', 'The system must limit requests to 100 per minute per API key.', 1, 1); + +-- Requirement B: Draft stage +INSERT INTO requirements (id, project_id, user_id, tag_id, status_id, req_name, req_desc, priority_id, version) +VALUES (102, 1, 4, 2, 1, 'Dark Mode UI', 'User interface should support a high-contrast dark theme.', 2, 1); + +-- 4. INSERT ACCEPTANCE CRITERIA +INSERT INTO acceptance_criteria (requirement_id, criteria_text, is_accepted, last_editor_id) VALUES +(101, 'Throttling returns 429 Too Many Requests status code.', TRUE, 3), +(101, 'Admin users can bypass rate limits for internal testing.', FALSE, 2), +(102, 'Contrast ratio meets WCAG 2.1 AA standards.', FALSE, 4); + +-- 5. SIMULATE HISTORY (Requirement A was edited once) +-- First, manually insert into history to represent the "Old" version +INSERT INTO requirements_history (original_req_id, project_id, status_id, req_name, version, valid_from, valid_to, edited_by) +VALUES (101, 1, 1, 'API Rate Limiting (Draft)', 1, NOW() - INTERVAL '2 days', NOW() - INTERVAL '1 day', 2); + +-- 6. GROUP ASSOCIATIONS +-- Linking "API Rate Limiting" to "Data Services" (id 2) and "Integration" (id 5) +INSERT INTO requirements_groups (requirement_id, group_id) VALUES (101, 2), (101, 5); + +-- 7. LINKS & VALIDATIONS +INSERT INTO requirement_links (source_req_id, target_req_id, relationship_type_id, created_by) +VALUES (101, 102, 2, 1); -- API Relates to UI + +INSERT INTO validations (requirement_id, user_id, status_id, req_version_snapshot, comment) +VALUES (101, 3, 1, 1, 'Logic looks sound, but check the Redis implementation for performance.'); + +-- 8. COMMENTS & REPLIES +INSERT INTO requirement_comments (id, requirement_id, user_id, comment_text) +VALUES (50, 101, 3, 'Do we need specific limits for different tiers of users?'); + +INSERT INTO requirement_comment_replies (parent_comment_id, user_id, reply_text) +VALUES (50, 2, 'Yes, the Premium tier should allow up to 500 requests per minute.'); + +-- Batch inserting 20 requirements for Project 1 +INSERT INTO requirements (id, project_id, user_id, tag_id, status_id, req_name, req_desc, priority_id, version) VALUES +(201, 1, 2, 1, 2, 'User Authentication', 'System must support OAuth2 and OpenID Connect.', 1, 1), +(202, 1, 2, 1, 2, 'Password Reset Flow', 'Users must be able to reset passwords via email link.', 2, 1), +(203, 1, 4, 2, 2, 'Response Time Latency', 'API responses must be under 200ms for 95% of requests.', 1, 1), +(204, 1, 4, 2, 2, 'Concurrent Users', 'System must support 10,000 concurrent active sessions.', 1, 1), +(205, 1, 2, 3, 1, 'GDPR Compliance', 'General data protection regulation standards must be met.', 1, 1), +(206, 1, 2, 4, 2, 'Health Check Endpoint', 'A /health endpoint must return 200 OK status.', 3, 1), +(207, 1, 4, 5, 2, 'Data Encryption at Rest', 'All database disks must be encrypted using AES-256.', 1, 1), +(208, 1, 2, 6, 1, 'Legacy Bridge', 'Connectivity to the old mainframe via SOAP.', 3, 1), +(209, 1, 2, 1, 2, 'Search Functionality', 'Users can search for requirements by name or tag.', 2, 1), +(210, 1, 4, 2, 2, 'Mobile Responsiveness', 'The dashboard must work on screens down to 320px.', 2, 1), +(211, 1, 2, 1, 2, 'Export to PDF', 'Users can download a PDF summary of requirements.', 3, 1), +(212, 1, 4, 2, 2, 'System Uptime', 'The system shall maintain 99.9% availability.', 1, 1), +(213, 1, 2, 5, 2, 'Audit Log Retention', 'Logs must be kept for 7 years for compliance.', 2, 1), +(214, 1, 4, 1, 2, 'Batch Upload', 'Support for CSV upload of requirements.', 2, 1), +(215, 1, 2, 3, 1, 'Multi-language Support', 'Interface available in English, Spanish, and French.', 3, 1), +(216, 1, 4, 2, 2, 'Memory Usage Limit', 'Microservices should not exceed 512MB RAM.', 2, 1), +(217, 1, 2, 4, 2, 'API Documentation', 'Auto-generated Swagger/OpenAPI documentation.', 2, 1), +(218, 1, 4, 5, 2, 'Daily Backups', 'Automated backups every night at 02:00 AM.', 1, 1), +(219, 1, 2, 6, 1, 'Third-party SSO', 'Integration with Okta and Azure AD.', 2, 1), +(220, 1, 4, 1, 2, 'Soft Delete', 'Requirements should be marked as deleted before purging.', 2, 1); + +-- Map some to groups +INSERT INTO requirements_groups (requirement_id, group_id) VALUES +(201, 7), (203, 2), (207, 4), (210, 6), (218, 5); + +INSERT INTO acceptance_criteria (requirement_id, criteria_text, is_accepted, last_editor_id) VALUES +(201, 'Login works with Google account.', TRUE, 1), +(201, 'Tokens expire after 1 hour.', FALSE, 2), +(203, 'Stress test shows <200ms with 5k users.', TRUE, 3), +(207, 'Verify encryption keys are rotated annually.', FALSE, 4); + +-- Edit 1: Update Priority and Description of Requirement 201 +UPDATE requirements +SET priority_id = 1, + req_desc = 'System must support OAuth2, OpenID Connect, and SAML 2.0.', + last_editor_id = 1 +WHERE id = 201; + +-- Edit 2: Change status of a Draft to Regular +UPDATE requirements +SET status_id = 2, + last_editor_id = 2 +WHERE id = 205; + +-- Edit 3: Change Acceptance Criteria (Triggers ac_history) +UPDATE acceptance_criteria +SET is_accepted = TRUE, + last_editor_id = 3 +WHERE requirement_id = 201 AND criteria_text LIKE 'Tokens%'; + +-- Create a link first +INSERT INTO requirement_links (source_req_id, target_req_id, relationship_type_id, created_by) +VALUES (218, 207, 1, 1); -- Backups depend on Encryption + +-- Delete a requirement (Requirement 220) +-- This will trigger the audit and clean up links/groups/criteria via CASCADE +DELETE FROM requirements WHERE id = 220; + +-- Remove a group association (Requirement 210 from User Experience) +DELETE FROM requirements_groups WHERE requirement_id = 210 AND group_id = 6; \ No newline at end of file