import 'package:social_app/data/network/i_api_client.dart'; import 'package:social_app/features/calendar/data/models/schedule_item_model.dart'; class CalendarApi { final IApiClient _client; static const _prefix = '/api/v1/schedule-items'; CalendarApi(this._client); Future> listByRange({ required DateTime startAt, required DateTime endAt, }) async { final response = await _client.get( '$_prefix?start_at=${Uri.encodeQueryComponent(startAt.toUtc().toIso8601String())}&end_at=${Uri.encodeQueryComponent(endAt.toUtc().toIso8601String())}', ); final data = response.data; if (data is! List) { return const []; } return data .whereType>() .map(ScheduleItemModel.fromJson) .toList(); } Future getById(String id) async { final response = await _client.get('$_prefix/$id'); return ScheduleItemModel.fromJson(response.data as Map); } Future create(ScheduleItemModel request) async { final response = await _client.post(_prefix, data: request.toCreateJson()); return ScheduleItemModel.fromJson(response.data as Map); } Future update(ScheduleItemModel request) async { final response = await _client.patch( '$_prefix/${request.id}', data: request.toUpdateJson(), ); return ScheduleItemModel.fromJson(response.data as Map); } Future delete(String id) async { await _client.delete('$_prefix/$id'); } Future acceptSubscription(String itemId) async { await _client.post('$_prefix/$itemId/accept'); } Future rejectSubscription(String itemId) async { await _client.post('$_prefix/$itemId/reject'); } Future share( String itemId, { required String phone, bool view = true, bool edit = false, bool invite = false, }) async { await _client.post( '$_prefix/$itemId/share', data: { 'phone': phone, 'permission_view': view, 'permission_edit': edit, 'permission_invite': invite, }, ); } }