Browse Source

mnesia initial store backend

Maxim Sokhatsky 12 years ago
parent
commit
9b8dc91caf
7 changed files with 41 additions and 172 deletions
  1. 1 1
      src/kvs.app.src
  2. 23 149
      src/kvs.erl
  3. 3 3
      src/kvs_acl.erl
  4. 4 13
      src/kvs_feed.erl
  5. 1 1
      src/kvs_membership.erl
  6. 3 3
      src/kvs_payment.erl
  7. 6 2
      src/store_riak.erl

+ 1 - 1
src/kvs.app.src

@@ -3,7 +3,7 @@
   {description, "Distributed Persistance"},
   {description, "Distributed Persistance"},
   {vsn, "1"},
   {vsn, "1"},
   {registered, []},
   {registered, []},
-  {applications, [kernel,stdlib,riak_kv,mqs]},
+  {applications, [kernel,stdlib,riak_kv,mnesia,mqs]},
   {mod, { kvs_app, []}},
   {mod, { kvs_app, []}},
   {env, []}
   {env, []}
  ]}.
  ]}.

+ 23 - 149
src/kvs.erl

@@ -20,8 +20,6 @@
 
 
 start() -> DBA = ?DBA, DBA:start().
 start() -> DBA = ?DBA, DBA:start().
 dir() -> DBA = ?DBA, DBA:dir().
 dir() -> DBA = ?DBA, DBA:dir().
-purchases(UserId) -> DBA = ?DBA, DBA:purchases(UserId).
-transactions(UserId) -> DBA = ?DBA, DBA:transactions(UserId).
 stop() -> DBA = ?DBA, DBA:stop().
 stop() -> DBA = ?DBA, DBA:stop().
 initialize() -> DBA = ?DBA, DBA:initialize().
 initialize() -> DBA = ?DBA, DBA:initialize().
 delete() -> DBA = ?DBA, DBA:delete().
 delete() -> DBA = ?DBA, DBA:delete().
@@ -38,43 +36,27 @@ traversal(RecordType, PrevPos, Next, Count)->
             [R | traversal(RecordType, PrevPos, Prev, Count1)]
             [R | traversal(RecordType, PrevPos, Prev, Count1)]
     end.
     end.
 
 
-
 init_db() ->
 init_db() ->
     case kvs:get(user,"alice") of
     case kvs:get(user,"alice") of
-       {error,_} ->
-%            DBA = ?DBA,
-%            DBA:init_db(),
-%            kvs_membership:add_sample_data(),
+        {error,_} ->
             add_seq_ids(),
             add_seq_ids(),
             kvs_account:create_account(system),
             kvs_account:create_account(system),
             add_sample_users(),
             add_sample_users(),
             add_sample_packages(),
             add_sample_packages(),
+            add_payments(),
             add_translations();
             add_translations();
-%            case is_production() of
-%                false ->
-%                    add_purchases();
-%                true ->
-%                    do_nothing
-%            end;
-       {ok,_} -> ignore
-    end.
+        {ok,_} -> ignore end.
 
 
-is_production() ->
-    case kvs:get(config, "debug/production", false) of
-        {ok, true} -> true;
-        _ -> false
-    end.
-
-add_purchases() ->
-    {ok, Pkg1} = kvs_membership:get_package(1),
-    {ok, Pkg2} = kvs_membership:get_package(2),
-    {ok, Pkg3} = kvs_membership:get_package(3),
-    {ok, Pkg4} = kvs_membership:get_package(4),
+add_payments() ->
+    {ok, Pkg1} = kvs:get(membership,1),
+    {ok, Pkg2} = kvs:get(membership,2),
+    {ok, Pkg3} = kvs:get(membership,3),
+    {ok, Pkg4} = kvs:get(membership,4),
     PList = [{"doxtop", Pkg1},{"maxim", Pkg2},{"maxim",Pkg4}, {"kate", Pkg3} ],
     PList = [{"doxtop", Pkg1},{"maxim", Pkg2},{"maxim",Pkg4}, {"kate", Pkg3} ],
-    [ok = add_purchase(U, P) || {U, P} <- PList],
+    [ok = add_payment(U, P) || {U, P} <- PList],
     ok.
     ok.
 
 
-add_purchase(UserId, Package) ->
+add_payment(UserId, Package) ->
     {ok, MPId} = kvs_payment:add_payment(#payment{user_id=UserId, membership=Package}),
     {ok, MPId} = kvs_payment:add_payment(#payment{user_id=UserId, membership=Package}),
     kvs_payment:set_payment_state(MPId, ?MP_STATE_DONE, undefined).
     kvs_payment:set_payment_state(MPId, ?MP_STATE_DONE, undefined).
 
 
@@ -87,6 +69,8 @@ add_seq_ids() ->
     end,
     end,
     Init("meeting"),
     Init("meeting"),
     Init("user_transaction"),
     Init("user_transaction"),
+    Init("user_product"),
+    Init("user_payment"),
     Init("transaction"),
     Init("transaction"),
     Init("membership"),
     Init("membership"),
     Init("payment"),
     Init("payment"),
@@ -97,8 +81,7 @@ add_seq_ids() ->
     Init("like_entry"),
     Init("like_entry"),
     Init("likes"),
     Init("likes"),
     Init("one_like"),
     Init("one_like"),
-    Init("comment"),
-    Init("save_table").
+    Init("comment").
 
 
 add_translations() ->
 add_translations() ->
     lists:foreach(fun({English, Lang, Word}) ->
     lists:foreach(fun({English, Lang, Word}) ->
@@ -115,18 +98,18 @@ add_sample_users() ->
 
 
     UserList = [
     UserList = [
                      #user{username = "maxim", password="kaka15ra",
                      #user{username = "maxim", password="kaka15ra",
-                           name = "Maxim", surname = "Sokhatsky", feed = feed_create(),
-                           type = admin, direct = feed_create(),
+                           name = "Maxim", surname = "Sokhatsky", feed = kvs_feed:create(),
+                           type = admin, direct = kvs_feed:create(),
                            sex=m,
                            sex=m,
                            status=ok,
                            status=ok,
-                           team = create_team("tours"),
+                           team = kvs_meeting:create_team("tours"),
                            email="maxim.sokhatsky@gmail.com"},
                            email="maxim.sokhatsky@gmail.com"},
                      #user{username = "doxtop", password="password",
                      #user{username = "doxtop", password="password",
-                           feed = feed_create(),
+                           feed = kvs_feed:create(),
                            name = "Andrii Zadorozhnii",
                            name = "Andrii Zadorozhnii",
                            email="doxtop@synrc.com",
                            email="doxtop@synrc.com",
                            type=admin,
                            type=admin,
-                           team = create_team("tours"), direct = feed_create(),
+                           team = kvs_meeting:create_team("tours"), direct = kvs_feed:create(),
                            status=ok,
                            status=ok,
                            age={1981,9,29},
                            age={1981,9,29},
                            register_date={1345,14071,852889}
                            register_date={1345,14071,852889}
@@ -135,10 +118,12 @@ add_sample_users() ->
 
 
     kvs:put(Groups),
     kvs:put(Groups),
 
 
+    {ok, Quota} = kvs:get(config,"accounts/default_quota", 300),
+
     [ begin
     [ begin
           kvs_account:create_account(Me#user.username),
           kvs_account:create_account(Me#user.username),
-          kvs_account:transaction(Me#user.username, quota, kvs:get_config("accounts/default_quota", 300), #tx_default_assignment{}),
-          kvs:put(Me#user{password = kvs:sha(Me#user.password), starred = feed_create(), pinned = feed_create()})
+          kvs_account:transaction(Me#user.username, quota, Quota, #tx_default_assignment{}),
+          kvs:put(Me#user{password = kvs:sha(Me#user.password), starred = kvs_feed:create(), pinned = kvs_feed:create()})
       end || Me <- UserList],
       end || Me <- UserList],
 
 
     kvs_acl:define_access({user, "maxim"},    {feature, admin}, allow),
     kvs_acl:define_access({user, "maxim"},    {feature, admin}, allow),
@@ -152,16 +137,6 @@ add_sample_users() ->
 add_sample_packages() -> kvs_membership:add_sample_data().
 add_sample_packages() -> kvs_membership:add_sample_data().
 version() -> ?INFO("version: ~p", [1]).
 version() -> ?INFO("version: ~p", [1]).
 
 
-% blocking
-
-block_user(Who, Whom) -> DBA=?DBA, DBA:block_user(Who, Whom).
-list_blocks(Who) -> DBA=?DBA, DBA:list_blocks(Who).
-unblock_user(Who, Whom) -> DBA=?DBA, DBA:unblock_user(Who, Whom).
-list_blocked_me(Me) -> DBA=?DBA, DBA:list_blocked_me(Me).
-is_user_blocked(Who, Whom) -> DBA=?DBA, DBA:is_user_blocked(Who, Whom).
-
-% configs
-
 add_configs() ->
 add_configs() ->
     %% smtp
     %% smtp
     kvs:put(#config{key="smtp/user",     value="noreply@synrc.com"}),
     kvs:put(#config{key="smtp/user",     value="noreply@synrc.com"}),
@@ -206,78 +181,18 @@ get(RecordName, Key, Default) ->
             DBA:put({RecordName,Key,Default}),
             DBA:put({RecordName,Key,Default}),
             {ok,Default} end.
             {ok,Default} end.
 
 
-get_config(Key, Default) -> {ok, Value} = get(config, Key, Default), Value.
-get_word(Word) -> get(ut_word,Word).
-get_translation({Lang,Word}) -> DBA=?DBA, DBA:get_translation({Lang,Word}).
-
-% delete
-
 delete(Keys) -> DBA=?DBA, DBA:delete(Keys).
 delete(Keys) -> DBA=?DBA, DBA:delete(Keys).
 delete(Tab, Key) -> ?INFO("db:delete ~p:~p",[Tab, Key]), DBA=?DBA,DBA:delete(Tab, Key).
 delete(Tab, Key) -> ?INFO("db:delete ~p:~p",[Tab, Key]), DBA=?DBA,DBA:delete(Tab, Key).
 delete_by_index(Tab, IndexId, IndexVal) -> DBA=?DBA,DBA:delete_by_index(Tab, IndexId, IndexVal).
 delete_by_index(Tab, IndexId, IndexVal) -> DBA=?DBA,DBA:delete_by_index(Tab, IndexId, IndexVal).
-% select
-
 multi_select(RecordName, Keys) -> DBA=?DBA,DBA:multi_select(RecordName, Keys).
 multi_select(RecordName, Keys) -> DBA=?DBA,DBA:multi_select(RecordName, Keys).
 select(From, PredicateFunction) -> ?INFO("db:select ~p, ~p",[From,PredicateFunction]), DBA=?DBA, DBA:select(From, PredicateFunction).
 select(From, PredicateFunction) -> ?INFO("db:select ~p, ~p",[From,PredicateFunction]), DBA=?DBA, DBA:select(From, PredicateFunction).
 count(RecordName) -> DBA=?DBA,DBA:count(RecordName).
 count(RecordName) -> DBA=?DBA,DBA:count(RecordName).
 all(RecordName) -> DBA=?DBA,DBA:all(RecordName).
 all(RecordName) -> DBA=?DBA,DBA:all(RecordName).
 all_by_index(RecordName, Index, IndexValue) -> DBA=?DBA,DBA:all_by_index(RecordName, Index, IndexValue).
 all_by_index(RecordName, Index, IndexValue) -> DBA=?DBA,DBA:all_by_index(RecordName, Index, IndexValue).
-
-% id generator
-
 next_id(RecordName) -> DBA=?DBA,DBA:next_id(RecordName).
 next_id(RecordName) -> DBA=?DBA,DBA:next_id(RecordName).
 next_id(RecordName, Incr) -> DBA=?DBA,DBA:next_id(RecordName, Incr).
 next_id(RecordName, Incr) -> DBA=?DBA,DBA:next_id(RecordName, Incr).
 next_id(RecordName, Default, Incr) -> DBA=?DBA,DBA:next_id(RecordName, Default, Incr).
 next_id(RecordName, Default, Incr) -> DBA=?DBA,DBA:next_id(RecordName, Default, Incr).
 
 
-% browser counter
-
-delete_browser_counter_older_than(MinTS) -> DBA=?DBA,DBA:delete_browser_counter_older_than(MinTS).
-browser_counter_by_game(Game) -> DBA=?DBA,DBA:browser_counter_by_game(Game).
-
-% invites
-
-unused_invites() -> DBA=?DBA,DBA:unused_invites().
-user_by_verification_code(Code) -> DBA=?DBA,DBA:user_by_verification_code(Code).
-user_by_facebook_id(FBId) -> DBA=?DBA,DBA:user_by_facebook_id(FBId).
-user_by_email(Email) -> DBA=?DBA,DBA:user_by_email(Email).
-user_by_username(Name) -> DBA=?DBA,DBA:user_by_username(Name).
-add_invite_to_issuer(User, O) -> DBA=?DBA,DBA:add_invite_to_issuer(User, O).
-invite_code_by_issuer(User) -> DBA=?DBA,DBA:invite_code_by_issuer(User).
-invite_code_by_user(User) -> DBA=?DBA,DBA:invite_code_by_user(User).
-
-% game info
-
-get_save_tables(Id) -> DBA=?DBA,DBA:get_save_tables(Id).
-save_game_table_by_id(Id) -> DBA=?DBA,DBA:save_game_table_by_id(Id).
-
-% feeds
-
-feed_add_direct_message(FId, User, To, EntryId, Desc, Medias) -> DBA=?DBA,DBA:feed_add_direct_message(FId, User, To, EntryId, Desc, Medias).
-feed_add_entry(FId, User, EntryId, Desc, Medias) -> DBA=?DBA,DBA:feed_add_entry(FId, User, EntryId, Desc, Medias).
-feed_add_entry(FId, User, To, EntryId, Desc, Medias, Type, SharedBy) -> DBA=?DBA,DBA:feed_add_entry(FId, User, To, EntryId, Desc, Medias, Type, SharedBy).
-acl_add_entry(AclId, Accessor, Action) -> DBA=?DBA,DBA:acl_add_entry(AclId, Accessor, Action).
-acl_entries(AclId) -> DBA=?DBA,DBA:acl_entries(AclId).
-entry_by_id(EntryId) -> DBA=?DBA,DBA:entry_by_id(EntryId).
-comment_by_id(CommentId) -> DBA=?DBA,DBA:comment_by_id(CommentId).
-comments_by_entry({_EId, _FId} = EntryId) -> DBA=?DBA,DBA:comments_by_entry(EntryId).
-entries_in_feed(FeedId) -> DBA=?DBA,DBA:entries_in_feed(FeedId, undefined, all).
-entries_in_feed(FeedId, Count) -> DBA=?DBA,DBA:entries_in_feed(FeedId, undefined, Count).
-entries_in_feed(FeedId, StartFrom, Count) -> DBA=?DBA, DBA:entries_in_feed(FeedId, StartFrom, Count).
-add_comment(FId, User, EntryId, ParentComment, CommentId, Content, Medias) -> DBA=?DBA, DBA:feed_add_comment(FId, User, EntryId, ParentComment, CommentId, Content, Medias).
-feed_direct_messages(FId, StartFrom, Count) ->  DBA=?DBA, DBA:entries_in_feed(FId, StartFrom, Count).
-
-% tournaments
-
-tournament_waiting_queue(TID) -> DBA=?DBA, DBA:tournament_waiting_queue(TID).
-join_tournament(UID,TID) -> DBA=?DBA, DBA:join_tournament(UID,TID).
-leave_tournament(UID,TID) -> DBA=?DBA, DBA:leave_tournament(UID,TID).
-tournament_pop_waiting_player(TID) -> DBA=?DBA, DBA:tournament_pop_waiting_player(TID).
-user_tournaments(UID) -> DBA=?DBA, DBA:user_tournaments(UID).
-
-add_transaction_to_user(User, Tx) -> DBA=?DBA, DBA:add_transaction_to_user(User, Tx).
-get_purchases_by_user(User, Count, States) -> DBA=?DBA, DBA:get_purchases_by_user(User, Count, States).
-get_purchases_by_user(User, StartFromPurchase, Count, States) -> DBA=?DBA, DBA:get_purchases_by_user(User, StartFromPurchase, Count, States).
-
 make_admin(User) ->
 make_admin(User) ->
     {ok,U} = kvs:get(user, User),
     {ok,U} = kvs:get(user, User),
     kvs:put(U#user{type = admin}),
     kvs:put(U#user{type = admin}),
@@ -291,16 +206,6 @@ make_rich(User) ->
     kvs_account:transaction(User, internal, Q, #tx_default_assignment{}),
     kvs_account:transaction(User, internal, Q, #tx_default_assignment{}),
     kvs_account:transaction(User, currency, Q * 2, #tx_default_assignment{}).
     kvs_account:transaction(User, currency, Q * 2, #tx_default_assignment{}).
 
 
-feed_create() ->
-    FId = kvs:next_id("feed", 1),
-    ok = kvs:put(#feed{id = FId} ),
-    FId.
-
-create_team(Name) ->
-    TID = kvs:next_id("team",1),
-    ok = kvs:put(Team = #team{id=TID,name=Name}),
-    TID.
-
 list_to_term(String) ->
 list_to_term(String) ->
     {ok, T, _} = erl_scan:string(String++"."),
     {ok, T, _} = erl_scan:string(String++"."),
     case erl_parse:parse_term(T) of
     case erl_parse:parse_term(T) of
@@ -324,7 +229,7 @@ load_db(Path) ->
     end || E <- AllEntries].
     end || E <- AllEntries].
 
 
 make_paid_fake(UId) ->
 make_paid_fake(UId) ->
-    put({user_purchase, UId, "fake_purchase"}).
+    put(#payment{user_id=UId,info= "fake_purchase"}).
 
 
 save(Key, Value) ->
 save(Key, Value) ->
     Dir = ling:trim_from_last(Key, "/"),
     Dir = ling:trim_from_last(Key, "/"),
@@ -335,37 +240,6 @@ load(Key) ->
     {ok, Bin} = file:read_file(Key),
     {ok, Bin} = file:read_file(Key),
     binary_to_term(Bin).
     binary_to_term(Bin).
 
 
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-handle_notice(["kvs", "group", Owner, "put"] = Route, 
-    Message, #state{owner = Owner, type =Type} = State) ->
-    ?INFO("queue_action(~p): group put: Owner=~p, Route=~p, Message=~p", [self(), {Type, Owner}, Route, Message]),
-    kvs:put(Message),
-    {noreply, State};
-
-handle_notice(["kvs", "user", Owner, "put"] = Route, 
-    Message, #state{owner = Owner, type =Type} = State) ->
-    ?INFO("queue_action(~p): user put: Owner=~p, Route=~p, Message=~p", [self(), {Type, Owner}, Route, Message]),
-    kvs:put(Message),
-    {noreply, State};
-
-handle_notice(["kvs","system", "put"] = Route, 
-    Message, #state{owner = Owner, type =Type} = State) ->
-    ?INFO("queue_action(~p): system put: Owner=~p, Route=~p, Message=~p", [self(), {Type, Owner}, Route, Message]),
-    kvs:put(Message),
-    {noreply, State};
-
-handle_notice(["kvs","system", "delete"] = Route, 
-    Message, #state{owner = Owner, type =Type} = State) ->
-    ?INFO("queue_action(~p): system delete: Owner=~p, Route=~p, Message=~p", [self(), {Type, Owner}, Route, Message]),
-    {Where, What} = Message,
-    kvs:delete(Where, What),
-    {noreply, State};
-
-
-handle_notice(Route, Message, State) -> error_logger:info_msg("Unknown KVS notice").
-
 coalesce(undefined, B) -> B;
 coalesce(undefined, B) -> B;
 coalesce(A, _) -> A.
 coalesce(A, _) -> A.
 
 

+ 3 - 3
src/kvs_acl.erl

@@ -93,7 +93,7 @@ acl_add_entry(Resource, Accessor, Action) ->
               {ok, A} ->
               {ok, A} ->
                   A;
                   A;
               %% if acl record wasn't created already
               %% if acl record wasn't created already
-              {error, notfound} ->
+              {error, _} ->
                   A = #acl{id = Resource, resource=Resource},
                   A = #acl{id = Resource, resource=Resource},
                   kvs:put(A),
                   kvs:put(A),
                   A
                   A
@@ -103,7 +103,7 @@ acl_add_entry(Resource, Accessor, Action) ->
 
 
     case kvs:get(acl_entry, EntryId) of
     case kvs:get(acl_entry, EntryId) of
         %% there is no entries for specified Acl and Accessor, we have to add it
         %% there is no entries for specified Acl and Accessor, we have to add it
-        {error, notfound} ->
+        {error, _} ->
             Next = undefined,
             Next = undefined,
             Prev = case Acl#acl.top of
             Prev = case Acl#acl.top of
                        undefined ->
                        undefined ->
@@ -116,7 +116,7 @@ acl_add_entry(Resource, Accessor, Action) ->
                                    kvs:put(EditedEntry), % update prev entry
                                    kvs:put(EditedEntry), % update prev entry
                                    TopEntry#acl_entry.id;
                                    TopEntry#acl_entry.id;
 
 
-                               {error, notfound} ->
+                               {error, _} ->
                                    undefined
                                    undefined
                            end
                            end
                    end,
                    end,

+ 4 - 13
src/kvs_feed.erl

@@ -33,19 +33,10 @@ add_entry(FId, User, To, EntryId, Desc, Medias, Type, SharedBy, _) ->
 
 
     kvs:put(#feed{id = FId, top = {EntryId, FId}}), % update feed top with current
     kvs:put(#feed{id = FId, top = {EntryId, FId}}), % update feed top with current
 
 
-    Entry  = #entry{id = {EntryId, FId},
-                    entry_id = EntryId,
-                    feed_id = FId,
-                    from = User,
-                    to = To,
-                    type = Type,
-                    media = Medias,
-                    created_time = now(),
-                    description = Desc,
-                    raw_description = Desc,
-                    shared = SharedBy,
-                    next = Next,
-                    prev = Prev},
+    Entry  = #entry{id = {EntryId, FId}, entry_id = EntryId, feed_id = FId, from = User,
+                    to = To, type = Type, media = Medias, created_time = now(),
+                    description = Desc, raw_description = Desc, shared = SharedBy,
+                    next = Next, prev = Prev},
 
 
     ModEntry = case catch feedformat:format(Entry) of
     ModEntry = case catch feedformat:format(Entry) of
                    {_, Reason} -> ?ERROR("feedformat error: ~p", [Reason]), Entry;
                    {_, Reason} -> ?ERROR("feedformat error: ~p", [Reason]), Entry;

+ 1 - 1
src/kvs_membership.erl

@@ -42,7 +42,7 @@ add_sample_data()->
     #membership{no = 7, amount = 50,  currency = 0,  quota = 90,  fee = 50},
     #membership{no = 7, amount = 50,  currency = 0,  quota = 90,  fee = 50},
     #membership{no = 8, amount = 100, currency = 40, quota = 120, fee = 60}],
     #membership{no = 8, amount = 100, currency = 40, quota = 120, fee = 60}],
     WithPaymentTypes = [
     WithPaymentTypes = [
-        Package#membership{id = generate_id(), payment_type=Payment} ||
+        Package#membership{id = Package#membership.no, payment_type=Payment} ||
             Payment <- [facebook, credit_card, wire_transfer, paypal, mobile],
             Payment <- [facebook, credit_card, wire_transfer, paypal, mobile],
             Package <- SamplePackages],
             Package <- SamplePackages],
     Enabled = [P#membership{available_for_sale = true} || P <- WithPaymentTypes],
     Enabled = [P#membership{available_for_sale = true} || P <- WithPaymentTypes],

+ 3 - 3
src/kvs_payment.erl

@@ -43,7 +43,7 @@ add_payment(#payment{} = MP) -> add_payment(#payment{} = MP, undefined, undefine
 add_payment(#payment{} = MP, State0, Info) ->
 add_payment(#payment{} = MP, State0, Info) ->
     case kvs:get(payment, MP#payment.id) of
     case kvs:get(payment, MP#payment.id) of
         {ok, _} -> {error, already_bought_that_one};
         {ok, _} -> {error, already_bought_that_one};
-        {error, notfound} ->
+        {error, _} ->
             Start = now(),
             Start = now(),
             State = default_if_undefined(State0, undefined, ?MP_STATE_ADDED),
             State = default_if_undefined(State0, undefined, ?MP_STATE_ADDED),
             StateLog = case Info of
             StateLog = case Info of
@@ -59,8 +59,8 @@ add_payment(#payment{} = MP, State0, Info) ->
 
 
 add_to_user(UserId,Payment) ->
 add_to_user(UserId,Payment) ->
     {ok,Team} = case kvs:get(user_payment, UserId) of
     {ok,Team} = case kvs:get(user_payment, UserId) of
-                     {ok,T} -> ?ERROR("user_payment found"), {ok,T};
-                     _ -> ?ERROR("user_payment not found"),
+                     {ok,T} -> {ok,T};
+                     _ -> ?INFO("user_payment not found ~p. create top",[UserId]),
                           Head = #user_payment{ user = UserId, top = undefined},
                           Head = #user_payment{ user = UserId, top = undefined},
                           {kvs:put(Head),Head}
                           {kvs:put(Head),Head}
                 end,
                 end,

+ 6 - 2
src/store_riak.erl

@@ -28,7 +28,7 @@ initialize() ->
 dir() ->
 dir() ->
     C = riak_client(),
     C = riak_client(),
     {ok,Buckets} = C:list_buckets(),
     {ok,Buckets} = C:list_buckets(),
-    [binary_to_list(X)||X<-Buckets].
+    [{table,binary_to_list(X)}||X<-Buckets].
 
 
 riak_clean(Table) when is_list(Table)->
 riak_clean(Table) when is_list(Table)->
     C = riak_client(),
     C = riak_client(),
@@ -64,7 +64,11 @@ make_indices(#user{username=UId,zone=Zone}) -> [
 
 
 make_indices(#user_product{username=UId,product_id=PId}) -> [
 make_indices(#user_product{username=UId,product_id=PId}) -> [
     {<<"user_bin">>, key_to_bin(UId)},
     {<<"user_bin">>, key_to_bin(UId)},
-    {<<"product_id">>, key_to_bin(PId)}];
+    {<<"product_bin">>, key_to_bin(PId)}];
+
+make_indices(#payment{id=Id,user_id=UId}) -> [
+    {<<"payment_bin">>, key_to_bin(Id)},
+    {<<"user_bin">>, key_to_bin(UId)}];
 
 
 make_indices(#comment{id={CID,EID},author_id=Who}) -> [
 make_indices(#comment{id={CID,EID},author_id=Who}) -> [
     {<<"comment_bin">>, key_to_bin({CID,EID})},
     {<<"comment_bin">>, key_to_bin({CID,EID})},