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 getById(String userId) async { final response = await _client.get('$_prefix/$userId'); return UserBasicInfo.fromJson(response.data); } Future getMe() async { final response = await _client.get('$_prefix/me'); return UserProfile.fromJson(response.data); } Future updateMe(UserUpdateRequest request) async { final response = await _client.patch('$_prefix/me', data: request.toJson()); return UserProfile.fromJson(response.data); } Future uploadAvatar(File file) async { final formData = FormData.fromMap({ 'file': await MultipartFile.fromFile( file.path, filename: file.path.split('/').last, ), }); final response = await _client.post>( '$_prefix/me/avatar', data: formData, ); final payload = response.data; if (payload is! Map) { 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> searchUsers(String query) async { final response = await _client.post( '$_prefix/search', data: {'query': query}, ); final List data = response.data; return data.map((json) => UserProfile.fromJson(json)).toList(); } }