/// API configuration constants for the Retail POS application class ApiConstants { // Private constructor to prevent instantiation ApiConstants._(); // ===== Base URL Configuration ===== /// Base URL for the API /// Development: http://localhost:3000 /// Production: TODO - Replace with actual production URL static const String baseUrl = 'http://103.188.82.191:5000'; /// API version prefix static const String apiVersion = '/api'; /// Full base URL with version static String get fullBaseUrl => '$baseUrl$apiVersion'; // ===== Timeout Configuration ===== /// Connection timeout in milliseconds (30 seconds) static const int connectTimeout = 30000; /// Receive timeout in milliseconds (30 seconds) static const int receiveTimeout = 30000; /// Send timeout in milliseconds (30 seconds) static const int sendTimeout = 30000; // ===== Retry Configuration ===== /// Maximum number of retry attempts for failed requests static const int maxRetries = 3; /// Delay between retry attempts in milliseconds (1 second) static const int retryDelay = 1000; // ===== Endpoint Paths ===== // Authentication Endpoints /// POST - Login user static const String login = '/auth/login'; /// POST - Register new user static const String register = '/auth/register'; /// GET - Get current user profile (requires auth) static const String profile = '/auth/profile'; /// POST - Refresh access token (requires auth) static const String refreshToken = '/auth/refresh'; // Products Endpoints /// GET - Fetch all products (with pagination and filters) static const String products = '/products'; /// GET - Fetch single product by ID /// Use: '${ApiConstants.products}/:id' static String productById(String id) => '$products/$id'; /// GET - Fetch products by category /// Use: '${ApiConstants.products}/category/:categoryId' static String productsByCategory(String categoryId) => '$products/category/$categoryId'; /// GET - Search products /// Query params: ?q=searchTerm static const String searchProducts = '$products/search'; /// POST - Sync products (bulk update/create) static const String syncProducts = '$products/sync'; // Categories Endpoints /// GET - Fetch all categories static const String categories = '/categories'; /// GET - Fetch single category by ID /// Use: '${ApiConstants.categories}/:id' static String categoryById(String id) => '$categories/$id'; /// GET - Fetch category with its products /// Use: '${ApiConstants.categories}/:id/products' static String categoryWithProducts(String id) => '$categories/$id/products'; /// POST - Sync categories (bulk update/create) static const String syncCategories = '$categories/sync'; // Transactions Endpoints (for future use) /// POST - Create new transaction static const String transactions = '/transactions'; /// GET - Fetch transaction history static const String transactionHistory = '$transactions/history'; // Settings Endpoints (for future use) /// GET - Fetch app settings static const String settings = '/settings'; /// PUT - Update app settings static const String updateSettings = settings; // ===== Request Headers ===== /// Content-Type header key static const String contentType = 'Content-Type'; /// Content-Type value for JSON static const String applicationJson = 'application/json'; /// Authorization header key static const String authorization = 'Authorization'; /// Accept header key static const String accept = 'Accept'; // ===== API Keys and Authentication ===== /// API key header name (if using API key authentication) static const String apiKeyHeader = 'X-API-Key'; /// TODO: Store API key securely (use flutter_secure_storage in production) static const String apiKey = 'your-api-key-here'; // ===== Status Codes ===== /// Success status codes static const int statusOk = 200; static const int statusCreated = 201; static const int statusNoContent = 204; /// Client error status codes static const int statusBadRequest = 400; static const int statusUnauthorized = 401; static const int statusForbidden = 403; static const int statusNotFound = 404; static const int statusUnprocessableEntity = 422; static const int statusTooManyRequests = 429; /// Server error status codes static const int statusInternalServerError = 500; static const int statusBadGateway = 502; static const int statusServiceUnavailable = 503; static const int statusGatewayTimeout = 504; // ===== Cache Configuration ===== /// Cache duration for products (in hours) static const int productsCacheDuration = 24; /// Cache duration for categories (in hours) static const int categoriesCacheDuration = 24; // ===== Pagination ===== /// Default page size for paginated requests static const int defaultPageSize = 20; /// Maximum page size static const int maxPageSize = 100; // ===== Mock/Development Configuration ===== /// Use mock data instead of real API (for development/testing) static const bool useMockData = false; /// Mock API delay in milliseconds static const int mockApiDelay = 500; }