-module(ts_ext_data). -export([create_table/1, set_property/3, get_property/2, get_properties/1]). -include("ts_db_records.hrl"). create_table(TableOpts) -> mnesia:create_table(ts_entry, TableOpts ++ [{attributes, record_info(fields, ts_ext_data)}, {type, ordered_set}]). % set last timeline set_property(Ref=#ts_user{}, last_timeline, LastTimelineId) -> do_set_property(Ref, last_timeline, LastTimelineId); % Set exclusion_list for a User account set_property(Ref=#ts_user{}, entry_exclusions, ExclusionList) -> do_set_property(Ref, entry_exclusions, string:join(ExclusionList, "|")); % Set exclusion_list for a Timeline entry set_property(Ref=#ts_timeline{}, entry_exclusions, ExclusionList) -> do_set_property(Ref, entry_exclusions, string:join(ExclusionList, "|")); set_property(Ref, Key, Value) -> throw(io_lib:format("Property '~s' not available for a ~s record.", [Key, element(1, Ref)])). get_property(Ref, PropKey) -> {atomic, Result} = mnesia:transaction(fun() -> case mnesia:read(ts_ext_data, {Ref, PropKey}) of [] -> not_set; [Property] -> Property end end), Result. get_properties(Ref) -> {atomic, Result} = mnesia:transaction(fun() -> MatchHead = #ts_ext_data{ref = {Ref, '_'}, _='_'}, mnesia:select(ts_ext_data, [{MatchHead, [], ['$_']}]) end), Result. do_set_property(Ref, PropKey, Val) -> {atomic, Result} = mnesia:transaction(fun() -> mnesia:write(#ts_ext_data{ref = {Ref, PropKey}, value = Val}) end), Result.