Initial commit: IT센터 출입자관리시스템 (ACS)
방문자 사전신청·승인, 입·출입 체크인/아웃, QR 배지, 재실현황, 블랙리스트, 대시보드 통계, 방문 리포트(엑셀)까지 7단계 전 기능 구현. - backend: Spring Boot 3.4.5 / Java 21 (JDK 26 빌드), 세션 인증, JPA, H2/PostgreSQL, POI, ZXing, Flyway - frontend: React 19 / Vite 6 / TypeScript - infra: Docker Compose (db·app·web nginx), Flyway V1__init, Python 사용자 시드 - docs: 워크플로우 / 시퀀스 다이어그램(Mermaid) / 이슈·유의사항 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
145
frontend/src/types.ts
Normal file
145
frontend/src/types.ts
Normal file
@@ -0,0 +1,145 @@
|
||||
export interface ApiResponse<T> {
|
||||
code: number;
|
||||
message: string;
|
||||
data: T | null;
|
||||
}
|
||||
|
||||
export type Role = 'ADMIN' | 'SECURITY' | 'HOST';
|
||||
|
||||
export interface CurrentUser {
|
||||
id: number;
|
||||
username: string;
|
||||
fullName: string;
|
||||
roles: Role[];
|
||||
mustChangePassword: boolean;
|
||||
}
|
||||
|
||||
export interface LoginRequest {
|
||||
username: string;
|
||||
password: string;
|
||||
}
|
||||
|
||||
export interface ChangePasswordRequest {
|
||||
oldPassword: string;
|
||||
newPassword: string;
|
||||
}
|
||||
|
||||
export interface Zone {
|
||||
id: number;
|
||||
code: string;
|
||||
name: string;
|
||||
securityLevel: number;
|
||||
}
|
||||
|
||||
export type VisitStatus =
|
||||
| 'DRAFT'
|
||||
| 'PENDING'
|
||||
| 'APPROVED'
|
||||
| 'REJECTED'
|
||||
| 'CANCELLED'
|
||||
| 'EXPIRED';
|
||||
|
||||
export interface VisitRequestCreate {
|
||||
visitorName: string;
|
||||
company?: string;
|
||||
contact: string;
|
||||
email?: string;
|
||||
vehicleNo?: string;
|
||||
zoneName?: string;
|
||||
purpose: string;
|
||||
visitFrom: string; // ISO local datetime
|
||||
visitTo: string;
|
||||
}
|
||||
|
||||
export interface VisitRequestView {
|
||||
id: number;
|
||||
visitorName: string;
|
||||
company?: string;
|
||||
contact?: string;
|
||||
vehicleNo?: string;
|
||||
hostId: number;
|
||||
hostName: string;
|
||||
hostDepartment?: string;
|
||||
zoneName?: string;
|
||||
purpose: string;
|
||||
visitFrom: string;
|
||||
visitTo: string;
|
||||
status: VisitStatus;
|
||||
qrToken?: string;
|
||||
createdAt: string;
|
||||
}
|
||||
|
||||
export interface PublicPass {
|
||||
visitorName: string;
|
||||
company?: string;
|
||||
zoneName?: string;
|
||||
visitFrom: string;
|
||||
visitTo: string;
|
||||
/** Whether the visitor is currently inside — drives the kiosk 입장/퇴장 button. */
|
||||
inside: boolean;
|
||||
/** Whether the visit already completed (entered & exited) today — blocks re-entry. */
|
||||
completedToday: boolean;
|
||||
}
|
||||
|
||||
export interface ExcelImportResult {
|
||||
totalRows: number;
|
||||
successCount: number;
|
||||
errors: string[];
|
||||
success: boolean;
|
||||
}
|
||||
|
||||
export interface InsideVisitor {
|
||||
visitRequestId: number;
|
||||
visitorName: string;
|
||||
company?: string;
|
||||
zoneName?: string;
|
||||
hostName: string;
|
||||
checkInAt: string;
|
||||
}
|
||||
|
||||
export interface AccessRecord {
|
||||
visitRequestId: number;
|
||||
visitorName: string;
|
||||
company?: string;
|
||||
zoneName?: string;
|
||||
visitFrom: string;
|
||||
visitTo: string;
|
||||
checkInAt?: string;
|
||||
checkOutAt?: string;
|
||||
inside: boolean;
|
||||
}
|
||||
|
||||
export interface AccessAction {
|
||||
visitRequestId: number;
|
||||
visitorName: string;
|
||||
direction: 'IN' | 'OUT';
|
||||
eventAt: string;
|
||||
gateOpened: boolean;
|
||||
message: string;
|
||||
}
|
||||
|
||||
export interface StatsSummary {
|
||||
todayVisits: number;
|
||||
pending: number;
|
||||
approved: number;
|
||||
currentlyInside: number;
|
||||
total: number;
|
||||
}
|
||||
|
||||
export interface BlacklistItem {
|
||||
id: number;
|
||||
name: string;
|
||||
company?: string;
|
||||
contact?: string;
|
||||
reason: string;
|
||||
active: boolean;
|
||||
createdByName?: string;
|
||||
createdAt: string;
|
||||
}
|
||||
|
||||
export interface BlacklistCreate {
|
||||
name: string;
|
||||
company?: string;
|
||||
contact?: string;
|
||||
reason: string;
|
||||
}
|
||||
Reference in New Issue
Block a user