+ );
+ });
+}
\ No newline at end of file
diff --git a/src/app/utils/auth.js b/src/app/utils/auth.js
index 7aeb8f2..45f44ec 100644
--- a/src/app/utils/auth.js
+++ b/src/app/utils/auth.js
@@ -9,31 +9,52 @@ const databases = new Databases(client);
export async function getCurrentUserWithRole() {
try {
+ // 1. Get current user from Auth
const user = await account.get();
if (!user || !user.$id) {
throw new Error("User not authenticated");
}
+ // 2. Database constants
const dbId = "67e1452b00016444b37f";
- const collectionId = "67f0f1200006897dc192";
+ const collectionId = "67f0f1200006897dc192"; // Your employee collection
- const response = await databases.listDocuments(dbId, collectionId, [
- Query.equal("userId", user.$id),
- ]);
+ // 3. Try to get employee record
+ let role = "unknown"; // Default role if not found
+ let userDoc = null;
+
+ try {
+ const response = await databases.listDocuments(dbId, collectionId, [
+ Query.equal("userId", user.$id),
+ Query.limit(1)
+ ]);
- const userDoc = response.documents[0];
+ if (response.documents.length > 0) {
+ userDoc = response.documents[0];
+ role = userDoc.role || "employee"; // Use "employee" if role exists but is empty
+ }
+ } catch (dbError) {
+ console.error("Database error:", dbError);
+ // Continue with default role
+ }
+ // 4. Return combined data
return {
- $id: user.$id, // Make sure to include this
- name: user.name,
- email: user.email,
- role: userDoc?.role || "unknown",
- // Include the document ID if needed
- docId: userDoc?.$id
+ ...user, // All original user properties
+ role, // Determined role ("admin", "employee", or "unknown")
+ isAdmin: role === "admin", // Convenience boolean
+ employeeDoc: userDoc // Full employee document if available
};
+
} catch (error) {
- console.error("Error fetching user with role:", error);
- throw error; // Throw instead of returning null
+ console.error("Error in getCurrentUserWithRole:", error);
+
+ // Convert Appwrite errors to more user-friendly messages
+ if (error.type === "general_unauthorized_scope") {
+ throw new Error("Please login to access this feature");
+ }
+
+ throw error; // Re-throw for components to handle
}
}
\ No newline at end of file