jsq-ticket-type
Version:
TypeScript type definitions for ticket system - microservices types with comprehensive settings management
371 lines (351 loc) • 9.3 kB
text/typescript
// 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;