Watch
1
0
Fork
You've already forked Seyyed_arc
0
forked from hesabix/arc
Seyyed_arc/hesabixUI/hesabix_ui/lib/services/announcements_service.dart
2026-04-28 20:23:03 +03:30

95 lines
3 KiB
Dart
Executable file

import '../core/api_client.dart';
class AnnouncementsService {
final ApiClient _apiClient;
AnnouncementsService(this._apiClient);
// ===== User-facing endpoints =====
Future<Map<String, dynamic>> listAnnouncements({
int page = 1,
int limit = 10,
String? level, // info|warning|critical
bool onlyUnread = false,
String? locale,
}) async {
final query = <String, dynamic>{
'page': page,
'limit': limit,
if (level != null && level.isNotEmpty) 'level': level,
'only_unread': onlyUnread,
if (locale != null && locale.isNotEmpty) 'locale': locale,
};
final res = await _apiClient.get<Map<String, dynamic>>(
'/api/v1/announcements',
query: query,
);
return Map<String, dynamic>.from(res.data?['data'] as Map? ?? const {});
}
Future<void> markRead(int id) async {
await _apiClient.post<Map<String, dynamic>>('/api/v1/announcements/$id/mark-read');
}
Future<void> dismiss(int id) async {
await _apiClient.post<Map<String, dynamic>>('/api/v1/announcements/$id/dismiss');
}
/// پنهان‌سازی یکجای همه اعلان‌های قابل مشاهده (in-app / مرکز اعلان)
Future<Map<String, dynamic>> clearAllVisible() async {
final res = await _apiClient.post<Map<String, dynamic>>('/api/v1/announcements/clear-all');
return Map<String, dynamic>.from(res.data?['data'] as Map? ?? const {});
}
// ===== Admin endpoints =====
Future<Map<String, dynamic>> adminList({
int page = 1,
int limit = 20,
String? level,
bool? active,
}) async {
final query = <String, dynamic>{
'page': page,
'limit': limit,
if (level != null && level.isNotEmpty) 'level': level,
if (active != null) 'active': active,
};
final res = await _apiClient.get<Map<String, dynamic>>(
'/api/v1/admin/announcements',
query: query,
);
return Map<String, dynamic>.from(res.data?['data'] as Map? ?? const {});
}
Future<Map<String, dynamic>> adminCreate(Map<String, dynamic> body) async {
final res = await _apiClient.post<Map<String, dynamic>>(
'/api/v1/admin/announcements',
data: body,
);
return Map<String, dynamic>.from(res.data?['data'] as Map? ?? const {});
}
Future<Map<String, dynamic>> adminUpdate(int id, Map<String, dynamic> body) async {
final res = await _apiClient.put<Map<String, dynamic>>(
'/api/v1/admin/announcements/$id',
data: body,
);
return Map<String, dynamic>.from(res.data?['data'] as Map? ?? const {});
}
Future<void> adminDelete(int id) async {
await _apiClient.delete<Map<String, dynamic>>('/api/v1/admin/announcements/$id');
}
Future<Map<String, dynamic>> adminPublish(int id, {required bool active, bool? pinned}) async {
final res = await _apiClient.post<Map<String, dynamic>>(
'/api/v1/admin/announcements/$id/publish',
data: {
'active': active,
if (pinned != null) 'is_pinned': pinned,
},
);
return Map<String, dynamic>.from(res.data?['data'] as Map? ?? const {});
}
}