import 'package:appwrite/models.dart'; import 'package:appwrite/appwrite.dart'; import '../configs/environment.dart'; class AppwriteService { static final String endpoint = Environment.appwritePublicEndpoint; static final String projectId = Environment.appwriteProjectId; static final String projectName = Environment.appwriteProjectName; static final String realtimeCollectionId = Environment.appwriteRealtimeCollectionId; static final String databaseId = Environment.appwriteDatabaseId; static final String userEMail = Environment.appwriteUserEMail; static final String passwd = Environment.appwritePasswd; final Client _client = Client().setProject(projectId).setEndpoint(endpoint); // ignore: unused_field late final Account _account; // ignore: unused_field late final Databases _databases; AppwriteService._internal() { _account = Account(_client); _databases = Databases(_client); } static final AppwriteService _instance = AppwriteService._internal(); /// Singleton instance getter factory AppwriteService() => _instance; // login with e-Mail and password Future login() async { await logout(); try { final session = await _account.createEmailPasswordSession( email: userEMail, password: passwd, ); print('Login erfolgreich: ${session.$id}'); return true; } catch (e) { print('Login fehlgeschlagen: $e'); return false; } } // logout current user Future logout() async { try { await _account.deleteSession(sessionId: 'current'); print('Logout erfolgreich'); return true; } catch (e) { print('Logout fehlgeschlagen: $e'); return false; } } //Get current user ID Future getCurrentUserId() async { try { final user = await _account.get(); return user.$id; } catch (e) { print('Fehler beim Abrufen der Benutzer-ID: $e'); return null; } } // Get List from Realtime Collection Future> getDocumentsFromCollection() async { try { final documents = await _databases.listDocuments( databaseId: databaseId, collectionId: realtimeCollectionId, queries: [Query.orderAsc('name'), Query.orderDesc('date')], ); return documents.documents; } catch (e) { print('Fehler beim Abrufen der Dokumente: $e'); return []; } } // Get Document per Id from Realtime Collection Future getDocumentById(String documentId) async { try { final document = await _databases.getDocument( databaseId: databaseId, collectionId: realtimeCollectionId, documentId: documentId, ); return document; } catch (e) { print('Fehler beim Abrufen des Dokuments: $e'); return null; } } // Save a new document to Realtime Collection Future createDocumentInCollection(Map data) async { try { await _databases.createDocument( databaseId: databaseId, collectionId: realtimeCollectionId, documentId: ID.unique(), data: data, ); print('Dokument erfolgreich erstellt'); return true; } catch (e) { print('Fehler beim Erstellen des Dokuments: $e'); return false; } } // Update an existing document in Realtime Collection Future updateDocumentInCollection( String documentId, Map data, ) async { try { await _databases.updateDocument( databaseId: databaseId, collectionId: realtimeCollectionId, documentId: documentId, data: data, ); print('Dokument erfolgreich aktualisiert'); return true; } catch (e) { print('Fehler beim Aktualisieren des Dokuments: $e'); return false; } } // Delete a document from Realtime Collection Future deleteDocumentFromCollection(String documentId) async { try { await _databases.deleteDocument( databaseId: databaseId, collectionId: realtimeCollectionId, documentId: documentId, ); print('Dokument erfolgreich gelöscht'); return true; } catch (e) { print('Fehler beim Löschen des Dokuments: $e'); return false; } } }