feat: Goa GEL Blockchain e-Licensing Platform - Full Stack Implementation
Complete implementation of the Goa Government e-Licensing platform with: Backend: - NestJS API with JWT authentication - PostgreSQL database with Knex ORM - Redis caching and session management - MinIO document storage - Hyperledger Besu blockchain integration - Multi-department workflow system - Comprehensive API tests (266/282 passing) Frontend: - Angular 21 with standalone components - Angular Material + TailwindCSS UI - Visual workflow builder - Document upload with progress tracking - Blockchain explorer integration - Role-based dashboards (Admin, Department, Citizen) - E2E tests with Playwright (37 tests) Infrastructure: - Docker Compose orchestration - Blockscout blockchain explorer - Development and production configurations
This commit is contained in:
142
data-flow.html
Normal file
142
data-flow.html
Normal file
@@ -0,0 +1,142 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>data-flow</title>
|
||||
<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 20px;
|
||||
background: #1a1a1a;
|
||||
color: #fff;
|
||||
font-family: Arial, sans-serif;
|
||||
}
|
||||
h1 {
|
||||
text-align: center;
|
||||
color: #3b82f6;
|
||||
}
|
||||
.mermaid {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
background: transparent;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>DATA FLOW</h1>
|
||||
<div class="mermaid">
|
||||
sequenceDiagram
|
||||
participant Citizen as 👤 Citizen
|
||||
participant Frontend as 🌐 Frontend<br/>Next.js
|
||||
participant API as 📡 NestJS API
|
||||
participant DB as 🗄️ PostgreSQL
|
||||
participant MinIO as 📦 MinIO
|
||||
participant Blockchain as ⛓️ Besu<br/>Smart Contracts
|
||||
participant Dept1 as 🏢 Dept 1<br/>Approver
|
||||
participant Dept2 as 🏢 Dept 2<br/>Approver
|
||||
participant Webhook as 🔔 Webhook
|
||||
|
||||
rect rgb(31, 41, 55)
|
||||
note over Citizen,API: 1. License Request Submission
|
||||
Citizen->>Frontend: Create Resort License<br/>Request & Upload<br/>Documents
|
||||
Frontend->>API: POST /licenses/create<br/>Form Data + Files
|
||||
API->>DB: Create license_request<br/>status: DRAFT
|
||||
end
|
||||
|
||||
rect rgb(59, 130, 246)
|
||||
note over API,MinIO: 2. Document Upload & Hashing
|
||||
API->>MinIO: Upload Documents<br/>(PDF, Images, etc.)
|
||||
MinIO-->>API: Document URLs
|
||||
API->>API: Generate SHA-256<br/>Hash of Files
|
||||
API->>DB: Store document_metadata<br/>with content_hash
|
||||
end
|
||||
|
||||
rect rgb(168, 85, 247)
|
||||
note over API,Blockchain: 3. Blockchain Recording
|
||||
API->>Blockchain: Call DocumentRegistrar<br/>recordDocumentHash()<br/>params: licenseHash,<br/>department, timestamp
|
||||
Blockchain->>Blockchain: Emit DocumentHashRecorded<br/>event
|
||||
Blockchain->>DB: Store blockchain<br/>tx_hash in license_request
|
||||
API-->>Frontend: Request Submitted
|
||||
Frontend-->>Citizen: Confirmation + Request ID
|
||||
end
|
||||
|
||||
rect rgb(20, 184, 166)
|
||||
note over DB,DB: 4. Update to SUBMITTED State
|
||||
API->>DB: Update license_request<br/>status: SUBMITTED
|
||||
API->>DB: Create audit_log entry
|
||||
end
|
||||
|
||||
rect rgb(59, 130, 246)
|
||||
note over API,Dept1: 5. Route to Department 1
|
||||
API->>API: Resolve workflow for<br/>Resort License POC
|
||||
API->>DB: Create approval_request<br/>status: PENDING<br/>department: Tourism
|
||||
API->>Webhook: Send notification
|
||||
Webhook->>Dept1: Email: License<br/>Ready for Review
|
||||
end
|
||||
|
||||
rect rgb(139, 92, 246)
|
||||
note over API,Dept2: 6. Route to Department 2 (Parallel)
|
||||
par Department 2 Review
|
||||
API->>DB: Create approval_request<br/>status: PENDING<br/>department: Fire Safety
|
||||
API->>Webhook: Send notification
|
||||
Webhook->>Dept2: Email: License<br/>Ready for Review
|
||||
end
|
||||
end
|
||||
|
||||
rect rgb(34, 197, 94)
|
||||
note over Dept1,Blockchain: 7. Department 1 Approval
|
||||
Dept1->>Frontend: Review Documents<br/>& Attachments
|
||||
Dept1->>API: POST /approvals/approve<br/>approval_id, comments
|
||||
API->>DB: Update approval_request<br/>status: APPROVED<br/>reviewed_by, timestamp
|
||||
API->>Blockchain: Call ApprovalManager<br/>recordApproval()<br/>params: licenseHash,<br/>department, signature
|
||||
Blockchain->>Blockchain: Emit ApprovalRecorded
|
||||
end
|
||||
|
||||
rect rgb(34, 197, 94)
|
||||
note over Dept2,Blockchain: 8. Department 2 Approval (Parallel)
|
||||
par Department 2 Review
|
||||
Dept2->>Frontend: Review Documents
|
||||
Dept2->>API: POST /approvals/approve
|
||||
API->>DB: Update approval_request<br/>status: APPROVED
|
||||
API->>Blockchain: recordApproval()
|
||||
Blockchain->>Blockchain: Emit ApprovalRecorded
|
||||
end
|
||||
end
|
||||
|
||||
rect rgb(236, 72, 153)
|
||||
note over API,Blockchain: 9. Final Approval Processing
|
||||
API->>API: Check all approvals<br/>complete
|
||||
API->>Blockchain: Call LicenseRequestNFT<br/>mint()<br/>params: applicant,<br/>licenseURI, metadata
|
||||
Blockchain->>Blockchain: Mint ERC-721<br/>Soulbound NFT
|
||||
Blockchain->>Blockchain: Emit Transfer event
|
||||
end
|
||||
|
||||
rect rgb(20, 184, 166)
|
||||
note over DB,Frontend: 10. Update Final State
|
||||
API->>DB: Update license_request<br/>status: APPROVED<br/>nft_token_id
|
||||
API->>DB: Create audit_log<br/>entry: APPROVED
|
||||
API->>Webhook: Send notification
|
||||
Webhook->>Citizen: Email: License<br/>Approved!
|
||||
API-->>Frontend: License Approved
|
||||
Frontend-->>Citizen: Display NFT &<br/>Certificate
|
||||
end
|
||||
|
||||
rect rgb(96, 125, 139)
|
||||
note over Citizen,Frontend: 11. License Verification
|
||||
Citizen->>Frontend: Download License<br/>Certificate
|
||||
Frontend->>API: GET /licenses/{id}<br/>/verify
|
||||
API->>Blockchain: query getLicenseNFT()<br/>tokenId
|
||||
Blockchain-->>API: NFT metadata,<br/>owner, issuer
|
||||
API-->>Frontend: Verified ✓
|
||||
Frontend-->>Citizen: Display Verified<br/>License Certificate
|
||||
end
|
||||
|
||||
</div>
|
||||
<script>
|
||||
mermaid.initialize({ startOnLoad: true, theme: 'dark' });
|
||||
mermaid.contentLoaded();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user