# PLAN: Drawings & Documents Module Implementation ## ๐ŸŽฏ Goal Implement a robust **Drawings & Documents** functionality within the standalone `Modules/DocumentManagement` module. This module will serve as the central repository for construction documents (CAD drawings, PDFs, BIM models, contracts, specs, schedules). It will feature file upload to local storage/database, version control, categorization, and an approval workflow governed by the **Contractor Admin**. ## ๐Ÿ”ด User Review Required Please review the proposed schema and the plan. - The documents will be stored using Laravel's local storage for now (as requested), and the metadata in the database. - Approval workflow will enforce that uploaded documents are set to a "Pending" status and only a user with the `Contractor Admin` role can change them to "Approved". ## ๐Ÿ› ๏ธ Proposed Changes ### 1. ๐Ÿ—๏ธ Database & Models (`database-architect`) - **`DocumentCategory` Model**: - `name` (e.g., Site Plans, Floor Plans, MEP Drawings, Contracts, Specs) - `description` - **`Document` Model**: - `title`, `description`, `category_id`, `project_id`, `status` (Pending, Approved, Rejected) - `uploaded_by` (User ID) - **`DocumentVersion` Model**: - `document_id` - `version_number` (e.g., v1.0, v2.0) - `file_path` (Local storage path) - `file_size`, `file_type` - `uploaded_by`, `uploaded_at` - **`DocumentApproval` Model** (Optional but good for audit logs): - `document_id`, `approved_by` (Contractor Admin ID), `status`, `comments`, `approved_at` ### 2. โš™๏ธ Backend (`backend-specialist`) - **`DocumentController`**: - Standard resource methods for listing, creating, and deleting documents. - Integration with Laravel's local filesystem to store large files securely. - Implement versioning logic (uploading a new file to an existing document creates a new `DocumentVersion`). - **`DocumentApprovalController`**: - Endpoints to approve or reject a document. - **Form Requests**: - `StoreDocumentRequest` (validating file sizes, types). - `ApproveDocumentRequest`. - **Policies**: - Restrict approval actions strictly to the **Contractor Admin** role. ### 3. ๐ŸŽจ Frontend (`frontend-specialist`) - **Pages**: - `DocumentIndex`: Data table/grid view of all documents, filterable by category, status, and project. - `DocumentShow`: Detailed view showing document metadata, history/version list, and a preview/download button. - `DocumentUpload`: Drag-and-drop file upload interface. - **Components**: - `ApprovalWorkflowComponent`: UI for the Contractor Admin to review and approve/reject a document. - `VersionHistoryTable`: A sub-table inside the document detail view to track all revisions. ### 4. ๐Ÿงช Testing (`test-engineer`) - Feature tests for document uploads and versioning. - Authorization tests to ensure *only* Contractor Admins can approve documents. ### 5. ๐Ÿ” Security & Verification (`security-auditor`) - Ensure proper file validation (prevent malicious file uploads like `.php` or `.exe`). - Ensure local storage files are protected and served securely via authenticated routes, not public assets. - Run `security_scan.py` and `lint_runner.py` at the end of orchestration. ## โ“ Open Questions - None at this moment. The plan covers local storage, standalone module, and the Contractor Admin approval workflow.