UNPKG

jsq-ticket-type

Version:

TypeScript type definitions for ticket system - microservices types with comprehensive settings management

371 lines (351 loc) 9.3 kB
// Constants for frontend use // API Endpoints export const API_ENDPOINTS = { AUTH: { LOGIN: '/auth/login', REGISTER: '/auth/register', REFRESH: '/auth/refresh', LOGOUT: '/auth/logout', PROFILE: '/auth/profile', VERIFY_EMAIL: '/auth/verify-email', FORGOT_PASSWORD: '/auth/forgot-password', RESET_PASSWORD: '/auth/reset-password', }, USERS: { BASE: '/users', PROFILE: '/users/profile', AVATAR: '/users/avatar', PREFERENCES: '/users/preferences', }, EVENTS: { BASE: '/events', FEATURED: '/events/featured', CATEGORIES: '/events/categories', SEARCH: '/events/search', SCHEDULES: '/events/:id/schedules', MEDIA: '/events/:id/media', ARTISTS: '/events/:id/artists', REVIEWS: '/events/:id/reviews', }, TICKETS: { BASE: '/tickets', TYPES: '/ticket-types', RESERVATIONS: '/ticket-reservations', VALIDATE: '/tickets/validate', TRANSFER: '/tickets/transfer', QR_CODE: '/tickets/:id/qr-code', }, ORDERS: { BASE: '/orders', ITEMS: '/orders/:id/items', DISCOUNTS: '/orders/:id/discounts', SHIPPING: '/orders/:id/shipping', STATUS: '/orders/:id/status', INVOICE: '/orders/:id/invoice', }, PAYMENTS: { BASE: '/payments', METHODS: '/payment-methods', PROCESS: '/payments/process', WEBHOOK: '/payments/webhook', REFUNDS: '/payments/:id/refunds', DISPUTES: '/payments/:id/disputes', }, NOTIFICATIONS: { BASE: '/notifications', TEMPLATES: '/notification-templates', PREFERENCES: '/notification-preferences', MARK_READ: '/notifications/:id/read', MARK_ALL_READ: '/notifications/read-all', }, MERCHANDISE: { BASE: '/merchandise', VARIANTS: '/merchandise/:id/variants', ORDERS: '/merchandise-orders', REVIEWS: '/merchandise/:id/reviews', INVENTORY: '/merchandise/:id/inventory', COLLECTIONS: '/merchandise-collections', }, SETTINGS: { BASE: '/settings', CATEGORIES: '/settings/categories', CATEGORY: '/settings/category/:category', SETTING: '/settings/:category/:key', BULK_UPDATE: '/settings/bulk-update', EXPORT: '/settings/export', IMPORT: '/settings/import', HISTORY: '/settings-history', HISTORY_BY_SETTING: '/settings-history/setting/:settingId', HISTORY_BY_CATEGORY: '/settings-history/category/:category', HISTORY_STATISTICS: '/settings-history/statistics', }, FEATURE_FLAGS: { BASE: '/feature-flags', ACTIVE: '/feature-flags/active', EVALUATE: '/feature-flags/evaluate', FLAG: '/feature-flags/:name', TOGGLE: '/feature-flags/:name/toggle', METRICS: '/feature-flags/:name/metrics', }, EMAIL_TEMPLATES: { BASE: '/email-templates', BY_TYPE: '/email-templates/by-type/:type', RENDER: '/email-templates/render', TEMPLATE: '/email-templates/:id', BY_KEY: '/email-templates/key/:templateKey', PREVIEW: '/email-templates/:id/preview', DUPLICATE: '/email-templates/:id/duplicate', }, FILES: { UPLOAD: '/files/upload', MULTIPLE_UPLOAD: '/files/upload-multiple', DELETE: '/files/:id', }, } as const; // Pagination export const PAGINATION = { DEFAULT_PAGE: 1, DEFAULT_LIMIT: 10, MAX_LIMIT: 100, LIMITS: [10, 25, 50, 100], } as const; // Date Formats export const DATE_FORMATS = { API: 'YYYY-MM-DDTHH:mm:ss.SSSZ', DISPLAY: 'DD/MM/YYYY', DISPLAY_WITH_TIME: 'DD/MM/YYYY HH:mm', TIME_ONLY: 'HH:mm', MONTH_YEAR: 'MMMM YYYY', SHORT_DATE: 'DD MMM YYYY', FULL_DATE: 'dddd, DD MMMM YYYY', } as const; // Currency export const CURRENCY = { DEFAULT: 'IDR', SYMBOL: 'Rp', DECIMAL_PLACES: 0, THOUSANDS_SEPARATOR: '.', DECIMAL_SEPARATOR: ',', } as const; // File Upload export const FILE_UPLOAD = { MAX_SIZE: 10 * 1024 * 1024, // 10MB ALLOWED_IMAGE_TYPES: ['image/jpeg', 'image/png', 'image/webp', 'image/gif'], ALLOWED_DOCUMENT_TYPES: ['application/pdf', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'], ALLOWED_VIDEO_TYPES: ['video/mp4', 'video/webm', 'video/ogg'], ALLOWED_AUDIO_TYPES: ['audio/mp3', 'audio/wav', 'audio/ogg'], } as const; // Validation Rules export const VALIDATION = { USERNAME: { MIN_LENGTH: 3, MAX_LENGTH: 50, PATTERN: /^[a-zA-Z0-9_]+$/, }, PASSWORD: { MIN_LENGTH: 8, MAX_LENGTH: 50, PATTERN: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]/, }, EMAIL: { PATTERN: /^[^\s@]+@[^\s@]+\.[^\s@]+$/, }, PHONE: { PATTERN: /^(\+62|62|0)[0-9]{9,13}$/, }, PRICE: { MIN: 0, MAX: 999999999, }, QUANTITY: { MIN: 1, MAX: 1000, }, } as const; // Status Colors export const STATUS_COLORS = { // Order Status PENDING: '#FFA500', PAID: '#32CD32', CONFIRMED: '#4169E1', CANCELLED: '#DC143C', REFUNDED: '#9370DB', EXPIRED: '#696969', // Payment Status PROCESSING: '#FFD700', COMPLETED: '#228B22', FAILED: '#B22222', PARTIALLY_REFUNDED: '#DDA0DD', // Event Status DRAFT: '#A9A9A9', PUBLISHED: '#32CD32', POSTPONED: '#FF8C00', // Ticket Status ACTIVE: '#32CD32', USED: '#4169E1', REFUNDED_TICKET: '#9370DB', // Notification Status SENT: '#32CD32', DELIVERED: '#228B22', OPENED: '#4169E1', CLICKED: '#FF6347', BOUNCED: '#DC143C', // Settings Status ACTIVE_SETTING: '#32CD32', INACTIVE_SETTING: '#DC143C', ENCRYPTED: '#9370DB', REQUIRES_RESTART: '#FF8C00', // Feature Flag Status ACTIVE_FLAG: '#32CD32', INACTIVE_FLAG: '#DC143C', TESTING_FLAG: '#FFD700', DEPRECATED_FLAG: '#FF8C00', ARCHIVED_FLAG: '#696969', // Email Template Status ACTIVE_TEMPLATE: '#32CD32', INACTIVE_TEMPLATE: '#DC143C', DRAFT_TEMPLATE: '#A9A9A9', ARCHIVED_TEMPLATE: '#696969', } as const; // Default Values export const DEFAULTS = { EVENT: { CATEGORY: 'OTHER', STATUS: 'DRAFT', MAX_CAPACITY: 1000, MIN_AGE: 0, }, TICKET: { QUANTITY: 1, SALE_DURATION_DAYS: 30, }, ORDER: { CURRENCY: 'IDR', EXPIRY_MINUTES: 30, }, MERCHANDISE: { CATEGORY: 'OTHER', STATUS: 'DRAFT', TRACK_INVENTORY: true, STOCK: 0, }, NOTIFICATION: { TYPE: 'EMAIL', PRIORITY: 'NORMAL', }, SETTINGS: { CATEGORY: 'PLATFORM', DATA_TYPE: 'STRING', ENVIRONMENT: 'ALL', IS_ACTIVE: true, IS_ENCRYPTED: false, REQUIRES_RESTART: false, IS_READ_ONLY: false, IS_SYSTEM_GENERATED: false, }, FEATURE_FLAG: { TYPE: 'BOOLEAN', STATUS: 'INACTIVE', SCOPE: 'GLOBAL', IS_ENABLED: false, ROLLOUT_PERCENTAGE: 0, IS_PERMANENT: false, ENVIRONMENT: 'ALL', }, EMAIL_TEMPLATE: { TYPE: 'SYSTEM', FORMAT: 'HTML', PRIORITY: 'NORMAL', STATUS: 'ACTIVE', IS_ACTIVE: true, IS_DEFAULT: false, VERSION: 1, }, } as const; // Error Messages export const ERROR_MESSAGES = { REQUIRED: 'Field ini wajib diisi', INVALID_EMAIL: 'Format email tidak valid', INVALID_PHONE: 'Format nomor telepon tidak valid', PASSWORD_TOO_SHORT: 'Password minimal 8 karakter', PASSWORD_TOO_WEAK: 'Password harus mengandung huruf besar, huruf kecil, angka, dan simbol', USERNAME_INVALID: 'Username hanya boleh mengandung huruf, angka, dan underscore', FILE_TOO_LARGE: 'Ukuran file terlalu besar', FILE_TYPE_NOT_ALLOWED: 'Tipe file tidak diizinkan', NETWORK_ERROR: 'Terjadi kesalahan jaringan', SERVER_ERROR: 'Terjadi kesalahan server', UNAUTHORIZED: 'Anda tidak memiliki akses', FORBIDDEN: 'Akses ditolak', NOT_FOUND: 'Data tidak ditemukan', VALIDATION_ERROR: 'Data tidak valid', } as const; // Success Messages export const SUCCESS_MESSAGES = { CREATED: 'Data berhasil dibuat', UPDATED: 'Data berhasil diperbarui', DELETED: 'Data berhasil dihapus', SAVED: 'Data berhasil disimpan', SENT: 'Berhasil dikirim', UPLOADED: 'File berhasil diunggah', LOGIN_SUCCESS: 'Login berhasil', LOGOUT_SUCCESS: 'Logout berhasil', REGISTER_SUCCESS: 'Registrasi berhasil', PASSWORD_RESET: 'Password berhasil direset', EMAIL_VERIFIED: 'Email berhasil diverifikasi', } as const; // Local Storage Keys export const STORAGE_KEYS = { ACCESS_TOKEN: 'access_token', REFRESH_TOKEN: 'refresh_token', USER_DATA: 'user_data', CART: 'cart', PREFERENCES: 'preferences', THEME: 'theme', LANGUAGE: 'language', } as const; // Theme export const THEME = { COLORS: { PRIMARY: '#4F46E5', SECONDARY: '#7C3AED', SUCCESS: '#10B981', WARNING: '#F59E0B', ERROR: '#EF4444', INFO: '#3B82F6', GRAY: { 50: '#F9FAFB', 100: '#F3F4F6', 200: '#E5E7EB', 300: '#D1D5DB', 400: '#9CA3AF', 500: '#6B7280', 600: '#4B5563', 700: '#374151', 800: '#1F2937', 900: '#111827', }, }, BREAKPOINTS: { SM: '640px', MD: '768px', LG: '1024px', XL: '1280px', '2XL': '1536px', }, } as const; // Feature Flags export const FEATURES = { ENABLE_NOTIFICATIONS: true, ENABLE_MERCHANDISE: true, ENABLE_ANALYTICS: true, ENABLE_REVIEWS: true, ENABLE_SOCIAL_LOGIN: true, ENABLE_MULTI_LANGUAGE: false, ENABLE_DARK_MODE: true, ENABLE_PWA: false, ENABLE_SETTINGS_MANAGEMENT: true, ENABLE_FEATURE_FLAGS: true, ENABLE_EMAIL_TEMPLATES: true, ENABLE_SETTINGS_HISTORY: true, ENABLE_SETTINGS_ENCRYPTION: true, } as const;