121 Zeilen
2.5 KiB
TypeScript
121 Zeilen
2.5 KiB
TypeScript
// Shared types used by backend and admin-panel
|
|
|
|
export type UserRole = 'admin' | 'superuser' | 'user'
|
|
|
|
export interface User {
|
|
id: string
|
|
username: string
|
|
email: string
|
|
role: UserRole
|
|
employeeId?: string | null
|
|
lastLogin?: Date | null
|
|
isActive: boolean
|
|
createdAt: Date
|
|
updatedAt: Date
|
|
}
|
|
|
|
export interface Skill {
|
|
id: string
|
|
name: string
|
|
category?: string | null
|
|
level?: string | null
|
|
verified?: boolean
|
|
verifiedBy?: string | null
|
|
verifiedDate?: Date | null
|
|
}
|
|
|
|
export interface LanguageSkill {
|
|
code: string
|
|
level: 'basic' | 'fluent' | 'native' | 'business'
|
|
certified?: boolean
|
|
certificateType?: string | null
|
|
isNative?: boolean
|
|
canInterpret?: boolean
|
|
}
|
|
|
|
export interface Clearance {
|
|
level: string
|
|
validUntil: Date
|
|
issuedDate: Date
|
|
}
|
|
|
|
export interface Employee {
|
|
id: string
|
|
firstName: string
|
|
lastName: string
|
|
employeeNumber: string
|
|
photo?: string | null
|
|
position: string
|
|
department: string
|
|
email?: string | null
|
|
phone?: string | null
|
|
mobile?: string | null
|
|
office?: string | null
|
|
availability: string
|
|
skills?: Skill[]
|
|
languages?: LanguageSkill[]
|
|
clearance?: Clearance
|
|
specializations?: string[]
|
|
createdAt: Date | string
|
|
updatedAt: Date | string
|
|
createdBy?: string
|
|
updatedBy?: string | null
|
|
}
|
|
|
|
export interface SkillDefinition {
|
|
id: string
|
|
name: string
|
|
category?: string
|
|
description?: string
|
|
}
|
|
|
|
export interface LoginRequest {
|
|
username?: string
|
|
email?: string
|
|
password: string
|
|
}
|
|
|
|
export interface Token {
|
|
accessToken: string
|
|
expiresIn: number
|
|
tokenType: 'Bearer'
|
|
}
|
|
|
|
export interface LoginResponse {
|
|
user: User
|
|
token: Token
|
|
}
|
|
|
|
export const ROLE_PERMISSIONS: Record<UserRole, string[]>
|
|
export const DEFAULT_SKILLS: Record<string, string[]>
|
|
export const LANGUAGE_LEVELS: string[]
|
|
export interface SkillLevel { id: string; name: string; level?: string }
|
|
export interface SubCategory { id: string; name: string; skills: SkillLevel[] }
|
|
export interface SkillCategory { id: string; name: string; subcategories: SubCategory[] }
|
|
export const SKILL_HIERARCHY: SkillCategory[]
|
|
|
|
// Workspaces
|
|
export type WorkspaceType = 'desk' | 'meeting_room' | 'phone_booth' | 'parking' | 'locker'
|
|
|
|
export interface Workspace {
|
|
id: string
|
|
name: string
|
|
type: WorkspaceType
|
|
floor: string
|
|
building?: string | null
|
|
capacity: number
|
|
equipment: string[]
|
|
position_x?: number | null
|
|
position_y?: number | null
|
|
is_active: boolean
|
|
created_at: string
|
|
updated_at: string
|
|
}
|
|
|
|
export interface WorkspaceFilter {
|
|
type?: WorkspaceType
|
|
floor?: string
|
|
building?: string
|
|
min_capacity?: number
|
|
}
|