Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F117724710
D369.1774890896.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
12 KB
Referenced Files
None
Subscribers
None
D369.1774890896.diff
View Options
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -23,6 +23,7 @@
* Node.js version 5.0.0 or newer is required.
* Install dependencies with `npm install`
* Install babel presets: `npm install babel-preset-es2015 babel-preset-es2016`
+* Initialize database: `mix amnesia.create -db KolabChat.Database --disk`
* Start Phoenix endpoint with `mix phoenix.server`
Now you can visit [`localhost:4000`](http://localhost:4000) from your browser.
diff --git a/config/config.exs b/config/config.exs
--- a/config/config.exs
+++ b/config/config.exs
@@ -7,7 +7,6 @@
# General application configuration
config :kolab_chat,
- ecto_repos: [KolabChat.Repo],
salts: [session_signing: "M7HpCp6W",
session_encryption: nil]
diff --git a/config/dev.exs b/config/dev.exs
--- a/config/dev.exs
+++ b/config/dev.exs
@@ -32,12 +32,3 @@
# Set a higher stacktrace during development. Avoid configuring such
# in production as building large stacktraces may be expensive.
config :phoenix, :stacktrace_depth, 20
-
-# Configure your database
-config :kolab_chat, KolabChat.Repo,
- adapter: Ecto.Adapters.MySQL,
- username: "root",
- password: "12345",
- database: "kolab_chat_dev",
- hostname: "localhost",
- pool_size: 10
diff --git a/config/test.exs b/config/test.exs
--- a/config/test.exs
+++ b/config/test.exs
@@ -8,12 +8,3 @@
# Print only warnings and errors during test
config :logger, level: :warn
-
-# Configure your database
-config :kolab_chat, KolabChat.Repo,
- adapter: Ecto.Adapters.MySQL,
- username: "root",
- password: "12345",
- database: "kolab_chat_test",
- hostname: "localhost",
- pool: Ecto.Adapters.SQL.Sandbox
diff --git a/lib/kolab_chat.ex b/lib/kolab_chat.ex
--- a/lib/kolab_chat.ex
+++ b/lib/kolab_chat.ex
@@ -8,8 +8,6 @@
# Define workers and child supervisors to be supervised
children = [
- # Start the Ecto repository
- supervisor(KolabChat.Repo, []),
# Start the endpoint when the application starts
supervisor(KolabChat.Endpoint, []),
# Start phoenix presence module
diff --git a/lib/kolab_chat/database.ex b/lib/kolab_chat/database.ex
new file mode 100644
--- /dev/null
+++ b/lib/kolab_chat/database.ex
@@ -0,0 +1,19 @@
+use Amnesia
+
+defdatabase KolabChat.Database do
+
+ deftable User, [{:id, autoincrement}, :username, :fullname], type: :ordered_set, index: [:username] do
+
+ # Find a user by username
+ def find(username) do
+ Amnesia.transaction do
+ case User.read_at(username, :username) do
+ nil -> nil
+ users -> Enum.at(users, 0)
+ end
+ end
+ end
+
+ end
+
+end
diff --git a/lib/kolab_chat/repo.ex b/lib/kolab_chat/repo.ex
deleted file mode 100644
--- a/lib/kolab_chat/repo.ex
+++ /dev/null
@@ -1,3 +0,0 @@
-defmodule KolabChat.Repo do
- use Ecto.Repo, otp_app: :kolab_chat
-end
diff --git a/mix.exs b/mix.exs
--- a/mix.exs
+++ b/mix.exs
@@ -19,7 +19,7 @@
def application do
[mod: {KolabChat, []},
applications: [:phoenix, :phoenix_pubsub, :phoenix_html, :cowboy, :logger, :gettext,
- :phoenix_ecto, :mariaex]]
+ :amnesia]]
end
# Specifies which paths to compile per environment.
@@ -32,11 +32,10 @@
defp deps do
[{:phoenix, "~> 1.2.1"},
{:phoenix_pubsub, "~> 1.0"},
- {:phoenix_ecto, "~> 3.0"},
- {:mariaex, "~> 0.7.9", override: true},
{:phoenix_html, "~> 2.6"},
{:phoenix_live_reload, "~> 1.0", only: :dev},
{:gettext, "~> 0.11"},
+ {:amnesia, "~> 0.2.0"},
{:cowboy, "~> 1.0"}]
end
@@ -47,8 +46,6 @@
#
# See the documentation for `Mix` for more info on aliases.
defp aliases do
- ["ecto.setup": ["ecto.create", "ecto.migrate", "run priv/repo/seeds.exs"],
- "ecto.reset": ["ecto.drop", "ecto.setup"],
- "test": ["ecto.create --quiet", "ecto.migrate", "test"]]
+ []
end
end
diff --git a/mix.lock b/mix.lock
--- a/mix.lock
+++ b/mix.lock
@@ -1,19 +1,14 @@
-%{"connection": {:hex, :connection, "1.0.4", "a1cae72211f0eef17705aaededacac3eb30e6625b04a6117c1b2db6ace7d5976", [:mix], []},
+%{"amnesia": {:hex, :amnesia, "0.2.5", "3202e0b01e380671274caea32fbe78bbd1989e1215215f41a2d97583e5c7d163", [:mix], [{:exquisite, "~> 0.1.6", [hex: :exquisite, optional: false]}]},
"cowboy": {:hex, :cowboy, "1.0.4", "a324a8df9f2316c833a470d918aaf73ae894278b8aa6226ce7a9bf699388f878", [:rebar, :make], [{:cowlib, "~> 1.0.0", [hex: :cowlib, optional: false]}, {:ranch, "~> 1.0", [hex: :ranch, optional: false]}]},
"cowlib": {:hex, :cowlib, "1.0.2", "9d769a1d062c9c3ac753096f868ca121e2730b9a377de23dec0f7e08b1df84ee", [:make], []},
- "db_connection": {:hex, :db_connection, "1.0.0", "63c03e520d54886a66104d34e32397ba960db6e74b596ce221592c07d6a40d8d", [:mix], [{:connection, "~> 1.0.2", [hex: :connection, optional: false]}, {:poolboy, "~> 1.5", [hex: :poolboy, optional: true]}, {:sbroker, "~> 1.0", [hex: :sbroker, optional: true]}]},
- "decimal": {:hex, :decimal, "1.3.1", "157b3cedb2bfcb5359372a7766dd7a41091ad34578296e951f58a946fcab49c6", [:mix], []},
- "ecto": {:hex, :ecto, "2.0.6", "9dcbf819c2a77f67a66b83739b7fcc00b71aaf6c100016db4f798930fa4cfd47", [:mix], [{:db_connection, "~> 1.0", [hex: :db_connection, optional: true]}, {:decimal, "~> 1.1.2 or ~> 1.2", [hex: :decimal, optional: false]}, {:mariaex, "~> 0.8.0", [hex: :mariaex, optional: true]}, {:poison, "~> 1.5 or ~> 2.0", [hex: :poison, optional: true]}, {:poolboy, "~> 1.5", [hex: :poolboy, optional: false]}, {:postgrex, "~> 0.12.0", [hex: :postgrex, optional: true]}, {:sbroker, "~> 1.0-beta", [hex: :sbroker, optional: true]}]},
+ "exquisite": {:hex, :exquisite, "0.1.7", "4106503e976f409246731b168cd76eb54262bd04f4facc5cba82c2f53982aaf0", [:mix], []},
"fs": {:hex, :fs, "0.9.2", "ed17036c26c3f70ac49781ed9220a50c36775c6ca2cf8182d123b6566e49ec59", [:rebar], []},
"gettext": {:hex, :gettext, "0.13.0", "daafbddc5cda12738bb93b01d84105fe75b916a302f1c50ab9fb066b95ec9db4", [:mix], []},
- "mariaex": {:hex, :mariaex, "0.7.9", "52f837cf1b0717f95a0e62624bb99707329cba599885cf3bd2fdecc0172a98ad", [:mix], [{:db_connection, "~> 1.0.0-rc", [hex: :db_connection, optional: false]}, {:decimal, "~> 1.0", [hex: :decimal, optional: false]}]},
"mime": {:hex, :mime, "1.0.1", "05c393850524767d13a53627df71beeebb016205eb43bfbd92d14d24ec7a1b51", [:mix], []},
"phoenix": {:hex, :phoenix, "1.2.1", "6dc592249ab73c67575769765b66ad164ad25d83defa3492dc6ae269bd2a68ab", [:mix], [{:cowboy, "~> 1.0", [hex: :cowboy, optional: true]}, {:phoenix_pubsub, "~> 1.0", [hex: :phoenix_pubsub, optional: false]}, {:plug, "~> 1.1", [hex: :plug, optional: false]}, {:poison, "~> 1.5 or ~> 2.0", [hex: :poison, optional: false]}]},
- "phoenix_ecto": {:hex, :phoenix_ecto, "3.0.1", "42eb486ef732cf209d0a353e791806721f33ff40beab0a86f02070a5649ed00a", [:mix], [{:ecto, "~> 2.0", [hex: :ecto, optional: false]}, {:phoenix_html, "~> 2.6", [hex: :phoenix_html, optional: true]}, {:plug, "~> 1.0", [hex: :plug, optional: false]}]},
- "phoenix_html": {:hex, :phoenix_html, "2.8.0", "777598a4b6609ad6ab8b180f7b25c9af2904644e488922bb9b9b03ce988d20b1", [:mix], [{:plug, "~> 1.0", [hex: :plug, optional: false]}]},
+ "phoenix_html": {:hex, :phoenix_html, "2.9.2", "371160b30cf4e10443b015efce6f03e1f19aae98ff6487620477b13a5b2ef660", [:mix], [{:plug, "~> 1.0", [hex: :plug, optional: false]}]},
"phoenix_live_reload": {:hex, :phoenix_live_reload, "1.0.6", "4490d588c4f60248b1c5f1f0dc0a7271e1aed4bddbd8b1542630f7bf6bc7b012", [:mix], [{:fs, "~> 0.9.1", [hex: :fs, optional: false]}, {:phoenix, "~> 1.0 or ~> 1.2-rc", [hex: :phoenix, optional: false]}]},
"phoenix_pubsub": {:hex, :phoenix_pubsub, "1.0.1", "c10ddf6237007c804bf2b8f3c4d5b99009b42eca3a0dfac04ea2d8001186056a", [:mix], []},
"plug": {:hex, :plug, "1.3.0", "6e2b01afc5db3fd011ca4a16efd9cb424528c157c30a44a0186bcc92c7b2e8f3", [:mix], [{:cowboy, "~> 1.0.1 or ~> 1.1", [hex: :cowboy, optional: true]}, {:mime, "~> 1.0", [hex: :mime, optional: false]}]},
"poison": {:hex, :poison, "2.2.0", "4763b69a8a77bd77d26f477d196428b741261a761257ff1cf92753a0d4d24a63", [:mix], []},
- "poolboy": {:hex, :poolboy, "1.5.1", "6b46163901cfd0a1b43d692657ed9d7e599853b3b21b95ae5ae0a777cf9b6ca8", [:rebar], []},
"ranch": {:hex, :ranch, "1.2.1", "a6fb992c10f2187b46ffd17ce398ddf8a54f691b81768f9ef5f461ea7e28c762", [:make], []}}
diff --git a/web/channels/user_socket.ex b/web/channels/user_socket.ex
--- a/web/channels/user_socket.ex
+++ b/web/channels/user_socket.ex
@@ -1,8 +1,7 @@
defmodule KolabChat.UserSocket do
use Phoenix.Socket
- alias KolabChat.Repo
- alias KolabChat.User
+ alias KolabChat.Database
## Channels
channel "room:*", KolabChat.RoomChannel
@@ -21,7 +20,7 @@
def connect(%{"token" => token}, socket) do
case Phoenix.Token.verify(socket, "user", token, max_age: 86400) do
{:ok, user_id} ->
- socket = assign(socket, :user, Repo.get!(User, user_id))
+ socket = assign(socket, :user, Database.User.read!(user_id))
{:ok, socket}
{:error, _} ->
:error
diff --git a/web/controllers/auth_controller.ex b/web/controllers/auth_controller.ex
--- a/web/controllers/auth_controller.ex
+++ b/web/controllers/auth_controller.ex
@@ -1,6 +1,11 @@
defmodule KolabChat.AuthController do
use KolabChat.Web, :controller
+ # FIXME: is there a better place to put these
+ # Both are required for using Amnesia.transaction
+ require Amnesia
+ require Amnesia.Helper
+
@doc """
Handler for the default logon form
"""
@@ -13,13 +18,12 @@
|> put_flash(:error, gettext("Invalid username!"))
|> redirect(to: "/")
true ->
- changeset = User.changeset(%User{}, %{username: user})
- signin(conn, changeset)
+ signin(conn, user)
end
end
- defp signin(conn, changeset) do
- case insert_or_update_user(changeset) do
+ defp signin(conn, username) do
+ case insert_or_update_user(username) do
{:ok, user} ->
conn
|> put_flash(:info, gettext("Signed in!"))
@@ -32,10 +36,13 @@
end
end
- defp insert_or_update_user(changeset) do
- case Repo.get_by(User, username: changeset.changes.username) do
+ defp insert_or_update_user(username) do
+ case Database.User.find(username) do
nil ->
- Repo.insert(changeset)
+ user = Amnesia.transaction do
+ Database.User.write!(%Database.User{username: username})
+ end
+ {:ok, user}
user ->
{:ok, user}
end
diff --git a/web/controllers/plugs/set_user.ex b/web/controllers/plugs/set_user.ex
--- a/web/controllers/plugs/set_user.ex
+++ b/web/controllers/plugs/set_user.ex
@@ -1,8 +1,7 @@
defmodule KolabChat.Plugs.SetUser do
import Plug.Conn
- alias KolabChat.Repo
- alias KolabChat.User
+ use KolabChat.Database
def init(params), do: params
@@ -10,7 +9,7 @@
def call(%{"params": %{"token" => token}} = conn, _params) do
case Phoenix.Token.verify(conn, "user", token, max_age: 86400) do
{:ok, user_id} ->
- assign(conn, :user, Repo.get!(User, user_id))
+ assign(conn, :user, get_user_by_id(user_id))
_ ->
assign(conn, :user, nil)
end
@@ -21,10 +20,17 @@
user_id = get_session(conn, :user_id)
cond do
- user = user_id && Repo.get(User, user_id) ->
+ user = user_id && get_user_by_id(user_id) ->
assign(conn, :user, user)
true ->
assign(conn, :user, nil)
end
end
+
+ def get_user_by_id(user_id) do
+ require Amnesia.Helper # FIXME: this is required by Amnesia.transaction, where to put it best?
+ Amnesia.transaction do
+ Database.User.read(user_id)
+ end
+ end
end
diff --git a/web/models/user.ex b/web/models/user.ex
deleted file mode 100644
--- a/web/models/user.ex
+++ /dev/null
@@ -1,13 +0,0 @@
-defmodule KolabChat.User do
- use KolabChat.Web, :model
-
- schema "users" do
- field :username, :string
- end
-
- def changeset(struct, params \\ %{}) do
- struct
- |> cast(params, [:username])
- |> validate_required([:username])
- end
-end
diff --git a/web/web.ex b/web/web.ex
--- a/web/web.ex
+++ b/web/web.ex
@@ -16,25 +16,11 @@
below.
"""
- def model do
- quote do
- use Ecto.Schema
-
- import Ecto
- import Ecto.Changeset
- import Ecto.Query
- end
- end
-
def controller do
quote do
use Phoenix.Controller
- alias KolabChat.Repo
- alias KolabChat.User
-
- import Ecto
- import Ecto.Query
+ alias KolabChat.Database
import KolabChat.Router.Helpers
import KolabChat.Gettext
@@ -67,9 +53,6 @@
quote do
use Phoenix.Channel
- alias KolabChat.Repo
- import Ecto
- import Ecto.Query
import KolabChat.Gettext
end
end
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Mar 30, 5:14 PM (3 d, 9 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
18817941
Default Alt Text
D369.1774890896.diff (12 KB)
Attached To
Mode
D369: Use Amnesia, get rid of Ecto
Attached
Detach File
Event Timeline