listUsers static method

Future<void> listUsers(
  1. Client cloudApiClient, {
  2. required CommandLogger logger,
  3. bool inUtc = false,
  4. String? projectId,
  5. UserAccountStatus? ofAccountStatus,
  6. bool includeArchived = false,
})

Implementation

static Future<void> listUsers(
  final Client cloudApiClient, {
  required final CommandLogger logger,
  final bool inUtc = false,
  final String? projectId,
  final UserAccountStatus? ofAccountStatus,
  final bool includeArchived = false,
}) async {
  final users = await cloudApiClient.adminUsers.listUsers(
    cloudProjectId: projectId,
    ofAccountStatus: ofAccountStatus,
    includeArchived: includeArchived,
  );

  final userPlanMap = <String, String>{};
  for (final user in users) {
    switch (user.accountStatus) {
      case UserAccountStatus.registered:
        final procuredProducts = await cloudApiClient.adminProcurement
            .listProcuredProducts(userEmail: user.email);
        final procuredPlans = procuredProducts
            .where((final p) => p.$2 == 'PlanProduct')
            .map((final p) => p.$1);
        userPlanMap[user.email] = procuredPlans.join(', ');
        break;
      case UserAccountStatus.invited:
        userPlanMap[user.email] = '';
        break;
    }
  }

  final timezoneName = inUtc ? 'UTC' : 'local';

  final table = TablePrinter(
    headers: [
      'User',
      'Account status',
      'Created at ($timezoneName)',
      'Archived at ($timezoneName)',
      'Subscribed Plans',
    ],
    rows: users.map((final user) => [
          user.email,
          user.accountStatus.toString(),
          user.createdAt.toTzString(inUtc, 19),
          user.archivedAt?.toTzString(inUtc, 19),
          userPlanMap[user.email] ?? '',
        ]),
  );
  table.writeLines(logger.line);
}