Files
retail/lib/core/constants/api_constants.dart
Phuoc Nguyen 77440ac957 login
2025-10-10 17:51:31 +07:00

156 lines
4.9 KiB
Dart

/// 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';
/// 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;
}