entity-browser-frontend/app/service/db.js (80 lines of code) (raw):
angular.module('xodus')
.service('databaseService', [
'$http',
'$q',
'alert',
function ($http, $q, alert) {
var service = this;
service.getDatabases = getDatabases;
service.getTypes = getTypes;
service.add = add;
service.deleteDB = deleteDB;
service.startOrStop = startOrStop;
service.databases = null;
service.readonly = null;
function getDatabases() {
var hubKey = 'jetPassServerDb';
var youtrackKey = 'teamsysstore';
if (service.databases) {
return $q.when(service.databases);
}
return $http.get('api/dbs').then(function (data) {
service.readonly = data.data.readonly;
service.databases = data.data.dbs.map(function (db) {
if (db.key === hubKey) {
db.description = 'HUB';
} else if (db.key === youtrackKey) {
db.description = 'YouTrack';
} else {
db.description = db.key;
}
return db;
});
return service.databases;
});
}
function add(db) {
return $http.post('api/dbs', db).then(function (response) {
service.databases.push(response.data);
return response.data;
}).catch(alert.showHttpError);
}
function startOrStop(db) {
var isStart = db.opened;
return $http.post('api/dbs/' + db.uuid, db, {
params: {
op: isStart ? "start" : "stop"
}
}).then(function (response) {
var msg = isStart ? 'started' : 'stopped';
if (isStart !== response.data.opened) {
alert.error('Database cannot be ' + msg);
} else {
alert.success('Database is ' + msg);
}
var oldDb = service.databases.find(function (oldDb) {
return oldDb.uuid === db.uuid;
});
angular.extend(oldDb, response.data);
return response;
}).catch(function (response) {
alert.showHttpError(response);
db.opened = !db.opened; // revert model
});
}
function getTypes(db) {
return $http.get('api/dbs/' + db.uuid + '/types').then(function (response) {
return response.data;
});
}
function deleteDB(db) {
return $http['delete']('api/dbs/' + db.uuid).then(function (data) {
var index = service.databases.indexOf(db);
if (index > -1) {
service.databases.splice(index, 1);
}
return data;
});
}
}]
);