tenantId; $db = Database::getInstance(); $stmt = $db->prepare("SELECT id, name, email, role, is_active, created_at FROM users WHERE tenant_id = ? AND deleted_at IS NULL ORDER BY created_at DESC"); $stmt->execute([$tenantId]); $users = $stmt->fetchAll(); Response::json([ 'success' => true, 'data' => $users ]); } catch (Throwable $e) { Response::error('Failed to load users: ' . $e->getMessage(), 'USERS_FETCH_ERROR', 500); } } public function create(Request $request): void { $name = $request->input('name'); $email = $request->input('email'); $password = $request->input('password'); $role = $request->input('role', 'accountant'); if (!$name || !$email || !$password) { Response::error('Name, email, and password are required', 'VALIDATION_ERROR', 422); return; } try { // Check if email exists if ($this->userModel->findByEmail($email)) { Response::error('Email already in use', 'EMAIL_EXISTS', 409); return; } $userId = \Ramsey\Uuid\Uuid::uuid4()->toString(); $this->userModel->create([ 'id' => $userId, 'tenant_id' => $request->tenantId, 'name' => $name, 'email' => $email, 'password_hash' => password_hash($password, PASSWORD_BCRYPT), 'role' => $role, 'is_active' => 1 ]); Response::json([ 'success' => true, 'message' => 'User created successfully', 'data' => ['id' => $userId] ]); } catch (Throwable $e) { Response::error($e->getMessage(), 'USER_CREATE_ERROR', 500); } } }