51 lines
1.4 KiB
Dart
51 lines
1.4 KiB
Dart
|
|
import 'package:dio/dio.dart';
|
||
|
|
|
||
|
|
import '../../../../core/logging/logger.dart';
|
||
|
|
import '../../../../core/network/api_problem.dart';
|
||
|
|
import '../../../../data/network/api_client.dart';
|
||
|
|
import '../models/my_invite_code.dart';
|
||
|
|
|
||
|
|
class InviteApi {
|
||
|
|
InviteApi({required ApiClient apiClient}) : _apiClient = apiClient;
|
||
|
|
|
||
|
|
final ApiClient _apiClient;
|
||
|
|
final Logger _logger = getLogger('features.settings.data.apis');
|
||
|
|
|
||
|
|
Future<MyInviteCode> getMyInviteCode() async {
|
||
|
|
try {
|
||
|
|
final json = await _apiClient.getJson('/api/v1/invite/me');
|
||
|
|
return MyInviteCode(
|
||
|
|
code: json['code'] as String,
|
||
|
|
usedCount: json['used_count'] as int,
|
||
|
|
);
|
||
|
|
} on DioException catch (error, stackTrace) {
|
||
|
|
_logger.error(
|
||
|
|
message: 'Get my invite code failed',
|
||
|
|
error: error,
|
||
|
|
stackTrace: stackTrace,
|
||
|
|
);
|
||
|
|
throw _mapProblem(error);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
ApiProblem _mapProblem(DioException error) {
|
||
|
|
final status = error.response?.statusCode ?? 500;
|
||
|
|
final data = error.response?.data;
|
||
|
|
|
||
|
|
if (data is Map<String, dynamic>) {
|
||
|
|
return ApiProblem(
|
||
|
|
status: status,
|
||
|
|
title: (data['title'] as String?) ?? 'Request failed',
|
||
|
|
detail: (data['detail'] as String?) ?? '',
|
||
|
|
code: data['code'] as String?,
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
return ApiProblem(
|
||
|
|
status: status,
|
||
|
|
title: 'Network error',
|
||
|
|
detail: error.message ?? 'Request failed',
|
||
|
|
);
|
||
|
|
}
|
||
|
|
}
|