depor_os/lib/services/member_service.dart

47 lines
1.6 KiB
Dart
Raw Normal View History

2026-03-18 11:47:06 +00:00
import 'dart:convert';
import 'package:http/http.dart' as http;
import '../core/constants.dart';
import '../models/member.dart';
import 'auth_service.dart';
import 'member_repository.dart';
export 'member_repository.dart';
class MemberService implements MemberRepository {
final _auth = AuthService();
Future<Map<String, String>> _headers() async {
final token = await _auth.getToken();
return {
if (token != null) 'Authorization': 'Bearer $token',
'Accept': 'application/json',
};
}
Future<Member> _fetch(String url) async {
final res = await http.get(Uri.parse(url), headers: await _headers());
if (res.statusCode == 200) {
return Member.fromJson(jsonDecode(res.body) as Map<String, dynamic>);
}
throw Exception('Error ${res.statusCode}');
}
@override Future<Member> first() => _fetch('$kApiBase/members/first');
@override Future<Member> last() => _fetch('$kApiBase/members/last');
@override Future<Member> show(int id) => _fetch('$kApiBase/members/$id');
@override Future<Member> prev(int id) => _fetch('$kApiBase/members/$id/prev');
@override Future<Member> next(int id) => _fetch('$kApiBase/members/$id/next');
@override
Future<Map<String, String>> search(String term) async {
final uri = Uri.parse('$kApiBase/members/search')
.replace(queryParameters: {'term': term});
final res = await http.get(uri, headers: await _headers());
if (res.statusCode == 200) {
final data = jsonDecode(res.body) as Map<String, dynamic>;
return data.map((k, v) => MapEntry(k, v.toString()));
}
return {};
}
}