import 'dart:convert'; import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; import 'package:flutter/material.dart'; import 'package:supertokens_flutter/http.dart' as http; import 'package:supertokens_flutter/supertokens.dart'; class MihUserServices { final baseAPI = AppEnviroment.baseApiUrl; static Future isUsernameUnique( String username, BuildContext context, ) async { var response = await http.get(Uri.parse( "${AppEnviroment.baseApiUrl}/users/validate/username/$username")); if (response.statusCode == 200) { String body = response.body; var jsonBody = jsonDecode(body); return jsonBody["available"]; } else { throw Exception( "Error: isUsernameUnique status code ${response.statusCode}"); } } Future createUser( String email, String app_id, BuildContext context, ) async { var response = await http.post( Uri.parse("$baseAPI/user/insert/"), headers: { "Content-Type": "application/json; charset=UTF-8" }, body: jsonEncode({ "email": email, "app_id": app_id, }), ); if (response.statusCode == 201) { context.goNamed( 'mihHome', extra: AuthArguments( true, true, ), ); } else { internetConnectionPopUp(context); } } Future> searchUsers( String searchText, BuildContext context, ) async { var response = await http.get( Uri.parse("${AppEnviroment.baseApiUrl}/users/search/$searchText"), headers: { "Content-Type": "application/json; charset=UTF-8" }, ); if (response.statusCode == 200) { Iterable l = jsonDecode(response.body); List users = List.from(l.map((model) => AppUser.fromJson(model))); return users; } else { throw Exception('failed to load users'); } } Future getUserDetails( String app_id, BuildContext context, ) async { var response = await http.get( Uri.parse("${AppEnviroment.baseApiUrl}/user/$app_id"), headers: { "Content-Type": "application/json; charset=UTF-8" }, ); if (response.statusCode == 200) { String body = response.body; var jsonBody = jsonDecode(body); return AppUser.fromJson(jsonBody); } else { return null; } } Future updateUserV2( AppUser signedInUser, String firstName, String lastName, String username, String profilePicture, String purpose, bool isBusinessUser, BuildContext context, ) async { var fileName = profilePicture.replaceAll(RegExp(r' '), '-'); var filePath = "${signedInUser.app_id}/profile_files/$fileName"; String profileType; if (isBusinessUser) { profileType = "business"; } else { profileType = "personal"; } var response = await http.put( Uri.parse("${AppEnviroment.baseApiUrl}/user/update/v2/"), headers: { "Content-Type": "application/json; charset=UTF-8" }, body: jsonEncode({ "idusers": signedInUser.idUser, "username": username, "fnam": firstName, "lname": lastName, "type": profileType, "pro_pic_path": filePath, "purpose": purpose, }), ); if (response.statusCode == 200) { return response.statusCode; } else { return response.statusCode; } } Future updateUser( AppUser signedInUser, String firstName, String lastName, String username, String profilePicture, bool isBusinessUser, BuildContext context, ) async { var fileName = profilePicture.replaceAll(RegExp(r' '), '-'); var filePath = "${signedInUser.app_id}/profile_files/$fileName"; String profileType; if (isBusinessUser) { profileType = "business"; } else { profileType = "personal"; } var response = await http.put( Uri.parse("${AppEnviroment.baseApiUrl}/user/update/"), headers: { "Content-Type": "application/json; charset=UTF-8" }, body: jsonEncode({ "idusers": signedInUser.idUser, "username": username, "fnam": firstName, "lname": lastName, "type": profileType, "pro_pic_path": filePath, }), ); if (response.statusCode == 200) { return response.statusCode; } else { return response.statusCode; } } static Future deleteAccount( String app_id, BuildContext context, ) async { loadingPopUp(context); var response = await http.delete( Uri.parse("${AppEnviroment.baseApiUrl}/user/delete/all/"), headers: { "Content-Type": "application/json; charset=UTF-8" }, body: jsonEncode({ "app_id": app_id, "env": AppEnviroment.getEnv(), }), ); if (response.statusCode == 200) { await SuperTokens.signOut(completionHandler: (error) { print(error); }); if (await SuperTokens.doesSessionExist() == false) { // Navigator.of(context).pop(); // Pop loading dialog // Navigator.of(context).pop(); // Pop delete account dialog // Navigator.of(context).pop(); // Pop Mzansi Profile // Navigator.of(context).popAndPushNamed( // '/', // arguments: AuthArguments(true, false), // ); //Pop and push to login page successPopUp( "Account Deleted Successfully", "Your account has been successfully deleted. We are sorry to see you go, but we respect your decision.", context, ); // Show success message. } } else { Navigator.of(context).pop(); // Pop loading dialog internetConnectionPopUp(context); } } //================== POP UPS ========================================================================== static void internetConnectionPopUp(BuildContext context) { showDialog( context: context, builder: (context) { return const MIHErrorMessage( errorType: "Internet Connection", ); }, ); } static void successPopUp(String title, String message, BuildContext context) { showDialog( context: context, builder: (context) { return MihPackageAlert( alertIcon: Icon( Icons.check_circle_outline_rounded, size: 150, color: MihColors.getGreenColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ), alertTitle: title, alertBody: Column( children: [ Text( message, style: TextStyle( color: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), fontSize: 15, fontWeight: FontWeight.bold, ), ), const SizedBox(height: 25), Center( child: MihButton( onPressed: () { context.goNamed( 'mihHome', extra: AuthArguments( true, true, ), ); }, buttonColor: MihColors.getGreenColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), elevation: 10, width: 300, child: Text( "Dismiss", style: TextStyle( color: MihColors.getPrimaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), fontSize: 20, fontWeight: FontWeight.bold, ), ), ), ) ], ), alertColour: MihColors.getGreenColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ); // return MIHSuccessMessage( // successType: "Success", // successMessage: message, // ); }, ); } static void loadingPopUp(BuildContext context) { showDialog( context: context, builder: (context) { return const Mihloadingcircle(); }, ); } }