diff --git a/lib/cursif_web/resolvers/accounts.ex b/lib/cursif_web/resolvers/accounts.ex index 2a1cb5c..67ea0b7 100644 --- a/lib/cursif_web/resolvers/accounts.ex +++ b/lib/cursif_web/resolvers/accounts.ex @@ -1,5 +1,5 @@ defmodule CursifWeb.Resolvers.Accounts do - alias Cursif.Accounts + alias Cursif.{Accounts, Notebooks, Pages} alias Cursif.Accounts.User @spec list_users(map(), map()) :: {:ok, list(User.t())} @@ -21,13 +21,44 @@ defmodule CursifWeb.Resolvers.Accounts do def get_current_user(_, _), do: {:error, :unauthenticated} - @spec register(map(), map()) :: {:ok, User.t()} | {:error, list(map())} + defp read_template_content do + case File.read("priv/templates/welcome.md") do + {:ok, content} -> content + {:error, reason} -> "Failed to load template: #{reason}" + end + end + + @doc """ + Register a new user and create a template notebook and page for them. + """ + @spec register(map(), map()) :: {:ok, {User.t(), Notebook.t(), Page.t()}} | {:error, list(map())} def register(args, _context) do case Accounts.create_user(args) do {:ok, user} -> - {:ok, _} = Accounts.verify_user(user) - {:ok, user} - + case Accounts.verify_user(user) do + {:ok, _} -> + template_notebook = %{ + title: "Cursif Introduction", + description: "Welcome new Cursif user!", + owner_type: "user", + owner_id: user.id, + } + case Notebooks.create_notebook(template_notebook) do + {:ok, notebook} -> + template_page = %{ + title: "Welcome", + content: read_template_content(), + parent_id: notebook.id, + parent_type: "notebook" + } + case Pages.create_page(Map.merge(template_page, %{author_id: user.id})) do + {:ok, page} -> {:ok, page} + {:error, changeset} -> {:error, changeset} + end + {:error, notebook_changeset} -> {:error, notebook_changeset} + end + {:error, _} -> {:error, "User verification failed"} + end {:error, changeset} -> {:error, changeset} end end diff --git a/priv/templates/welcome.md b/priv/templates/welcome.md new file mode 100644 index 0000000..0e42f3b --- /dev/null +++ b/priv/templates/welcome.md @@ -0,0 +1,16 @@ +# Welcome + +Welcome to Cursif! This is a template page. + +--- + +### Getting Started +To get started, explore the features of Cursif and customize your notebook with various tools. + +### Tips +Here are some tips: Use markdown for formatting content, and check out the documentation for advanced features. + +## Contact Us +- Email: cursif@codesociety.xyz +- Discord: [Cursif Community](https://discord.gg/FzgwHD7Am3) +- Github: [Cursif](https://github.com/Code-Society-Lab/cursif) diff --git a/test/cursif_web/resolvers/accounts_test.exs b/test/cursif_web/resolvers/accounts_test.exs index 90fb248..b24fdd3 100644 --- a/test/cursif_web/resolvers/accounts_test.exs +++ b/test/cursif_web/resolvers/accounts_test.exs @@ -5,7 +5,7 @@ defmodule CursifWeb.Resolvers.AccountsTest do import Cursif.AccountsFixtures alias CursifWeb.Resolvers.Accounts - alias Cursif.Accounts.User + alias Cursif.Notebooks.Page setup [:create_unique_user] @@ -34,7 +34,18 @@ defmodule CursifWeb.Resolvers.AccountsTest do describe "register/2" do test "successful user registration", %{conn: conn} do - assert {:ok, %User{} = _} = Accounts.register(unique_user_attributes(), conn) + user_attributes = unique_user_attributes() + + case Accounts.register(user_attributes, conn) do + {:ok, page} -> + assert %Page{} = page + assert page.title == "Welcome" + assert page.content != nil + assert page.parent_id != nil + assert page.parent_type == "notebook" + {:error, _} -> + flunk("Expected successful registration but got an error") + end end test "failing user registration, missing attributes", %{conn: conn} do @@ -42,7 +53,7 @@ defmodule CursifWeb.Resolvers.AccountsTest do assert [username: _, email: _, password: _] = errors end - test "failing user registration, invalide attributes", %{conn: conn, user: user} do + test "failing user registration, invalid attributes", %{conn: conn, user: user} do unique_user = unique_user_attributes() assert {:error, %Ecto.Changeset{}} = Accounts.register(%{unique_user | username: user.username}, conn) assert {:error, %Ecto.Changeset{}} = Accounts.register(%{unique_user | email: user.email}, conn) diff --git a/test/cursif_web/schema/account_types_test.exs b/test/cursif_web/schema/account_types_test.exs index ca095be..61a1eae 100644 --- a/test/cursif_web/schema/account_types_test.exs +++ b/test/cursif_web/schema/account_types_test.exs @@ -89,8 +89,9 @@ defmodule CursifWeb.Schema.AccountTypesTest do conn = post(conn, "/api", %{ "query" => """ - mutation Login($email: String!, $username: String!, $password: String!) { + mutation Register($email: String!, $username: String!, $password: String!) { register(email: $email, username: $username, password: $password) { + email username } } @@ -101,7 +102,8 @@ defmodule CursifWeb.Schema.AccountTypesTest do assert json_response(conn, 200) == %{ "data" => %{ "register" => %{ - "username" => user.username + "email" => nil, + "username" => nil } } }