import 'package:appwrite/appwrite.dart'; import 'package:appwrite/models.dart'; import 'package:flutter/material.dart'; import 'package:ltx_flutter/appwrite/auth_api.dart'; import 'package:ltx_flutter/constants/constants.dart'; import 'package:intl/intl.dart'; class DatabaseAPI extends ChangeNotifier { Client client = Client(); late final Account account; late final Databases databases; final AuthAPI auth = AuthAPI(); late List _entries = []; // Getter methods List get entries => _entries; int? get total => _entries.length; final DateFormat formatter = DateFormat('yyyy-MM-dd'); // Constructor DatabaseAPI() { init(); getEntries(); } init() { client .setEndpoint(APPWRITE_URL) .setProject(APPWRITE_PROJECT_ID) .setSelfSigned(); account = Account(client); databases = Databases(client); } getEntries({int limit = 100, String dateISO = ""}) async { if (dateISO == "") { dateISO = DateTime.now().toIso8601String(); } var referenceDate = DateTime.parse("2023-01-01"); final date = DateTime.parse(dateISO); final offset = date.difference(referenceDate).inDays; print("Getting $limit entries starting from $offset"); var response = await databases.listDocuments( databaseId: APPWRITE_DATABASE_ID, collectionId: COLLECTION, queries: [ Query.orderAsc("date"), Query.offset(offset), Query.limit(limit), ]); _entries = response.documents; notifyListeners(); } Future addEntry( {required String date, List hours = const [], int mood = -1, String comments = ""}) { return databases.createDocument( databaseId: APPWRITE_DATABASE_ID, collectionId: COLLECTION, documentId: date, data: { 'date': DateTime.parse(date), 'hours': hours, 'mood': mood, 'comments': comments }); } Future deleteEntry({required String date}) { return databases.deleteDocument( databaseId: APPWRITE_DATABASE_ID, collectionId: COLLECTION, documentId: date); } }