public IActionResult ReconfigureDatabase(string databaseId) { DatabaseInstance targetDatabase = DocumentSession.GetDatabaseById(databaseId); if (targetDatabase == null) { return(NotFound(new { Id = databaseId, EntityType = "Database", Message = $"No database found with Id '{databaseId}'." })); } Tenant ownerTenant = DocumentSession.GetTenantById(targetDatabase.TenantId); if (ownerTenant == null) { return(NotFound(new { Id = targetDatabase.TenantId, EntityType = "Tenant", Message = $"Database's owning tenant not found with Id '{targetDatabase.TenantId}'." })); } DatabaseServer targetServer = DocumentSession.GetDatabaseServerById(targetDatabase.ServerId); if (targetServer == null) { return(NotFound(new { Id = targetDatabase.ServerId, EntityType = "DatabaseServer", Message = $"Database server not found with Id '{targetDatabase.ServerId}'." })); } if (targetServer.Status != ProvisioningStatus.Ready) { return(StatusCode(StatusCodes.Status409Conflict, new { Id = targetServer.Id, TenantId = ownerTenant.Id, EntityType = "DatabaseServer", Action = targetServer.Action, Status = targetServer.Status, Message = $"Cannot re-configure database {targetDatabase.Name} in server {targetServer.Id} because a server-level action ({targetServer.Action}) is already in progress." })); } if (targetDatabase.Status != ProvisioningStatus.Ready) { return(StatusCode(StatusCodes.Status409Conflict, new { Id = targetServer.Id, ServerId = targetServer.Id, TenantId = ownerTenant.Id, EntityType = "Database", Action = targetDatabase.Action, Status = targetDatabase.Status, Message = $"Cannot re-configure database {targetDatabase.Name} in server {targetServer.Id} because a database-level action ({targetDatabase.Action}) is already in progress." })); } targetDatabase.Action = ProvisioningAction.Reconfigure; targetDatabase.Status = ProvisioningStatus.Pending; DocumentSession.SaveChanges(); return(StatusCode(StatusCodes.Status202Accepted, new { Id = targetDatabase.Id, Name = targetDatabase.Name, EntityType = "Database", Message = $"Database '{targetDatabase.Name}' queued for reconfiguration on server '{targetServer.Name}'." })); }