]> git.digitality.be Git - pdw25-26/commitdiff
Mobile : Update App.tsx + AuthScreen
authorThibaud Moustier <thibaudmoustier0@gmail.com>
Sat, 28 Feb 2026 17:55:36 +0000 (18:55 +0100)
committerThibaud Moustier <thibaudmoustier0@gmail.com>
Sat, 28 Feb 2026 17:55:36 +0000 (18:55 +0100)
Wallette/mobile/App.tsx
Wallette/mobile/src/screens/AuthScreen.tsx

index 1eb69817cce3bd5424b462a3db81323a8cf9c97a..8645062fb9a1930821fca7f8efa363315c8a8336 100644 (file)
@@ -22,8 +22,9 @@ import AboutScreen from "./src/screens/AboutScreen";
 
 import AccountMenu from "./src/components/AccountMenu";
 
-import { loadSession, clearSession } from "./src/utils/sessionStorage";
+import { loadSession } from "./src/utils/sessionStorage";
 import { hasSeenTutorial } from "./src/utils/tutorialStorage";
+import { logout as authLogout } from "./src/services/api/authApi";
 
 export type RootStackParamList = {
   Dashboard: undefined;
@@ -76,7 +77,7 @@ export default function App() {
       setReady(true);
     }
 
-    init();
+    void init();
 
     return () => {
       active = false;
@@ -90,10 +91,11 @@ export default function App() {
         text: "Déconnexion",
         style: "destructive",
         onPress: async () => {
-          await clearSession();
+          await authLogout();
           setIsAuthed(false);
           setSessionEmail("—");
           setNeedsTutorial(false);
+          setMenuVisible(false);
         },
       },
     ]);
@@ -206,14 +208,14 @@ export default function App() {
         />
 
         <Stack.Screen name="Settings" options={{ title: "Paramètres" }}>
-        {() => (
-        <SettingsScreen
-            onRequestTutorial={() => {
-            // Force le tuto à s'afficher hors stack
-            setNeedsTutorial(true);
-          }}
-         />
-        )}
+          {() => (
+            <SettingsScreen
+              onRequestTutorial={() => {
+                // Force le tuto à s'afficher hors stack
+                setNeedsTutorial(true);
+              }}
+            />
+          )}
         </Stack.Screen>
 
         <Stack.Screen
index 8ac998653cf639a4185778fd385440232115d168..db3ab9eaab6a28f8bcfc0b021784f8625c48b6b7 100644 (file)
@@ -3,17 +3,19 @@ import { SafeAreaView } from "react-native-safe-area-context";
 import { useMemo, useState } from "react";
 
 import { ui } from "../components/ui/uiStyles";
-import { saveSession } from "../utils/sessionStorage";
-import { createUser, verifyLogin } from "../utils/authUsersStorage";
+import { login as authLogin, register as authRegister } from "../services/api/authApi";
 
 /**
- * AuthScreen (Step 4 - local, sans API)
- * ------------------------------------
+ * AuthScreen (Step local, sans API serveur)
+ * ----------------------------------------
  * Mode Connexion + Mode Création de compte.
  * - Identifiant: email OU username
  * - Mot de passe obligatoire
  *
- * Plus tard : on remplacera createUser/verifyLogin par des appels REST.
+ * IMPORTANT :
+ * - L'écran appelle authApi (façade).
+ * - Plus tard, authApi sera remplacé par des appels REST,
+ *   sans modifier cet écran.
  */
 export default function AuthScreen({ onAuthenticated }: { onAuthenticated: () => void }) {
   const [mode, setMode] = useState<"login" | "register">("login");
@@ -43,15 +45,9 @@ export default function AuthScreen({ onAuthenticated }: { onAuthenticated: () =>
     if (!l) return setError("Veuillez entrer un email ou un nom d’utilisateur.");
     if (!p || p.length < 6) return setError("Mot de passe invalide (min 6).");
 
-    const res = await verifyLogin({ login: l, password: p });
+    const res = await authLogin({ login: l, password: p });
     if (!res.ok) return setError(res.message);
 
-    await saveSession({
-      userId: res.user.userId,
-      email: res.user.email,
-      createdAtMs: Date.now(),
-    });
-
     onAuthenticated();
   };
 
@@ -65,11 +61,11 @@ export default function AuthScreen({ onAuthenticated }: { onAuthenticated: () =>
     const p2 = password2;
 
     if (!isValidEmail(e)) return setError("Email invalide.");
-    if (!isValidUsername(u)) return setError("Username invalide (3-20, lettres/chiffres/_).");
+    if (!isValidUsername(u)) return setError("Nom d’utilisateur invalide (3-20, lettres/chiffres/_).");
     if (!p1 || p1.length < 6) return setError("Mot de passe trop court (min 6).");
     if (p1 !== p2) return setError("Les mots de passe ne correspondent pas.");
 
-    const res = await createUser({
+    const res = await authRegister({
       email: e,
       username: u,
       displayName: d || undefined,
@@ -78,13 +74,6 @@ export default function AuthScreen({ onAuthenticated }: { onAuthenticated: () =>
 
     if (!res.ok) return setError(res.message);
 
-    // auto-login après création
-    await saveSession({
-      userId: res.user.userId,
-      email: res.user.email,
-      createdAtMs: Date.now(),
-    });
-
     onAuthenticated();
   };
 
@@ -102,9 +91,7 @@ export default function AuthScreen({ onAuthenticated }: { onAuthenticated: () =>
               setError(null);
             }}
           >
-            <Text style={[styles.tabText, mode === "login" && styles.tabTextActive]}>
-              Connexion
-            </Text>
+            <Text style={[styles.tabText, mode === "login" && styles.tabTextActive]}>Connexion</Text>
           </TouchableOpacity>
 
           <TouchableOpacity
@@ -114,9 +101,7 @@ export default function AuthScreen({ onAuthenticated }: { onAuthenticated: () =>
               setError(null);
             }}
           >
-            <Text style={[styles.tabText, mode === "register" && styles.tabTextActive]}>
-              Créer un compte
-            </Text>
+            <Text style={[styles.tabText, mode === "register" && styles.tabTextActive]}>Créer un compte</Text>
           </TouchableOpacity>
         </View>
 
@@ -148,7 +133,7 @@ export default function AuthScreen({ onAuthenticated }: { onAuthenticated: () =>
               </TouchableOpacity>
 
               <Text style={[ui.muted, { marginTop: 10 }]}>
-                (Mode local sans API : destiné au développement / démo.)
+                (Mode local sans API serveur : destiné au développement / démo.)
               </Text>
             </>
           ) : (
@@ -205,7 +190,7 @@ export default function AuthScreen({ onAuthenticated }: { onAuthenticated: () =>
               </TouchableOpacity>
 
               <Text style={[ui.muted, { marginTop: 10 }]}>
-                (Sans API : stockage local + hash SHA-256 pour éviter le mot de passe en clair.)
+                (Sans API serveur : stockage local + hash SHA-256, pas de mot de passe en clair.)
               </Text>
             </>
           )}