post<T> method
POST request with JSON body
path - API endpoint path
data - Request body (will be JSON serialized)
Returns parsed response data
Implementation
Future<T> post<T>(
String path,
Object? data, {
T Function(Map<String, dynamic>)? fromJson,
bool requiresAuth = false,
}) async {
var url = _buildFullURL(path);
// Handle device registration - add UPSERT for Supabase
final isDeviceReg = _isDeviceRegistrationPath(path);
final headers = _buildHeaders(isDeviceReg, requiresAuth);
if (isDeviceReg && _environment == SDKEnvironment.development) {
final separator = url.contains('?') ? '&' : '?';
url = '$url${separator}on_conflict=device_id';
}
final response = await _executeRequest(
'POST',
url,
headers,
data,
requiresAuth: requiresAuth,
);
// Handle 409 as success for device registration (device already exists)
if (isDeviceReg && response.statusCode == 409) {
_logger.info('Device already registered (409) - treating as success');
return _parseResponse<T>(response, fromJson);
}
return _handleResponse<T>(response, path, fromJson);
}