This commit is contained in:
@ -9,6 +9,16 @@ defmodule Memex.Accounts.User do
|
||||
alias Ecto.{Changeset, UUID}
|
||||
alias Memex.Invites.Invite
|
||||
|
||||
@derive {Jason.Encoder,
|
||||
only: [
|
||||
:id,
|
||||
:email,
|
||||
:confirmed_at,
|
||||
:role,
|
||||
:locale,
|
||||
:inserted_at,
|
||||
:updated_at
|
||||
]}
|
||||
@derive {Inspect, except: [:password]}
|
||||
@primary_key {:id, :binary_id, autogenerate: true}
|
||||
@foreign_key_type :binary_id
|
||||
|
@ -9,6 +9,15 @@ defmodule Memex.Contexts.Context do
|
||||
alias Ecto.{Changeset, UUID}
|
||||
alias Memex.{Accounts.User, Repo}
|
||||
|
||||
@derive {Jason.Encoder,
|
||||
only: [
|
||||
:slug,
|
||||
:content,
|
||||
:tags,
|
||||
:visibility,
|
||||
:inserted_at,
|
||||
:updated_at
|
||||
]}
|
||||
@primary_key {:id, :binary_id, autogenerate: true}
|
||||
@foreign_key_type :binary_id
|
||||
schema "contexts" do
|
||||
|
@ -8,6 +8,15 @@ defmodule Memex.Notes.Note do
|
||||
alias Ecto.{Changeset, UUID}
|
||||
alias Memex.{Accounts.User, Repo}
|
||||
|
||||
@derive {Jason.Encoder,
|
||||
only: [
|
||||
:slug,
|
||||
:content,
|
||||
:tags,
|
||||
:visibility,
|
||||
:inserted_at,
|
||||
:updated_at
|
||||
]}
|
||||
@primary_key {:id, :binary_id, autogenerate: true}
|
||||
@foreign_key_type :binary_id
|
||||
schema "notes" do
|
||||
|
@ -8,6 +8,16 @@ defmodule Memex.Pipelines.Pipeline do
|
||||
alias Ecto.{Changeset, UUID}
|
||||
alias Memex.{Accounts.User, Pipelines.Steps.Step, Repo}
|
||||
|
||||
@derive {Jason.Encoder,
|
||||
only: [
|
||||
:slug,
|
||||
:description,
|
||||
:tags,
|
||||
:visibility,
|
||||
:inserted_at,
|
||||
:steps,
|
||||
:updated_at
|
||||
]}
|
||||
@primary_key {:id, :binary_id, autogenerate: true}
|
||||
@foreign_key_type :binary_id
|
||||
schema "pipelines" do
|
||||
|
@ -7,6 +7,14 @@ defmodule Memex.Pipelines.Steps.Step do
|
||||
alias Ecto.{Changeset, UUID}
|
||||
alias Memex.{Accounts.User, Pipelines.Pipeline}
|
||||
|
||||
@derive {Jason.Encoder,
|
||||
only: [
|
||||
:title,
|
||||
:content,
|
||||
:position,
|
||||
:inserted_at,
|
||||
:updated_at
|
||||
]}
|
||||
@primary_key {:id, :binary_id, autogenerate: true}
|
||||
@foreign_key_type :binary_id
|
||||
schema "steps" do
|
||||
|
17
lib/memex_web/controllers/export_controller.ex
Normal file
17
lib/memex_web/controllers/export_controller.ex
Normal file
@ -0,0 +1,17 @@
|
||||
defmodule MemexWeb.ExportController do
|
||||
use MemexWeb, :controller
|
||||
alias Memex.{Contexts, Notes, Pipelines, Pipelines.Steps}
|
||||
|
||||
def export(%{assigns: %{current_user: current_user}} = conn, %{"mode" => "json"}) do
|
||||
pipelines =
|
||||
Pipelines.list_pipelines(current_user)
|
||||
|> Enum.map(fn pipeline -> Steps.preload_steps(pipeline, current_user) end)
|
||||
|
||||
json(conn, %{
|
||||
user: current_user,
|
||||
notes: Notes.list_notes(current_user),
|
||||
contexts: Contexts.list_contexts(current_user),
|
||||
pipelines: pipelines
|
||||
})
|
||||
end
|
||||
end
|
@ -76,6 +76,7 @@ defmodule MemexWeb.Router do
|
||||
put "/users/settings", UserSettingsController, :update
|
||||
delete "/users/settings/:id", UserSettingsController, :delete
|
||||
get "/users/settings/confirm_email/:token", UserSettingsController, :confirm_email
|
||||
get "/export/:mode", ExportController, :export
|
||||
end
|
||||
|
||||
scope "/", MemexWeb do
|
||||
|
@ -136,12 +136,22 @@
|
||||
|
||||
<hr class="hr" />
|
||||
|
||||
<.link
|
||||
href={Routes.user_settings_path(@conn, :delete, @current_user)}
|
||||
method={:delete}
|
||||
class="btn btn-alert"
|
||||
data-confirm={dgettext("prompts", "are you sure you want to delete your account?")}
|
||||
>
|
||||
<%= dgettext("actions", "delete user") %>
|
||||
</.link>
|
||||
<div class="flex justify-center items-center">
|
||||
<.link
|
||||
href={Routes.export_path(@conn, :export, :json)}
|
||||
class="mx-4 my-2 btn btn-primary"
|
||||
target="_blank"
|
||||
>
|
||||
<%= dgettext("actions", "export data as json") %>
|
||||
</.link>
|
||||
|
||||
<.link
|
||||
href={Routes.user_settings_path(@conn, :delete, @current_user)}
|
||||
method={:delete}
|
||||
class="mx-4 my-2 btn btn-alert"
|
||||
data-confirm={dgettext("prompts", "are you sure you want to delete your account?")}
|
||||
>
|
||||
<%= dgettext("actions", "delete user") %>
|
||||
</.link>
|
||||
</div>
|
||||
</div>
|
||||
|
Reference in New Issue
Block a user