selectProjectId static method
Future<void>
selectProjectId(
- Client cloudApiClient,
- CommandLogger logger,
- ProjectLaunch projectSetup, {
- required bool inUtc,
Implementation
static Future<void> selectProjectId(
Client cloudApiClient,
CommandLogger logger,
ProjectLaunch projectSetup, {
required bool inUtc,
}) 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) {
final preexistingProject = existingProjects.firstWhereOrNull(
(p) => p.project.cloudProjectId == specifiedProjectId,
);
if (preexistingProject != null) {
projectSetup.preexistingProject = true;
projectSetup.preexistingProjectDeployed =
preexistingProject.latestDeployAttemptTime?.timestamp != null;
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,
inUtc,
);
if (selectedId != null) {
projectSetup.projectId = selectedId;
projectSetup.preexistingProject = true;
final preexistingProject = existingProjects.firstWhereOrNull(
(p) => p.project.cloudProjectId == selectedId,
);
projectSetup.preexistingProjectDeployed =
preexistingProject?.latestDeployAttemptTime?.timestamp != null;
return;
}
projectSetup.projectId = _getDefaultProjectId(projectSetup);
return;
}