My app utilizes a GlobalDataService (GDS) to store all data globally.
GlobalDataService (GDS)
angular
.module('app.core')
.service('GlobalDataService', GlobalDataService);
GlobalDataService.$inject = ['$http', 'LineStatusService'];
function GlobalDataService($http, LineStatusService) {
var gds = this;
gds.data = {
//all my data
}
gds.data.lines = LineStatusService.getLineStatus().then...
}
In addition, there is a StatusDataService (SDS) responsible for managing the status of the data.
StatusDataService (SDS)
angular
.module('app.core')
.service('LineStatusService', LineStatusService);
LineStatusService.$inject = ['$http', 'GlobalDataService'];
function LineStatusService($http, GlobalDataService) {
var service = {
getLineStatus: getLineStatus,
saveLineStatus: saveLineStatus,
...
};
function saveLineStatus (line, status, user) {
var data = {
status: {
status_id: status.status_id,
status_desc: status.status_desc
},
updated_by: user
}
return $http.post('/api/euauto/v1/delivery-status/linestatus', data)
.then(function successCallback(response) {
GlobalDataService.data[id].status = status;
return response.data;
}).catch(function errorCallback(response) {
});
}
return service;
}
The GDS fetches all statuses when the app loads initially, while the Status Service handles other data requests.
To avoid circular dependencies, I plan on letting my Controller handle save and update using SDS while also updating GDS.
Potential Solution
angular
.module('core')
.controller('MyController', MyController);
MyController.$inject = ['GlobalDataService', 'LineStatusService'];
function MyController(GlobalDataService, LineStatusService) {
function changeStatus(line, status, user) {
//do a thing
//and another
LineStatusService.saveLineStatus(line, status, user);
GlobalDataService.data.line[id] = status;
GlobalDataService.updateAllOtherData();
//etc...
}
}
The Problem
Now that I want to create a new Controller with the same functionality, I realize I have to duplicate the code from the original Controller to reuse both Services. Additionally, if GDS doesn't depend on SDS, it will not be able to fetch line statuses on load, requiring each Controller in the app to do so individually.
Ideally, all logic and requests should be centralized, preferably within SDS. This way, GDS data can remain consistent throughout the entire Application.