Bugfixing, compile-error-sqhashung.
This commit is contained in:
parent
7d11112226
commit
658091e947
@ -201,13 +201,24 @@ do_logout(YArg) ->
|
||||
{status, 200}.
|
||||
|
||||
get_user_summary(YArg, Username) ->
|
||||
% find user record
|
||||
case ts_user:lookup(Username) of
|
||||
|
||||
% no user record, barf
|
||||
no_record -> make_json_404(YArg);
|
||||
|
||||
% found user record, let us build the return
|
||||
User ->
|
||||
UserExtData - ts_ext_data:get_properties(Username),
|
||||
|
||||
% get user extended data properties
|
||||
UserExtData = ts_ext_data:get_properties(Username),
|
||||
% convert to intermediate JSON form
|
||||
EJSONUser = ts_json:record_to_ejson(User, UserExtData),
|
||||
|
||||
% get the user's timelins
|
||||
Timelines = ts_timeline:list(Username, 0, 100),
|
||||
|
||||
% get each timeline's extended data and convert to EJSON
|
||||
EJSONTimelines = {array,
|
||||
lists:map(
|
||||
fun(Timeline) ->
|
||||
@ -216,17 +227,22 @@ get_user_summary(YArg, Username) ->
|
||||
end,
|
||||
Timelines)},
|
||||
|
||||
% convert to JSON
|
||||
JSONResp = json:encode({struct,
|
||||
[{user, EJSONUser},
|
||||
{timelines, EJSONTimelines}
|
||||
]}),
|
||||
|
||||
% write response out
|
||||
{content, "application/json", JSONResp}
|
||||
end.
|
||||
|
||||
get_user(YArg, Username) ->
|
||||
% find the user record
|
||||
case ts_user:lookup(Username) of
|
||||
% no such user, barf
|
||||
no_record -> make_json_404(YArg);
|
||||
% found, return a 200 with the record
|
||||
User -> make_json_200(YArg, User)
|
||||
end.
|
||||
|
||||
@ -250,7 +266,7 @@ list_timelines(YArg, Username) ->
|
||||
% list the timelines from the database
|
||||
Timelines = ts_timeline:list(Username, Start, Length),
|
||||
|
||||
% convert them all to their EJSON form
|
||||
% convert them all to their EJSON form, adding in extended data for each
|
||||
EJSONTimelines = {array, lists:map(
|
||||
fun (Timeline) ->
|
||||
ts_json:record_to_ejson(Timeline,
|
||||
@ -258,7 +274,7 @@ list_timelines(YArg, Username) ->
|
||||
end,
|
||||
Timelines)},
|
||||
|
||||
% create resposne
|
||||
% convert to JSON and create resposne
|
||||
JSONResponse = json:encode(EJSONTimelines),
|
||||
|
||||
% return response
|
||||
@ -282,12 +298,16 @@ put_timeline(YArg, Username, TimelineId) ->
|
||||
{TR, ExtData} =
|
||||
try ts_json:ejson_to_record_strict(
|
||||
#ts_timeline{ref={Username, TimelineId}}, EJSON)
|
||||
% we can not parse it, tell the user
|
||||
catch throw:{InputError, _StackTrace} ->
|
||||
error_logger:error_report("Bad input: ~p", [InputError]),
|
||||
throw(make_json_400(YArg, {request_error, InputError))
|
||||
throw(make_json_400(YArg, {request_error, InputError}))
|
||||
end,
|
||||
|
||||
ts_timeline:write(TR),
|
||||
% write the changes.
|
||||
ts_timeline:write(TR, ExtData),
|
||||
|
||||
% return a 200
|
||||
make_json_200(YArg, TR).
|
||||
|
||||
delete_timeline(_YArg, _Username, _TimelineId) -> {status, 405}.
|
||||
@ -335,7 +355,7 @@ list_entries(YArg, Username, TimelineId) ->
|
||||
EJSONEntries = {array, lists:map(
|
||||
fun (Entry) ->
|
||||
ts_json:record_to_ejson(Entry,
|
||||
ts_ext_data:get_properties(Entry#ts_entry.ref)),
|
||||
ts_ext_data:get_properties(Entry#ts_entry.ref))
|
||||
end,
|
||||
Entries)},
|
||||
|
||||
@ -371,7 +391,7 @@ list_entries(YArg, Username, TimelineId) ->
|
||||
EJSONEntries = {array, lists:map(
|
||||
fun (Entry) ->
|
||||
ts_json:record_to_ejson(Entry,
|
||||
ts_ext_data:get_properties(Entry#ts_entry.ref)),
|
||||
ts_ext_data:get_properties(Entry#ts_entry.ref))
|
||||
end,
|
||||
Entries)},
|
||||
|
||||
|
@ -41,7 +41,7 @@ update(Record, ExtData) when is_list(ExtData) ->
|
||||
case do_update(Record) of
|
||||
{error, Err} -> mnesia:abort({"Cannot update record.", Err});
|
||||
UpdatedRecord -> case do_set_ext_data(Record, ExtData) of
|
||||
of -> UpdatedRecord;
|
||||
ok -> UpdatedRecord;
|
||||
Error -> mnesia:abort({"Cannot update record.", Error})
|
||||
end
|
||||
end
|
||||
@ -105,7 +105,7 @@ do_set_ext_data(Record, ExtData) when is_list(ExtData) ->
|
||||
fun({Key, Val}) ->
|
||||
{atomic, ok} = ts_ext_data:set_property(Ref, Key, Val)
|
||||
end,
|
||||
ExtData)
|
||||
ExtData),
|
||||
ok.
|
||||
|
||||
% This is somewhat ridiculous.
|
||||
|
@ -22,7 +22,7 @@ set_property(Ref=#ts_timeline{}, entry_exclusions, ExclusionList) ->
|
||||
|
||||
set_property(Ref, Key, Value) ->
|
||||
throw(io_lib:format("Property '~s' not available for a ~s record.",
|
||||
[Key, element(1, Ref)]).
|
||||
[Key, element(1, Ref)])).
|
||||
|
||||
get_property(Ref, PropKey) ->
|
||||
{atomic, Result} = mnesia:transaction(fun() ->
|
||||
@ -42,6 +42,6 @@ get_properties(Ref) ->
|
||||
|
||||
do_set_property(Ref, PropKey, Val) ->
|
||||
{atomic, Result} = mnesia:transaction(fun() ->
|
||||
mnesia:write(#ts_ext_data{ref = {Ref, PropKey}, value = Val}).
|
||||
mnesia:write(#ts_ext_data{ref = {Ref, PropKey}, value = Val})
|
||||
end),
|
||||
Result.
|
||||
|
@ -1,11 +1,11 @@
|
||||
-module(ts_json).
|
||||
-export([encode_record/1, record_to_ejson/2,
|
||||
-export([encode_record/2, record_to_ejson/2,
|
||||
ejson_to_record/2, ejson_to_record/3,
|
||||
ejson_to_record_strict/2, ejson_to_record_strict/3]).
|
||||
|
||||
-include("ts_db_records.hrl").
|
||||
|
||||
encode_record(Record) -> lists:flatten(json:encode(record_to_ejson(Record))).
|
||||
encode_record(Record, ExtData) -> lists:flatten(json:encode(record_to_ejson(Record, ExtData))).
|
||||
|
||||
% User JSON record required structure:
|
||||
% {"id": "john_doe",
|
||||
@ -110,12 +110,12 @@ ejson_to_record_strict(Empty, Ref, EJSON) ->
|
||||
construct_record(Timeline=#ts_timeline{}, [{Key, Val}|Fields], ExtData) ->
|
||||
case Key of
|
||||
created -> construct_record(
|
||||
Timeline#ts_timeline{created = decode_datetime(Value)},
|
||||
Timeline#ts_timeline{created = decode_datetime(Val)},
|
||||
Fields, ExtData);
|
||||
description -> construct_record(Timeline#ts_timeline{desc = Value},
|
||||
description -> construct_record(Timeline#ts_timeline{desc = Val},
|
||||
Fields, ExtData);
|
||||
Other ->
|
||||
ExtDataProp = ejson_to_ext_data({Key, Value}),
|
||||
_Other ->
|
||||
ExtDataProp = ejson_to_ext_data({Key, Val}),
|
||||
construct_record(Timeline, Fields, [ExtDataProp|ExtData])
|
||||
end;
|
||||
|
||||
@ -126,8 +126,8 @@ construct_record(Entry=#ts_entry{}, [{Key, Value}|Fields], ExtData) ->
|
||||
decode_datetime(Value))},
|
||||
Fields, ExtData);
|
||||
mark -> construct_record(Entry#ts_entry{mark=Value}, Fields, ExtData);
|
||||
notes -> construct_record(Entry#ts_entry{notes=Vale}, Fields, ExtData);
|
||||
Other ->
|
||||
notes -> construct_record(Entry#ts_entry{notes=Value}, Fields, ExtData);
|
||||
_Other ->
|
||||
ExtDataProp = ejson_to_ext_data({Key, Value}),
|
||||
construct_record(Entry, Fields, [ExtDataProp|ExtData])
|
||||
end;
|
||||
|
@ -1,5 +1,6 @@
|
||||
-module(ts_timeline).
|
||||
-export([create_table/1, new/1, new/2, update/1, update/2, write/1, lookup/2, list/3]).
|
||||
-export([create_table/1, new/1, new/2, update/1, update/2, write/1, write/2,
|
||||
lookup/2, list/3]).
|
||||
|
||||
-include("ts_db_records.hrl").
|
||||
-include_lib("stdlib/include/qlc.hrl").
|
||||
@ -21,6 +22,13 @@ update(TR = #ts_timeline{}, ExtData) when is_list(ExtData) ->
|
||||
|
||||
write(TR = #ts_timeline{}) -> mnesia:dirty_write(TR).
|
||||
|
||||
write(TR = #ts_timeline{}, ExtData) ->
|
||||
{atomic, Result} = mnesia:transaction(fun() ->
|
||||
ok = mnesia:write(TR),
|
||||
ok = ts_common:do_set_ext_data(TR, ExtData)
|
||||
end),
|
||||
Result.
|
||||
|
||||
lookup(Username, TimelineId) ->
|
||||
case mnesia:dirty_read(ts_timeline, {Username, TimelineId}) of
|
||||
[] -> no_record;
|
||||
@ -29,5 +37,5 @@ lookup(Username, TimelineId) ->
|
||||
|
||||
list(Username, Start, Length) ->
|
||||
MatchHead = #ts_timeline{ref = {Username, '_'}, _='_'},
|
||||
mnesia:dirty_select(ts_timeline, [{MatchHead, [], ['$_']}]),
|
||||
Timelines = mnesia:dirty_select(ts_timeline, [{MatchHead, [], ['$_']}]),
|
||||
lists:sublist(Timelines, Start + 1, Length).
|
||||
|
@ -35,7 +35,7 @@ update(UR = #ts_user{}) ->
|
||||
update(UR = #ts_user{}, ExtData) ->
|
||||
{atomic, Result} = mnesia:transaction(fun() ->
|
||||
UpdatedUser = do_update(UR),
|
||||
ts_common:do_set_ext_data(UR, ExtData)
|
||||
ts_common:do_set_ext_data(UR, ExtData),
|
||||
UpdatedUser end),
|
||||
Result.
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user