Exemple #1
0
        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}'."
            }));
        }