Files
social-app/apps/lib/features/calendar/data/calendar_api.dart
T

76 lines
2.1 KiB
Dart

import 'package:social_app/core/api/i_api_client.dart';
import 'models/schedule_item_model.dart';
class CalendarApi {
final IApiClient _client;
static const _prefix = '/api/v1/schedule-items';
CalendarApi(this._client);
Future<List<ScheduleItemModel>> 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<String, dynamic>>()
.map(ScheduleItemModel.fromJson)
.toList();
}
Future<ScheduleItemModel> getById(String id) async {
final response = await _client.get('$_prefix/$id');
return ScheduleItemModel.fromJson(response.data as Map<String, dynamic>);
}
Future<ScheduleItemModel> create(ScheduleItemModel request) async {
final response = await _client.post(_prefix, data: request.toCreateJson());
return ScheduleItemModel.fromJson(response.data as Map<String, dynamic>);
}
Future<ScheduleItemModel> update(ScheduleItemModel request) async {
final response = await _client.patch(
'$_prefix/${request.id}',
data: request.toUpdateJson(),
);
return ScheduleItemModel.fromJson(response.data as Map<String, dynamic>);
}
Future<void> delete(String id) async {
await _client.delete('$_prefix/$id');
}
Future<void> acceptSubscription(String itemId) async {
await _client.post('$_prefix/$itemId/accept');
}
Future<void> rejectSubscription(String itemId) async {
await _client.post('$_prefix/$itemId/reject');
}
Future<void> share(
String itemId, {
required String email,
bool view = true,
bool edit = false,
bool invite = false,
}) async {
await _client.post(
'$_prefix/$itemId/share',
data: {
'email': email,
'permission_view': view,
'permission_edit': edit,
'permission_invite': invite,
},
);
}
}