gymspace-shared
Version:
Shared types and interfaces for GymSpace
185 lines (164 loc) • 5.03 kB
text/typescript
// Permission constants
export const PERMISSIONS = {
// Organizations
ORGANIZATIONS_CREATE: 'ORGANIZATIONS_CREATE',
ORGANIZATIONS_READ: 'ORGANIZATIONS_READ',
ORGANIZATIONS_UPDATE: 'ORGANIZATIONS_UPDATE',
ORGANIZATIONS_DELETE: 'ORGANIZATIONS_DELETE',
// Gyms
GYMS_CREATE: 'GYMS_CREATE',
GYMS_READ: 'GYMS_READ',
GYMS_UPDATE: 'GYMS_UPDATE',
GYMS_DELETE: 'GYMS_DELETE',
// Collaborators
COLLABORATORS_CREATE: 'COLLABORATORS_CREATE',
COLLABORATORS_READ: 'COLLABORATORS_READ',
COLLABORATORS_UPDATE: 'COLLABORATORS_UPDATE',
COLLABORATORS_DELETE: 'COLLABORATORS_DELETE',
// Clients
CLIENTS_CREATE: 'CLIENTS_CREATE',
CLIENTS_READ: 'CLIENTS_READ',
CLIENTS_UPDATE: 'CLIENTS_UPDATE',
CLIENTS_DELETE: 'CLIENTS_DELETE',
// Contracts
CONTRACTS_CREATE: 'CONTRACTS_CREATE',
CONTRACTS_READ: 'CONTRACTS_READ',
CONTRACTS_UPDATE: 'CONTRACTS_UPDATE',
CONTRACTS_APPROVE: 'CONTRACTS_APPROVE',
CONTRACTS_CANCEL: 'CONTRACTS_CANCEL',
// Evaluations
EVALUATIONS_CREATE: 'EVALUATIONS_CREATE',
EVALUATIONS_READ: 'EVALUATIONS_READ',
EVALUATIONS_UPDATE: 'EVALUATIONS_UPDATE',
EVALUATIONS_DELETE: 'EVALUATIONS_DELETE',
// Check-ins
CHECKINS_CREATE: 'CHECKINS_CREATE',
CHECKINS_READ: 'CHECKINS_READ',
// Leads
LEADS_CREATE: 'LEADS_CREATE',
LEADS_READ: 'LEADS_READ',
LEADS_UPDATE: 'LEADS_UPDATE',
LEADS_DELETE: 'LEADS_DELETE',
// Reports
REPORTS_VIEW: 'REPORTS_VIEW',
REPORTS_FINANCIAL: 'REPORTS_FINANCIAL',
// Settings
SETTINGS_UPDATE: 'SETTINGS_UPDATE',
// Assets
ASSETS_CREATE: 'ASSETS_CREATE',
ASSETS_READ: 'ASSETS_READ',
ASSETS_DELETE: 'ASSETS_DELETE',
// Files
FILES_CREATE: 'FILES_CREATE',
FILES_READ: 'FILES_READ',
FILES_DELETE: 'FILES_DELETE',
// Products
PRODUCTS_CREATE: 'PRODUCTS_CREATE',
PRODUCTS_READ: 'PRODUCTS_READ',
PRODUCTS_UPDATE: 'PRODUCTS_UPDATE',
PRODUCTS_DELETE: 'PRODUCTS_DELETE',
// Product Categories
PRODUCT_CATEGORIES_CREATE: 'PRODUCT_CATEGORIES_CREATE',
PRODUCT_CATEGORIES_READ: 'PRODUCT_CATEGORIES_READ',
PRODUCT_CATEGORIES_UPDATE: 'PRODUCT_CATEGORIES_UPDATE',
PRODUCT_CATEGORIES_DELETE: 'PRODUCT_CATEGORIES_DELETE',
// Sales
SALES_CREATE: 'SALES_CREATE',
SALES_READ: 'SALES_READ',
SALES_UPDATE: 'SALES_UPDATE',
SALES_DELETE: 'SALES_DELETE',
// Suppliers
SUPPLIERS_CREATE: 'SUPPLIERS_CREATE',
SUPPLIERS_READ: 'SUPPLIERS_READ',
SUPPLIERS_UPDATE: 'SUPPLIERS_UPDATE',
SUPPLIERS_DELETE: 'SUPPLIERS_DELETE',
} as const;
// Role definitions
export const ROLE_PERMISSIONS = {
OWNER: Object.values(PERMISSIONS),
MANAGER: [
PERMISSIONS.GYMS_READ,
PERMISSIONS.COLLABORATORS_READ,
PERMISSIONS.CLIENTS_CREATE,
PERMISSIONS.CLIENTS_READ,
PERMISSIONS.CLIENTS_UPDATE,
PERMISSIONS.CONTRACTS_CREATE,
PERMISSIONS.CONTRACTS_READ,
PERMISSIONS.EVALUATIONS_CREATE,
PERMISSIONS.EVALUATIONS_READ,
PERMISSIONS.EVALUATIONS_UPDATE,
PERMISSIONS.CHECKINS_CREATE,
PERMISSIONS.CHECKINS_READ,
PERMISSIONS.REPORTS_VIEW,
PERMISSIONS.ASSETS_CREATE,
PERMISSIONS.ASSETS_READ,
PERMISSIONS.ASSETS_DELETE,
PERMISSIONS.FILES_CREATE,
PERMISSIONS.FILES_READ,
PERMISSIONS.FILES_DELETE,
PERMISSIONS.PRODUCTS_CREATE,
PERMISSIONS.PRODUCTS_READ,
PERMISSIONS.PRODUCTS_UPDATE,
PERMISSIONS.PRODUCTS_DELETE,
PERMISSIONS.PRODUCT_CATEGORIES_CREATE,
PERMISSIONS.PRODUCT_CATEGORIES_READ,
PERMISSIONS.PRODUCT_CATEGORIES_UPDATE,
PERMISSIONS.PRODUCT_CATEGORIES_DELETE,
PERMISSIONS.SALES_CREATE,
PERMISSIONS.SALES_READ,
PERMISSIONS.SALES_UPDATE,
PERMISSIONS.SUPPLIERS_CREATE,
PERMISSIONS.SUPPLIERS_READ,
PERMISSIONS.SUPPLIERS_UPDATE,
PERMISSIONS.SUPPLIERS_DELETE,
],
STAFF: [
PERMISSIONS.CLIENTS_READ,
PERMISSIONS.CHECKINS_CREATE,
PERMISSIONS.CHECKINS_READ,
PERMISSIONS.PRODUCTS_READ,
PERMISSIONS.PRODUCT_CATEGORIES_READ,
PERMISSIONS.SALES_CREATE,
PERMISSIONS.SALES_READ,
],
ADVISOR: [
PERMISSIONS.CLIENTS_READ,
PERMISSIONS.EVALUATIONS_CREATE,
PERMISSIONS.EVALUATIONS_READ,
PERMISSIONS.EVALUATIONS_UPDATE,
PERMISSIONS.ASSETS_CREATE,
PERMISSIONS.ASSETS_READ,
PERMISSIONS.FILES_CREATE,
PERMISSIONS.FILES_READ,
],
} as const;
// Cache TTL values (in seconds)
export const CACHE_TTL = {
USER_PERMISSIONS: 900, // 15 minutes
GYM_DATA: 1800, // 30 minutes
STATIC_DATA: 3600, // 60 minutes
REPORTS: 300, // 5 minutes
} as const;
// File size limits (in bytes)
export const FILE_LIMITS = {
MAX_FILE_SIZE: 10 * 1024 * 1024, // 10MB
MAX_IMAGE_SIZE: 5 * 1024 * 1024, // 5MB
MAX_DOCUMENT_SIZE: 10 * 1024 * 1024, // 10MB
} as const;
// Pagination defaults
export const PAGINATION_DEFAULTS = {
PAGE: 1,
LIMIT: 20,
MAX_LIMIT: 100,
} as const;
// Date formats
export const DATE_FORMATS = {
DATE_ONLY: 'YYYY-MM-DD',
DATETIME: 'YYYY-MM-DD HH:mm:ss',
TIME_ONLY: 'HH:mm:ss',
} as const;
// Headers
export const HEADERS = {
GYM_ID: 'X-Gym-Id',
REQUEST_ID: 'X-Request-Id',
} as const;