Updated delete warnings to indicate resources that may be invalidated as a result of deletion

This commit is contained in:
mabashian
2017-11-08 16:38:34 -05:00
parent 74c9b9cf6a
commit 4cd2f93c31
32 changed files with 807 additions and 133 deletions

View File

@@ -77,12 +77,16 @@ function search (params, config) {
});
}
function httpGet (resource) {
function httpGet (resource, config) {
const req = {
method: 'GET',
url: this.path
};
if (config && config.params) {
req.params = config.params;
}
if (typeof resource === 'object') {
this.model.GET = resource;
@@ -143,6 +147,19 @@ function httpOptions (resource) {
});
}
function httpDelete (resource) {
const req = {
method: 'DELETE',
url: this.path
};
if (resource) {
req.url = `${this.path}${resource}/`;
}
return $http(req).then(res => res);
}
function options (keys) {
return this.find('options', keys);
}
@@ -349,6 +366,32 @@ function graft (id) {
return new this.Constructor('get', item, true);
}
function getDependentResourceCounts (id) {
if (this.setDependentResources) {
this.setDependentResources(id);
} else {
return Promise.resolve([]);
}
const dependentResourcePromises = [];
this.dependentResources.forEach(dependentResource => {
const config = {};
if (dependentResource.params) {
config.params = dependentResource.params;
}
dependentResourcePromises.push(dependentResource.model.http.get(undefined, config)
.then((val) => ({
label: dependentResource.model.label,
count: val.data.count
})));
});
return Promise.all(dependentResourcePromises);
}
/**
* `create` is called on instantiation of every model. Models can be
* instantiated empty or with `GET` and/or `OPTIONS` requests that yield data.
@@ -407,12 +450,14 @@ function BaseModel (path, settings) {
this.set = set;
this.unset = unset;
this.extend = extend;
this.getDependentResourceCounts = getDependentResourceCounts;
this.http = {
get: httpGet.bind(this),
options: httpOptions.bind(this),
post: httpPost.bind(this),
put: httpPut.bind(this),
delete: httpDelete.bind(this)
};
this.model = {};

View File

@@ -1,6 +1,11 @@
const ENCRYPTED_VALUE = '$encrypted$';
let BaseModel;
let ProjectModel;
let JobTemplateModel;
let InventoryModel;
let InventorySourceModel;
let ModelsStrings;
function createFormSchema (method, config) {
if (!config) {
@@ -40,22 +45,73 @@ function assignInputGroupValues (inputs) {
});
}
function setDependentResources (id) {
this.dependentResources = [
{
model: new ProjectModel(),
params: {
credential: id
}
},
{
model: new JobTemplateModel(),
params: {
credential: id,
ask_credential_on_launch: false
}
},
{
model: new InventoryModel(),
params: {
insights_credential: id
}
},
{
model: new InventorySourceModel(),
params: {
credential: id
}
}
];
}
function CredentialModel (method, resource, graft) {
BaseModel.call(this, 'credentials');
this.Constructor = CredentialModel;
this.createFormSchema = createFormSchema.bind(this);
this.assignInputGroupValues = assignInputGroupValues.bind(this);
this.setDependentResources = setDependentResources.bind(this);
this.label = ModelsStrings.get('labels.CREDENTIAL');
return this.create(method, resource, graft);
}
function CredentialModelLoader (_BaseModel_) {
function CredentialModelLoader (
_BaseModel_,
_ProjectModel_,
_JobTemplateModel_,
_InventoryModel_,
_InventorySourceModel_,
_ModelsStrings_
) {
BaseModel = _BaseModel_;
ProjectModel = _ProjectModel_;
JobTemplateModel = _JobTemplateModel_;
InventoryModel = _InventoryModel_;
InventorySourceModel = _InventorySourceModel_;
ModelsStrings = _ModelsStrings_;
return CredentialModel;
}
CredentialModelLoader.$inject = ['BaseModel'];
CredentialModelLoader.$inject = [
'BaseModel',
'ProjectModel',
'JobTemplateModel',
'InventoryModel',
'InventorySourceModel',
'ModelsStrings'
];
export default CredentialModelLoader;

View File

@@ -1,4 +1,6 @@
let BaseModel;
let CredentialModel;
let ModelsStrings;
function categorizeByKind () {
const group = {};
@@ -30,22 +32,45 @@ function mergeInputProperties () {
});
}
function setDependentResources (id) {
this.dependentResources = [
{
model: new CredentialModel(),
params: {
credential_type: id
}
}
];
}
function CredentialTypeModel (method, resource, graft) {
BaseModel.call(this, 'credential_types');
this.Constructor = CredentialTypeModel;
this.categorizeByKind = categorizeByKind.bind(this);
this.mergeInputProperties = mergeInputProperties.bind(this);
this.setDependentResources = setDependentResources.bind(this);
this.label = ModelsStrings.get('labels.CREDENTIAL_TYPE');
return this.create(method, resource, graft);
}
function CredentialTypeModelLoader (_BaseModel_) {
function CredentialTypeModelLoader (
_BaseModel_,
_CredentialModel_,
_ModelsStrings_
) {
BaseModel = _BaseModel_;
CredentialModel = _CredentialModel_;
ModelsStrings = _ModelsStrings_;
return CredentialTypeModel;
}
CredentialTypeModelLoader.$inject = ['BaseModel'];
CredentialTypeModelLoader.$inject = [
'BaseModel',
'CredentialModel',
'ModelsStrings'
];
export default CredentialTypeModelLoader;

View File

@@ -0,0 +1,44 @@
let BaseModel;
let JobTemplateModel;
let ModelsStrings;
function setDependentResources (id) {
this.dependentResources = [
{
model: new JobTemplateModel(),
params: {
inventory: id
}
}
];
}
function InventoryModel (method, resource, graft) {
BaseModel.call(this, 'inventories');
this.Constructor = InventoryModel;
this.setDependentResources = setDependentResources.bind(this);
this.label = ModelsStrings.get('labels.INVENTORY');
return this.create(method, resource, graft);
}
function InventoryModelLoader (
_BaseModel_,
_JobTemplateModel_,
_ModelsStrings_
) {
BaseModel = _BaseModel_;
JobTemplateModel = _JobTemplateModel_;
ModelsStrings = _ModelsStrings_;
return InventoryModel;
}
InventoryModelLoader.$inject = [
'BaseModel',
'JobTemplateModel',
'ModelsStrings'
];
export default InventoryModelLoader;

View File

@@ -0,0 +1,44 @@
let BaseModel;
let InventorySourceModel;
let ModelsStrings;
function setDependentResources (id) {
this.dependentResources = [
{
model: new InventorySourceModel(),
params: {
source_script: id
}
}
];
}
function InventoryScriptModel (method, resource, graft) {
BaseModel.call(this, 'inventory_scripts');
this.Constructor = InventoryScriptModel;
this.setDependentResources = setDependentResources.bind(this);
this.label = ModelsStrings.get('labels.INVENTORY_SCRIPT');
return this.create(method, resource, graft);
}
function InventoryScriptModelLoader (
_BaseModel_,
_InventorySourceModel_,
_ModelsStrings_
) {
BaseModel = _BaseModel_;
InventorySourceModel = _InventorySourceModel_;
ModelsStrings = _ModelsStrings_;
return InventoryScriptModel;
}
InventoryScriptModelLoader.$inject = [
'BaseModel',
'InventorySourceModel',
'ModelsStrings'
];
export default InventoryScriptModelLoader;

View File

@@ -0,0 +1,44 @@
let BaseModel;
let WorkflowJobTemplateNodeModel;
let ModelsStrings;
function setDependentResources (id) {
this.dependentResources = [
{
model: new WorkflowJobTemplateNodeModel(),
params: {
unified_job_template: id
}
}
];
}
function InventorySourceModel (method, resource, graft) {
BaseModel.call(this, 'inventory_sources');
this.Constructor = InventorySourceModel;
this.setDependentResources = setDependentResources.bind(this);
this.label = ModelsStrings.get('labels.INVENTORY_SOURCE');
return this.create(method, resource, graft);
}
function InventorySourceModelLoader (
_BaseModel_,
_WorkflowJobTemplateNodeModel_,
_ModelsStrings_
) {
BaseModel = _BaseModel_;
WorkflowJobTemplateNodeModel = _WorkflowJobTemplateNodeModel_;
ModelsStrings = _ModelsStrings_;
return InventorySourceModel;
}
InventorySourceModelLoader.$inject = [
'BaseModel',
'WorkflowJobTemplateNodeModel',
'ModelsStrings'
];
export default InventorySourceModelLoader;

View File

@@ -0,0 +1,44 @@
let BaseModel;
let WorkflowJobTemplateNodeModel;
let ModelsStrings;
function setDependentResources (id) {
this.dependentResources = [
{
model: new WorkflowJobTemplateNodeModel(),
params: {
unified_job_template: id
}
}
];
}
function JobTemplateModel (method, resource, graft) {
BaseModel.call(this, 'job_templates');
this.Constructor = JobTemplateModel;
this.setDependentResources = setDependentResources.bind(this);
this.label = ModelsStrings.get('labels.JOB_TEMPLATE');
return this.create(method, resource, graft);
}
function JobTemplateModelLoader (
_BaseModel_,
_WorkflowJobTemplateNodeModel_,
_ModelsStrings_
) {
BaseModel = _BaseModel_;
WorkflowJobTemplateNodeModel = _WorkflowJobTemplateNodeModel_;
ModelsStrings = _ModelsStrings_;
return JobTemplateModel;
}
JobTemplateModelLoader.$inject = [
'BaseModel',
'WorkflowJobTemplateNodeModel',
'ModelsStrings'
];
export default JobTemplateModelLoader;

View File

@@ -1,19 +1,28 @@
let BaseModel;
let ModelsStrings;
function OrganizationModel (method, resource, graft) {
BaseModel.call(this, 'organizations');
this.Constructor = OrganizationModel;
this.label = ModelsStrings.get('labels.ORGANIZATION');
return this.create(method, resource, graft);
}
function OrganizationModelLoader (_BaseModel_) {
function OrganizationModelLoader (
_BaseModel_,
_ModelsStrings_
) {
BaseModel = _BaseModel_;
ModelsStrings = _ModelsStrings_;
return OrganizationModel;
}
OrganizationModelLoader.$inject = ['BaseModel'];
OrganizationModelLoader.$inject = [
'BaseModel',
'ModelsStrings'
];
export default OrganizationModelLoader;

View File

@@ -0,0 +1,64 @@
let BaseModel;
let JobTemplateModel;
let WorkflowJobTemplateNodeModel;
let InventorySourceModel;
let ModelsStrings;
function setDependentResources (id) {
this.dependentResources = [
{
model: new JobTemplateModel(),
params: {
project: id
}
},
{
model: new WorkflowJobTemplateNodeModel(),
params: {
unified_job_template: id
}
},
{
model: new InventorySourceModel(),
params: {
source_project: id
}
}
];
}
function ProjectModel (method, resource, graft) {
BaseModel.call(this, 'projects');
this.Constructor = ProjectModel;
this.setDependentResources = setDependentResources.bind(this);
this.label = ModelsStrings.get('labels.PROJECT');
return this.create(method, resource, graft);
}
function ProjectModelLoader (
_BaseModel_,
_JobTemplateModel_,
_WorkflowJobTemplateNodeModel_,
_InventorySourceModel_,
_ModelsStrings_
) {
BaseModel = _BaseModel_;
JobTemplateModel = _JobTemplateModel_;
WorkflowJobTemplateNodeModel = _WorkflowJobTemplateNodeModel_;
InventorySourceModel = _InventorySourceModel_;
ModelsStrings = _ModelsStrings_;
return ProjectModel;
}
ProjectModelLoader.$inject = [
'BaseModel',
'JobTemplateModel',
'WorkflowJobTemplateNodeModel',
'InventorySourceModel',
'ModelsStrings'
];
export default ProjectModelLoader;

View File

@@ -0,0 +1,28 @@
let BaseModel;
let ModelsStrings;
function WorkflowJobTemplateNodeModel (method, resource, graft) {
BaseModel.call(this, 'workflow_job_template_nodes');
this.Constructor = WorkflowJobTemplateNodeModel;
this.label = ModelsStrings.get('labels.WORKFLOW_JOB_TEMPLATE_NODE');
return this.create(method, resource, graft);
}
function WorkflowJobTemplateNodeModelLoader (
_BaseModel_,
_ModelsStrings_
) {
BaseModel = _BaseModel_;
ModelsStrings = _ModelsStrings_;
return WorkflowJobTemplateNodeModel;
}
WorkflowJobTemplateNodeModelLoader.$inject = [
'BaseModel',
'ModelsStrings'
];
export default WorkflowJobTemplateNodeModelLoader;

View File

@@ -6,6 +6,14 @@ import Credential from '~models/Credential';
import CredentialType from '~models/CredentialType';
import Me from '~models/Me';
import Organization from '~models/Organization';
import Project from '~models/Project';
import JobTemplate from '~models/JobTemplate';
import WorkflowJobTemplateNode from '~models/WorkflowJobTemplateNode';
import InventorySource from '~models/InventorySource';
import Inventory from '~models/Inventory';
import InventoryScript from '~models/InventoryScript';
import ModelsStrings from '~models/models.strings';
const MODULE_NAME = 'at.lib.models';
@@ -18,6 +26,13 @@ angular
.service('CredentialModel', Credential)
.service('CredentialTypeModel', CredentialType)
.service('MeModel', Me)
.service('OrganizationModel', Organization);
.service('OrganizationModel', Organization)
.service('ProjectModel', Project)
.service('JobTemplateModel', JobTemplate)
.service('WorkflowJobTemplateNodeModel', WorkflowJobTemplateNode)
.service('InventorySourceModel', InventorySource)
.service('InventoryModel', Inventory)
.service('InventoryScriptModel', InventoryScript)
.service('ModelsStrings', ModelsStrings);
export default MODULE_NAME;

View File

@@ -0,0 +1,22 @@
function ModelsStrings (BaseString) {
BaseString.call(this, 'models');
const { t } = this;
const ns = this.models;
ns.labels = {
CREDENTIAL: t.s('Credentials'),
CREDENTIAL_TYPE: t.s('Credential Types'),
INVENTORY: t.s('Inventories'),
INVENTORY_SCRIPT: t.s('Inventory Scripts'),
INVENTORY_SOURCE: t.s('Inventory Sources'),
JOB_TEMPLATE: t.s('Job Templates'),
ORGANIZATION: t.s('Organizations'),
PROJECT: t.s('Projects'),
WORKFLOW_JOB_TEMPLATE_NODE: t.s('Workflow Job Template Nodes')
};
}
ModelsStrings.$inject = ['BaseStringService'];
export default ModelsStrings;