selectProjectId static method
Future<void>
selectProjectId(
- Client cloudApiClient,
- CommandLogger logger,
- ProjectLaunch projectSetup
Implementation
static Future<void> selectProjectId(
final Client cloudApiClient,
final CommandLogger logger,
final ProjectLaunch projectSetup,
) async {
const invalidProjectIdMessage =
'Invalid project ID. Must be 6-32 characters long '
'and contain only lowercase letters, numbers, and hyphens.';
final existingProjects = await cloudApiClient.projects.listProjectsInfo(
includeLatestDeployAttemptTime: true,
);
final specifiedProjectId = projectSetup.projectId;
if (specifiedProjectId != null) {
if (existingProjects.any(
(final p) => p.project.cloudProjectId == specifiedProjectId,
)) {
projectSetup.preexistingProject = true;
return;
}
if (isValidProjectIdFormat(specifiedProjectId)) {
final confirm = await logger.confirm(
'Open the browser and create a new Serverpod Cloud project?',
defaultValue: true,
);
if (!confirm) {
logger.info('Setup cancelled.');
throw UserAbortException();
}
return;
}
throw FailureException(error: invalidProjectIdMessage);
}
final selectedId = await _selectExistingProject(
cloudApiClient,
existingProjects,
logger,
);
if (selectedId != null) {
projectSetup.projectId = selectedId;
projectSetup.preexistingProject = true;
return;
}
projectSetup.projectId = _getDefaultProjectId(projectSetup);
return;
}