Files
lcbp3/frontend/types/circulation.ts
T
admin c5c3ed9016
Build and Deploy / deploy (push) Successful in 9m24s
260316:1117 20260316:1100 Refactor UUID
2026-03-16 11:17:15 +07:00

116 lines
2.3 KiB
TypeScript

// File: types/circulation.ts
// TypeScript interfaces for Circulation module - aligned with backend entities
/**
* Circulation routing status enum
*/
export type CirculationRoutingStatus = 'PENDING' | 'IN_PROGRESS' | 'COMPLETED' | 'REJECTED';
/**
* Circulation routing (assignee task within a circulation)
*/
export interface CirculationRouting {
id: number;
circulationId: number;
stepNumber: number;
organizationId: number;
assignedTo?: number;
status: CirculationRoutingStatus;
comments?: string;
completedAt?: string;
createdAt: string;
updatedAt: string;
// Joined relations from API
assignee?: {
user_id: number;
username: string;
first_name?: string;
last_name?: string;
};
organization?: {
id: number;
organization_code: string;
organization_name: string;
};
}
/**
* Main Circulation entity
*/
export interface Circulation {
uuid: string;
id?: number; // Excluded from API responses (ADR-019)
correspondenceId?: number;
organizationId: number;
circulationNo: string;
subject: string;
statusCode: string;
createdByUserId: number;
submittedAt?: string;
closedAt?: string;
createdAt: string;
updatedAt: string;
// Joined relations from API
routings?: CirculationRouting[];
correspondence?: {
uuid: string;
id?: number;
correspondence_number: string;
};
organization?: {
uuid: string;
id?: number;
organization_code: string;
organization_name: string;
};
creator?: {
uuid: string;
user_id?: number;
username: string;
first_name?: string;
last_name?: string;
};
}
/**
* Paginated response for circulation list
*/
export interface CirculationListResponse {
data: Circulation[];
meta: {
total: number;
page: number;
limit: number;
totalPages: number;
};
}
/**
* DTO for creating a circulation
*/
export interface CreateCirculationDto {
correspondenceId: number;
projectId?: number;
subject: string;
assigneeIds: number[];
remarks?: string;
}
/**
* DTO for search/filter params
*/
export interface SearchCirculationDto {
page?: number;
limit?: number;
status?: string;
search?: string;
}
/**
* DTO for updating routing status
*/
export interface UpdateCirculationRoutingDto {
status: CirculationRoutingStatus;
comments?: string;
}