From 4492f87a39a378fa422000dc4e31eb5fed17e97e Mon Sep 17 00:00:00 2001 From: Jonathan Bernard Date: Thu, 24 Feb 2011 07:29:30 -0600 Subject: [PATCH] Added user_summary to api. Added ts_api:dispatch_app/3 Added ts_api:get_user_summary/2 Fixed compile errors in ts_user. Added comments. --- db/test/DECISION_TAB.LOG | Bin 153 -> 153 bytes db/test/LATEST.LOG | Bin 92 -> 92 bytes doc/sampl-urls.txt | 16 ++++--------- src/ts_api.erl | 50 ++++++++++++++++++++++++++++++++++++++- src/ts_user.erl | 4 ++-- www/js/ts.js | 23 +++++++++--------- 6 files changed, 66 insertions(+), 27 deletions(-) diff --git a/db/test/DECISION_TAB.LOG b/db/test/DECISION_TAB.LOG index b210d7a46636e414f84b8725a349ea247cd12288..db7de76ce88e5a003317482367e542df7f3aaf03 100644 GIT binary patch delta 24 gcmbQqIFoTg2)9rY1H*~cNeoO~? % split the path PathElements = case PathString of undefined -> []; %handle no end slash: /ts_api - _Any -> re:split(PathString, "/", [{return, list}]) + _Any -> string:tokens(PathString, "/") end, % process the request @@ -43,12 +43,37 @@ dispatch_request(YArg, Session, [H|T]) -> {not_logged_in, _} -> make_json_401(YArg); {session_expired, _} -> make_json_401(YArg, [{status, "session expired"}]); + {_S, app} -> dispatch_app(YArg, Session, T); {_S, users} -> dispatch_user(YArg, Session, T); {_S, timelines} -> dispatch_timeline(YArg, Session, T); {_S, entries} -> dispatch_entry(YArg, Session, T); {_S, _Other} -> make_json_404(YArg, [{see_docs, "/ts_api_doc/"}]) end. +% -------- Dispatch for /app -------- % + +dispatch_app(YArg, Session, Params) -> + HTTPMethod = (YArg#arg.req)#http_request.method, + + case {HTTPMethod, Params} of + + {'GET', ["user_summary", UsernameStr]} -> + case {Session#ts_api_session.username, + path_element_to_atom(UsernameStr)} of + + {Username, Username} -> get_user_summary(YArg, Username); + _ -> make_json_401(YArg) + end; + + {_BadMethod, ["user_summary", _UsernameStr]} -> + make_json_405(YArg, [{see_docs, "/ts_api_docs/app.html"}]); + + _Other -> make_json_404(YArg, [{see_docs, "/ts_api_docs/app.html"}]) + + end. + +% -------- Dispatch for /user -------- % + dispatch_user(YArg, _Session, []) -> make_json_404(YArg, [{see_docs, "/ts_api_doc/"}]); @@ -67,6 +92,8 @@ dispatch_user(YArg, Session, [H]) -> _Other -> make_json_401(YArg, [{see_docs, "/ts_api_doc/users.html"}]) end. +% -------- Dispatch for /timeline -------- % + dispatch_timeline(YArg, _Session, []) -> make_json_404(YArg, [{see_docs, "/ts_api_doc/timelines.html"}]); @@ -104,6 +131,8 @@ dispatch_timeline(YArg, [UrlUsername, UrlTimelineId]) -> dispatch_timeline(YArg, _Other) -> make_json_404(YArg, [{see_docs, "/ts_api_doc/timelines.html"}]). +% -------- Dispatch for /entry -------- % + dispatch_entry(YArg, _Session, []) -> make_json_404(YArg, [{see_docs, "/ts_aip_doc/entries.html"}]); @@ -183,6 +212,25 @@ do_logout(YArg) -> CookieVal = yaws_api:find_cookie_val("ts_api_session", Cookie), ts_api_session:logout(CookieVal). +get_user_summary(YArg, Username) -> + case ts_user:lookup(Username) of + no_record -> make_json_404(YArg); + User -> + EJSONUser = ts_json:record_to_ejson(User), + + Timelines = ts_timeline:list(Username, 0, 100), + EJSONTimelines = {array, + lists:map(fun ts_json:record_to_ejson/1, Timelines)}, + + JSONResp = json:encode({struct, + [{status, "ok"}, + {user, EJSONUser}, + {timelines, EJSONTimelines} + ]}), + + {content, "application/json", JSONResp} + end. + get_user(YArg, Username) -> case ts_user:lookup(Username) of no_record -> make_json_404(YArg); diff --git a/src/ts_user.erl b/src/ts_user.erl index f825164..b95019c 100644 --- a/src/ts_user.erl +++ b/src/ts_user.erl @@ -22,10 +22,10 @@ update(UR = #ts_user{}) -> [] -> no_record; [Record] -> UpdatedRecord = ts_common:update_record(Record, UR), - HashedRecord = case UR#ts_user.password of + HashedRecord = case UR#ts_user.pwd of undefined -> UpdatedRecord; _Password -> hash_input_record(UpdatedRecord) - end. + end, mnesia:dirty_write(HashedRecord) end. diff --git a/www/js/ts.js b/www/js/ts.js index a32c4c8..96843ae 100644 --- a/www/js/ts.js +++ b/www/js/ts.js @@ -1,11 +1,18 @@ +function login(event) { + +} + +function logout(event) { + alert("TODO: log user out via AJAX."); + event.preventDefault(); +} + function toggleUserInfo(event) { $("#user-info").slideToggle("slow"); event.preventDefault(); } -function showChangePwd(event) { - $("#change-pwd").slideToggle("slow"); -} +function showChangePwd(event) { $("#change-pwd").slideToggle("slow"); } function updateUser(event) { alert("TODO: update user via AJAX."); @@ -27,17 +34,9 @@ function updateTimeline(event) { event.preventDefault(); } -function showNewNotes(event) { - $("#add-notes").slideToggle("slow"); -} +function showNewNotes(event) { $("#add-notes").slideToggle("slow"); } function newEntry(event) { alert("TODO: create entry vi AJAX"); event.preventDefault(); } - -function logout(event) { - alert("TODO: log user out via AJAX."); - event.preventDefault(); -} -