67 lines
1.9 KiB
Dart
67 lines
1.9 KiB
Dart
import "../config/api_config.dart";
|
|
import "../models/bible_verse.dart";
|
|
import "api_client.dart";
|
|
import "mock_data.dart";
|
|
|
|
class BibleVerseService {
|
|
final ApiClient _client;
|
|
|
|
BibleVerseService(this._client);
|
|
|
|
Future<List<BibleVerse>> fetchVerses({bool activeOnly = false}) async {
|
|
if (ApiConfig.useMockData) {
|
|
final items = List<BibleVerse>.from(MockDataStore.bibleVerses);
|
|
if (activeOnly) {
|
|
return items.where((item) => item.active).toList();
|
|
}
|
|
return items;
|
|
}
|
|
final query = activeOnly ? {"active": "true"} : null;
|
|
final data = await _client.getList(ApiConfig.bibleVerses, query: query);
|
|
return data
|
|
.map((item) => BibleVerse.fromJson(item as Map<String, dynamic>))
|
|
.toList();
|
|
}
|
|
|
|
Future<BibleVerse> createVerse(BibleVerse verse) async {
|
|
if (ApiConfig.useMockData) {
|
|
final created = BibleVerse(
|
|
id: "bible-${DateTime.now().millisecondsSinceEpoch}",
|
|
text: verse.text,
|
|
reference: verse.reference,
|
|
date: verse.date,
|
|
active: verse.active,
|
|
);
|
|
MockDataStore.bibleVerses.add(created);
|
|
return created;
|
|
}
|
|
final data = await _client.post(ApiConfig.bibleVerses, verse.toJson());
|
|
return BibleVerse.fromJson(data);
|
|
}
|
|
|
|
Future<BibleVerse> updateVerse(BibleVerse verse) async {
|
|
if (ApiConfig.useMockData) {
|
|
final index = MockDataStore.bibleVerses.indexWhere(
|
|
(item) => item.id == verse.id,
|
|
);
|
|
if (index != -1) {
|
|
MockDataStore.bibleVerses[index] = verse;
|
|
}
|
|
return verse;
|
|
}
|
|
final data = await _client.put(
|
|
"${ApiConfig.bibleVerses}/${verse.id}",
|
|
verse.toJson(),
|
|
);
|
|
return BibleVerse.fromJson(data);
|
|
}
|
|
|
|
Future<void> deleteVerse(String id) async {
|
|
if (ApiConfig.useMockData) {
|
|
MockDataStore.bibleVerses.removeWhere((item) => item.id == id);
|
|
return;
|
|
}
|
|
await _client.delete("${ApiConfig.bibleVerses}/$id");
|
|
}
|
|
}
|