Skip to content

Instantly share code, notes, and snippets.

@savonarola
Created March 19, 2009 11:02
Show Gist options
  • Save savonarola/81763 to your computer and use it in GitHub Desktop.
Save savonarola/81763 to your computer and use it in GitHub Desktop.
-module(contacts).
-export([resources/0, contacts/2]).
-behaviour(controller).
resources() ->
[ resource:new([
{path, [{users,int}, {contacts,int}]},
{formats, [json]},
{methods, [index,create,update,destroy,show]},
{name,contacts}
]) ].
contacts(Request, {show, json}) ->
User = request:id(Request, users),
ContactUser = request:id(Request, contacts),
ContactModel = model:create(contact_model, User),
Contact = model:call(ContactModel, {get,ContactUser}),
case Contact of
{G,U} -> {ok,json,{struct,[{user,U }, {group,G}]}};
_ -> {client_error, not_found}
end;
contacts(Request, {update, json}) ->
User = request:id(Request, users),
ContactUser = request:id(Request, contacts),
ContactModel = model:create(contact_model, User),
GroupId = request:int_param(Request, "group_id", 0),
model:call(ContactModel, {add,GroupId,ContactUser}),
{ok_created,json,{struct,[{contact_id,ContactUser}, {group_id,GroupId}]}};
contacts(Request, {destroy, json}) ->
User = request:id(Request, users),
ContactUser = request:id(Request, contacts),
ContactModel = model:create(contact_model, User),
model:call(ContactModel, {remove,ContactUser}),
{ok,json,{struct,[{contact_id,ContactUser}, {group_id,null}]}};
contacts(Request, {create, json}) ->
User = request:id(Request, users),
ContactModel = model:create(contact_model, User),
GroupId = request:int_param(Request,"group_id",0),
ContactUser = request:int_param(Request,"contact_id", undef),
case ContactUser of
undef ->
{client_error, bad_request};
_ ->
model:call(ContactModel, {add,GroupId,ContactUser}),
{ok_created,json,{struct,[{contact_id,ContactUser}, {group_id,GroupId}]}}
end;
contacts(Request, {index, json}) ->
User = request:id(Request, users),
ContactModel = model:create(contact_model, User),
Contacts = model:call(ContactModel, get),
{ok,json,{array,lists:map( fun({G,U}) -> {struct,[{contact_id,U }, {group_id,G}]} end, Contacts) } }.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment