Feature
ein paar feature aber datenbank macht probleme wenn man aufträge speichern möchge
This commit is contained in:
@@ -1,50 +1,89 @@
|
||||
import 'package:cloud_firestore/cloud_firestore.dart';
|
||||
import 'package:firebase_auth/firebase_auth.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({FirebaseFirestore? firestore, FirebaseAuth? auth})
|
||||
: _db = firestore ?? FirebaseFirestore.instance,
|
||||
_auth = auth ?? FirebaseAuth.instance;
|
||||
AuftragRepository({Client? client})
|
||||
: _db = Databases(client ?? appwriteClient),
|
||||
_account = Account(client ?? appwriteClient);
|
||||
|
||||
final FirebaseFirestore _db;
|
||||
final FirebaseAuth _auth;
|
||||
final Databases _db;
|
||||
final Account _account;
|
||||
|
||||
CollectionReference<Map<String, dynamic>> get _col {
|
||||
final uid = _auth.currentUser?.uid;
|
||||
if (uid == null) {
|
||||
throw StateError('Nicht angemeldet');
|
||||
}
|
||||
return _db.collection('users').doc(uid).collection('auftraege');
|
||||
Future<String> _uid() async {
|
||||
final u = await _account.get();
|
||||
return u.$id;
|
||||
}
|
||||
|
||||
Stream<List<Auftrag>> watchAuftraege() {
|
||||
return _col.orderBy('createdAt', descending: true).snapshots().map(
|
||||
(snap) => snap.docs.map(Auftrag.fromDoc).toList(),
|
||||
);
|
||||
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 {
|
||||
final doc = await _col.doc(id).get();
|
||||
if (!doc.exists) return null;
|
||||
return Auftrag.fromDoc(doc);
|
||||
try {
|
||||
final doc = await _db.getDocument(
|
||||
databaseId: kAppwriteDatabaseId,
|
||||
collectionId: kAppwriteCollectionId,
|
||||
documentId: id,
|
||||
);
|
||||
return Auftrag.fromAppwriteDoc(doc);
|
||||
} catch (_) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// Neue Dokument-ID ohne Schreibzugriff (für Storage-Pfade vor erstem Speichern).
|
||||
String neueId() => _col.doc().id;
|
||||
String neueId() => ID.unique();
|
||||
|
||||
Future<void> speichern({
|
||||
required String id,
|
||||
required Auftrag daten,
|
||||
bool isNeu = false,
|
||||
}) async {
|
||||
final payload = daten.toMap();
|
||||
final uid = await _uid();
|
||||
final payload = Map<String, dynamic>.from(daten.toMap());
|
||||
payload['userId'] = uid;
|
||||
if (isNeu) {
|
||||
payload['createdAt'] = FieldValue.serverTimestamp();
|
||||
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,
|
||||
);
|
||||
}
|
||||
await _col.doc(id).set(payload, SetOptions(merge: true));
|
||||
}
|
||||
|
||||
Future<void> loeschen(String id) => _col.doc(id).delete();
|
||||
Future<void> loeschen(String id) async {
|
||||
await _db.deleteDocument(
|
||||
databaseId: kAppwriteDatabaseId,
|
||||
collectionId: kAppwriteCollectionId,
|
||||
documentId: id,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user