Skip to content

Instantly share code, notes, and snippets.

@jchadwick
Last active September 10, 2015 19:55
Show Gist options
  • Save jchadwick/5acfe773ca726f0536a1 to your computer and use it in GitHub Desktop.
Save jchadwick/5acfe773ca726f0536a1 to your computer and use it in GitHub Desktop.
Todo Service Proxy
TodosService.$inject = [ '$http' ];
function TodosService($http) {
var baseUrl = "https://jchad-todo.azurewebsites.net/todos";
function getAll() {
return _unwrap($http.get(baseUrl));
}
function getById(todoId) {
return _unwrap($http.get([baseUrl,todoId].join('/')));
}
function create(todo) {
return _unwrap($http.post(baseUrl, todo));
}
function update(todo) {
todo.state = todo.completed ? 2 : 1;
return _unwrap($http.put([baseUrl,todo.id].join('/'), todo));
}
function remove(todoId) {
return _unwrap($http.delete([baseUrl,todoId].join('/')));
}
function clearCompleted() {
return _unwrap($http.post([baseUrl, 'clear'].join('/')));
}
function setState(todoId, state) {
return _unwrap($http.post([baseUrl, todoId, state].join('/')));
}
function _unwrap(request) {
return request.then(function(resp) {
return _mapTodo(resp.data);
});
}
function _mapTodo(data) {
if(Array.isArray(data)) {
return data.map(_mapTodo);
}
return {
id: data.id,
name: data.name,
completed: data.state == 2
};
}
return {
getAll: getAll,
getById: getById,
create: create,
remove: remove,
update: update,
complete: function (todoId) { return setState(todoId, 'complete'); },
uncomplete: function (todoId) { return setState(todoId, 'uncomplete'); },
clearCompleted: clearCompleted,
};
}
angular.module('TodoApp').service('TodosService', TodosService)
function TodoServiceProxy(baseUrl) {
this.baseUrl = baseUrl;
jQuery.support.cors = true;
function getAll() {
var defer = $.Deferred();
$.ajax({
url: baseUrl,
type: 'GET',
dataType: 'json',
success: function (todos) {
defer.resolve(todos);
},
error: function (err) {
defer.reject(err);
}
});
return defer;
}
function getById(todoId) {
var defer = $.Deferred();
$.ajax({
url: [baseUrl,todoId].join('/'),
type: 'GET',
dataType: 'json',
success: function (todo) {
defer.resolve(todo);
},
error: function (err) {
defer.reject(err);
}
});
return defer;
}
function create(todo) {
var defer = $.Deferred();
$.ajax({
url: baseUrl,
type: 'POST',
contentType: "application/json",
data: JSON.stringify(todo),
success: function (todo) {
defer.resolve(todo);
},
error: function (err) {
defer.reject(err);
}
});
return defer;
}
function update(todo) {
var defer = $.Deferred();
$.ajax({
url: [baseUrl, todo.id].join('/'),
type: 'PUT',
contentType: "application/json",
data: JSON.stringify(todo),
success: function (todo) {
defer.resolve(todo);
},
error: function (err) {
defer.reject(err);
}
});
return defer;
}
function remove(id) {
var defer = $.Deferred();
$.ajax({
url: [baseUrl, id].join('/'),
type: 'DELETE',
success: function () {
defer.resolve();
},
error: function (err) {
defer.reject(err);
}
});
return defer;
}
function clearCompleted() {
var defer = $.Deferred();
$.ajax({
url: [baseUrl, 'clear'].join('/'),
type: 'POST',
success: function (deleted) {
defer.resolve(deleted);
},
error: function (err) {
defer.reject(err);
}
});
return defer;
}
function setState(todoId, state) {
var defer = $.Deferred();
$.ajax({
url: [baseUrl, todoId, state].join('/'),
type: 'POST',
success: function () {
defer.resolve();
},
error: function (err) {
defer.reject(err);
}
});
return defer;
}
return {
getAll: getAll,
getById: getById,
create: create,
remove: remove,
update: update,
complete: function (todoId) { return setState(todoId, 'complete'); },
uncomplete: function (todoId) { return setState(todoId, 'uncomplete'); },
clearCompleted: clearCompleted,
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment