|
@@ -11,16 +11,6 @@ create() ->
|
|
|
ok = kvs:put(#feed{id = FId} ),
|
|
|
FId.
|
|
|
|
|
|
-add_direct_message(FId, User, Desc) -> add_direct_message(FId, User, utils:uuid_ex(), Desc).
|
|
|
-add_direct_message(FId, User, EntryId, Desc) -> add_direct_message(FId, User, undefined, EntryId, Desc, []).
|
|
|
-add_direct_message(FId, User, To, EntryId, Desc, Medias) -> kvs:feed_add_direct_message(FId, User, To, EntryId, Desc, Medias).
|
|
|
-add_group_entry(FId, User, EntryId, Desc, Medias) -> kvs:feed_add_entry(FId, User, EntryId, Desc, Medias).
|
|
|
-add_group_entry(FId, User, To, EntryId, Desc, Medias, Type) -> kvs:feed_add_entry(FId, User, To, EntryId, Desc, Medias, Type, "").
|
|
|
-add_entry(FId, User, EntryId, Desc) -> add_entry(FId, User, EntryId, Desc, []).
|
|
|
-add_entry(FId, User, EntryId, Desc, Medias) -> kvs:feed_add_entry(FId, User, EntryId, Desc, Medias).
|
|
|
-add_entry(FId, User, To, EntryId, Desc, Medias, Type) -> kvs:feed_add_entry(FId, User, To, EntryId, Desc, Medias, Type, "").
|
|
|
-add_shared_entry(FId, User, To, EntryId, Desc, Medias, Type, SharedBy) -> kvs:feed_add_entry(FId, User, To, EntryId, Desc, Medias, Type, SharedBy).
|
|
|
-
|
|
|
add_like(Fid, Eid, Uid) ->
|
|
|
Write_one_like = fun(Next) ->
|
|
|
Self_id = kvs:next_id("one_like", 1),
|
|
@@ -75,15 +65,6 @@ get_comments_count(Uid) ->
|
|
|
{ok, UEC} -> UEC#user_etries_count.comments;
|
|
|
{error, notfound} -> 0 end.
|
|
|
|
|
|
-get_feed(FId) -> kvs:get(feed, FId).
|
|
|
-get_entries_in_feed(FId) -> kvs:entries_in_feed(FId).
|
|
|
-get_entries_in_feed(FId, Count) -> kvs:entries_in_feed(FId, Count).
|
|
|
-get_entries_in_feed(FId, StartFrom, Count) -> kvs:entries_in_feed(FId, StartFrom, Count).
|
|
|
-get_direct_messages(FId, Count) -> kvs:entries_in_feed(FId, undefined, Count).
|
|
|
-get_direct_messages(FId, StartFrom, Count) -> kvs:entries_in_feed(FId, StartFrom, Count).
|
|
|
-get_entries_in_feed(FId, StartFrom, Count, FromUserId)-> Entries = kvs:entries_in_feed(FId, StartFrom, Count),
|
|
|
- [E || #entry{from = From} = E <- Entries, From == FromUserId].
|
|
|
-
|
|
|
create_message(Table) ->
|
|
|
EId = kvs:next_id("entry", 1),
|
|
|
#entry{id = {EId, system_info},
|
|
@@ -95,30 +76,19 @@ create_message(Table) ->
|
|
|
|
|
|
|
|
|
remove_entry(FeedId, EId) ->
|
|
|
- {ok, #feed{top = TopId} = Feed} = get_feed(FeedId),
|
|
|
-
|
|
|
+ {ok, #feed{top = TopId} = Feed} = kvs:get(feed,FeedId),
|
|
|
case kvs:get(entry, {EId, FeedId}) of
|
|
|
{ok, #entry{prev = Prev, next = Next}}->
|
|
|
?INFO("P: ~p, N: ~p", [Prev, Next]),
|
|
|
- case kvs:get(entry, Next) of
|
|
|
- {ok, NE} -> kvs:put(NE#entry{prev = Prev});
|
|
|
- _ -> ok
|
|
|
- end,
|
|
|
- case kvs:get(entry, Prev) of
|
|
|
- {ok, PE} -> kvs:put(PE#entry{next = Next});
|
|
|
- _ -> ok
|
|
|
- end,
|
|
|
-
|
|
|
- case TopId of
|
|
|
- {EId, FeedId} -> kvs:put(Feed#feed{top = Prev});
|
|
|
- _ -> ok
|
|
|
- end;
|
|
|
+ case kvs:get(entry, Next) of {ok, NE} -> kvs:put(NE#entry{prev = Prev}); _ -> ok end,
|
|
|
+ case kvs:get(entry, Prev) of {ok, PE} -> kvs:put(PE#entry{next = Next}); _ -> ok end,
|
|
|
+ case TopId of {EId, FeedId} -> kvs:put(Feed#feed{top = Prev}); _ -> ok end;
|
|
|
{error, notfound} -> ?INFO("Not found"), ok
|
|
|
end,
|
|
|
kvs:delete(entry, {EId, FeedId}).
|
|
|
|
|
|
edit_entry(FeedId, EId, NewDescription) ->
|
|
|
- case kvs:entry_by_id({EId, FeedId}) of
|
|
|
+ case kvs:get(entry,{EId, FeedId}) of
|
|
|
{ok, OldEntry} ->
|
|
|
NewEntryRaw = OldEntry#entry{description = NewDescription,
|
|
|
raw_description = NewDescription},
|
|
@@ -130,17 +100,12 @@ edit_entry(FeedId, EId, NewDescription) ->
|
|
|
|
|
|
remove_entry_comments(FId, EId) ->
|
|
|
AllComments = kvs:comments_by_entry(FId, EId),
|
|
|
- [begin
|
|
|
- kvs:delete(comment, ID)
|
|
|
- end || #comment{id = ID, media = M} <- AllComments].
|
|
|
+ [begin kvs:delete(comment, ID) end || #comment{id = ID, media = M} <- AllComments].
|
|
|
|
|
|
entry_add_comment(FId, User, EntryId, ParentComment, CommentId, Content, Medias) ->
|
|
|
- case kvs:entry_by_id({EntryId, FId}) of
|
|
|
- {ok, _E} ->
|
|
|
- kvs:add_comment(FId, User, EntryId, ParentComment, CommentId, Content, Medias);
|
|
|
- _ ->
|
|
|
- ok
|
|
|
- end.
|
|
|
+ case kvs:get(entry,{EntryId, FId}) of
|
|
|
+ {ok, _E} -> kvs:add_comment(FId, User, EntryId, ParentComment, CommentId, Content, Medias);
|
|
|
+ _ -> ok end.
|
|
|
|
|
|
get_one_like_list(undefined) -> [];
|
|
|
get_one_like_list(Id) -> {ok, OneLike} = kvs:get(one_like, Id),
|
|
@@ -149,8 +114,7 @@ get_one_like_list(Id) -> {ok, OneLike} = kvs:get(one_like, Id),
|
|
|
get_entries_likes(Entry_id) ->
|
|
|
case kvs:get(entry_likes, Entry_id) of
|
|
|
{ok, Likes} -> get_one_like_list(Likes#entry_likes.one_like_head);
|
|
|
- {error, notfound} -> []
|
|
|
- end.
|
|
|
+ {error, notfound} -> [] end.
|
|
|
|
|
|
get_entries_likes_count(Entry_id) ->
|
|
|
case kvs:get(entry_likes, Entry_id) of
|
|
@@ -182,11 +146,6 @@ get_user_likes(UserId, {Page, PageAmount}) ->
|
|
|
{error, notfound} -> []
|
|
|
end.
|
|
|
|
|
|
-% we have same in user? Why?
|
|
|
-is_subscribed_user(UserUidWho, UserUidWhom) -> kvs_users:is_user_subscr(UserUidWho, UserUidWhom).
|
|
|
-user_subscription_count(UserUid) -> length(kvs_users:list_subscr(UserUid)).
|
|
|
-user_friends_count(UserUid) -> length(kvs_users:list_subscr_me(UserUid)).
|
|
|
-
|
|
|
get_comments_entries(UserUid, _, _Page, _PageAmount) ->
|
|
|
Pids = [Eid || #comment{entry_id=Eid} <- kvs:select(comment,
|
|
|
fun(#comment{author_id=Who}) when Who=:=UserUid ->true;(_)->false end)],
|
|
@@ -204,22 +163,6 @@ get_my_discussions(_FId, Page, PageAmount, UserUid) ->
|
|
|
lists:flatten([kvs:select(entry,[{where, fun(#entry{entry_id=ID})-> ID=:=Pid end},
|
|
|
{order, {1, descending}},{limit, {1,1}}]) || Pid <- Pids]).
|
|
|
|
|
|
-test_likes() ->
|
|
|
- add_like(1, "17a10803-f064-4718-ae46-4a6d3c88415c-0796e2bb", "derp"),
|
|
|
- add_like(1, "17a10803-f064-4718-ae46-4a6d3c88415c-0796e2bb", "derpina"),
|
|
|
- add_like(1, "17a10803-f064-4718-ae46-4a6d3c88415c-0796e2bb", "derpington"),
|
|
|
- add_like(1, "17a10803-f064-4718-ae46-4a6d3c88415c-0796e2bc", "derp"),
|
|
|
- add_like(1, "17a10803-f064-4718-ae46-4a6d3c88415c-0796e2bc", "lederpeaux"),
|
|
|
- add_like(2, "17a10803-f064-4718-ae46-4a6d3c88415c-0796e2bd", "derp"),
|
|
|
- add_like(2, "17a10803-f064-4718-ae46-4a6d3c88415c-0796e2be", "derp"),
|
|
|
- [
|
|
|
- get_entries_likes("17a10803-f064-4718-ae46-4a6d3c88415c-0796e2bb"),
|
|
|
- get_entries_likes_count("17a10803-f064-4718-ae46-4a6d3c88415c-0796e2bb") == 3,
|
|
|
- get_user_likes("derp"),
|
|
|
- get_user_likes("derp", {1, 2}),
|
|
|
- get_user_likes_count("derp") == 4
|
|
|
- ].
|
|
|
-
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
|
|
handle_notice(["feed", "delete", Owner] = Route, Message,
|
|
@@ -234,7 +177,7 @@ handle_notice(["feed", "group", GroupId, "entry", EntryId, "add"] = Route,
|
|
|
?INFO("feed(~p): group message: Owner=~p, Route=~p, Message=~p",
|
|
|
[self(), Owner, Route, Message]),
|
|
|
[From, _Destinations, Desc, Medias] = Message,
|
|
|
- feed:add_group_entry(Feed, From, [{GroupId, group}], EntryId,
|
|
|
+ kvs_feed:add_group_entry(Feed, From, [{GroupId, group}], EntryId,
|
|
|
Desc, Medias, {group, direct}),
|
|
|
% statistics
|
|
|
case Owner == GroupId of
|
|
@@ -262,22 +205,22 @@ handle_notice(["feed", "user", FeedOwner, "entry", EntryId, "add"] = Route,
|
|
|
%% user added message to own feed
|
|
|
FeedOwner == From andalso FeedOwner == WorkerOwner->
|
|
|
FilteredDst = [D || {_, group} = D <- Destinations],
|
|
|
- feed:add_entry(Feed, From, FilteredDst, EntryId, Desc, Medias,
|
|
|
+ kvs_feed:add_entry(Feed, From, FilteredDst, EntryId, Desc, Medias,
|
|
|
{user, normal}), self() ! {feed_refresh,Feed,20};
|
|
|
|
|
|
%% friend added message to public feed
|
|
|
FeedOwner == From ->
|
|
|
- feed:add_entry(Feed, From, [], EntryId, Desc, Medias,
|
|
|
+ kvs_feed:add_entry(Feed, From, [], EntryId, Desc, Medias,
|
|
|
{user, normal}), self() ! {feed_refresh,Feed,20};
|
|
|
|
|
|
%% direct message to worker owner
|
|
|
FeedOwner == WorkerOwner ->
|
|
|
- feed:add_direct_message(Direct, From, [{FeedOwner, user}],
|
|
|
+ kvs_feed:add_direct_message(Direct, From, [{FeedOwner, user}],
|
|
|
EntryId, Desc, Medias), self() ! {direct_refresh,Direct,20};
|
|
|
|
|
|
%% user sent direct message to friend, add copy to his direct feed
|
|
|
From == WorkerOwner ->
|
|
|
- feed:add_direct_message(Direct, WorkerOwner, Destinations,
|
|
|
+ kvs_feed:add_direct_message(Direct, WorkerOwner, Destinations,
|
|
|
EntryId, Desc, Medias), self() ! {direct_refresh,Direct,20};
|
|
|
true ->
|
|
|
?INFO("not matched case in entry->add")
|
|
@@ -293,7 +236,7 @@ handle_notice(["feed", "user", _FeedOwner, "entry", EntryId, "add_system"] = Rou
|
|
|
[self(), WorkerOwner, Route, Message]),
|
|
|
[From, _Destinations, Desc, Medias] = Message,
|
|
|
|
|
|
- feed:add_entry(Feed, From, [], EntryId, Desc, Medias, {user, system}),
|
|
|
+ kvs_feed:add_entry(Feed, From, [], EntryId, Desc, Medias, {user, system}),
|
|
|
{noreply, State};
|
|
|
|
|
|
handle_notice(["feed", "group", GroupId, "entry", EntryId, "add_system"] = Route,
|
|
@@ -302,7 +245,7 @@ handle_notice(["feed", "group", GroupId, "entry", EntryId, "add_system"] = Route
|
|
|
?INFO("feed(~p): group system message: Owner=~p, Route=~p, Message=~p",
|
|
|
[self(), Owner, Route, Message]),
|
|
|
[From, _Destinations, Desc, Medias] = Message,
|
|
|
- feed:add_group_entry(Feed, From, [{GroupId, group}], EntryId,
|
|
|
+ kvs_feed:add_group_entry(Feed, From, [{GroupId, group}], EntryId,
|
|
|
Desc, Medias, {group, system}),
|
|
|
{noreply, State};
|
|
|
|
|
@@ -311,7 +254,7 @@ handle_notice(["feed", "user", UId, "post_note"] = Route, Message,
|
|
|
?INFO("feed(~p): post_note: Owner=~p, Route=~p, Message=~p", [self(), Owner, Route, Message]),
|
|
|
Note = Message,
|
|
|
Id = utils:uuid_ex(),
|
|
|
- feed:add_entry(Feed, UId, [], Id, Note, [], {user, system_note}),
|
|
|
+ kvs_feed:add_entry(Feed, UId, [], Id, Note, [], {user, system_note}),
|
|
|
{noreply, State};
|
|
|
|
|
|
handle_notice(["feed", _, WhoShares, "entry", NewEntryId, "share"],
|
|
@@ -321,7 +264,7 @@ handle_notice(["feed", _, WhoShares, "entry", NewEntryId, "share"],
|
|
|
%% FIXME: sharing is like posting to the wall
|
|
|
?INFO("share: ~p, WhoShares: ~p", [E, WhoShares]),
|
|
|
% NewEntryId = utils:uuid_ex(),
|
|
|
- feed:add_shared_entry(Feed, From, Destinations, NewEntryId, Desc, Medias, {user, normal}, WhoShares),
|
|
|
+ kvs_feed:add_shared_entry(Feed, From, Destinations, NewEntryId, Desc, Medias, {user, normal}, WhoShares),
|
|
|
{noreply, State};
|
|
|
|
|
|
handle_notice(["feed", "group", _Group, "entry", EntryId, "delete"] = Route,
|
|
@@ -330,7 +273,7 @@ handle_notice(["feed", "group", _Group, "entry", EntryId, "delete"] = Route,
|
|
|
?INFO("feed(~p): remove entry: Owner=~p, Route=~p, Message=~p",
|
|
|
[self(), Owner, Route, Message]),
|
|
|
%% all group subscribers shold delete entry from their feeds
|
|
|
- feed:remove_entry(Feed, EntryId),
|
|
|
+ kvs_feed:remove_entry(Feed, EntryId),
|
|
|
self() ! {feed_refresh,Feed,20},
|
|
|
{noreply, State};
|
|
|
|
|
@@ -429,7 +372,7 @@ feed_add_direct_message(FId,User,To,EntryId,Desc,Medias) -> feed_add_entry(FId,U
|
|
|
feed_add_entry(FId,From,EntryId,Desc,Medias) -> feed_add_entry(FId,From,undefined,EntryId,Desc,Medias,{user,normal},"").
|
|
|
feed_add_entry(FId, User, To, EntryId,Desc,Medias,Type,SharedBy) ->
|
|
|
%% prevent adding of duplicate records to feed
|
|
|
- case kvs:entry_by_id({EntryId, FId}) of
|
|
|
+ case kvs:get(entry,{EntryId, FId}) of
|
|
|
{ok, _} -> ok;
|
|
|
_ -> do_feed_add_entry(FId, User, To, EntryId, Desc, Medias, Type, SharedBy)
|
|
|
end.
|
|
@@ -480,14 +423,6 @@ do_feed_add_entry(FId, User, To, EntryId, Desc, Medias, Type, SharedBy) ->
|
|
|
kvs:put(ModEntry),
|
|
|
{ok, ModEntry}.
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-% @spec entry_by_id(term()) -> {ok, #entry{}} | {error, not_found}.
|
|
|
-entry_by_id(EntryId) -> kvs:get(entry, EntryId).
|
|
|
-
|
|
|
-
|
|
|
purge_feed(FeedId) ->
|
|
|
{ok,Feed} = kvs:get(feed,FeedId),
|
|
|
Removal = riak_entry_traversal(Feed#feed.top, -1),
|
|
@@ -497,10 +432,10 @@ purge_feed(FeedId) ->
|
|
|
purge_unverified_feeds() ->
|
|
|
[purge_feed(FeedId) || #user{feed=FeedId,status=S,email=E} <- kvs:all(user),E==undefined].
|
|
|
|
|
|
-riak_entry_traversal(undefined, _) -> [];
|
|
|
-riak_entry_traversal(_, 0) -> [];
|
|
|
-riak_entry_traversal(Next, Count)->
|
|
|
- case store_riak:get(entry, Next) of
|
|
|
+entry_traversal(undefined, _) -> [];
|
|
|
+entry_traversal(_, 0) -> [];
|
|
|
+entry_traversal(Next, Count)->
|
|
|
+ case kvs:get(entry, Next) of
|
|
|
{error,notfound} -> [];
|
|
|
{ok, R} ->
|
|
|
Prev = element(#entry.prev, R),
|
|
@@ -512,22 +447,18 @@ riak_entry_traversal(Next, Count)->
|
|
|
end;
|
|
|
_-> Count
|
|
|
end,
|
|
|
- [R | riak_entry_traversal(Prev, Count1)]
|
|
|
+ [R | entry_traversal(Prev, Count1)]
|
|
|
end.
|
|
|
|
|
|
entries_in_feed(FeedId, undefined, PageAmount) ->
|
|
|
case kvs:get(feed, FeedId) of
|
|
|
- {ok, O} -> riak_entry_traversal(O#feed.top, PageAmount);
|
|
|
+ {ok, O} -> entry_traversal(O#feed.top, PageAmount);
|
|
|
{error, notfound} -> []
|
|
|
end;
|
|
|
entries_in_feed(FeedId, StartFrom, PageAmount) ->
|
|
|
- %% construct entry unic id
|
|
|
case kvs:get(entry,{StartFrom, FeedId}) of
|
|
|
- {ok, #entry{prev = Prev}} -> riak_entry_traversal(Prev, PageAmount);
|
|
|
+ {ok, #entry{prev = Prev}} -> entry_traversal(Prev, PageAmount);
|
|
|
_ -> []
|
|
|
end.
|
|
|
|
|
|
-feed_direct_messages(_FId, Page, PageAmount, CurrentUser, CurrentFId) ->
|
|
|
- Page, PageAmount, CurrentUser, CurrentFId,
|
|
|
- [].
|
|
|
|