Browse Source

create delete group

Andrii Zadorozhnii 11 years ago
parent
commit
71b5cd8ab5
1 changed files with 26 additions and 4 deletions
  1. 26 4
      src/kvs_group.erl

+ 26 - 4
src/kvs_group.erl

@@ -114,6 +114,19 @@ user_has_access(UserName, GroupName) ->
                 {private, member} -> true;
                 {private, member} -> true;
                 _ -> false end end.
                 _ -> false end end.
 
 
+handle_notice([kvs_group, Owner, create],
+              [#group{}=Group],
+              #state{owner=Owner}=State) ->
+    error_logger:info_msg("[kvs_group] Create group ~p", [Owner]),
+    Created = case kvs:add(Group) of {error, E} -> {error, E};
+    {ok, #group{id=Id} = G} ->
+        Params = [{id, Id}, {type, group}, {feeds, element(#iterator.feeds, G)}],
+        case workers_sup:start_child(Params) of {error, E} -> {error, E}; _ -> G end end,
+
+    msg:notify([kvs_group, group, Group#group.id, created], [Created]),
+    {noreply, State};
+
+
 handle_notice(["kvs_group", "update", GroupName] = Route, 
 handle_notice(["kvs_group", "update", GroupName] = Route, 
     Message, #state{owner=ThisGroupOwner, type=Type} = State) ->
     Message, #state{owner=ThisGroupOwner, type=Type} = State) ->
     error_logger:info_msg("queue_action(~p): update_group: Owner=~p, Route=~p, Message=~p", [self(), {Type, ThisGroupOwner}, Route, Message]),    
     error_logger:info_msg("queue_action(~p): update_group: Owner=~p, Route=~p, Message=~p", [self(), {Type, ThisGroupOwner}, Route, Message]),    
@@ -128,10 +141,19 @@ handle_notice(["kvs_group", "update", GroupName] = Route,
         {error,Reason} -> error_logger:info_msg("Cannot update group ~p",[Reason]) end,
         {error,Reason} -> error_logger:info_msg("Cannot update group ~p",[Reason]) end,
     {noreply, State};
     {noreply, State};
 
 
-handle_notice(["kvs_group", "remove", GroupName] = Route, 
-    Message, #state{owner = Owner, type = Type} = State) ->
-    error_logger:info_msg("queue_action(~p): remove_group: Owner=~p, Route=~p, Message=~p", [self(), {Type, Owner}, Route, Message]),
-    delete(GroupName),
+handle_notice([kvs_group, Owner, delete],
+              [#group{}=P],
+              #state{owner=Owner, feeds=Feeds}=State) ->
+    error_logger:info_msg("[kvs_group] Delete group ~p ~p", [P#group.id, Owner]),
+    Removed = case kvs:remove(P) of {error,E} -> {error,E};
+    ok ->
+        % todo: handle group feeds?
+
+        supervisor:terminate_child(workers_sup, {group, P#group.id}),
+        supervisor:delete_child(workers_sup, {group, P#group.id}),
+        P
+    end,
+    msg:notify([kvs_product, group, P#group.id, deleted], [Removed]),
     {noreply, State};
     {noreply, State};
 
 
 handle_notice([kvs_group, join, Owner],
 handle_notice([kvs_group, join, Owner],