Umbau auf directus API Rest Service
This commit is contained in:
@@ -1,21 +1,20 @@
|
||||
import 'package:get/get.dart';
|
||||
import '../models/tank_model.dart';
|
||||
import '../models/tank_guru_directus_model.dart';
|
||||
import '../pages/edit_view.dart';
|
||||
import '../services/appwrite_service.dart';
|
||||
import '../services/directus_service.dart';
|
||||
|
||||
class DetailController extends GetxController {
|
||||
late TankModel tank;
|
||||
final appwriteService = AppwriteService();
|
||||
late TankGuruDirectusModel tank;
|
||||
final directusService = DirectusService();
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
tank = Get.arguments as TankModel;
|
||||
tank = Get.arguments as TankGuruDirectusModel;
|
||||
super.onInit();
|
||||
}
|
||||
|
||||
void deleteEntry() {
|
||||
appwriteService
|
||||
.deleteDocumentFromCollection(tank.szDocumentId)
|
||||
void deleteEntry() async {
|
||||
await directusService.deleteDocumentFromTable(tank.iD!)
|
||||
.then((_) {
|
||||
Get.back(
|
||||
result: 'deleted',
|
||||
|
||||
@@ -1,14 +1,17 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import '../helper/helper.dart' as helper;
|
||||
import '../models/locationiq_model.dart';
|
||||
import '../models/tank_model.dart';
|
||||
import '../services/appwrite_service.dart';
|
||||
//import '../models/tank_model.dart';
|
||||
//import '../services/appwrite_service.dart';
|
||||
import '../models/tank_guru_directus_model.dart';
|
||||
import '../services/directus_service.dart';
|
||||
import '../services/geolocation_service.dart';
|
||||
import '../services/location_iq_service.dart';
|
||||
import '../pages/home_view.dart';
|
||||
|
||||
class EditController extends GetxController {
|
||||
final AppwriteService appwriteService = AppwriteService();
|
||||
final DirectusService directusService = DirectusService();
|
||||
|
||||
// Form controllers
|
||||
final dateController = TextEditingController();
|
||||
@@ -23,8 +26,9 @@ class EditController extends GetxController {
|
||||
final calculatedTotal = '0.00'.obs;
|
||||
final isLoadingLocation = false.obs;
|
||||
|
||||
TankModel? editingTankModel;
|
||||
TankGuruDirectusModel? editingTankModel;
|
||||
LocationIQ? currentLocationIQ;
|
||||
String currentUserIdentId = helper.kCurrentUserIdentId; // Use the current user identId from helper
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
@@ -32,7 +36,7 @@ class EditController extends GetxController {
|
||||
|
||||
// Check if we're editing or creating new
|
||||
if (Get.arguments != null) {
|
||||
editingTankModel = Get.arguments as TankModel;
|
||||
editingTankModel = Get.arguments as TankGuruDirectusModel;
|
||||
isNewEntry.value = false;
|
||||
_loadExistingData();
|
||||
} else {
|
||||
@@ -47,12 +51,12 @@ class EditController extends GetxController {
|
||||
}
|
||||
|
||||
void _loadExistingData() {
|
||||
dateController.text = editingTankModel!.szDate;
|
||||
odometerController.text = editingTankModel!.szOdometer;
|
||||
litersController.text = editingTankModel!.szLiters;
|
||||
pricePerLiterController.text = editingTankModel!.szPricePerLiter;
|
||||
locationController.text = editingTankModel!.szLocation;
|
||||
calculatedTotal.value = editingTankModel!.szPriceTotal;
|
||||
dateController.text = editingTankModel!.tankDate!;
|
||||
odometerController.text = editingTankModel!.odometer!;
|
||||
litersController.text = editingTankModel!.liter!;
|
||||
pricePerLiterController.text = editingTankModel!.pricePerLiter!;
|
||||
locationController.text = editingTankModel!.standort!;
|
||||
calculatedTotal.value = editingTankModel!.szPriceTotal!;
|
||||
}
|
||||
|
||||
void _setDefaultDate() {
|
||||
@@ -147,26 +151,26 @@ class EditController extends GetxController {
|
||||
isLoading.value = true;
|
||||
|
||||
try {
|
||||
final userId = await appwriteService.getCurrentUserId();
|
||||
if (userId == null) {
|
||||
final userId = currentUserIdentId;
|
||||
if (userId == '') {
|
||||
throw Exception('Benutzer nicht eingeloggt');
|
||||
}
|
||||
|
||||
final data = {
|
||||
'userId': userId,
|
||||
'date': dateController.text,
|
||||
'odometer': odometerController.text,
|
||||
'liters': litersController.text.replaceAll(',', '.'),
|
||||
'pricePerLiter': pricePerLiterController.text.replaceAll(',', '.'),
|
||||
'location': locationController.text,
|
||||
'UserIdentId': userId,
|
||||
'TankDate': dateController.text,
|
||||
'Odometer': odometerController.text,
|
||||
'Liter': litersController.text.replaceAll(',', '.'),
|
||||
'PricePerLiter': pricePerLiterController.text.replaceAll(',', '.'),
|
||||
'Standort': locationController.text,
|
||||
};
|
||||
|
||||
bool success;
|
||||
if (isNewEntry.value) {
|
||||
success = await appwriteService.createDocumentInCollection(data);
|
||||
success = await directusService.createDocumentInTable(data);
|
||||
} else {
|
||||
success = await appwriteService.updateDocumentInCollection(
|
||||
editingTankModel!.szDocumentId,
|
||||
success = await directusService.updateDocumentInTable(
|
||||
editingTankModel!.iD,
|
||||
data,
|
||||
);
|
||||
}
|
||||
@@ -181,7 +185,7 @@ class EditController extends GetxController {
|
||||
backgroundColor: Colors.green[100],
|
||||
colorText: Colors.green[900],
|
||||
);
|
||||
Get.offAllNamed(HomePage.namedRoute);
|
||||
Get.offAllNamed(HomePage.namedRoute, arguments: {'userIdentId': userId});
|
||||
} else {
|
||||
throw Exception('Speichern fehlgeschlagen');
|
||||
}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
import 'package:get/get.dart';
|
||||
import '../models/tank_model.dart';
|
||||
//import '../models/tank_model.dart';
|
||||
import '../models/tank_guru_directus_model.dart';
|
||||
|
||||
class GraphController extends GetxController {
|
||||
final listTankModel = <TankModel>[].obs;
|
||||
final listTankModel = <TankGuruDirectusModel>[].obs;
|
||||
final sumYearKm = 0.0.obs;
|
||||
final sumYearLiters = 0.0.obs;
|
||||
final sumYearPrice = 0.0.obs;
|
||||
@@ -12,7 +13,7 @@ class GraphController extends GetxController {
|
||||
@override
|
||||
void onInit() {
|
||||
if (Get.arguments != null) {
|
||||
var args = Get.arguments as List<TankModel>;
|
||||
var args = Get.arguments as List<TankGuruDirectusModel>;
|
||||
listTankModel.addAll(args);
|
||||
_calcSumms();
|
||||
}
|
||||
@@ -36,23 +37,23 @@ class GraphController extends GetxController {
|
||||
|
||||
// Sort by date to calculate km correctly
|
||||
listTankModel.sort((a, b) {
|
||||
var dateA = DateTime.tryParse(a.szDate)!;
|
||||
var dateB = DateTime.tryParse(b.szDate)!;
|
||||
var dateA = DateTime.tryParse(a.tankDate!)!;
|
||||
var dateB = DateTime.tryParse(b.tankDate!)!;
|
||||
return dateA.compareTo(dateB);
|
||||
});
|
||||
|
||||
var firstOdometer = double.tryParse(listTankModel.first.szOdometer) ?? 0.0;
|
||||
var lastOdometer = double.tryParse(listTankModel.last.szOdometer) ?? 0.0;
|
||||
var firstOdometer = double.tryParse(listTankModel.first.odometer!) ?? 0.0;
|
||||
var lastOdometer = double.tryParse(listTankModel.last.odometer!) ?? 0.0;
|
||||
|
||||
sumYearKm.value = lastOdometer - firstOdometer;
|
||||
szTachostand.value = listTankModel.last.szOdometer;
|
||||
szTachostand.value = listTankModel.last.odometer!;
|
||||
|
||||
double totalLiters = 0.0;
|
||||
double totalPrice = 0.0;
|
||||
|
||||
for (var tank in listTankModel) {
|
||||
totalLiters += double.tryParse(tank.szLiters) ?? 0.0;
|
||||
totalPrice += double.tryParse(tank.szPriceTotal) ?? 0.0;
|
||||
totalLiters += double.tryParse(tank.liter!) ?? 0.0;
|
||||
totalPrice += double.tryParse(tank.szPriceTotal!) ?? 0.0;
|
||||
}
|
||||
|
||||
sumYearLiters.value = totalLiters;
|
||||
|
||||
@@ -1,21 +1,24 @@
|
||||
import 'package:flutter_tank_web_app/pages/gasstations_view.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../models/tank_model.dart';
|
||||
import '../models/tank_guru_directus_model.dart';
|
||||
import '../pages/detail_view.dart';
|
||||
import '../pages/edit_view.dart';
|
||||
import '../services/appwrite_service.dart';
|
||||
import '../pages/graph_view.dart';
|
||||
import '../pages/gasstations_view.dart';
|
||||
import '../services/directus_service.dart';
|
||||
|
||||
class HomeController extends GetxController {
|
||||
final isLoading = false.obs;
|
||||
final listTankModel = <TankModel>[].obs;
|
||||
final appwriteService = AppwriteService();
|
||||
//final listTankModel = <TankModel>[].obs;
|
||||
final listTankModel = <TankGuruDirectusModel>[].obs;
|
||||
//final appwriteService = AppwriteService();
|
||||
final directusService = DirectusService();
|
||||
final currentYear = DateTime.now().year.obs;
|
||||
final argumentMap = Get.arguments as Map<String, dynamic>?;
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
_loadListDocument();
|
||||
_loadListDirectus();
|
||||
super.onInit();
|
||||
}
|
||||
|
||||
@@ -27,45 +30,46 @@ class HomeController extends GetxController {
|
||||
|
||||
void changeYear(int year) {
|
||||
currentYear.value = year;
|
||||
_loadListDocument();
|
||||
_loadListDirectus();
|
||||
update();
|
||||
}
|
||||
|
||||
Future<void> _loadListDocument() async {
|
||||
Future<void> _loadListDirectus() async {
|
||||
isLoading.value = true;
|
||||
if (listTankModel.isNotEmpty) {
|
||||
listTankModel.clear();
|
||||
}
|
||||
var userId = await appwriteService.getCurrentUserId();
|
||||
var userId = argumentMap?['userIdentId'] as String?;
|
||||
if (userId == null) {
|
||||
//User nicht eingeloggt, evtl. zur Login-Seite navigieren
|
||||
update();
|
||||
return;
|
||||
}
|
||||
var resultList = await appwriteService.getDocumentsFromCollection(userId);
|
||||
var resultList = await directusService.getTankGuruDataFromTable(userId);
|
||||
if (resultList.isEmpty) {
|
||||
//Dokumente erfolgreich geladen, hier können Sie die Liste verarbeiten
|
||||
print('Dokumente wurden nicht geladen: ${resultList.length}');
|
||||
} else {
|
||||
for (var doc in resultList) {
|
||||
var tankModel = TankModel.fromMap(doc.data);
|
||||
listTankModel.add(tankModel);
|
||||
}
|
||||
listTankModel(
|
||||
resultList
|
||||
.map((tankStopJson) => TankGuruDirectusModel.fromJson(tankStopJson))
|
||||
.toList(),
|
||||
);
|
||||
if (listTankModel.isNotEmpty) {
|
||||
var sortList = listTankModel.where((tank) {
|
||||
var year = (DateTime.tryParse(tank.szDate)!).year;
|
||||
var year = (DateTime.tryParse(tank.tankDate!)!).year;
|
||||
return year == currentYear.value;
|
||||
}).toList();
|
||||
listTankModel.clear();
|
||||
listTankModel.addAll(sortList);
|
||||
listTankModel.sort((a, b) {
|
||||
var dateA = DateTime.tryParse(a.szDate)!;
|
||||
var dateB = DateTime.tryParse(b.szDate)!;
|
||||
var dateA = DateTime.tryParse(a.tankDate!)!;
|
||||
var dateB = DateTime.tryParse(b.tankDate!)!;
|
||||
return dateB.compareTo(dateA);
|
||||
});
|
||||
for (var tank in listTankModel) {
|
||||
print(
|
||||
'SortTankModel: ${tank.szDate} - ${tank.szLiters}L - ${tank.szPricePerLiter}€/L - Total: ${tank.szPriceTotal}€',
|
||||
'SortTankModel: ${tank.tankDate!} - ${tank.liter}L - ${tank.pricePerLiter}€/L - Total: ${tank.szPriceTotal}€',
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -75,27 +79,18 @@ class HomeController extends GetxController {
|
||||
}
|
||||
|
||||
Future<void> logout() async {
|
||||
var logoutSuccess = await appwriteService.logout();
|
||||
if (logoutSuccess) {
|
||||
Get.snackbar(
|
||||
'Logout erfolgreich',
|
||||
'Sie wurden abgemeldet.',
|
||||
snackPosition: SnackPosition.BOTTOM,
|
||||
);
|
||||
Get.offAllNamed('/login-page');
|
||||
} else {
|
||||
Get.snackbar(
|
||||
'Logout fehlgeschlagen',
|
||||
'Bitte versuchen Sie es erneut.',
|
||||
snackPosition: SnackPosition.BOTTOM,
|
||||
);
|
||||
}
|
||||
Get.snackbar(
|
||||
'Logout erfolgreich',
|
||||
'Sie wurden abgemeldet.',
|
||||
snackPosition: SnackPosition.BOTTOM,
|
||||
);
|
||||
Get.offAllNamed('/login-page');
|
||||
}
|
||||
|
||||
Future<void> viewTankDetails(TankModel tank) async {
|
||||
Future<void> viewTankDetails(TankGuruDirectusModel tank) async {
|
||||
var result = await Get.toNamed(DetailPage.namedRoute, arguments: tank);
|
||||
if (result == 'deleted') {
|
||||
_loadListDocument();
|
||||
_loadListDirectus();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import '../helper/helper.dart' as helper;
|
||||
import '../models/tank_user_model.dart';
|
||||
import '../pages/home_view.dart';
|
||||
import '../pages/signin_view.dart';
|
||||
import '../services/appwrite_service.dart';
|
||||
import '../services/directus_service.dart';
|
||||
import '../helper/password_helper.dart';
|
||||
|
||||
class LoginController extends GetxController {
|
||||
final emailController = TextEditingController();
|
||||
final passwordController = TextEditingController();
|
||||
final appwriteService = AppwriteService();
|
||||
final directusService = DirectusService();
|
||||
|
||||
@override
|
||||
void onReady() {}
|
||||
@@ -18,29 +21,57 @@ class LoginController extends GetxController {
|
||||
passwordController.dispose();
|
||||
}
|
||||
|
||||
void login() async {
|
||||
void newLoginDirectus() async {
|
||||
var email = emailController.text;
|
||||
var password = passwordController.text;
|
||||
// Hier können Sie die Login-Logik implementieren
|
||||
print('Login mit E-Mail: $email, Passwort: $password');
|
||||
var loginSuccess = await appwriteService.login(email, password);
|
||||
if (loginSuccess) {
|
||||
var result = await directusService.getTankUserList();
|
||||
if(result.isEmpty) {
|
||||
Get.snackbar(
|
||||
'Login fehlgeschlagen',
|
||||
'Fehler beim Abrufen der Benutzerdaten. Bitte versuchen Sie es später erneut.',
|
||||
snackPosition: SnackPosition.BOTTOM,
|
||||
);
|
||||
return;
|
||||
}
|
||||
var tankUserList = result.map((userJson) => TankUser.fromJson(userJson)).toList();
|
||||
var identId = tankUserList.firstWhereOrNull((user) => user.email == email)?.userIdentId ?? '';
|
||||
if(identId.isEmpty) {
|
||||
Get.snackbar(
|
||||
'Login fehlgeschlagen',
|
||||
'Benutzer mit dieser E-Mail-Adresse wurde nicht gefunden.',
|
||||
snackPosition: SnackPosition.BOTTOM,
|
||||
);
|
||||
return;
|
||||
}
|
||||
var storedHash = tankUserList.firstWhereOrNull((user) => user.email == email)?.passwordHash ?? '';
|
||||
if(storedHash.isEmpty) {
|
||||
Get.snackbar(
|
||||
'Login fehlgeschlagen',
|
||||
'Kein gespeicherter Passwort-Hash für diesen Benutzer gefunden.',
|
||||
snackPosition: SnackPosition.BOTTOM,
|
||||
);
|
||||
return;
|
||||
}
|
||||
var isPassCorrect = await PasswordHelper.verifyPassword(password, storedHash);
|
||||
if(isPassCorrect && identId.isNotEmpty) {
|
||||
Get.snackbar(
|
||||
'Login erfolgreich',
|
||||
'Willkommen zurück!',
|
||||
snackPosition: SnackPosition.BOTTOM,
|
||||
);
|
||||
Get.offAndToNamed(HomePage.namedRoute);
|
||||
print('Login erfolgreich für Benutzer mit IdentId: $identId');
|
||||
helper.kCurrentUserIdentId = identId; // Set the current user identId
|
||||
Get.offAndToNamed(HomePage.namedRoute, arguments: {'userIdentId': identId});
|
||||
} else {
|
||||
Get.snackbar(
|
||||
'Login fehlgeschlagen',
|
||||
'Bitte überprüfen Sie Ihre E-Mail und Ihr Passwort und versuchen Sie es erneut.',
|
||||
'Bitte überprüfen Sie Ihre E-Mail und Ihr Passwort und versuchen Sie es erneut\noder registrieren Sie sich, wenn Sie noch kein Konto haben.',
|
||||
snackPosition: SnackPosition.BOTTOM,
|
||||
);
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void goToSignInPage() {
|
||||
Get.offAndToNamed(SigninPage.namedRoute);
|
||||
Get.offAndToNamed(SigninPage.namedRoute, arguments: {'userIdentId': ''});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,19 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import '../pages/home_view.dart';
|
||||
import '../pages/login_view.dart';
|
||||
import '../services/appwrite_service.dart';
|
||||
import '../services/directus_service.dart';
|
||||
|
||||
class SigninController extends GetxController {
|
||||
final userNameController = TextEditingController();
|
||||
final emailController = TextEditingController();
|
||||
final passwordController = TextEditingController();
|
||||
final appwriteService = AppwriteService();
|
||||
final cityController = TextEditingController();
|
||||
final countryController = TextEditingController();
|
||||
final directusService = DirectusService();
|
||||
late String userIdentId = Get.arguments['userIdentId'] ?? '';
|
||||
|
||||
@override
|
||||
void onReady() {}
|
||||
@@ -18,6 +23,8 @@ class SigninController extends GetxController {
|
||||
userNameController.dispose();
|
||||
emailController.dispose();
|
||||
passwordController.dispose();
|
||||
cityController.dispose();
|
||||
countryController.dispose();
|
||||
}
|
||||
|
||||
void register() async {
|
||||
@@ -27,16 +34,15 @@ class SigninController extends GetxController {
|
||||
var userName = userNameController.text;
|
||||
var email = emailController.text;
|
||||
var password = passwordController.text;
|
||||
var city = cityController.text; // Hier können Sie die Stadt aus den Eingaben abrufen, falls erforderlich
|
||||
var country = countryController.text; // Hier können Sie das Land aus den Eingaben abrufen, falls erforderlich
|
||||
// Testausgabe
|
||||
print(
|
||||
'Registrieren mit Benutzername: $userName, E-Mail: $email, Passwort: $password',
|
||||
);
|
||||
//appwrite Registrierung und login Logik hier einfügen
|
||||
var registrationSuccess = await appwriteService.register(
|
||||
userName,
|
||||
email,
|
||||
password,
|
||||
'Registrieren mit Benutzername: $userName, E-Mail: $email, Passwort: $password, Stadt: $city, Land: $country',
|
||||
);
|
||||
//directus Registrierung und login Logik hier einfügen
|
||||
bool registrationSuccess = await directusService.register(userName, email, password, city, country);
|
||||
|
||||
//Nach erfolgreicher Registrierung Meldung und zur Startseite navigieren
|
||||
if (registrationSuccess) {
|
||||
Get.snackbar(
|
||||
@@ -44,7 +50,8 @@ class SigninController extends GetxController {
|
||||
'Willkommen, $userName!',
|
||||
snackPosition: SnackPosition.BOTTOM,
|
||||
);
|
||||
Get.offAndToNamed(HomePage.namedRoute);
|
||||
userIdentId = base64Encode(utf8.encode('$email:$password'));
|
||||
Get.offAndToNamed(HomePage.namedRoute, arguments: {'userIdentId': userIdentId});
|
||||
} else {
|
||||
Get.snackbar(
|
||||
'Registrierung fehlgeschlagen',
|
||||
|
||||
Reference in New Issue
Block a user