db->fetch( "SELECT * FROM {$this->table} WHERE username = ?", [$username] ); } /** * @param $email * @return mixed */ public function findByEmail($email) { return $this->db->fetch( "SELECT * FROM {$this->table} WHERE email = ?", [$email] ); } /** * @param $data * @return mixed */ public function create($data) { // Validate unique username and email if ($this->findByUsername($data['username'])) { throw new Exception('Username already exists'); } if (isset($data['email']) && $this->findByEmail($data['email'])) { throw new Exception('Email already exists'); } // Hash password $data['password'] = password_hash($data['password'], PASSWORD_DEFAULT); return $this->insert($data); } /** * @param $userId * @param $newPassword * @return mixed */ public function updatePassword($userId, $newPassword) { $hashedPassword = password_hash($newPassword, PASSWORD_DEFAULT); return $this->update($userId, [ 'password' => $hashedPassword ]); } /** * @return mixed */ public function getAllWithLastLogin() { return $this->db->fetchAll( "SELECT u.id, u.username, u.full_name, u.email, u.role, u.status, (SELECT MAX(created_at) FROM activity_log WHERE user_id = u.id) as last_login FROM {$this->table} u ORDER BY u.username ASC" ); } }