PageRenderTime 72ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/ucengine/src/backends/db/mongodb/uce_meeting_mongodb.erl

http://github.com/AF83/ucengine
Erlang | 111 lines | 48 code | 11 blank | 52 comment | 1 complexity | b79e44d3daf7db5cec766e955673da5d MD5 | raw file
  1. %%
  2. %% U.C.Engine - Unified Collaboration Engine
  3. %% Copyright (C) 2011 af83
  4. %%
  5. %% This program is free software: you can redistribute it and/or modify
  6. %% it under the terms of the GNU Affero General Public License as published by
  7. %% the Free Software Foundation, either version 3 of the License, or
  8. %% (at your option) any later version.
  9. %%
  10. %% This program is distributed in the hope that it will be useful,
  11. %% but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. %% GNU Affero General Public License for more details.
  14. %%
  15. %% You should have received a copy of the GNU Affero General Public License
  16. %% along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. %%
  18. -module(uce_meeting_mongodb).
  19. -behaviour(gen_uce_meeting).
  20. -export([add/2,
  21. delete/2,
  22. get/2,
  23. update/2,
  24. list/1]).
  25. -include("uce.hrl").
  26. -include("mongodb.hrl").
  27. %%--------------------------------------------------------------------
  28. %% @spec (Domain::list, #uce_meeting{}) -> {ok, created}
  29. %% @doc Insert given record #uce_meeting{} in uce_meeting mongodb table
  30. %% @end
  31. %%--------------------------------------------------------------------
  32. add(Domain, #uce_meeting{} = Meeting) ->
  33. mongodb_helpers:ok(emongo:insert_sync(Domain, "uce_meeting", to_collection(Domain, Meeting))),
  34. {ok, created}.
  35. %%--------------------------------------------------------------------
  36. %% @spec (Domain::list, Name::list) -> {ok, deleted}
  37. %% @doc Delete record
  38. %% @end
  39. %%--------------------------------------------------------------------
  40. delete(Domain, Name) ->
  41. mongodb_helpers:ok(emongo:delete_sync(Domain, "uce_meeting", [{"name", Name}, {"domain", Domain}])),
  42. {ok, deleted}.
  43. %%--------------------------------------------------------------------
  44. %% @spec (Domain::list, Name::list) -> {ok, #uce_meeting{}} | {error, not_found}
  45. %% @doc Get record uce_meeting which correspond to the given name and domain
  46. %% @end
  47. %%--------------------------------------------------------------------
  48. get(Domain, Name) ->
  49. case emongo:find_one(Domain, "uce_meeting",
  50. [{"name", Name}, {"domain", Domain}]) of
  51. [Record] ->
  52. {ok, from_collection(Record)};
  53. [] ->
  54. throw({error, not_found})
  55. end.
  56. %%--------------------------------------------------------------------
  57. %% @spec (Domain::list, #uce_meeting{}) -> {ok, updated}
  58. %% @doc update #uce_meeting record
  59. %% @end
  60. %%--------------------------------------------------------------------
  61. update(Domain, #uce_meeting{id=Name} = Meeting) ->
  62. mongodb_helpers:updated(emongo:update_sync(Domain, "uce_meeting",
  63. [{"name", Name}, {"domain", Domain}],
  64. to_collection(Domain, Meeting), false)),
  65. {ok, updated}.
  66. %%--------------------------------------------------------------------
  67. %% @spec (Domain::list) -> {ok, [#uce_meeting{}, #uce_meeting{}, ..] = Meetings::list} | {error, bad_parameters}
  68. %% @doc List all record #uce_meeting for the given domain
  69. %% @end
  70. %%--------------------------------------------------------------------
  71. list(Domain) ->
  72. Collections = emongo:find_all(Domain, "uce_meeting", [{"domain", Domain}]),
  73. {ok, [from_collection(Collection) || Collection <- Collections]}.
  74. %%--------------------------------------------------------------------
  75. %% @spec (#uce_meeting{}) -> [{Key::list, Value::list}, {Key::list, Value::list}, ...] = Collection::list
  76. %% @doc Convert #uce_meeting{} record to valid collection
  77. %% @end
  78. %%--------------------------------------------------------------------
  79. to_collection(Domain, #uce_meeting{id=Name,
  80. roster=Roster,
  81. metadata=Metadata}) ->
  82. [{"name", Name},
  83. {"domain", Domain},
  84. {"roster", {array, Roster}},
  85. {"metadata", mongodb_helpers:to_bson(Metadata)}].
  86. %%--------------------------------------------------------------------
  87. %% @spec ([{Key::list, Value::list}, {Key::list, Value::list}, ...] = Collection::list) -> #uce_meeting{} | {error, bad_parameters}
  88. %% @doc Convert collection returned by mongodb to valid record #uce_meeting{}
  89. %% @end
  90. %%--------------------------------------------------------------------
  91. from_collection(Collection) ->
  92. case utils:get(mongodb_helpers:collection_to_list(Collection),
  93. ["name", "domain", "roster", "metadata"]) of
  94. [Name, _Domain, {array, Roster}, Metadata] ->
  95. #uce_meeting{id=Name,
  96. roster=Roster,
  97. metadata=Metadata};
  98. _ ->
  99. throw({error, bad_parameters})
  100. end.