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:
103
frontend/src/app/api/models/request.models.ts
Normal file
103
frontend/src/app/api/models/request.models.ts
Normal file
@@ -0,0 +1,103 @@
|
||||
/**
|
||||
* Request API Models
|
||||
* Models for license request management
|
||||
*/
|
||||
|
||||
import { ApprovalStatus } from './approval.models';
|
||||
|
||||
export type RequestType = 'NEW_LICENSE' | 'RENEWAL' | 'AMENDMENT' | 'MODIFICATION' | 'CANCELLATION';
|
||||
export type RequestStatus = 'DRAFT' | 'SUBMITTED' | 'IN_REVIEW' | 'PENDING_RESUBMISSION' | 'APPROVED' | 'REJECTED' | 'REVOKED' | 'CANCELLED';
|
||||
|
||||
export interface CreateRequestDto {
|
||||
applicantId: string;
|
||||
requestType: RequestType;
|
||||
workflowId: string;
|
||||
metadata: Record<string, any>;
|
||||
tokenId?: number;
|
||||
}
|
||||
|
||||
export interface UpdateRequestDto {
|
||||
businessName?: string;
|
||||
description?: string;
|
||||
metadata?: Record<string, any>;
|
||||
}
|
||||
|
||||
export interface RequestResponseDto {
|
||||
id: string;
|
||||
requestNumber: string;
|
||||
applicantId: string;
|
||||
requestType: RequestType;
|
||||
status: RequestStatus;
|
||||
currentStageId?: string;
|
||||
metadata: Record<string, any>;
|
||||
blockchainTxHash?: string;
|
||||
tokenId?: string;
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
submittedAt?: string;
|
||||
approvedAt?: string;
|
||||
}
|
||||
|
||||
export interface DocumentDetailDto {
|
||||
id: string;
|
||||
docType: string;
|
||||
originalFilename: string;
|
||||
currentVersion: number;
|
||||
currentHash: string;
|
||||
minioBucket: string;
|
||||
isActive: boolean;
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
}
|
||||
|
||||
export interface ApprovalDetailDto {
|
||||
id: string;
|
||||
departmentId: string;
|
||||
status: ApprovalStatus;
|
||||
remarks?: string;
|
||||
reviewedDocuments: string[];
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
invalidatedAt?: string;
|
||||
invalidationReason?: string;
|
||||
}
|
||||
|
||||
export interface RequestDetailResponseDto {
|
||||
id: string;
|
||||
requestNumber: string;
|
||||
applicantId: string;
|
||||
requestType: RequestType;
|
||||
status: RequestStatus;
|
||||
currentStageId?: string;
|
||||
metadata: Record<string, any>;
|
||||
blockchainTxHash?: string;
|
||||
tokenId?: string;
|
||||
documents: DocumentDetailDto[];
|
||||
approvals: ApprovalDetailDto[];
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
submittedAt?: string;
|
||||
approvedAt?: string;
|
||||
}
|
||||
|
||||
export interface PaginatedRequestsResponse {
|
||||
data: RequestResponseDto[];
|
||||
total: number;
|
||||
page: number;
|
||||
limit: number;
|
||||
totalPages: number;
|
||||
hasNextPage: boolean;
|
||||
}
|
||||
|
||||
export interface RequestFilters {
|
||||
status?: RequestStatus;
|
||||
requestType?: RequestType;
|
||||
applicantId?: string;
|
||||
requestNumber?: string;
|
||||
startDate?: string;
|
||||
endDate?: string;
|
||||
page?: number;
|
||||
limit?: number;
|
||||
sortBy?: 'createdAt' | 'updatedAt' | 'requestNumber' | 'status';
|
||||
sortOrder?: 'ASC' | 'DESC';
|
||||
}
|
||||
Reference in New Issue
Block a user