import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_auth/firebase_auth.dart'; import '../constants.dart'; import '../enumerations.dart'; class UserService { final FirebaseFirestore _firestore = FirebaseFirestore.instance; Future saveUserData(UserCredential userCredential, String email, String firstname, String lastname) async { // create full name String fullName = (firstname.isNotEmpty && lastname.isNotEmpty) ? '$firstname $lastname' : (firstname.isNotEmpty ? firstname : (lastname.isNotEmpty ? lastname : '')); // save user info to users document await _firestore .collection(Constants.dbCollectionUsers) .doc(userCredential.user!.uid) .set( { 'uid': userCredential.user!.uid, 'email': email, 'firstname': firstname, 'lastname': lastname, 'name': fullName, }, ); } Future> getSkillsFromFirebase( bool skillsSought, String userId) async { // Fetch skills from Firestore DocumentSnapshot userDoc = await _firestore .collection(Constants.dbCollectionUsers) .doc(userId) .get(); if (userDoc.exists && userDoc.data() != null) { Map userData = userDoc.data()! as Map; // Explicit cast List? skills; if (skillsSought) { skills = userData[Constants.dbFieldUsersSkillsSought]; } else { skills = userData[ Constants.dbFieldUsersSkills]; //as List?; // Explicit cast } if (skills != null && skills.isNotEmpty) { // Convert skills from strings to enum values List userSkills = skills .map((skill) => SkillOption.values .firstWhere((x) => x.toString() == 'SkillOption.$skill')) .toList(); return userSkills; } } return []; } Future saveSkillsToFirebase(List selectedOptions, bool skillsSought, String userId) async { try { // Convert enum values to strings, removing leading EnumType with split List skills = selectedOptions .map((option) => option.toString().split('.').last) .toList(); // Update the corresponding 'skills' field in the user's document String keyToUpdate = skillsSought ? Constants.dbFieldUsersSkillsSought : Constants.dbFieldUsersSkills; _firestore .collection(Constants.dbCollectionUsers) .doc(userId) .update({keyToUpdate: skills}); return true; } catch (e) { return false; } } }