overtime_api.dart 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import 'package:flutter_riverpod/flutter_riverpod.dart';
  2. import '../../core/network/api_client.dart';
  3. import '../../app.dart';
  4. import '../../shared/models/pagination_model.dart';
  5. import 'overtime_model.dart';
  6. final overtimeApiProvider = Provider<OvertimeApi>(
  7. (ref) => OvertimeApi(ref.read(apiClientProvider)),
  8. );
  9. class OvertimeApi {
  10. final ApiClient _client;
  11. OvertimeApi(this._client);
  12. Future<PaginatedData<OvertimeModel>> fetchList({
  13. String status = '',
  14. int page = 1,
  15. int size = 20,
  16. }) async {
  17. final response = await _client.get<Map<String, dynamic>>(
  18. '/overtime/list',
  19. queryParameters: {'status': status, 'page': page, 'size': size},
  20. );
  21. final data = response.data!;
  22. final list = (data['list'] as List<dynamic>)
  23. .map((e) => OvertimeModel.fromJson(e as Map<String, dynamic>))
  24. .toList();
  25. return PaginatedData(
  26. list: list,
  27. page: data['page'] as int,
  28. size: data['size'] as int,
  29. total: data['total'] as int,
  30. );
  31. }
  32. Future<OvertimeModel> fetchDetail(String id) async {
  33. final response = await _client.get<Map<String, dynamic>>(
  34. '/overtime/detail/$id',
  35. );
  36. return OvertimeModel.fromJson(response.data!);
  37. }
  38. Future<void> submit(OvertimeModel model) async {
  39. await _client.post('/overtime/apply', data: model.toJson());
  40. }
  41. Future<void> saveDraft(OvertimeModel model) async {
  42. await _client.put('/overtime/draft', data: model.toJson());
  43. }
  44. }