Files
social-app/apps/lib/features/contacts/data/apis/users_api.dart
T

61 lines
1.7 KiB
Dart

import 'dart:io';
import 'package:dio/dio.dart';
import 'package:social_app/data/network/i_api_client.dart';
import '../models/user_profile.dart';
import 'friends_api.dart';
export 'friends_api.dart' show UserBasicInfo;
class UsersApi {
final IApiClient _client;
static const _prefix = '/api/v1/users';
UsersApi(this._client);
Future<UserBasicInfo> getById(String userId) async {
final response = await _client.get('$_prefix/$userId');
return UserBasicInfo.fromJson(response.data);
}
Future<UserProfile> getMe() async {
final response = await _client.get('$_prefix/me');
return UserProfile.fromJson(response.data);
}
Future<UserProfile> updateMe(UserUpdateRequest request) async {
final response = await _client.patch('$_prefix/me', data: request.toJson());
return UserProfile.fromJson(response.data);
}
Future<String> uploadAvatar(File file) async {
final formData = FormData.fromMap({
'file': await MultipartFile.fromFile(
file.path,
filename: file.path.split('/').last,
),
});
final response = await _client.post<Map<String, dynamic>>(
'$_prefix/me/avatar',
data: formData,
);
final payload = response.data;
if (payload is! Map<String, dynamic>) {
throw StateError('Invalid /users/me/avatar response');
}
final url = payload['url'];
if (url is! String) {
throw StateError('Missing url in /users/me/avatar response');
}
return url;
}
Future<List<UserProfile>> searchUsers(String query) async {
final response = await _client.post(
'$_prefix/search',
data: {'query': query},
);
final List<dynamic> data = response.data;
return data.map((json) => UserProfile.fromJson(json)).toList();
}
}