API handlers should be lightweight and focused on request/response handling, not business logic. Extract specific parameters from requests and delegate complex operations to dedicated services rather than handling everything in the controller.

Key principles:

Example of what to avoid:

async reassignBooking(bookingUid: string, requestUser: UserWithProfile, request: Request) {
  // Handler doing too much work with entire request object
}

Better approach:

async reassignBooking(bookingUid: string, requestUser: UserWithProfile, teamMemberEmail?: string) {
  // Extract specific parameter in handler, pass only what's needed
  const teamMemberEmail = req.query.teamMemberEmail;
  return this.bookingService.reassignBooking(bookingUid, requestUser, teamMemberEmail);
}

This pattern improves testability, reduces coupling, and makes the API surface clearer by explicitly showing what data each operation requires.