validate([ 'email' => 'required|email|max:255', 'password' => 'required|min:6|max:255', 'name' => 'required|min:2|max:100', ]); $db = Database::getInstance(); // Vérifier si l'email existe déjà $stmt = $db->prepare('SELECT id FROM users WHERE email = :email'); $stmt->execute(['email' => $data['email']]); if ($stmt->fetch()) { Response::error('Cet email est déjà utilisé', 409); } // Créer l'utilisateur $hashedPassword = password_hash($data['password'], PASSWORD_DEFAULT); $stmt = $db->prepare(' INSERT INTO users (email, password, name) VALUES (:email, :password, :name) '); $stmt->execute([ 'email' => $data['email'], 'password' => $hashedPassword, 'name' => $data['name'], ]); $userId = (int) $db->lastInsertId(); // Créer les statuts par défaut pour ce nouvel utilisateur $this->createDefaultStatuses($userId); // Créer une session $sessionId = Session::create($userId); Response::success([ 'session_id' => $sessionId, 'user' => [ 'id' => $userId, 'email' => $data['email'], 'name' => $data['name'], ], ], 'Inscription réussie', 201); } /** * POST /auth/login */ public function login(): void { $data = $this->validate([ 'email' => 'required|email', 'password' => 'required', ]); $db = Database::getInstance(); $stmt = $db->prepare('SELECT id, email, name, password FROM users WHERE email = :email'); $stmt->execute(['email' => $data['email']]); $user = $stmt->fetch(); if (!$user || !password_verify($data['password'], $user['password'])) { Response::error('Email ou mot de passe incorrect', 401); } // Créer une session $sessionId = Session::create($user['id']); Response::success([ 'session_id' => $sessionId, 'user' => [ 'id' => $user['id'], 'email' => $user['email'], 'name' => $user['name'], ], ], 'Connexion réussie'); } /** * POST /auth/logout */ public function logout(): void { $sessionId = $this->request->getSessionId(); if ($sessionId) { Session::destroy($sessionId); } Response::success(null, 'Déconnexion réussie'); } /** * GET /auth/me */ public function me(): void { $this->requireAuth(); Response::success([ 'user' => $this->user, ]); } /** * Créer les statuts par défaut pour un nouvel utilisateur */ private function createDefaultStatuses(int $userId): void { $db = Database::getInstance(); $defaultStatuses = [ ['code' => 10, 'name' => 'Backlog', 'color' => '#6B7280', 'position' => 10], ['code' => 20, 'name' => 'À faire', 'color' => '#3B82F6', 'position' => 20], ['code' => 30, 'name' => 'En cours', 'color' => '#F59E0B', 'position' => 30], ['code' => 40, 'name' => 'À tester', 'color' => '#8B5CF6', 'position' => 40], ['code' => 50, 'name' => 'Livré', 'color' => '#10B981', 'position' => 50], ['code' => 60, 'name' => 'Terminé', 'color' => '#059669', 'position' => 60], ['code' => 70, 'name' => 'Archivé', 'color' => '#9CA3AF', 'position' => 70], ]; $stmt = $db->prepare(' INSERT INTO statuses (user_id, project_id, code, name, color, position) VALUES (:user_id, NULL, :code, :name, :color, :position) '); foreach ($defaultStatuses as $status) { $stmt->execute([ 'user_id' => $userId, 'code' => $status['code'], 'name' => $status['name'], 'color' => $status['color'], 'position' => $status['position'], ]); } } }