90 lines
2.3 KiB
Dart
90 lines
2.3 KiB
Dart
// Appwrite 1.8+ empfiehlt TablesDB; klassische Collections laufen weiter über Databases.
|
|
// ignore_for_file: deprecated_member_use
|
|
|
|
import 'package:appwrite/appwrite.dart';
|
|
|
|
import '../appwrite_config.dart';
|
|
import '../models/auftrag.dart';
|
|
|
|
class AuftragRepository {
|
|
AuftragRepository({Client? client})
|
|
: _db = Databases(client ?? appwriteClient),
|
|
_account = Account(client ?? appwriteClient);
|
|
|
|
final Databases _db;
|
|
final Account _account;
|
|
|
|
Future<String> _uid() async {
|
|
final u = await _account.get();
|
|
return u.$id;
|
|
}
|
|
|
|
List<String> _docPermissions(String uid) => [
|
|
Permission.read(Role.user(uid)),
|
|
Permission.update(Role.user(uid)),
|
|
Permission.delete(Role.user(uid)),
|
|
];
|
|
|
|
Future<List<Auftrag>> listAuftraege() async {
|
|
final uid = await _uid();
|
|
final res = await _db.listDocuments(
|
|
databaseId: kAppwriteDatabaseId,
|
|
collectionId: kAppwriteCollectionId,
|
|
queries: [
|
|
Query.equal('userId', uid),
|
|
Query.orderDesc(r'$createdAt'),
|
|
],
|
|
);
|
|
return res.documents.map(Auftrag.fromAppwriteDoc).toList();
|
|
}
|
|
|
|
Future<Auftrag?> get(String id) async {
|
|
try {
|
|
final doc = await _db.getDocument(
|
|
databaseId: kAppwriteDatabaseId,
|
|
collectionId: kAppwriteCollectionId,
|
|
documentId: id,
|
|
);
|
|
return Auftrag.fromAppwriteDoc(doc);
|
|
} catch (_) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
String neueId() => ID.unique();
|
|
|
|
Future<void> speichern({
|
|
required String id,
|
|
required Auftrag daten,
|
|
bool isNeu = false,
|
|
}) async {
|
|
final uid = await _uid();
|
|
final payload = Map<String, dynamic>.from(daten.toMap());
|
|
payload['userId'] = uid;
|
|
if (isNeu) {
|
|
await _db.createDocument(
|
|
databaseId: kAppwriteDatabaseId,
|
|
collectionId: kAppwriteCollectionId,
|
|
documentId: id,
|
|
data: payload,
|
|
permissions: _docPermissions(uid),
|
|
);
|
|
} else {
|
|
await _db.updateDocument(
|
|
databaseId: kAppwriteDatabaseId,
|
|
collectionId: kAppwriteCollectionId,
|
|
documentId: id,
|
|
data: payload,
|
|
);
|
|
}
|
|
}
|
|
|
|
Future<void> loeschen(String id) async {
|
|
await _db.deleteDocument(
|
|
databaseId: kAppwriteDatabaseId,
|
|
collectionId: kAppwriteCollectionId,
|
|
documentId: id,
|
|
);
|
|
}
|
|
}
|