mirror of
https://github.com/ash-project/ash_hq.git
synced 2024-09-19 21:03:30 +12:00
improvement: speed up page load by not loading functions
This commit is contained in:
parent
ec92ad0676
commit
d84c23df6f
48 changed files with 1268 additions and 605 deletions
|
@ -18,6 +18,7 @@
|
||||||
render_attributes: 1,
|
render_attributes: 1,
|
||||||
use_path_for_name?: 1,
|
use_path_for_name?: 1,
|
||||||
add_name_to_path?: 1,
|
add_name_to_path?: 1,
|
||||||
|
item_type: 1,
|
||||||
sanitized_name_attribute: 1,
|
sanitized_name_attribute: 1,
|
||||||
show_docs_on: 1,
|
show_docs_on: 1,
|
||||||
header_ids?: 1
|
header_ids?: 1
|
||||||
|
|
|
@ -88,6 +88,15 @@ defmodule AshHq.Docs.Search do
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
custom :mix_tasks, AshHq.Docs.Search.Steps.SearchResource do
|
||||||
|
input %{
|
||||||
|
query: arg(:query),
|
||||||
|
library_versions: arg(:library_versions),
|
||||||
|
types: arg(:types),
|
||||||
|
resource: AshHq.Docs.MixTask
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
custom :build_results, AshHq.Docs.Search.Steps.BuildResults do
|
custom :build_results, AshHq.Docs.Search.Steps.BuildResults do
|
||||||
input %{
|
input %{
|
||||||
dsls: result(:dsls),
|
dsls: result(:dsls),
|
||||||
|
@ -96,7 +105,8 @@ defmodule AshHq.Docs.Search do
|
||||||
library_versions: result(:library_versions),
|
library_versions: result(:library_versions),
|
||||||
extensions: result(:extensions),
|
extensions: result(:extensions),
|
||||||
functions: result(:functions),
|
functions: result(:functions),
|
||||||
modules: result(:modules)
|
modules: result(:modules),
|
||||||
|
mix_tasks: result(:mix_tasks)
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -124,7 +124,8 @@ defmodule AshHq.Docs.Importer do
|
||||||
extensions: result[:extensions],
|
extensions: result[:extensions],
|
||||||
doc: result[:doc],
|
doc: result[:doc],
|
||||||
guides: add_text(result[:guides], library.name, version),
|
guides: add_text(result[:guides], library.name, version),
|
||||||
modules: result[:modules]
|
modules: result[:modules],
|
||||||
|
mix_tasks: result[:mix_tasks]
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
end)
|
end)
|
||||||
|
|
|
@ -10,6 +10,7 @@ defmodule AshHq.Docs.Registry do
|
||||||
entry AshHq.Docs.Guide
|
entry AshHq.Docs.Guide
|
||||||
entry AshHq.Docs.Library
|
entry AshHq.Docs.Library
|
||||||
entry AshHq.Docs.LibraryVersion
|
entry AshHq.Docs.LibraryVersion
|
||||||
|
entry AshHq.Docs.MixTask
|
||||||
entry AshHq.Docs.Module
|
entry AshHq.Docs.Module
|
||||||
entry AshHq.Docs.Option
|
entry AshHq.Docs.Option
|
||||||
end
|
end
|
||||||
|
|
|
@ -64,6 +64,10 @@ defmodule AshHq.Docs.LibraryVersion do
|
||||||
allow_nil? false
|
allow_nil? false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
argument :mix_tasks, {:array, :map} do
|
||||||
|
allow_nil? false
|
||||||
|
end
|
||||||
|
|
||||||
argument :extensions, {:array, :map} do
|
argument :extensions, {:array, :map} do
|
||||||
allow_nil? false
|
allow_nil? false
|
||||||
end
|
end
|
||||||
|
@ -73,12 +77,16 @@ defmodule AshHq.Docs.LibraryVersion do
|
||||||
change {AshHq.Docs.Changes.AddArgToRelationship,
|
change {AshHq.Docs.Changes.AddArgToRelationship,
|
||||||
attr: :id, arg: :library_version, rel: :modules, generate: &Ash.UUID.generate/0}
|
attr: :id, arg: :library_version, rel: :modules, generate: &Ash.UUID.generate/0}
|
||||||
|
|
||||||
|
change {AshHq.Docs.Changes.AddArgToRelationship,
|
||||||
|
attr: :id, arg: :library_version, rel: :mix_tasks, generate: &Ash.UUID.generate/0}
|
||||||
|
|
||||||
change {AshHq.Docs.Changes.AddArgToRelationship,
|
change {AshHq.Docs.Changes.AddArgToRelationship,
|
||||||
attr: :id, arg: :library_version, rel: :extensions, generate: &Ash.UUID.generate/0}
|
attr: :id, arg: :library_version, rel: :extensions, generate: &Ash.UUID.generate/0}
|
||||||
|
|
||||||
change manage_relationship(:guides, type: :create)
|
change manage_relationship(:guides, type: :create)
|
||||||
change manage_relationship(:library, type: :append_and_remove)
|
change manage_relationship(:library, type: :append_and_remove)
|
||||||
change manage_relationship(:modules, type: :create)
|
change manage_relationship(:modules, type: :create)
|
||||||
|
change manage_relationship(:mix_tasks, type: :create)
|
||||||
change manage_relationship(:extensions, type: :create)
|
change manage_relationship(:extensions, type: :create)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -126,5 +134,6 @@ defmodule AshHq.Docs.LibraryVersion do
|
||||||
has_many :extensions, AshHq.Docs.Extension
|
has_many :extensions, AshHq.Docs.Extension
|
||||||
has_many :guides, AshHq.Docs.Guide
|
has_many :guides, AshHq.Docs.Guide
|
||||||
has_many :modules, AshHq.Docs.Module
|
has_many :modules, AshHq.Docs.Module
|
||||||
|
has_many :mix_tasks, AshHq.Docs.MixTask
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
95
lib/ash_hq/docs/resources/mix_task/mix_task.ex
Normal file
95
lib/ash_hq/docs/resources/mix_task/mix_task.ex
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
defmodule AshHq.Docs.MixTask do
|
||||||
|
@moduledoc false
|
||||||
|
|
||||||
|
use AshHq.Resource,
|
||||||
|
data_layer: AshPostgres.DataLayer,
|
||||||
|
extensions: [AshHq.Docs.Extensions.Search, AshHq.Docs.Extensions.RenderMarkdown]
|
||||||
|
|
||||||
|
resource do
|
||||||
|
description "Represents a mix task that has been exposed by a library"
|
||||||
|
end
|
||||||
|
|
||||||
|
render_markdown do
|
||||||
|
render_attributes doc: :doc_html
|
||||||
|
end
|
||||||
|
|
||||||
|
search do
|
||||||
|
doc_attribute :doc
|
||||||
|
|
||||||
|
load_for_search [
|
||||||
|
:version_name,
|
||||||
|
:library_name,
|
||||||
|
:library_id
|
||||||
|
]
|
||||||
|
|
||||||
|
item_type "Mix Task"
|
||||||
|
|
||||||
|
type "Mix Tasks"
|
||||||
|
end
|
||||||
|
|
||||||
|
postgres do
|
||||||
|
table "mix_tasks"
|
||||||
|
repo AshHq.Repo
|
||||||
|
|
||||||
|
references do
|
||||||
|
reference :library_version, on_delete: :delete
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
attributes do
|
||||||
|
uuid_primary_key :id
|
||||||
|
|
||||||
|
attribute :name, :string do
|
||||||
|
allow_nil? false
|
||||||
|
end
|
||||||
|
|
||||||
|
attribute :category, :string do
|
||||||
|
allow_nil? false
|
||||||
|
default "Misc"
|
||||||
|
end
|
||||||
|
|
||||||
|
attribute :file, :string
|
||||||
|
|
||||||
|
attribute :doc, :string do
|
||||||
|
allow_nil? false
|
||||||
|
constraints trim?: false, allow_empty?: true
|
||||||
|
default ""
|
||||||
|
end
|
||||||
|
|
||||||
|
attribute :doc_html, :string do
|
||||||
|
constraints trim?: false, allow_empty?: true
|
||||||
|
writable? false
|
||||||
|
end
|
||||||
|
|
||||||
|
attribute :order, :integer do
|
||||||
|
allow_nil? false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
actions do
|
||||||
|
defaults [:read, :update, :destroy]
|
||||||
|
|
||||||
|
create :create do
|
||||||
|
primary? true
|
||||||
|
argument :library_version, :uuid
|
||||||
|
|
||||||
|
change manage_relationship(:library_version, type: :append_and_remove)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
code_interface do
|
||||||
|
define_for AshHq.Docs
|
||||||
|
end
|
||||||
|
|
||||||
|
aggregates do
|
||||||
|
first :version_name, :library_version, :version
|
||||||
|
first :library_name, [:library_version, :library], :name
|
||||||
|
first :library_id, [:library_version, :library], :id
|
||||||
|
end
|
||||||
|
|
||||||
|
relationships do
|
||||||
|
belongs_to :library_version, AshHq.Docs.LibraryVersion do
|
||||||
|
allow_nil? true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -6,22 +6,57 @@ defmodule AshHqWeb.Components.DocSidebar do
|
||||||
alias Surface.Components.LivePatch
|
alias Surface.Components.LivePatch
|
||||||
alias Phoenix.LiveView.JS
|
alias Phoenix.LiveView.JS
|
||||||
|
|
||||||
prop(class, :css_class, default: "")
|
prop class, :css_class, default: ""
|
||||||
prop(libraries, :list, required: true)
|
prop libraries, :list, required: true
|
||||||
prop(extension, :any, default: nil)
|
prop extension, :any, default: nil
|
||||||
prop(guide, :any, default: nil)
|
prop guide, :any, default: nil
|
||||||
prop(library, :any, default: nil)
|
prop library, :any, default: nil
|
||||||
prop(library_version, :any, default: nil)
|
prop library_version, :any, default: nil
|
||||||
prop(selected_versions, :map, default: %{})
|
prop selected_versions, :map, default: %{}
|
||||||
prop(id, :string, required: true)
|
prop id, :string, required: true
|
||||||
prop(dsl, :any, required: true)
|
prop dsl, :any, required: true
|
||||||
prop(module, :any, required: true)
|
prop module, :any, required: true
|
||||||
prop(add_version, :event, required: true)
|
prop mix_task, :any, required: true
|
||||||
prop(remove_version, :event, required: true)
|
prop add_version, :event, required: true
|
||||||
prop(change_version, :event, required: true)
|
prop remove_version, :event, required: true
|
||||||
|
prop change_version, :event, required: true
|
||||||
|
|
||||||
|
data guides_by_category_and_library, :any
|
||||||
|
data extensions, :any
|
||||||
|
data modules_by_category, :any
|
||||||
|
data mix_tasks_by_category, :any
|
||||||
|
|
||||||
@spec render(any) :: Phoenix.LiveView.Rendered.t()
|
@spec render(any) :: Phoenix.LiveView.Rendered.t()
|
||||||
def render(assigns) do
|
def render(assigns) do
|
||||||
|
assigns =
|
||||||
|
assign(
|
||||||
|
assigns,
|
||||||
|
guides_by_category_and_library:
|
||||||
|
guides_by_category_and_library(
|
||||||
|
assigns[:libraries],
|
||||||
|
assigns[:library_version],
|
||||||
|
assigns[:selected_versions]
|
||||||
|
),
|
||||||
|
extensions:
|
||||||
|
get_extensions(
|
||||||
|
assigns[:libraries],
|
||||||
|
assigns[:library_versions],
|
||||||
|
assigns[:selected_versions]
|
||||||
|
),
|
||||||
|
modules_by_category:
|
||||||
|
modules_by_category(
|
||||||
|
assigns[:libraries],
|
||||||
|
assigns[:library_version],
|
||||||
|
assigns[:selected_versions]
|
||||||
|
),
|
||||||
|
mix_tasks_by_category:
|
||||||
|
mix_tasks_by_category(
|
||||||
|
assigns[:libraries],
|
||||||
|
assigns[:library_version],
|
||||||
|
assigns[:selected_versions]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
~F"""
|
~F"""
|
||||||
<aside
|
<aside
|
||||||
id={@id}
|
id={@id}
|
||||||
|
@ -44,7 +79,7 @@ defmodule AshHqWeb.Components.DocSidebar do
|
||||||
<div>
|
<div>
|
||||||
Guides
|
Guides
|
||||||
</div>
|
</div>
|
||||||
{#for {category, guides_by_library} <- guides_by_category_and_library(@libraries, @selected_versions)}
|
{#for {category, guides_by_library} <- @guides_by_category_and_library}
|
||||||
<div class="text-base-light-500">
|
<div class="text-base-light-500">
|
||||||
<button
|
<button
|
||||||
phx-click={collapse("#{@id}-#{String.replace(category, " ", "-")}")}
|
phx-click={collapse("#{@id}-#{String.replace(category, " ", "-")}")}
|
||||||
|
@ -91,7 +126,7 @@ defmodule AshHqWeb.Components.DocSidebar do
|
||||||
Reference
|
Reference
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-2 space-y-2">
|
<div class="ml-2 space-y-2">
|
||||||
{#if !Enum.empty?(get_extensions(@libraries, @selected_versions))}
|
{#if !Enum.empty?(@extensions)}
|
||||||
<div class="text-base-light-500">
|
<div class="text-base-light-500">
|
||||||
<button phx-click={collapse("#{@id}-extension")} class="flex flex-row items-center">
|
<button phx-click={collapse("#{@id}-extension")} class="flex flex-row items-center">
|
||||||
<div id={"#{@id}-extension-chevron-down"}>
|
<div id={"#{@id}-extension-chevron-down"}>
|
||||||
|
@ -105,7 +140,7 @@ defmodule AshHqWeb.Components.DocSidebar do
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
<div id={"#{@id}-extension"}>
|
<div id={"#{@id}-extension"}>
|
||||||
{#for {library, extensions} <- get_extensions(@libraries, @selected_versions)}
|
{#for {library, extensions} <- @extensions}
|
||||||
<li class="ml-3 text-base-light-200 p-1">
|
<li class="ml-3 text-base-light-200 p-1">
|
||||||
{library}
|
{library}
|
||||||
<ul>
|
<ul>
|
||||||
|
@ -128,6 +163,51 @@ defmodule AshHqWeb.Components.DocSidebar do
|
||||||
{/for}
|
{/for}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{#if !Enum.empty?(@mix_tasks_by_category)}
|
||||||
|
<div class="text-base-light-500">
|
||||||
|
<button phx-click={collapse("#{@id}-mix-tasks")} class="flex flex-row items-center">
|
||||||
|
<div id={"#{@id}-mix-tasks-chevron-down"}>
|
||||||
|
<Heroicons.Outline.ChevronDownIcon class="w-3 h-3 mr-1" />
|
||||||
|
</div>
|
||||||
|
<div id={"#{@id}-mix-tasks-chevron-right"} class="-rotate-90" style="display: none;">
|
||||||
|
<Heroicons.Outline.ChevronDownIcon class="w-3 h-3 mr-1" />
|
||||||
|
</div>
|
||||||
|
Mix Tasks
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
<div id={"#{@id}-mix-tasks"}>
|
||||||
|
{#for {category, mix_tasks} <- @mix_tasks_by_category}
|
||||||
|
<div class="ml-4">
|
||||||
|
<span class="text-sm text-base-light-900 dark:text-base-dark-100">{category}</span>
|
||||||
|
</div>
|
||||||
|
{#for mix_task <- mix_tasks}
|
||||||
|
<li class="ml-4">
|
||||||
|
<LivePatch
|
||||||
|
to={DocRoutes.doc_link(mix_task, @selected_versions)}
|
||||||
|
class="flex items-center space-x-2 pt-1 text-base font-normal text-base-light-900 rounded-lg dark:text-base-dark-100 hover:bg-base-light-100 dark:hover:bg-base-light-700"
|
||||||
|
>
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
stroke-width="1.5"
|
||||||
|
stroke="currentColor"
|
||||||
|
class="w-4 h-4"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
d="M6.75 7.5l3 2.25-3 2.25m4.5 0h3m-9 8.25h13.5A2.25 2.25 0 0021 18V6a2.25 2.25 0 00-2.25-2.25H5.25A2.25 2.25 0 003 6v12a2.25 2.25 0 002.25 2.25z"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
<span class="">{mix_task.name}</span>
|
||||||
|
</LivePatch>
|
||||||
|
</li>
|
||||||
|
{/for}
|
||||||
|
{/for}
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="text-base-light-500">
|
<div class="text-base-light-500">
|
||||||
<button phx-click={collapse("#{@id}-modules")} class="flex flex-row items-center">
|
<button phx-click={collapse("#{@id}-modules")} class="flex flex-row items-center">
|
||||||
<div id={"#{@id}-modules-chevron-down"}>
|
<div id={"#{@id}-modules-chevron-down"}>
|
||||||
|
@ -140,7 +220,37 @@ defmodule AshHqWeb.Components.DocSidebar do
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div id={"#{@id}-modules"}>
|
<div id={"#{@id}-modules"}>
|
||||||
{#for {category, modules} <- modules_by_category(@libraries, @selected_versions)}
|
{#for {category, modules} <- @modules_by_category}
|
||||||
|
<div class="ml-4">
|
||||||
|
<span class="text-sm text-base-light-900 dark:text-base-dark-100">{category}</span>
|
||||||
|
</div>
|
||||||
|
{#for module <- modules}
|
||||||
|
<li class="ml-4">
|
||||||
|
<LivePatch
|
||||||
|
to={DocRoutes.doc_link(module, @selected_versions)}
|
||||||
|
class="flex items-center space-x-2 pt-1 text-base font-normal text-base-light-900 rounded-lg dark:text-base-dark-100 hover:bg-base-light-100 dark:hover:bg-base-light-700"
|
||||||
|
>
|
||||||
|
<Heroicons.Outline.CodeIcon class="h-4 w-4" />
|
||||||
|
<span class="">{module.name}</span>
|
||||||
|
</LivePatch>
|
||||||
|
</li>
|
||||||
|
{/for}
|
||||||
|
{/for}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="text-base-light-500">
|
||||||
|
<button phx-click={collapse("#{@id}-modules")} class="flex flex-row items-center">
|
||||||
|
<div id={"#{@id}-modules-chevron-down"}>
|
||||||
|
<Heroicons.Outline.ChevronDownIcon class="w-3 h-3 mr-1" />
|
||||||
|
</div>
|
||||||
|
<div id={"#{@id}-modules-chevron-right"} class="-rotate-90" style="display: none;">
|
||||||
|
<Heroicons.Outline.ChevronDownIcon class="w-3 h-3 mr-1" />
|
||||||
|
</div>
|
||||||
|
Modules
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div id={"#{@id}-modules"}>
|
||||||
|
{#for {category, modules} <- @modules_by_category}
|
||||||
<div class="ml-4">
|
<div class="ml-4">
|
||||||
<span class="text-sm text-base-light-900 dark:text-base-dark-100">{category}</span>
|
<span class="text-sm text-base-light-900 dark:text-base-dark-100">{category}</span>
|
||||||
</div>
|
</div>
|
||||||
|
@ -236,9 +346,25 @@ defmodule AshHqWeb.Components.DocSidebar do
|
||||||
"""
|
"""
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp selected_version(library, library_version, selected_versions) do
|
||||||
|
selected_version = selected_versions[library.id]
|
||||||
|
|
||||||
|
if library_version && library_version.library_id == library.id do
|
||||||
|
library_version
|
||||||
|
else
|
||||||
|
if selected_version == "latest" do
|
||||||
|
AshHqWeb.Helpers.latest_version(library)
|
||||||
|
else
|
||||||
|
if selected_version not in [nil, ""] do
|
||||||
|
Enum.find(library.versions, &(&1.id == selected_version))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
@start_guides ["Tutorials", "Topics", "How To", "Misc"]
|
@start_guides ["Tutorials", "Topics", "How To", "Misc"]
|
||||||
|
|
||||||
defp guides_by_category_and_library(libraries, selected_versions) do
|
defp guides_by_category_and_library(libraries, library_version, selected_versions) do
|
||||||
libraries =
|
libraries =
|
||||||
Enum.filter(libraries, fn library ->
|
Enum.filter(libraries, fn library ->
|
||||||
selected_versions[library.id] && selected_versions[library.id] != ""
|
selected_versions[library.id] && selected_versions[library.id] != ""
|
||||||
|
@ -251,8 +377,8 @@ defmodule AshHqWeb.Components.DocSidebar do
|
||||||
|
|
||||||
libraries
|
libraries
|
||||||
|> Enum.flat_map(fn library ->
|
|> Enum.flat_map(fn library ->
|
||||||
library.versions
|
library
|
||||||
|> Enum.find(&Ash.Resource.loaded?(&1, :guides))
|
|> selected_version(library_version, selected_versions)
|
||||||
|> case do
|
|> case do
|
||||||
nil ->
|
nil ->
|
||||||
[]
|
[]
|
||||||
|
@ -286,49 +412,32 @@ defmodule AshHqWeb.Components.DocSidebar do
|
||||||
|> partially_alphabetically_sort(@start_guides, [])
|
|> partially_alphabetically_sort(@start_guides, [])
|
||||||
end
|
end
|
||||||
|
|
||||||
defp get_extensions(libraries, selected_versions) do
|
defp get_extensions(libraries, library_version, selected_versions) do
|
||||||
libraries
|
libraries
|
||||||
|> Enum.filter(fn library ->
|
|
||||||
selected_versions[library.id] && selected_versions[library.id] != ""
|
|
||||||
end)
|
|
||||||
|> Enum.sort_by(& &1.order)
|
|> Enum.sort_by(& &1.order)
|
||||||
|> Enum.flat_map(fn library ->
|
|> Enum.map(&{&1.display_name, selected_version(&1, library_version, selected_versions)})
|
||||||
case Enum.find(library.versions, &Ash.Resource.loaded?(&1, :extensions)) do
|
|> Enum.filter(&elem(&1, 1))
|
||||||
nil ->
|
|> Enum.flat_map(fn {name, version} ->
|
||||||
|
case version.extensions do
|
||||||
|
[] ->
|
||||||
[]
|
[]
|
||||||
|
|
||||||
version ->
|
%Ash.NotLoaded{} ->
|
||||||
case version.extensions do
|
raise "extensions not selected for #{version.version} | #{version.id} of #{name}"
|
||||||
[] ->
|
|
||||||
[]
|
|
||||||
|
|
||||||
extensions ->
|
extensions ->
|
||||||
[{library.display_name, extensions}]
|
[{name, extensions}]
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
@last_categories ["Errors"]
|
@last_categories ["Errors"]
|
||||||
|
|
||||||
defp modules_by_category(libraries, selected_versions) do
|
defp modules_by_category(libraries, library_version, selected_versions) do
|
||||||
libraries =
|
|
||||||
Enum.filter(libraries, fn library ->
|
|
||||||
selected_versions[library.id] && selected_versions[library.id] != ""
|
|
||||||
end)
|
|
||||||
|
|
||||||
libraries
|
libraries
|
||||||
|> Enum.flat_map(fn library ->
|
|> Enum.map(&selected_version(&1, library_version, selected_versions))
|
||||||
library.versions
|
|> Enum.filter(& &1)
|
||||||
|> Enum.find(&Ash.Resource.loaded?(&1, :modules))
|
|> Enum.flat_map(& &1.modules)
|
||||||
|> case do
|
|
||||||
nil ->
|
|
||||||
[]
|
|
||||||
|
|
||||||
%{modules: modules} ->
|
|
||||||
modules
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|> Enum.group_by(fn module ->
|
|> Enum.group_by(fn module ->
|
||||||
module.category
|
module.category
|
||||||
end)
|
end)
|
||||||
|
@ -336,6 +445,21 @@ defmodule AshHqWeb.Components.DocSidebar do
|
||||||
|> Enum.map(fn {category, modules} ->
|
|> Enum.map(fn {category, modules} ->
|
||||||
{category, Enum.sort_by(modules, & &1.name)}
|
{category, Enum.sort_by(modules, & &1.name)}
|
||||||
end)
|
end)
|
||||||
|
|> partially_alphabetically_sort([], [])
|
||||||
|
end
|
||||||
|
|
||||||
|
defp mix_tasks_by_category(libraries, library_version, selected_versions) do
|
||||||
|
libraries
|
||||||
|
|> Enum.map(&selected_version(&1, library_version, selected_versions))
|
||||||
|
|> Enum.filter(& &1)
|
||||||
|
|> Enum.flat_map(& &1.mix_tasks)
|
||||||
|
|> Enum.group_by(fn mix_task ->
|
||||||
|
mix_task.category
|
||||||
|
end)
|
||||||
|
|> Enum.sort_by(fn {category, _} -> category end)
|
||||||
|
|> Enum.map(fn {category, mix_tasks} ->
|
||||||
|
{category, Enum.sort_by(mix_tasks, & &1.name)}
|
||||||
|
end)
|
||||||
|> partially_alphabetically_sort([], @last_categories)
|
|> partially_alphabetically_sort([], @last_categories)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -161,6 +161,24 @@ defmodule AshHqWeb.Components.Search do
|
||||||
|
|
||||||
defp render_item_type(assigns, item) do
|
defp render_item_type(assigns, item) do
|
||||||
case item_type(item) do
|
case item_type(item) do
|
||||||
|
"Mix Task" ->
|
||||||
|
~F"""
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
stroke-width="1.5"
|
||||||
|
stroke="currentColor"
|
||||||
|
class="w-4 h-4"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
d="M6.75 7.5l3 2.25-3 2.25m4.5 0h3m-9 8.25h13.5A2.25 2.25 0 0021 18V6a2.25 2.25 0 00-2.25-2.25H5.25A2.25 2.25 0 003 6v12a2.25 2.25 0 002.25 2.25z"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
"""
|
||||||
|
|
||||||
"Function" ->
|
"Function" ->
|
||||||
case item.type do
|
case item.type do
|
||||||
type when type in [:function, :macro] ->
|
type when type in [:function, :macro] ->
|
||||||
|
|
|
@ -10,6 +10,18 @@ defmodule AshHqWeb.DocRoutes do
|
||||||
"/docs/dsl/#{name}"
|
"/docs/dsl/#{name}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def doc_link(
|
||||||
|
%AshHq.Docs.MixTask{
|
||||||
|
sanitized_name: sanitized_name,
|
||||||
|
library_name: library_name,
|
||||||
|
version_name: version_name,
|
||||||
|
library_id: library_id
|
||||||
|
},
|
||||||
|
selected_versions
|
||||||
|
) do
|
||||||
|
"/docs/mix_task/#{library_name}/#{version(version_name, library_id, selected_versions)}/#{sanitized_name}"
|
||||||
|
end
|
||||||
|
|
||||||
def doc_link(
|
def doc_link(
|
||||||
%AshHq.Docs.Module{
|
%AshHq.Docs.Module{
|
||||||
sanitized_name: sanitized_name,
|
sanitized_name: sanitized_name,
|
||||||
|
|
|
@ -6,13 +6,18 @@ defmodule AshHqWeb.Helpers do
|
||||||
alias AshHqWeb.DocRoutes
|
alias AshHqWeb.DocRoutes
|
||||||
|
|
||||||
def latest_version(library) do
|
def latest_version(library) do
|
||||||
Enum.at(library.versions, 0)
|
library.versions
|
||||||
|
|> Enum.min(&(Version.compare(&1.version, &2.version) != :lt))
|
||||||
end
|
end
|
||||||
|
|
||||||
def source_link(%AshHq.Docs.Module{file: file}, library, library_version) do
|
def source_link(%AshHq.Docs.Module{file: file}, library, library_version) do
|
||||||
"https://github.com/ash-project/#{library.name}/tree/v#{library_version.version}/#{file}"
|
"https://github.com/ash-project/#{library.name}/tree/v#{library_version.version}/#{file}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def source_link(%AshHq.Docs.MixTask{file: file}, library, library_version) do
|
||||||
|
"https://github.com/ash-project/#{library.name}/tree/v#{library_version.version}/#{file}"
|
||||||
|
end
|
||||||
|
|
||||||
def source_link(%AshHq.Docs.Function{file: file, line: line}, library, library_version) do
|
def source_link(%AshHq.Docs.Function{file: file, line: line}, library, library_version) do
|
||||||
if line do
|
if line do
|
||||||
"https://github.com/ash-project/#{library.name}/tree/v#{library_version.version}/#{file}#L#{line}"
|
"https://github.com/ash-project/#{library.name}/tree/v#{library_version.version}/#{file}#L#{line}"
|
||||||
|
@ -37,8 +42,6 @@ defmodule AshHqWeb.Helpers do
|
||||||
"<pre><code>#{render_mix_dep(libraries, library, selected_versions, text)}</code></pre>"
|
"<pre><code>#{render_mix_dep(libraries, library, selected_versions, text)}</code></pre>"
|
||||||
rescue
|
rescue
|
||||||
e ->
|
e ->
|
||||||
IO.inspect(__STACKTRACE__)
|
|
||||||
|
|
||||||
Logger.error(
|
Logger.error(
|
||||||
"Invalid link #{Exception.format(:error, e)}\n#{Exception.format_stacktrace(__STACKTRACE__)}"
|
"Invalid link #{Exception.format(:error, e)}\n#{Exception.format_stacktrace(__STACKTRACE__)}"
|
||||||
)
|
)
|
||||||
|
@ -87,8 +90,6 @@ defmodule AshHqWeb.Helpers do
|
||||||
render_link(libraries, selected_versions, library, type, item, text, rest)
|
render_link(libraries, selected_versions, library, type, item, text, rest)
|
||||||
rescue
|
rescue
|
||||||
e ->
|
e ->
|
||||||
IO.inspect(__STACKTRACE__)
|
|
||||||
|
|
||||||
Logger.error(
|
Logger.error(
|
||||||
"Invalid link #{Exception.format(:error, e)}\n#{Exception.format_stacktrace(__STACKTRACE__)}"
|
"Invalid link #{Exception.format(:error, e)}\n#{Exception.format_stacktrace(__STACKTRACE__)}"
|
||||||
)
|
)
|
||||||
|
|
|
@ -29,6 +29,7 @@ defmodule AshHqWeb.Pages.Docs do
|
||||||
data dsl, :any
|
data dsl, :any
|
||||||
data options, :list, default: []
|
data options, :list, default: []
|
||||||
data module, :any
|
data module, :any
|
||||||
|
data mix_task, :any
|
||||||
data positional_options, :list
|
data positional_options, :list
|
||||||
|
|
||||||
@spec render(any) :: Phoenix.LiveView.Rendered.t()
|
@spec render(any) :: Phoenix.LiveView.Rendered.t()
|
||||||
|
@ -51,6 +52,7 @@ defmodule AshHqWeb.Pages.Docs do
|
||||||
libraries={@libraries}
|
libraries={@libraries}
|
||||||
extension={@extension}
|
extension={@extension}
|
||||||
module={@module}
|
module={@module}
|
||||||
|
mix_task={@mix_task}
|
||||||
guide={@guide}
|
guide={@guide}
|
||||||
library={@library}
|
library={@library}
|
||||||
library_version={@library_version}
|
library_version={@library_version}
|
||||||
|
@ -66,6 +68,7 @@ defmodule AshHqWeb.Pages.Docs do
|
||||||
class="hidden xl:block w-80 overflow-x-hidden custom-scrollbar"
|
class="hidden xl:block w-80 overflow-x-hidden custom-scrollbar"
|
||||||
remove_version={@remove_version}
|
remove_version={@remove_version}
|
||||||
module={@module}
|
module={@module}
|
||||||
|
mix_task={@mix_task}
|
||||||
libraries={@libraries}
|
libraries={@libraries}
|
||||||
extension={@extension}
|
extension={@extension}
|
||||||
guide={@guide}
|
guide={@guide}
|
||||||
|
@ -87,6 +90,13 @@ defmodule AshHqWeb.Pages.Docs do
|
||||||
{#if @module}
|
{#if @module}
|
||||||
<h2>{@module.name} <SourceLink module_or_function={@module} library={@library} library_version={@library_version} /></h2>
|
<h2>{@module.name} <SourceLink module_or_function={@module} library={@library} library_version={@library_version} /></h2>
|
||||||
{/if}
|
{/if}
|
||||||
|
{#if @mix_task}
|
||||||
|
<h2>{@mix_task.name} <SourceLink
|
||||||
|
module_or_function={@mix_task}
|
||||||
|
library={@library}
|
||||||
|
library_version={@library_version}
|
||||||
|
/></h2>
|
||||||
|
{/if}
|
||||||
{#if @library_version}
|
{#if @library_version}
|
||||||
<div class="static mb-6 md:absolute right-2 top-2 border rounded-lg flex flex-row w-fit">
|
<div class="static mb-6 md:absolute right-2 top-2 border rounded-lg flex flex-row w-fit">
|
||||||
<div class="border-r pl-2 pr-2 dark:text-black bg-primary-light-600 dark:bg-primary-dark-600 rounded-l-lg">
|
<div class="border-r pl-2 pr-2 dark:text-black bg-primary-light-600 dark:bg-primary-dark-600 rounded-l-lg">
|
||||||
|
@ -279,11 +289,19 @@ defmodule AshHqWeb.Pages.Docs do
|
||||||
end
|
end
|
||||||
|
|
||||||
def update(assigns, socket) do
|
def update(assigns, socket) do
|
||||||
{:ok,
|
if (assigns[:selected_versions] == socket.assigns[:selected_versions] &&
|
||||||
socket
|
Map.get(socket.assigns.library_version || %{}, :id) ==
|
||||||
|> assign(assigns)
|
Map.get(assigns[:library_version] || %{}, :id)) || !socket.assigns[:loaded_once?] do
|
||||||
|> assign(loaded_once: true)
|
{:ok,
|
||||||
|> load_docs(assigns[:loaded_once] || false)}
|
socket
|
||||||
|
|> assign(assigns)
|
||||||
|
|> assign(:loaded_once?, false)
|
||||||
|
|> load_docs()}
|
||||||
|
else
|
||||||
|
{:ok,
|
||||||
|
socket
|
||||||
|
|> assign(assigns)}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp modules_in_scope(nil, _, _, _), do: []
|
defp modules_in_scope(nil, _, _, _), do: []
|
||||||
|
@ -373,61 +391,79 @@ defmodule AshHqWeb.Pages.Docs do
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def load_docs(socket, _loaded_once?) do
|
def load_docs(socket) do
|
||||||
socket = assign_library(socket)
|
socket = assign_library(socket)
|
||||||
|
|
||||||
|
dsls_query =
|
||||||
|
AshHq.Docs.Dsl
|
||||||
|
|> Ash.Query.sort(order: :asc)
|
||||||
|
|> load_for_search(socket.assigns[:params]["dsl_path"])
|
||||||
|
|
||||||
|
options_query =
|
||||||
|
AshHq.Docs.Option
|
||||||
|
|> Ash.Query.sort(order: :asc)
|
||||||
|
|> load_for_search(socket.assigns[:params]["dsl_path"])
|
||||||
|
|
||||||
|
guides_query =
|
||||||
|
AshHq.Docs.Guide
|
||||||
|
|> Ash.Query.new()
|
||||||
|
|> load_for_search(socket.assigns[:params]["guide"])
|
||||||
|
|
||||||
|
modules_query =
|
||||||
|
AshHq.Docs.Module
|
||||||
|
|> Ash.Query.sort(order: :asc)
|
||||||
|
|> load_for_search(socket.assigns[:params]["module"])
|
||||||
|
|
||||||
|
mix_tasks_query =
|
||||||
|
AshHq.Docs.MixTask
|
||||||
|
|> Ash.Query.sort(order: :asc)
|
||||||
|
|> load_for_search(socket.assigns[:params]["mix_task"])
|
||||||
|
|
||||||
|
extensions_query =
|
||||||
|
AshHq.Docs.Extension
|
||||||
|
|> Ash.Query.sort(order: :asc)
|
||||||
|
|> Ash.Query.load(options: options_query, dsls: dsls_query)
|
||||||
|
|> load_for_search(socket.assigns[:params]["extension"])
|
||||||
|
|
||||||
new_libraries =
|
new_libraries =
|
||||||
socket.assigns.libraries
|
socket.assigns.libraries
|
||||||
|> Enum.map(fn library ->
|
|> Enum.flat_map(fn library ->
|
||||||
Map.update!(library, :versions, fn versions ->
|
latest_version = AshHqWeb.Helpers.latest_version(library)
|
||||||
latest_version = AshHqWeb.Helpers.latest_version(library)
|
|
||||||
|
|
||||||
Enum.map(versions, fn version ->
|
Enum.filter(library.versions, fn version ->
|
||||||
if (latest_version && version.id == latest_version.id) ||
|
(latest_version && version.id == latest_version.id) ||
|
||||||
version.id == socket.assigns[:selected_versions][library.id] ||
|
version.id == socket.assigns[:selected_versions][library.id] ||
|
||||||
(socket.assigns[:library_version] &&
|
(socket.assigns[:library_version] &&
|
||||||
socket.assigns[:library_version].id == version.id) do
|
socket.assigns[:library_version].id == version.id) ||
|
||||||
dsls_query =
|
(socket.assigns.params["version"] &&
|
||||||
AshHq.Docs.Dsl
|
socket.assigns.params["version"] ==
|
||||||
|> Ash.Query.sort(order: :asc)
|
version.version)
|
||||||
|> load_for_search(socket.assigns[:params]["dsl_path"])
|
end)
|
||||||
|
end)
|
||||||
options_query =
|
|> AshHq.Docs.load!(
|
||||||
AshHq.Docs.Option
|
[
|
||||||
|> Ash.Query.sort(order: :asc)
|
extensions: extensions_query,
|
||||||
|> load_for_search(socket.assigns[:params]["dsl_path"])
|
guides: guides_query,
|
||||||
|
modules: modules_query,
|
||||||
functions_query =
|
mix_tasks: mix_tasks_query
|
||||||
AshHq.Docs.Function
|
],
|
||||||
|> Ash.Query.sort(name: :asc, arity: :asc)
|
lazy?: true
|
||||||
|> load_for_search(socket.assigns[:params]["module"])
|
)
|
||||||
|
|> Enum.reduce(socket.assigns.libraries, fn library_version, libraries ->
|
||||||
guides_query =
|
Enum.map(libraries, fn library ->
|
||||||
AshHq.Docs.Guide
|
if library.id == library_version.library_id do
|
||||||
|> Ash.Query.new()
|
Map.update!(library, :versions, fn versions ->
|
||||||
|> load_for_search(socket.assigns[:params]["guide"])
|
Enum.map(versions, fn current_version ->
|
||||||
|
if current_version.id == library_version.id do
|
||||||
modules_query =
|
library_version
|
||||||
AshHq.Docs.Module
|
else
|
||||||
|> Ash.Query.sort(order: :asc)
|
current_version
|
||||||
|> Ash.Query.load(functions: functions_query)
|
end
|
||||||
|> load_for_search(socket.assigns[:params]["module"])
|
end)
|
||||||
|
end)
|
||||||
extensions_query =
|
else
|
||||||
AshHq.Docs.Extension
|
library
|
||||||
|> Ash.Query.sort(order: :asc)
|
end
|
||||||
|> Ash.Query.load(options: options_query, dsls: dsls_query)
|
|
||||||
|> load_for_search(socket.assigns[:params]["extension"])
|
|
||||||
|
|
||||||
AshHq.Docs.load!(
|
|
||||||
version,
|
|
||||||
[extensions: extensions_query, guides: guides_query, modules: modules_query],
|
|
||||||
lazy?: true
|
|
||||||
)
|
|
||||||
else
|
|
||||||
version
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
@ -437,6 +473,7 @@ defmodule AshHqWeb.Pages.Docs do
|
||||||
|> assign_extension()
|
|> assign_extension()
|
||||||
|> assign_guide()
|
|> assign_guide()
|
||||||
|> assign_module()
|
|> assign_module()
|
||||||
|
|> assign_mix_task()
|
||||||
|> assign_dsl()
|
|> assign_dsl()
|
||||||
|> assign_docs()
|
|> assign_docs()
|
||||||
end
|
end
|
||||||
|
@ -604,14 +641,36 @@ defmodule AshHqWeb.Pages.Docs do
|
||||||
&(&1.sanitized_name == socket.assigns[:params]["module"])
|
&(&1.sanitized_name == socket.assigns[:params]["module"])
|
||||||
)
|
)
|
||||||
|
|
||||||
|
functions_query =
|
||||||
|
AshHq.Docs.Function
|
||||||
|
|> Ash.Query.sort(name: :asc, arity: :asc)
|
||||||
|
|> load_for_search(socket.assigns[:params]["module"])
|
||||||
|
|
||||||
assign(socket,
|
assign(socket,
|
||||||
module: module
|
module: AshHq.Docs.load!(module, [functions: functions_query], lazy?: true)
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
assign(socket, :module, nil)
|
assign(socket, :module, nil)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp assign_mix_task(socket) do
|
||||||
|
if socket.assigns.library && socket.assigns.library_version &&
|
||||||
|
socket.assigns[:params]["mix_task"] do
|
||||||
|
mix_task =
|
||||||
|
Enum.find(
|
||||||
|
socket.assigns.library_version.mix_tasks,
|
||||||
|
&(&1.sanitized_name == socket.assigns[:params]["mix_task"])
|
||||||
|
)
|
||||||
|
|
||||||
|
assign(socket,
|
||||||
|
mix_task: mix_task
|
||||||
|
)
|
||||||
|
else
|
||||||
|
assign(socket, :mix_task, nil)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
defp assign_docs(socket) do
|
defp assign_docs(socket) do
|
||||||
cond do
|
cond do
|
||||||
socket.assigns.module ->
|
socket.assigns.module ->
|
||||||
|
@ -621,6 +680,13 @@ defmodule AshHqWeb.Pages.Docs do
|
||||||
options: []
|
options: []
|
||||||
)
|
)
|
||||||
|
|
||||||
|
socket.assigns.mix_task ->
|
||||||
|
assign(socket,
|
||||||
|
docs: socket.assigns.mix_task.html_for,
|
||||||
|
doc_path: [socket.assigns.library.name, socket.assigns.mix_task.name],
|
||||||
|
options: []
|
||||||
|
)
|
||||||
|
|
||||||
socket.assigns.dsl ->
|
socket.assigns.dsl ->
|
||||||
assign(socket,
|
assign(socket,
|
||||||
docs: socket.assigns.dsl.html_for,
|
docs: socket.assigns.dsl.html_for,
|
||||||
|
|
|
@ -38,6 +38,7 @@ defmodule AshHqWeb.Router do
|
||||||
live "/docs/dsl/:library/:version/:extension", AppViewLive, :docs_dsl
|
live "/docs/dsl/:library/:version/:extension", AppViewLive, :docs_dsl
|
||||||
live "/docs/dsl/:library/:version/:extension/*dsl_path", AppViewLive, :docs_dsl
|
live "/docs/dsl/:library/:version/:extension/*dsl_path", AppViewLive, :docs_dsl
|
||||||
live "/docs/module/:library/:version/:module", AppViewLive, :docs_dsl
|
live "/docs/module/:library/:version/:module", AppViewLive, :docs_dsl
|
||||||
|
live "/docs/mix_task/:library/:version/:mix_task", AppViewLive, :docs_dsl
|
||||||
|
|
||||||
get "/unsubscribe", MailingListController, :unsubscribe
|
get "/unsubscribe", MailingListController, :unsubscribe
|
||||||
end
|
end
|
||||||
|
|
|
@ -56,7 +56,6 @@ defmodule AshHqWeb.AppViewLive do
|
||||||
/>
|
/>
|
||||||
<CatalogueModal
|
<CatalogueModal
|
||||||
id="catalogue-box"
|
id="catalogue-box"
|
||||||
close={close_catalogue()}
|
|
||||||
libraries={@libraries}
|
libraries={@libraries}
|
||||||
selected_versions={@selected_versions}
|
selected_versions={@selected_versions}
|
||||||
change_versions="change-versions"
|
change_versions="change-versions"
|
||||||
|
|
7
mix.exs
7
mix.exs
|
@ -33,9 +33,9 @@ defmodule AshHq.MixProject do
|
||||||
# Type `mix help deps` for examples and options.
|
# Type `mix help deps` for examples and options.
|
||||||
defp deps do
|
defp deps do
|
||||||
[
|
[
|
||||||
{:ash, github: "ash-project/ash", override: true},
|
# {:ash, github: "ash-project/ash", override: true},
|
||||||
# {:ash, "~> 2.0.0-rc.8"},
|
# {:ash, "~> 2.0.0-rc.8"},
|
||||||
# {:ash, path: "../ash", override: true},
|
{:ash, path: "../ash", override: true},
|
||||||
|
|
||||||
# {:ash_postgres, "~> 1.0.0-rc.3"},
|
# {:ash_postgres, "~> 1.0.0-rc.3"},
|
||||||
{:ash_postgres, github: "ash-project/ash_postgres"},
|
{:ash_postgres, github: "ash-project/ash_postgres"},
|
||||||
|
@ -95,7 +95,8 @@ defmodule AshHq.MixProject do
|
||||||
{:credo, ">= 0.0.0", only: :dev, runtime: false},
|
{:credo, ">= 0.0.0", only: :dev, runtime: false},
|
||||||
{:dialyxir, ">= 0.0.0", only: :dev, runtime: false},
|
{:dialyxir, ">= 0.0.0", only: :dev, runtime: false},
|
||||||
{:sobelow, ">= 0.0.0", only: :dev, runtime: false},
|
{:sobelow, ">= 0.0.0", only: :dev, runtime: false},
|
||||||
{:excoveralls, "~> 0.14", only: [:dev, :test]}
|
{:excoveralls, "~> 0.14", only: [:dev, :test]},
|
||||||
|
{:eflame, "~> 1.0", only: [:dev, :test]}
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
8
mix.lock
8
mix.lock
|
@ -1,10 +1,10 @@
|
||||||
%{
|
%{
|
||||||
"absinthe": {:hex, :absinthe, "1.7.0", "36819e7b1fd5046c9c734f27fe7e564aed3bda59f0354c37cd2df88fd32dd014", [:mix], [{:dataloader, "~> 1.0.0", [hex: :dataloader, repo: "hexpm", optional: true]}, {:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}, {:nimble_parsec, "~> 0.5 or ~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0 or ~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "566a5b5519afc9b29c4d367f0c6768162de3ec03e9bf9916f9dc2bcbe7c09643"},
|
"absinthe": {:hex, :absinthe, "1.7.0", "36819e7b1fd5046c9c734f27fe7e564aed3bda59f0354c37cd2df88fd32dd014", [:mix], [{:dataloader, "~> 1.0.0", [hex: :dataloader, repo: "hexpm", optional: true]}, {:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}, {:nimble_parsec, "~> 0.5 or ~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0 or ~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "566a5b5519afc9b29c4d367f0c6768162de3ec03e9bf9916f9dc2bcbe7c09643"},
|
||||||
"absinthe_plug": {:hex, :absinthe_plug, "1.5.8", "38d230641ba9dca8f72f1fed2dfc8abd53b3907d1996363da32434ab6ee5d6ab", [:mix], [{:absinthe, "~> 1.5", [hex: :absinthe, repo: "hexpm", optional: false]}, {:plug, "~> 1.4", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "bbb04176647b735828861e7b2705465e53e2cf54ccf5a73ddd1ebd855f996e5a"},
|
"absinthe_plug": {:hex, :absinthe_plug, "1.5.8", "38d230641ba9dca8f72f1fed2dfc8abd53b3907d1996363da32434ab6ee5d6ab", [:mix], [{:absinthe, "~> 1.5", [hex: :absinthe, repo: "hexpm", optional: false]}, {:plug, "~> 1.4", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "bbb04176647b735828861e7b2705465e53e2cf54ccf5a73ddd1ebd855f996e5a"},
|
||||||
"ash": {:git, "https://github.com/ash-project/ash.git", "8f1a43419b2a701b49b23ba6585171829077b35e", []},
|
"ash": {:git, "https://github.com/ash-project/ash.git", "37a5fdc89b182e2842f90d5468a161f32da813e9", []},
|
||||||
"ash_graphql": {:git, "https://github.com/ash-project/ash_graphql.git", "d859026ddb11b2d359cab29641257aeed303743b", []},
|
"ash_graphql": {:git, "https://github.com/ash-project/ash_graphql.git", "1d31f7a20c2ee9545245f2539f1628d0f5a1afe9", []},
|
||||||
"ash_phoenix": {:git, "https://github.com/ash-project/ash_phoenix.git", "75f07d12358b3473c4780c51333ef44aedf4c839", []},
|
"ash_phoenix": {:git, "https://github.com/ash-project/ash_phoenix.git", "75f07d12358b3473c4780c51333ef44aedf4c839", []},
|
||||||
"ash_postgres": {:git, "https://github.com/ash-project/ash_postgres.git", "0fa1ee05f4a6ba5461394dfef096ed8f9c1ada57", []},
|
"ash_postgres": {:git, "https://github.com/ash-project/ash_postgres.git", "12cf97d89e3fab29575b45baf5a5e6fb9d839e1a", []},
|
||||||
"bcrypt_elixir": {:hex, :bcrypt_elixir, "3.0.1", "9be815469e6bfefec40fa74658ecbbe6897acfb57614df1416eeccd4903f602c", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "486bb95efb645d1efc6794c1ddd776a186a9a713abf06f45708a6ce324fb96cf"},
|
"bcrypt_elixir": {:hex, :bcrypt_elixir, "3.0.1", "9be815469e6bfefec40fa74658ecbbe6897acfb57614df1416eeccd4903f602c", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "486bb95efb645d1efc6794c1ddd776a186a9a713abf06f45708a6ce324fb96cf"},
|
||||||
"bunt": {:hex, :bunt, "0.2.1", "e2d4792f7bc0ced7583ab54922808919518d0e57ee162901a16a1b6664ef3b14", [:mix], [], "hexpm", "a330bfb4245239787b15005e66ae6845c9cd524a288f0d141c148b02603777a5"},
|
"bunt": {:hex, :bunt, "0.2.1", "e2d4792f7bc0ced7583ab54922808919518d0e57ee162901a16a1b6664ef3b14", [:mix], [], "hexpm", "a330bfb4245239787b15005e66ae6845c9cd524a288f0d141c148b02603777a5"},
|
||||||
"castore": {:hex, :castore, "0.1.18", "deb5b9ab02400561b6f5708f3e7660fc35ca2d51bfc6a940d2f513f89c2975fc", [:mix], [], "hexpm", "61bbaf6452b782ef80b33cdb45701afbcf0a918a45ebe7e73f1130d661e66a06"},
|
"castore": {:hex, :castore, "0.1.18", "deb5b9ab02400561b6f5708f3e7660fc35ca2d51bfc6a940d2f513f89c2975fc", [:mix], [], "hexpm", "61bbaf6452b782ef80b33cdb45701afbcf0a918a45ebe7e73f1130d661e66a06"},
|
||||||
|
@ -26,6 +26,8 @@
|
||||||
"ecto": {:hex, :ecto, "3.8.4", "e06b8b87e62b27fea17fd2ff6041572ddd10339fd16cdf58446e402c6c90a74b", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "f9244288b8d42db40515463a008cf3f4e0e564bb9c249fe87bf28a6d79fe82d4"},
|
"ecto": {:hex, :ecto, "3.8.4", "e06b8b87e62b27fea17fd2ff6041572ddd10339fd16cdf58446e402c6c90a74b", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "f9244288b8d42db40515463a008cf3f4e0e564bb9c249fe87bf28a6d79fe82d4"},
|
||||||
"ecto_psql_extras": {:hex, :ecto_psql_extras, "0.7.4", "5d43fd088d39a158c860b17e8d210669587f63ec89ea122a4654861c8c6e2db4", [:mix], [{:ecto_sql, "~> 3.4", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:postgrex, ">= 0.15.7", [hex: :postgrex, repo: "hexpm", optional: false]}, {:table_rex, "~> 3.1.1", [hex: :table_rex, repo: "hexpm", optional: false]}], "hexpm", "311db02f1b772e3d0dc7f56a05044b5e1499d78ed6abf38885e1ca70059449e5"},
|
"ecto_psql_extras": {:hex, :ecto_psql_extras, "0.7.4", "5d43fd088d39a158c860b17e8d210669587f63ec89ea122a4654861c8c6e2db4", [:mix], [{:ecto_sql, "~> 3.4", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:postgrex, ">= 0.15.7", [hex: :postgrex, repo: "hexpm", optional: false]}, {:table_rex, "~> 3.1.1", [hex: :table_rex, repo: "hexpm", optional: false]}], "hexpm", "311db02f1b772e3d0dc7f56a05044b5e1499d78ed6abf38885e1ca70059449e5"},
|
||||||
"ecto_sql": {:hex, :ecto_sql, "3.8.3", "a7d22c624202546a39d615ed7a6b784580391e65723f2d24f65941b4dd73d471", [:mix], [{:db_connection, "~> 2.5 or ~> 2.4.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.8.4", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0 or ~> 0.16.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "348cb17fb9e6daf6f251a87049eafcb57805e2892e5e6a0f5dea0985d367329b"},
|
"ecto_sql": {:hex, :ecto_sql, "3.8.3", "a7d22c624202546a39d615ed7a6b784580391e65723f2d24f65941b4dd73d471", [:mix], [{:db_connection, "~> 2.5 or ~> 2.4.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.8.4", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0 or ~> 0.16.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "348cb17fb9e6daf6f251a87049eafcb57805e2892e5e6a0f5dea0985d367329b"},
|
||||||
|
"eflambe": {:git, "https://github.com/DockYard/flame_on.git", "3f4e3bfa2e5546d95fb94d7ecb4b459bc4398c41", []},
|
||||||
|
"eflame": {:hex, :eflame, "1.0.1", "0664d287e39eef3c413749254b3af5f4f8b00be71c1af67d325331c4890be0fc", [:mix], [], "hexpm", "e0b08854a66f9013129de0b008488f3411ae9b69b902187837f994d7a99cf04e"},
|
||||||
"elixir_make": {:hex, :elixir_make, "0.6.3", "bc07d53221216838d79e03a8019d0839786703129599e9619f4ab74c8c096eac", [:mix], [], "hexpm", "f5cbd651c5678bcaabdbb7857658ee106b12509cd976c2c2fca99688e1daf716"},
|
"elixir_make": {:hex, :elixir_make, "0.6.3", "bc07d53221216838d79e03a8019d0839786703129599e9619f4ab74c8c096eac", [:mix], [], "hexpm", "f5cbd651c5678bcaabdbb7857658ee106b12509cd976c2c2fca99688e1daf716"},
|
||||||
"elixir_sense": {:git, "https://github.com/elixir-lsp/elixir_sense.git", "12bdf7ac9971a9f1cb278b66364f912d63af4c0f", []},
|
"elixir_sense": {:git, "https://github.com/elixir-lsp/elixir_sense.git", "12bdf7ac9971a9f1cb278b66364f912d63af4c0f", []},
|
||||||
"erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
|
"erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
|
||||||
|
|
|
@ -20,4 +20,4 @@ defmodule AshHq.Repo.Migrations.Install3Extensions do
|
||||||
# execute("DROP EXTENSION IF EXISTS \"uuid-ossp\"")
|
# execute("DROP EXTENSION IF EXISTS \"uuid-ossp\"")
|
||||||
# execute("DROP EXTENSION IF EXISTS \"citext\"")
|
# execute("DROP EXTENSION IF EXISTS \"citext\"")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,63 +9,67 @@ defmodule AshHq.Repo.Migrations.MigrateResources1 do
|
||||||
|
|
||||||
def up do
|
def up do
|
||||||
create table(:options, primary_key: false) do
|
create table(:options, primary_key: false) do
|
||||||
add :id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true
|
add(:id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true)
|
||||||
add :name, :text, null: false
|
add(:name, :text, null: false)
|
||||||
add :type, :text, null: false
|
add(:type, :text, null: false)
|
||||||
add :doc, :text, null: false, default: ""
|
add(:doc, :text, null: false, default: "")
|
||||||
add :doc_html, :text
|
add(:doc_html, :text)
|
||||||
add :required, :boolean, null: false, default: false
|
add(:required, :boolean, null: false, default: false)
|
||||||
add :default, :text
|
add(:default, :text)
|
||||||
add :path, {:array, :text}
|
add(:path, {:array, :text})
|
||||||
add :order, :bigint, null: false
|
add(:order, :bigint, null: false)
|
||||||
add :dsl_id, :uuid, null: false
|
add(:dsl_id, :uuid, null: false)
|
||||||
add :library_version_id, :uuid, null: false
|
add(:library_version_id, :uuid, null: false)
|
||||||
add :extension_id, :uuid, null: false
|
add(:extension_id, :uuid, null: false)
|
||||||
end
|
end
|
||||||
|
|
||||||
create table(:modules, primary_key: false) do
|
create table(:modules, primary_key: false) do
|
||||||
add :id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true
|
add(:id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true)
|
||||||
add :name, :text, null: false
|
add(:name, :text, null: false)
|
||||||
add :doc, :text, null: false, default: ""
|
add(:doc, :text, null: false, default: "")
|
||||||
add :doc_html, :text
|
add(:doc_html, :text)
|
||||||
add :order, :bigint, null: false
|
add(:order, :bigint, null: false)
|
||||||
add :library_version_id, :uuid, null: false
|
add(:library_version_id, :uuid, null: false)
|
||||||
add :extension_id, :uuid, null: false
|
add(:extension_id, :uuid, null: false)
|
||||||
end
|
end
|
||||||
|
|
||||||
create table(:library_versions, primary_key: false) do
|
create table(:library_versions, primary_key: false) do
|
||||||
add :id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true
|
add(:id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:modules) do
|
alter table(:modules) do
|
||||||
modify :library_version_id,
|
modify(
|
||||||
references(:library_versions,
|
:library_version_id,
|
||||||
column: :id,
|
references(:library_versions,
|
||||||
name: "modules_library_version_id_fkey",
|
column: :id,
|
||||||
type: :uuid
|
name: "modules_library_version_id_fkey",
|
||||||
)
|
type: :uuid
|
||||||
|
)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:library_versions) do
|
alter table(:library_versions) do
|
||||||
add :version, :text, null: false
|
add(:version, :text, null: false)
|
||||||
add :data, :map
|
add(:data, :map)
|
||||||
add :doc, :text, null: false, default: ""
|
add(:doc, :text, null: false, default: "")
|
||||||
add :doc_html, :text
|
add(:doc_html, :text)
|
||||||
add :processed, :boolean, default: false
|
add(:processed, :boolean, default: false)
|
||||||
add :library_id, :uuid, null: false
|
add(:library_id, :uuid, null: false)
|
||||||
end
|
end
|
||||||
|
|
||||||
create table(:libraries, primary_key: false) do
|
create table(:libraries, primary_key: false) do
|
||||||
add :id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true
|
add(:id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:library_versions) do
|
alter table(:library_versions) do
|
||||||
modify :library_id,
|
modify(
|
||||||
references(:libraries,
|
:library_id,
|
||||||
column: :id,
|
references(:libraries,
|
||||||
name: "library_versions_library_id_fkey",
|
column: :id,
|
||||||
type: :uuid
|
name: "library_versions_library_id_fkey",
|
||||||
)
|
type: :uuid
|
||||||
|
)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
create unique_index(:library_versions, [:library_id, :version],
|
create unique_index(:library_versions, [:library_id, :version],
|
||||||
|
@ -73,84 +77,96 @@ defmodule AshHq.Repo.Migrations.MigrateResources1 do
|
||||||
)
|
)
|
||||||
|
|
||||||
alter table(:libraries) do
|
alter table(:libraries) do
|
||||||
add :name, :text, null: false
|
add(:name, :text, null: false)
|
||||||
add :display_name, :text, null: false
|
add(:display_name, :text, null: false)
|
||||||
add :track_branches, {:array, :text}, default: []
|
add(:track_branches, {:array, :text}, default: [])
|
||||||
end
|
end
|
||||||
|
|
||||||
create table(:guides, primary_key: false) do
|
create table(:guides, primary_key: false) do
|
||||||
add :id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true
|
add(:id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true)
|
||||||
add :order, :bigint, null: false
|
add(:order, :bigint, null: false)
|
||||||
add :name, :text, null: false
|
add(:name, :text, null: false)
|
||||||
add :text, :text, null: false, default: ""
|
add(:text, :text, null: false, default: "")
|
||||||
add :text_html, :text
|
add(:text_html, :text)
|
||||||
|
|
||||||
add :library_version_id,
|
add(
|
||||||
references(:library_versions,
|
:library_version_id,
|
||||||
column: :id,
|
references(:library_versions,
|
||||||
name: "guides_library_version_id_fkey",
|
column: :id,
|
||||||
type: :uuid
|
name: "guides_library_version_id_fkey",
|
||||||
),
|
type: :uuid
|
||||||
null: false
|
),
|
||||||
|
null: false
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
create table(:functions, primary_key: false) do
|
create table(:functions, primary_key: false) do
|
||||||
add :id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true
|
add(:id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true)
|
||||||
add :name, :text, null: false
|
add(:name, :text, null: false)
|
||||||
add :arity, :bigint, null: false
|
add(:arity, :bigint, null: false)
|
||||||
add :type, :text, null: false
|
add(:type, :text, null: false)
|
||||||
add :heads, {:array, :text}, default: []
|
add(:heads, {:array, :text}, default: [])
|
||||||
add :doc, :text, null: false, default: ""
|
add(:doc, :text, null: false, default: "")
|
||||||
add :doc_html, :text
|
add(:doc_html, :text)
|
||||||
add :order, :bigint, null: false
|
add(:order, :bigint, null: false)
|
||||||
|
|
||||||
add :library_version_id,
|
add(
|
||||||
references(:library_versions,
|
:library_version_id,
|
||||||
column: :id,
|
references(:library_versions,
|
||||||
name: "functions_library_version_id_fkey",
|
column: :id,
|
||||||
type: :uuid
|
name: "functions_library_version_id_fkey",
|
||||||
),
|
type: :uuid
|
||||||
null: false
|
),
|
||||||
|
null: false
|
||||||
|
)
|
||||||
|
|
||||||
add :extension_id, :uuid, null: false
|
add(:extension_id, :uuid, null: false)
|
||||||
add :module_id, :uuid, null: false
|
add(:module_id, :uuid, null: false)
|
||||||
end
|
end
|
||||||
|
|
||||||
create table(:extensions, primary_key: false) do
|
create table(:extensions, primary_key: false) do
|
||||||
add :id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true
|
add(:id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:modules) do
|
alter table(:modules) do
|
||||||
modify :extension_id,
|
modify(
|
||||||
references(:extensions, column: :id, name: "modules_extension_id_fkey", type: :uuid)
|
:extension_id,
|
||||||
|
references(:extensions, column: :id, name: "modules_extension_id_fkey", type: :uuid)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:functions) do
|
alter table(:functions) do
|
||||||
modify :extension_id,
|
modify(
|
||||||
references(:extensions, column: :id, name: "functions_extension_id_fkey", type: :uuid)
|
:extension_id,
|
||||||
|
references(:extensions, column: :id, name: "functions_extension_id_fkey", type: :uuid)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:functions) do
|
alter table(:functions) do
|
||||||
modify :module_id,
|
modify(
|
||||||
references(:modules, column: :id, name: "functions_module_id_fkey", type: :uuid)
|
:module_id,
|
||||||
|
references(:modules, column: :id, name: "functions_module_id_fkey", type: :uuid)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:extensions) do
|
alter table(:extensions) do
|
||||||
add :name, :text, null: false
|
add(:name, :text, null: false)
|
||||||
add :target, :text
|
add(:target, :text)
|
||||||
add :default_for_target, :boolean, default: false
|
add(:default_for_target, :boolean, default: false)
|
||||||
add :doc, :text, null: false, default: ""
|
add(:doc, :text, null: false, default: "")
|
||||||
add :doc_html, :text
|
add(:doc_html, :text)
|
||||||
add :type, :text, null: false
|
add(:type, :text, null: false)
|
||||||
add :order, :bigint, null: false
|
add(:order, :bigint, null: false)
|
||||||
|
|
||||||
add :library_version_id,
|
add(
|
||||||
references(:library_versions,
|
:library_version_id,
|
||||||
column: :id,
|
references(:library_versions,
|
||||||
name: "extensions_library_version_id_fkey",
|
column: :id,
|
||||||
type: :uuid
|
name: "extensions_library_version_id_fkey",
|
||||||
),
|
type: :uuid
|
||||||
null: false
|
),
|
||||||
|
null: false
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
create unique_index(:extensions, [:library_version_id, :name],
|
create unique_index(:extensions, [:library_version_id, :name],
|
||||||
|
@ -158,178 +174,190 @@ defmodule AshHq.Repo.Migrations.MigrateResources1 do
|
||||||
)
|
)
|
||||||
|
|
||||||
create table(:dsls, primary_key: false) do
|
create table(:dsls, primary_key: false) do
|
||||||
add :id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true
|
add(:id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:options) do
|
alter table(:options) do
|
||||||
modify :dsl_id, references(:dsls, column: :id, name: "options_dsl_id_fkey", type: :uuid)
|
modify(:dsl_id, references(:dsls, column: :id, name: "options_dsl_id_fkey", type: :uuid))
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:options) do
|
alter table(:options) do
|
||||||
modify :library_version_id,
|
modify(
|
||||||
references(:library_versions,
|
:library_version_id,
|
||||||
column: :id,
|
references(:library_versions,
|
||||||
name: "options_library_version_id_fkey",
|
column: :id,
|
||||||
type: :uuid
|
name: "options_library_version_id_fkey",
|
||||||
)
|
type: :uuid
|
||||||
|
)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:options) do
|
alter table(:options) do
|
||||||
modify :extension_id,
|
modify(
|
||||||
references(:extensions, column: :id, name: "options_extension_id_fkey", type: :uuid)
|
:extension_id,
|
||||||
|
references(:extensions, column: :id, name: "options_extension_id_fkey", type: :uuid)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:dsls) do
|
alter table(:dsls) do
|
||||||
add :name, :text, null: false
|
add(:name, :text, null: false)
|
||||||
add :doc, :text, null: false, default: ""
|
add(:doc, :text, null: false, default: "")
|
||||||
add :doc_html, :text
|
add(:doc_html, :text)
|
||||||
add :examples, {:array, :text}
|
add(:examples, {:array, :text})
|
||||||
add :args, {:array, :text}
|
add(:args, {:array, :text})
|
||||||
add :path, {:array, :text}
|
add(:path, {:array, :text})
|
||||||
add :recursive_as, :text
|
add(:recursive_as, :text)
|
||||||
add :order, :bigint, null: false
|
add(:order, :bigint, null: false)
|
||||||
add :type, :text, null: false
|
add(:type, :text, null: false)
|
||||||
|
|
||||||
add :library_version_id,
|
add(
|
||||||
references(:library_versions,
|
:library_version_id,
|
||||||
column: :id,
|
references(:library_versions,
|
||||||
name: "dsls_library_version_id_fkey",
|
column: :id,
|
||||||
type: :uuid
|
name: "dsls_library_version_id_fkey",
|
||||||
),
|
type: :uuid
|
||||||
null: false
|
),
|
||||||
|
null: false
|
||||||
|
)
|
||||||
|
|
||||||
add :extension_id,
|
add(
|
||||||
references(:extensions, column: :id, name: "dsls_extension_id_fkey", type: :uuid),
|
:extension_id,
|
||||||
null: false
|
references(:extensions, column: :id, name: "dsls_extension_id_fkey", type: :uuid),
|
||||||
|
null: false
|
||||||
|
)
|
||||||
|
|
||||||
add :dsl_id, references(:dsls, column: :id, name: "dsls_dsl_id_fkey", type: :uuid)
|
add(:dsl_id, references(:dsls, column: :id, name: "dsls_dsl_id_fkey", type: :uuid))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def down do
|
def down do
|
||||||
drop constraint(:dsls, "dsls_dsl_id_fkey")
|
drop(constraint(:dsls, "dsls_dsl_id_fkey"))
|
||||||
|
|
||||||
drop constraint(:dsls, "dsls_extension_id_fkey")
|
drop(constraint(:dsls, "dsls_extension_id_fkey"))
|
||||||
|
|
||||||
drop constraint(:dsls, "dsls_library_version_id_fkey")
|
drop(constraint(:dsls, "dsls_library_version_id_fkey"))
|
||||||
|
|
||||||
alter table(:dsls) do
|
alter table(:dsls) do
|
||||||
remove :dsl_id
|
remove(:dsl_id)
|
||||||
remove :extension_id
|
remove(:extension_id)
|
||||||
remove :library_version_id
|
remove(:library_version_id)
|
||||||
remove :type
|
remove(:type)
|
||||||
remove :order
|
remove(:order)
|
||||||
remove :recursive_as
|
remove(:recursive_as)
|
||||||
remove :path
|
remove(:path)
|
||||||
remove :args
|
remove(:args)
|
||||||
remove :examples
|
remove(:examples)
|
||||||
remove :doc_html
|
remove(:doc_html)
|
||||||
remove :doc
|
remove(:doc)
|
||||||
remove :name
|
remove(:name)
|
||||||
end
|
end
|
||||||
|
|
||||||
drop constraint(:options, "options_extension_id_fkey")
|
drop(constraint(:options, "options_extension_id_fkey"))
|
||||||
|
|
||||||
alter table(:options) do
|
alter table(:options) do
|
||||||
modify :extension_id, :uuid
|
modify(:extension_id, :uuid)
|
||||||
end
|
end
|
||||||
|
|
||||||
drop constraint(:options, "options_library_version_id_fkey")
|
drop(constraint(:options, "options_library_version_id_fkey"))
|
||||||
|
|
||||||
alter table(:options) do
|
alter table(:options) do
|
||||||
modify :library_version_id, :uuid
|
modify(:library_version_id, :uuid)
|
||||||
end
|
end
|
||||||
|
|
||||||
drop constraint(:options, "options_dsl_id_fkey")
|
drop(constraint(:options, "options_dsl_id_fkey"))
|
||||||
|
|
||||||
alter table(:options) do
|
alter table(:options) do
|
||||||
modify :dsl_id, :uuid
|
modify(:dsl_id, :uuid)
|
||||||
end
|
end
|
||||||
|
|
||||||
drop table(:dsls)
|
drop(table(:dsls))
|
||||||
|
|
||||||
drop_if_exists unique_index(:extensions, [:library_version_id, :name],
|
drop_if_exists(
|
||||||
name: "extensions_unique_name_by_library_version_index"
|
unique_index(:extensions, [:library_version_id, :name],
|
||||||
)
|
name: "extensions_unique_name_by_library_version_index"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
drop constraint(:extensions, "extensions_library_version_id_fkey")
|
drop(constraint(:extensions, "extensions_library_version_id_fkey"))
|
||||||
|
|
||||||
alter table(:extensions) do
|
alter table(:extensions) do
|
||||||
remove :library_version_id
|
remove(:library_version_id)
|
||||||
remove :order
|
remove(:order)
|
||||||
remove :type
|
remove(:type)
|
||||||
remove :doc_html
|
remove(:doc_html)
|
||||||
remove :doc
|
remove(:doc)
|
||||||
remove :default_for_target
|
remove(:default_for_target)
|
||||||
remove :target
|
remove(:target)
|
||||||
remove :name
|
remove(:name)
|
||||||
end
|
end
|
||||||
|
|
||||||
drop constraint(:functions, "functions_module_id_fkey")
|
drop(constraint(:functions, "functions_module_id_fkey"))
|
||||||
|
|
||||||
alter table(:functions) do
|
alter table(:functions) do
|
||||||
modify :module_id, :uuid
|
modify(:module_id, :uuid)
|
||||||
end
|
end
|
||||||
|
|
||||||
drop constraint(:functions, "functions_extension_id_fkey")
|
drop(constraint(:functions, "functions_extension_id_fkey"))
|
||||||
|
|
||||||
alter table(:functions) do
|
alter table(:functions) do
|
||||||
modify :extension_id, :uuid
|
modify(:extension_id, :uuid)
|
||||||
end
|
end
|
||||||
|
|
||||||
drop constraint(:modules, "modules_extension_id_fkey")
|
drop(constraint(:modules, "modules_extension_id_fkey"))
|
||||||
|
|
||||||
alter table(:modules) do
|
alter table(:modules) do
|
||||||
modify :extension_id, :uuid
|
modify(:extension_id, :uuid)
|
||||||
end
|
end
|
||||||
|
|
||||||
drop table(:extensions)
|
drop(table(:extensions))
|
||||||
|
|
||||||
drop constraint(:functions, "functions_library_version_id_fkey")
|
drop(constraint(:functions, "functions_library_version_id_fkey"))
|
||||||
|
|
||||||
drop table(:functions)
|
drop(table(:functions))
|
||||||
|
|
||||||
drop constraint(:guides, "guides_library_version_id_fkey")
|
drop(constraint(:guides, "guides_library_version_id_fkey"))
|
||||||
|
|
||||||
drop table(:guides)
|
drop(table(:guides))
|
||||||
|
|
||||||
alter table(:libraries) do
|
alter table(:libraries) do
|
||||||
remove :track_branches
|
remove(:track_branches)
|
||||||
remove :display_name
|
remove(:display_name)
|
||||||
remove :name
|
remove(:name)
|
||||||
end
|
end
|
||||||
|
|
||||||
drop_if_exists unique_index(:library_versions, [:library_id, :version],
|
drop_if_exists(
|
||||||
name: "library_versions_unique_version_for_library_index"
|
unique_index(:library_versions, [:library_id, :version],
|
||||||
)
|
name: "library_versions_unique_version_for_library_index"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
drop constraint(:library_versions, "library_versions_library_id_fkey")
|
drop(constraint(:library_versions, "library_versions_library_id_fkey"))
|
||||||
|
|
||||||
alter table(:library_versions) do
|
alter table(:library_versions) do
|
||||||
modify :library_id, :uuid
|
modify(:library_id, :uuid)
|
||||||
end
|
end
|
||||||
|
|
||||||
drop table(:libraries)
|
drop(table(:libraries))
|
||||||
|
|
||||||
alter table(:library_versions) do
|
alter table(:library_versions) do
|
||||||
remove :library_id
|
remove(:library_id)
|
||||||
remove :processed
|
remove(:processed)
|
||||||
remove :doc_html
|
remove(:doc_html)
|
||||||
remove :doc
|
remove(:doc)
|
||||||
remove :data
|
remove(:data)
|
||||||
remove :version
|
remove(:version)
|
||||||
end
|
end
|
||||||
|
|
||||||
drop constraint(:modules, "modules_library_version_id_fkey")
|
drop(constraint(:modules, "modules_library_version_id_fkey"))
|
||||||
|
|
||||||
alter table(:modules) do
|
alter table(:modules) do
|
||||||
modify :library_version_id, :uuid
|
modify(:library_version_id, :uuid)
|
||||||
end
|
end
|
||||||
|
|
||||||
drop table(:library_versions)
|
drop(table(:library_versions))
|
||||||
|
|
||||||
drop table(:modules)
|
drop(table(:modules))
|
||||||
|
|
||||||
drop table(:options)
|
drop(table(:options))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -13,15 +13,17 @@ defmodule AshHq.Repo.Migrations.AddTsvectorIndices do
|
||||||
|
|
||||||
def change do
|
def change do
|
||||||
for {table, {header, text}} <- @config do
|
for {table, {header, text}} <- @config do
|
||||||
execute """
|
execute(
|
||||||
CREATE INDEX #{table}_search_index ON #{table} USING GIN((
|
"""
|
||||||
setweight(to_tsvector('english', #{header}), 'A') ||
|
CREATE INDEX #{table}_search_index ON #{table} USING GIN((
|
||||||
setweight(to_tsvector('english', #{text}), 'D')
|
setweight(to_tsvector('english', #{header}), 'A') ||
|
||||||
));
|
setweight(to_tsvector('english', #{text}), 'D')
|
||||||
""",
|
));
|
||||||
"""
|
""",
|
||||||
DROP INDEX #{table}_search_index
|
"""
|
||||||
"""
|
DROP INDEX #{table}_search_index
|
||||||
|
"""
|
||||||
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,20 +9,29 @@ defmodule AshHq.Repo.Migrations.MigrateResources2 do
|
||||||
|
|
||||||
def up do
|
def up do
|
||||||
alter table(:modules) do
|
alter table(:modules) do
|
||||||
remove :extension_id
|
remove(:extension_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:functions) do
|
alter table(:functions) do
|
||||||
remove :extension_id
|
remove(:extension_id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def down do
|
def down do
|
||||||
alter table(:functions) do
|
alter table(:functions) do
|
||||||
add :extension_id, references(:extensions, column: :id, name: "functions_extension_id_fkey", type: :uuid), null: false
|
add(
|
||||||
|
:extension_id,
|
||||||
|
references(:extensions, column: :id, name: "functions_extension_id_fkey", type: :uuid),
|
||||||
|
null: false
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:modules) do
|
alter table(:modules) do
|
||||||
add :extension_id, references(:extensions, column: :id, name: "modules_extension_id_fkey", type: :uuid), null: false
|
add(
|
||||||
|
:extension_id,
|
||||||
|
references(:extensions, column: :id, name: "modules_extension_id_fkey", type: :uuid),
|
||||||
|
null: false
|
||||||
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -8,144 +8,168 @@ defmodule AshHq.Repo.Migrations.MigrateResources3 do
|
||||||
use Ecto.Migration
|
use Ecto.Migration
|
||||||
|
|
||||||
def up do
|
def up do
|
||||||
drop constraint(:options, "options_library_version_id_fkey")
|
drop(constraint(:options, "options_library_version_id_fkey"))
|
||||||
|
|
||||||
alter table(:options) do
|
alter table(:options) do
|
||||||
modify :library_version_id,
|
modify(
|
||||||
references(:library_versions,
|
:library_version_id,
|
||||||
column: :id,
|
references(:library_versions,
|
||||||
name: "options_library_version_id_fkey",
|
column: :id,
|
||||||
type: :uuid,
|
name: "options_library_version_id_fkey",
|
||||||
on_delete: :delete_all
|
type: :uuid,
|
||||||
)
|
on_delete: :delete_all
|
||||||
|
)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
drop constraint(:modules, "modules_library_version_id_fkey")
|
drop(constraint(:modules, "modules_library_version_id_fkey"))
|
||||||
|
|
||||||
alter table(:modules) do
|
alter table(:modules) do
|
||||||
modify :library_version_id,
|
modify(
|
||||||
references(:library_versions,
|
:library_version_id,
|
||||||
column: :id,
|
references(:library_versions,
|
||||||
name: "modules_library_version_id_fkey",
|
column: :id,
|
||||||
type: :uuid,
|
name: "modules_library_version_id_fkey",
|
||||||
on_delete: :delete_all
|
type: :uuid,
|
||||||
)
|
on_delete: :delete_all
|
||||||
|
)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
drop constraint(:guides, "guides_library_version_id_fkey")
|
drop(constraint(:guides, "guides_library_version_id_fkey"))
|
||||||
|
|
||||||
alter table(:guides) do
|
alter table(:guides) do
|
||||||
modify :library_version_id,
|
modify(
|
||||||
references(:library_versions,
|
:library_version_id,
|
||||||
column: :id,
|
references(:library_versions,
|
||||||
name: "guides_library_version_id_fkey",
|
column: :id,
|
||||||
type: :uuid,
|
name: "guides_library_version_id_fkey",
|
||||||
on_delete: :delete_all
|
type: :uuid,
|
||||||
)
|
on_delete: :delete_all
|
||||||
|
)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
drop constraint(:functions, "functions_library_version_id_fkey")
|
drop(constraint(:functions, "functions_library_version_id_fkey"))
|
||||||
|
|
||||||
alter table(:functions) do
|
alter table(:functions) do
|
||||||
modify :library_version_id,
|
modify(
|
||||||
references(:library_versions,
|
:library_version_id,
|
||||||
column: :id,
|
references(:library_versions,
|
||||||
name: "functions_library_version_id_fkey",
|
column: :id,
|
||||||
type: :uuid,
|
name: "functions_library_version_id_fkey",
|
||||||
on_delete: :delete_all
|
type: :uuid,
|
||||||
)
|
on_delete: :delete_all
|
||||||
|
)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
drop constraint(:extensions, "extensions_library_version_id_fkey")
|
drop(constraint(:extensions, "extensions_library_version_id_fkey"))
|
||||||
|
|
||||||
alter table(:extensions) do
|
alter table(:extensions) do
|
||||||
modify :library_version_id,
|
modify(
|
||||||
references(:library_versions,
|
:library_version_id,
|
||||||
column: :id,
|
references(:library_versions,
|
||||||
name: "extensions_library_version_id_fkey",
|
column: :id,
|
||||||
type: :uuid,
|
name: "extensions_library_version_id_fkey",
|
||||||
on_delete: :delete_all
|
type: :uuid,
|
||||||
)
|
on_delete: :delete_all
|
||||||
|
)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
drop constraint(:dsls, "dsls_library_version_id_fkey")
|
drop(constraint(:dsls, "dsls_library_version_id_fkey"))
|
||||||
|
|
||||||
alter table(:dsls) do
|
alter table(:dsls) do
|
||||||
modify :library_version_id,
|
modify(
|
||||||
references(:library_versions,
|
:library_version_id,
|
||||||
column: :id,
|
references(:library_versions,
|
||||||
name: "dsls_library_version_id_fkey",
|
column: :id,
|
||||||
type: :uuid,
|
name: "dsls_library_version_id_fkey",
|
||||||
on_delete: :delete_all
|
type: :uuid,
|
||||||
)
|
on_delete: :delete_all
|
||||||
|
)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def down do
|
def down do
|
||||||
drop constraint(:dsls, "dsls_library_version_id_fkey")
|
drop(constraint(:dsls, "dsls_library_version_id_fkey"))
|
||||||
|
|
||||||
alter table(:dsls) do
|
alter table(:dsls) do
|
||||||
modify :library_version_id,
|
modify(
|
||||||
references(:library_versions,
|
:library_version_id,
|
||||||
column: :id,
|
references(:library_versions,
|
||||||
name: "dsls_library_version_id_fkey",
|
column: :id,
|
||||||
type: :uuid
|
name: "dsls_library_version_id_fkey",
|
||||||
)
|
type: :uuid
|
||||||
|
)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
drop constraint(:extensions, "extensions_library_version_id_fkey")
|
drop(constraint(:extensions, "extensions_library_version_id_fkey"))
|
||||||
|
|
||||||
alter table(:extensions) do
|
alter table(:extensions) do
|
||||||
modify :library_version_id,
|
modify(
|
||||||
references(:library_versions,
|
:library_version_id,
|
||||||
column: :id,
|
references(:library_versions,
|
||||||
name: "extensions_library_version_id_fkey",
|
column: :id,
|
||||||
type: :uuid
|
name: "extensions_library_version_id_fkey",
|
||||||
)
|
type: :uuid
|
||||||
|
)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
drop constraint(:functions, "functions_library_version_id_fkey")
|
drop(constraint(:functions, "functions_library_version_id_fkey"))
|
||||||
|
|
||||||
alter table(:functions) do
|
alter table(:functions) do
|
||||||
modify :library_version_id,
|
modify(
|
||||||
references(:library_versions,
|
:library_version_id,
|
||||||
column: :id,
|
references(:library_versions,
|
||||||
name: "functions_library_version_id_fkey",
|
column: :id,
|
||||||
type: :uuid
|
name: "functions_library_version_id_fkey",
|
||||||
)
|
type: :uuid
|
||||||
|
)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
drop constraint(:guides, "guides_library_version_id_fkey")
|
drop(constraint(:guides, "guides_library_version_id_fkey"))
|
||||||
|
|
||||||
alter table(:guides) do
|
alter table(:guides) do
|
||||||
modify :library_version_id,
|
modify(
|
||||||
references(:library_versions,
|
:library_version_id,
|
||||||
column: :id,
|
references(:library_versions,
|
||||||
name: "guides_library_version_id_fkey",
|
column: :id,
|
||||||
type: :uuid
|
name: "guides_library_version_id_fkey",
|
||||||
)
|
type: :uuid
|
||||||
|
)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
drop constraint(:modules, "modules_library_version_id_fkey")
|
drop(constraint(:modules, "modules_library_version_id_fkey"))
|
||||||
|
|
||||||
alter table(:modules) do
|
alter table(:modules) do
|
||||||
modify :library_version_id,
|
modify(
|
||||||
references(:library_versions,
|
:library_version_id,
|
||||||
column: :id,
|
references(:library_versions,
|
||||||
name: "modules_library_version_id_fkey",
|
column: :id,
|
||||||
type: :uuid
|
name: "modules_library_version_id_fkey",
|
||||||
)
|
type: :uuid
|
||||||
|
)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
drop constraint(:options, "options_library_version_id_fkey")
|
drop(constraint(:options, "options_library_version_id_fkey"))
|
||||||
|
|
||||||
alter table(:options) do
|
alter table(:options) do
|
||||||
modify :library_version_id,
|
modify(
|
||||||
references(:library_versions,
|
:library_version_id,
|
||||||
column: :id,
|
references(:library_versions,
|
||||||
name: "options_library_version_id_fkey",
|
column: :id,
|
||||||
type: :uuid
|
name: "options_library_version_id_fkey",
|
||||||
)
|
type: :uuid
|
||||||
|
)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,15 +9,15 @@ defmodule AshHq.Repo.Migrations.MigrateResources4 do
|
||||||
|
|
||||||
def up do
|
def up do
|
||||||
alter table(:guides) do
|
alter table(:guides) do
|
||||||
add :category, :text, default: "Guides"
|
add(:category, :text, default: "Guides")
|
||||||
add :route, :text, null: false
|
add(:route, :text, null: false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def down do
|
def down do
|
||||||
alter table(:guides) do
|
alter table(:guides) do
|
||||||
remove :route
|
remove(:route)
|
||||||
remove :category
|
remove(:category)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,21 +9,21 @@ defmodule AshHq.Repo.Migrations.MigrateResources5 do
|
||||||
|
|
||||||
def up do
|
def up do
|
||||||
alter table(:libraries) do
|
alter table(:libraries) do
|
||||||
add :description, :text
|
add(:description, :text)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:guides) do
|
alter table(:guides) do
|
||||||
modify :category, :text, null: false
|
modify(:category, :text, null: false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def down do
|
def down do
|
||||||
alter table(:guides) do
|
alter table(:guides) do
|
||||||
modify :category, :text, null: true
|
modify(:category, :text, null: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:libraries) do
|
alter table(:libraries) do
|
||||||
remove :description
|
remove(:description)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,34 +9,34 @@ defmodule AshHq.Repo.Migrations.MigrateResources6 do
|
||||||
|
|
||||||
def up do
|
def up do
|
||||||
alter table(:library_versions) do
|
alter table(:library_versions) do
|
||||||
remove :processed
|
remove(:processed)
|
||||||
remove :data
|
remove(:data)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:libraries) do
|
alter table(:libraries) do
|
||||||
remove :description
|
remove(:description)
|
||||||
|
|
||||||
modify :track_branches, {:array, :text}, default: nil
|
modify(:track_branches, {:array, :text}, default: nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:functions) do
|
alter table(:functions) do
|
||||||
modify :heads, {:array, :text}, default: nil
|
modify(:heads, {:array, :text}, default: nil)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def down do
|
def down do
|
||||||
alter table(:functions) do
|
alter table(:functions) do
|
||||||
modify :heads, {:array, :text}, default: []
|
modify(:heads, {:array, :text}, default: [])
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:libraries) do
|
alter table(:libraries) do
|
||||||
modify :track_branches, {:array, :text}, default: []
|
modify(:track_branches, {:array, :text}, default: [])
|
||||||
add :description, :text
|
add(:description, :text)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:library_versions) do
|
alter table(:library_versions) do
|
||||||
add :data, :map
|
add(:data, :map)
|
||||||
add :processed, :boolean, default: false
|
add(:processed, :boolean, default: false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,13 +9,13 @@ defmodule AshHq.Repo.Migrations.MigrateResources7 do
|
||||||
|
|
||||||
def up do
|
def up do
|
||||||
alter table(:modules) do
|
alter table(:modules) do
|
||||||
add :category, :text, null: false, default: "Misc"
|
add(:category, :text, null: false, default: "Misc")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def down do
|
def down do
|
||||||
alter table(:modules) do
|
alter table(:modules) do
|
||||||
remove :category
|
remove(:category)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,13 +9,13 @@ defmodule AshHq.Repo.Migrations.MigrateResources8 do
|
||||||
|
|
||||||
def up do
|
def up do
|
||||||
alter table(:modules) do
|
alter table(:modules) do
|
||||||
add :category_index, :bigint, null: false, default: 0
|
add(:category_index, :bigint, null: false, default: 0)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def down do
|
def down do
|
||||||
alter table(:modules) do
|
alter table(:modules) do
|
||||||
remove :category_index
|
remove(:category_index)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,49 +9,49 @@ defmodule AshHq.Repo.Migrations.MigrateResources9 do
|
||||||
|
|
||||||
def up do
|
def up do
|
||||||
alter table(:options) do
|
alter table(:options) do
|
||||||
add :argument_index, :bigint
|
add(:argument_index, :bigint)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:modules) do
|
alter table(:modules) do
|
||||||
add :file, :text
|
add(:file, :text)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:guides) do
|
alter table(:guides) do
|
||||||
modify :category, :text, default: "Topics"
|
modify(:category, :text, default: "Topics")
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:functions) do
|
alter table(:functions) do
|
||||||
add :file, :text
|
add(:file, :text)
|
||||||
add :line, :bigint
|
add(:line, :bigint)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:dsls) do
|
alter table(:dsls) do
|
||||||
add :imports, {:array, :text}
|
add(:imports, {:array, :text})
|
||||||
add :links, :map
|
add(:links, :map)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def down do
|
def down do
|
||||||
alter table(:dsls) do
|
alter table(:dsls) do
|
||||||
remove :links
|
remove(:links)
|
||||||
remove :imports
|
remove(:imports)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:functions) do
|
alter table(:functions) do
|
||||||
remove :line
|
remove(:line)
|
||||||
remove :file
|
remove(:file)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:guides) do
|
alter table(:guides) do
|
||||||
modify :category, :text, default: "Guides"
|
modify(:category, :text, default: "Guides")
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:modules) do
|
alter table(:modules) do
|
||||||
remove :file
|
remove(:file)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:options) do
|
alter table(:options) do
|
||||||
remove :argument_index
|
remove(:argument_index)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,15 +9,15 @@ defmodule AshHq.Repo.Migrations.MigrateResources10 do
|
||||||
|
|
||||||
def up do
|
def up do
|
||||||
alter table(:library_versions) do
|
alter table(:library_versions) do
|
||||||
remove :doc_html
|
remove(:doc_html)
|
||||||
remove :doc
|
remove(:doc)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def down do
|
def down do
|
||||||
alter table(:library_versions) do
|
alter table(:library_versions) do
|
||||||
add :doc, :text, null: false, default: ""
|
add(:doc, :text, null: false, default: "")
|
||||||
add :doc_html, :text
|
add(:doc_html, :text)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,13 +9,13 @@ defmodule AshHq.Repo.Migrations.MigrateResources11 do
|
||||||
|
|
||||||
def up do
|
def up do
|
||||||
alter table(:library_versions) do
|
alter table(:library_versions) do
|
||||||
add :default_guide, :text, null: false
|
add(:default_guide, :text, null: false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def down do
|
def down do
|
||||||
alter table(:library_versions) do
|
alter table(:library_versions) do
|
||||||
remove :default_guide
|
remove(:default_guide)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,13 +9,13 @@ defmodule AshHq.Repo.Migrations.MigrateResources12 do
|
||||||
|
|
||||||
def up do
|
def up do
|
||||||
alter table(:library_versions) do
|
alter table(:library_versions) do
|
||||||
modify :default_guide, :text, null: true
|
modify(:default_guide, :text, null: true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def down do
|
def down do
|
||||||
alter table(:library_versions) do
|
alter table(:library_versions) do
|
||||||
modify :default_guide, :text, null: false
|
modify(:default_guide, :text, null: false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,7 +9,7 @@ defmodule AshHq.Repo.Migrations.MigrateResources13 do
|
||||||
|
|
||||||
def up do
|
def up do
|
||||||
alter table(:options) do
|
alter table(:options) do
|
||||||
add :links, :map
|
add(:links, :map)
|
||||||
end
|
end
|
||||||
|
|
||||||
execute("""
|
execute("""
|
||||||
|
@ -203,7 +203,7 @@ defmodule AshHq.Repo.Migrations.MigrateResources13 do
|
||||||
""")
|
""")
|
||||||
|
|
||||||
alter table(:options) do
|
alter table(:options) do
|
||||||
remove :links
|
remove(:links)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,61 +9,61 @@ defmodule AshHq.Repo.Migrations.MigrateResources14 do
|
||||||
|
|
||||||
def up do
|
def up do
|
||||||
alter table(:options) do
|
alter table(:options) do
|
||||||
add :sanitized_name, :text
|
add(:sanitized_name, :text)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:modules) do
|
alter table(:modules) do
|
||||||
add :sanitized_name, :text
|
add(:sanitized_name, :text)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:library_versions) do
|
alter table(:library_versions) do
|
||||||
add :sanitized_version, :text
|
add(:sanitized_version, :text)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:guides) do
|
alter table(:guides) do
|
||||||
add :sanitized_name, :text
|
add(:sanitized_name, :text)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:functions) do
|
alter table(:functions) do
|
||||||
add :sanitized_name, :text
|
add(:sanitized_name, :text)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:extensions) do
|
alter table(:extensions) do
|
||||||
add :sanitized_name, :text
|
add(:sanitized_name, :text)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:dsls) do
|
alter table(:dsls) do
|
||||||
add :sanitized_name, :text
|
add(:sanitized_name, :text)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def down do
|
def down do
|
||||||
alter table(:dsls) do
|
alter table(:dsls) do
|
||||||
remove :sanitized_name
|
remove(:sanitized_name)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:extensions) do
|
alter table(:extensions) do
|
||||||
remove :sanitized_name
|
remove(:sanitized_name)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:functions) do
|
alter table(:functions) do
|
||||||
remove :sanitized_name
|
remove(:sanitized_name)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:guides) do
|
alter table(:guides) do
|
||||||
remove :sanitized_name
|
remove(:sanitized_name)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:library_versions) do
|
alter table(:library_versions) do
|
||||||
remove :sanitized_version
|
remove(:sanitized_version)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:modules) do
|
alter table(:modules) do
|
||||||
remove :sanitized_name
|
remove(:sanitized_name)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:options) do
|
alter table(:options) do
|
||||||
remove :sanitized_name
|
remove(:sanitized_name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,61 +9,61 @@ defmodule AshHq.Repo.Migrations.MigrateResources15 do
|
||||||
|
|
||||||
def up do
|
def up do
|
||||||
alter table(:options) do
|
alter table(:options) do
|
||||||
modify :sanitized_name, :text, null: false
|
modify(:sanitized_name, :text, null: false)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:modules) do
|
alter table(:modules) do
|
||||||
modify :sanitized_name, :text, null: false
|
modify(:sanitized_name, :text, null: false)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:library_versions) do
|
alter table(:library_versions) do
|
||||||
modify :sanitized_version, :text, null: false
|
modify(:sanitized_version, :text, null: false)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:guides) do
|
alter table(:guides) do
|
||||||
modify :sanitized_name, :text, null: false
|
modify(:sanitized_name, :text, null: false)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:functions) do
|
alter table(:functions) do
|
||||||
modify :sanitized_name, :text, null: false
|
modify(:sanitized_name, :text, null: false)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:extensions) do
|
alter table(:extensions) do
|
||||||
modify :sanitized_name, :text, null: false
|
modify(:sanitized_name, :text, null: false)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:dsls) do
|
alter table(:dsls) do
|
||||||
modify :sanitized_name, :text, null: false
|
modify(:sanitized_name, :text, null: false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def down do
|
def down do
|
||||||
alter table(:dsls) do
|
alter table(:dsls) do
|
||||||
modify :sanitized_name, :text, null: true
|
modify(:sanitized_name, :text, null: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:extensions) do
|
alter table(:extensions) do
|
||||||
modify :sanitized_name, :text, null: true
|
modify(:sanitized_name, :text, null: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:functions) do
|
alter table(:functions) do
|
||||||
modify :sanitized_name, :text, null: true
|
modify(:sanitized_name, :text, null: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:guides) do
|
alter table(:guides) do
|
||||||
modify :sanitized_name, :text, null: true
|
modify(:sanitized_name, :text, null: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:library_versions) do
|
alter table(:library_versions) do
|
||||||
modify :sanitized_version, :text, null: true
|
modify(:sanitized_version, :text, null: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:modules) do
|
alter table(:modules) do
|
||||||
modify :sanitized_name, :text, null: true
|
modify(:sanitized_name, :text, null: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:options) do
|
alter table(:options) do
|
||||||
modify :sanitized_name, :text, null: true
|
modify(:sanitized_name, :text, null: true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,27 +9,27 @@ defmodule AshHq.Repo.Migrations.MigrateResources16 do
|
||||||
|
|
||||||
def up do
|
def up do
|
||||||
alter table(:options) do
|
alter table(:options) do
|
||||||
remove :sanitized_name
|
remove(:sanitized_name)
|
||||||
|
|
||||||
add :sanitized_path, :text, null: false
|
add(:sanitized_path, :text, null: false)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:dsls) do
|
alter table(:dsls) do
|
||||||
remove :sanitized_name
|
remove(:sanitized_name)
|
||||||
|
|
||||||
add :sanitized_path, :text, null: false
|
add(:sanitized_path, :text, null: false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def down do
|
def down do
|
||||||
alter table(:dsls) do
|
alter table(:dsls) do
|
||||||
remove :sanitized_path
|
remove(:sanitized_path)
|
||||||
add :sanitized_name, :text, null: false
|
add(:sanitized_name, :text, null: false)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:options) do
|
alter table(:options) do
|
||||||
remove :sanitized_path
|
remove(:sanitized_path)
|
||||||
add :sanitized_name, :text, null: false
|
add(:sanitized_name, :text, null: false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,46 +9,48 @@ defmodule AshHq.Repo.Migrations.MigrateResources17 do
|
||||||
|
|
||||||
def up do
|
def up do
|
||||||
create table(:users, primary_key: false) do
|
create table(:users, primary_key: false) do
|
||||||
add :id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true
|
add(:id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true)
|
||||||
add :email, :citext, null: false
|
add(:email, :citext, null: false)
|
||||||
add :confirmed_at, :utc_datetime_usec
|
add(:confirmed_at, :utc_datetime_usec)
|
||||||
add :hashed_password, :text
|
add(:hashed_password, :text)
|
||||||
add :created_at, :utc_datetime_usec, null: false, default: fragment("now()")
|
add(:created_at, :utc_datetime_usec, null: false, default: fragment("now()"))
|
||||||
add :updated_at, :utc_datetime_usec, null: false, default: fragment("now()")
|
add(:updated_at, :utc_datetime_usec, null: false, default: fragment("now()"))
|
||||||
end
|
end
|
||||||
|
|
||||||
create unique_index(:users, [:email], name: "users_unique_email_index")
|
create unique_index(:users, [:email], name: "users_unique_email_index")
|
||||||
|
|
||||||
create table(:user_tokens, primary_key: false) do
|
create table(:user_tokens, primary_key: false) do
|
||||||
add :id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true
|
add(:id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true)
|
||||||
add :token, :binary
|
add(:token, :binary)
|
||||||
add :context, :text
|
add(:context, :text)
|
||||||
add :sent_to, :text
|
add(:sent_to, :text)
|
||||||
add :created_at, :utc_datetime_usec, null: false, default: fragment("now()")
|
add(:created_at, :utc_datetime_usec, null: false, default: fragment("now()"))
|
||||||
|
|
||||||
add :user_id,
|
add(
|
||||||
references(:users,
|
:user_id,
|
||||||
column: :id,
|
references(:users,
|
||||||
name: "user_tokens_user_id_fkey",
|
column: :id,
|
||||||
type: :uuid,
|
name: "user_tokens_user_id_fkey",
|
||||||
prefix: "public"
|
type: :uuid,
|
||||||
)
|
prefix: "public"
|
||||||
|
)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
create unique_index(:user_tokens, [:context, :token], name: "user_tokens_token_context_index")
|
create unique_index(:user_tokens, [:context, :token], name: "user_tokens_token_context_index")
|
||||||
end
|
end
|
||||||
|
|
||||||
def down do
|
def down do
|
||||||
drop_if_exists unique_index(:user_tokens, [:context, :token],
|
drop_if_exists(
|
||||||
name: "user_tokens_token_context_index"
|
unique_index(:user_tokens, [:context, :token], name: "user_tokens_token_context_index")
|
||||||
)
|
)
|
||||||
|
|
||||||
drop constraint(:user_tokens, "user_tokens_user_id_fkey")
|
drop(constraint(:user_tokens, "user_tokens_user_id_fkey"))
|
||||||
|
|
||||||
drop table(:user_tokens)
|
drop(table(:user_tokens))
|
||||||
|
|
||||||
drop_if_exists unique_index(:users, [:email], name: "users_unique_email_index")
|
drop_if_exists(unique_index(:users, [:email], name: "users_unique_email_index"))
|
||||||
|
|
||||||
drop table(:users)
|
drop(table(:users))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -8,32 +8,36 @@ defmodule AshHq.Repo.Migrations.MigrateResources18 do
|
||||||
use Ecto.Migration
|
use Ecto.Migration
|
||||||
|
|
||||||
def up do
|
def up do
|
||||||
drop constraint(:user_tokens, "user_tokens_user_id_fkey")
|
drop(constraint(:user_tokens, "user_tokens_user_id_fkey"))
|
||||||
|
|
||||||
alter table(:user_tokens) do
|
alter table(:user_tokens) do
|
||||||
modify :user_id,
|
modify(
|
||||||
references(:users,
|
:user_id,
|
||||||
column: :id,
|
references(:users,
|
||||||
prefix: "public",
|
column: :id,
|
||||||
name: "user_tokens_user_id_fkey",
|
prefix: "public",
|
||||||
type: :uuid,
|
name: "user_tokens_user_id_fkey",
|
||||||
on_delete: :delete_all,
|
type: :uuid,
|
||||||
on_update: :update_all
|
on_delete: :delete_all,
|
||||||
)
|
on_update: :update_all
|
||||||
|
)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def down do
|
def down do
|
||||||
drop constraint(:user_tokens, "user_tokens_user_id_fkey")
|
drop(constraint(:user_tokens, "user_tokens_user_id_fkey"))
|
||||||
|
|
||||||
alter table(:user_tokens) do
|
alter table(:user_tokens) do
|
||||||
modify :user_id,
|
modify(
|
||||||
references(:users,
|
:user_id,
|
||||||
column: :id,
|
references(:users,
|
||||||
prefix: "public",
|
column: :id,
|
||||||
name: "user_tokens_user_id_fkey",
|
prefix: "public",
|
||||||
type: :uuid
|
name: "user_tokens_user_id_fkey",
|
||||||
)
|
type: :uuid
|
||||||
|
)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,13 +9,13 @@ defmodule AshHq.Repo.Migrations.MigrateResources19 do
|
||||||
|
|
||||||
def up do
|
def up do
|
||||||
alter table(:guides) do
|
alter table(:guides) do
|
||||||
remove :sanitized_name
|
remove(:sanitized_name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def down do
|
def down do
|
||||||
alter table(:guides) do
|
alter table(:guides) do
|
||||||
add :sanitized_name, :text, null: false
|
add(:sanitized_name, :text, null: false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,13 +9,13 @@ defmodule AshHq.Repo.Migrations.MigrateResources20 do
|
||||||
|
|
||||||
def up do
|
def up do
|
||||||
alter table(:library_versions) do
|
alter table(:library_versions) do
|
||||||
add :branch, :boolean, null: false, default: false
|
add(:branch, :boolean, null: false, default: false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def down do
|
def down do
|
||||||
alter table(:library_versions) do
|
alter table(:library_versions) do
|
||||||
remove :branch
|
remove(:branch)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,23 +9,23 @@ defmodule AshHq.Repo.Migrations.MigrateResources21 do
|
||||||
|
|
||||||
def up do
|
def up do
|
||||||
alter table(:library_versions) do
|
alter table(:library_versions) do
|
||||||
remove :default_guide
|
remove(:default_guide)
|
||||||
remove :branch
|
remove(:branch)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:libraries) do
|
alter table(:libraries) do
|
||||||
remove :track_branches
|
remove(:track_branches)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def down do
|
def down do
|
||||||
alter table(:libraries) do
|
alter table(:libraries) do
|
||||||
add :track_branches, {:array, :text}
|
add(:track_branches, {:array, :text})
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:library_versions) do
|
alter table(:library_versions) do
|
||||||
add :branch, :boolean, null: false, default: false
|
add(:branch, :boolean, null: false, default: false)
|
||||||
add :default_guide, :text
|
add(:default_guide, :text)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,7 +9,7 @@ defmodule AshHq.Repo.Migrations.AddLibraryOrder do
|
||||||
|
|
||||||
def up do
|
def up do
|
||||||
alter table(:libraries) do
|
alter table(:libraries) do
|
||||||
add :order, :bigint, null: true
|
add(:order, :bigint, null: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
execute("""
|
execute("""
|
||||||
|
@ -18,13 +18,13 @@ defmodule AshHq.Repo.Migrations.AddLibraryOrder do
|
||||||
""")
|
""")
|
||||||
|
|
||||||
alter table(:libraries) do
|
alter table(:libraries) do
|
||||||
modify :order, :bigint, null: false
|
modify(:order, :bigint, null: false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def down do
|
def down do
|
||||||
alter table(:libraries) do
|
alter table(:libraries) do
|
||||||
remove :order
|
remove(:order)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -12,6 +12,6 @@ defmodule AshHq.Repo.Migrations.MigrateResources22 do
|
||||||
end
|
end
|
||||||
|
|
||||||
def down do
|
def down do
|
||||||
drop_if_exists unique_index(:libraries, [:order], name: "libraries_unique_order_index")
|
drop_if_exists(unique_index(:libraries, [:order], name: "libraries_unique_order_index"))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -15,4 +15,4 @@ defmodule AshHq.Repo.Migrations.InstallPgstatstatements do
|
||||||
# when this migration is rolled back:
|
# when this migration is rolled back:
|
||||||
# execute("DROP EXTENSION IF EXISTS \"pgstatstatements\"")
|
# execute("DROP EXTENSION IF EXISTS \"pgstatstatements\"")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,13 +9,13 @@ defmodule AshHq.Repo.Migrations.MigrateResources23 do
|
||||||
|
|
||||||
def up do
|
def up do
|
||||||
alter table(:modules) do
|
alter table(:modules) do
|
||||||
remove :category_index
|
remove(:category_index)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def down do
|
def down do
|
||||||
alter table(:modules) do
|
alter table(:modules) do
|
||||||
add :category_index, :bigint, null: false, default: 0
|
add(:category_index, :bigint, null: false, default: 0)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,18 +9,18 @@ defmodule AshHq.Repo.Migrations.MigrateResources24 do
|
||||||
|
|
||||||
def up do
|
def up do
|
||||||
create table(:emails, primary_key: false) do
|
create table(:emails, primary_key: false) do
|
||||||
add :updated_at, :utc_datetime_usec, null: false, default: fragment("now()")
|
add(:updated_at, :utc_datetime_usec, null: false, default: fragment("now()"))
|
||||||
add :inserted_at, :utc_datetime_usec, null: false, default: fragment("now()")
|
add(:inserted_at, :utc_datetime_usec, null: false, default: fragment("now()"))
|
||||||
add :id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true
|
add(:id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true)
|
||||||
add :email, :citext, null: false
|
add(:email, :citext, null: false)
|
||||||
end
|
end
|
||||||
|
|
||||||
create unique_index(:emails, [:email], name: "emails_unique_email_index")
|
create unique_index(:emails, [:email], name: "emails_unique_email_index")
|
||||||
end
|
end
|
||||||
|
|
||||||
def down do
|
def down do
|
||||||
drop_if_exists unique_index(:emails, [:email], name: "emails_unique_email_index")
|
drop_if_exists(unique_index(:emails, [:email], name: "emails_unique_email_index"))
|
||||||
|
|
||||||
drop table(:emails)
|
drop(table(:emails))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,71 +9,71 @@ defmodule AshHq.Repo.Migrations.MigrateResources25 do
|
||||||
|
|
||||||
def up do
|
def up do
|
||||||
alter table(:options) do
|
alter table(:options) do
|
||||||
modify :extension_id, :uuid, null: true
|
modify(:extension_id, :uuid, null: true)
|
||||||
modify :library_version_id, :uuid, null: true
|
modify(:library_version_id, :uuid, null: true)
|
||||||
modify :dsl_id, :uuid, null: true
|
modify(:dsl_id, :uuid, null: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:modules) do
|
alter table(:modules) do
|
||||||
modify :library_version_id, :uuid, null: true
|
modify(:library_version_id, :uuid, null: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:library_versions) do
|
alter table(:library_versions) do
|
||||||
modify :library_id, :uuid, null: true
|
modify(:library_id, :uuid, null: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:guides) do
|
alter table(:guides) do
|
||||||
modify :library_version_id, :uuid, null: true
|
modify(:library_version_id, :uuid, null: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:functions) do
|
alter table(:functions) do
|
||||||
modify :module_id, :uuid, null: true
|
modify(:module_id, :uuid, null: true)
|
||||||
modify :library_version_id, :uuid, null: true
|
modify(:library_version_id, :uuid, null: true)
|
||||||
add :heads_html, {:array, :text}
|
add(:heads_html, {:array, :text})
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:extensions) do
|
alter table(:extensions) do
|
||||||
modify :library_version_id, :uuid, null: true
|
modify(:library_version_id, :uuid, null: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:dsls) do
|
alter table(:dsls) do
|
||||||
modify :extension_id, :uuid, null: true
|
modify(:extension_id, :uuid, null: true)
|
||||||
modify :library_version_id, :uuid, null: true
|
modify(:library_version_id, :uuid, null: true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def down do
|
def down do
|
||||||
alter table(:dsls) do
|
alter table(:dsls) do
|
||||||
modify :library_version_id, :uuid, null: false
|
modify(:library_version_id, :uuid, null: false)
|
||||||
modify :extension_id, :uuid, null: false
|
modify(:extension_id, :uuid, null: false)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:extensions) do
|
alter table(:extensions) do
|
||||||
modify :library_version_id, :uuid, null: false
|
modify(:library_version_id, :uuid, null: false)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:functions) do
|
alter table(:functions) do
|
||||||
remove :heads_html
|
remove(:heads_html)
|
||||||
modify :library_version_id, :uuid, null: false
|
modify(:library_version_id, :uuid, null: false)
|
||||||
modify :module_id, :uuid, null: false
|
modify(:module_id, :uuid, null: false)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:guides) do
|
alter table(:guides) do
|
||||||
modify :library_version_id, :uuid, null: false
|
modify(:library_version_id, :uuid, null: false)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:library_versions) do
|
alter table(:library_versions) do
|
||||||
modify :library_id, :uuid, null: false
|
modify(:library_id, :uuid, null: false)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:modules) do
|
alter table(:modules) do
|
||||||
modify :library_version_id, :uuid, null: false
|
modify(:library_version_id, :uuid, null: false)
|
||||||
end
|
end
|
||||||
|
|
||||||
alter table(:options) do
|
alter table(:options) do
|
||||||
modify :dsl_id, :uuid, null: false
|
modify(:dsl_id, :uuid, null: false)
|
||||||
modify :library_version_id, :uuid, null: false
|
modify(:library_version_id, :uuid, null: false)
|
||||||
modify :extension_id, :uuid, null: false
|
modify(:extension_id, :uuid, null: false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -12,6 +12,6 @@ defmodule AshHq.Repo.Migrations.MigrateResources27 do
|
||||||
end
|
end
|
||||||
|
|
||||||
def down do
|
def down do
|
||||||
drop_if_exists unique_index(:libraries, [:name], name: "libraries_unique_name_index")
|
drop_if_exists(unique_index(:libraries, [:name], name: "libraries_unique_name_index"))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
66
priv/repo/migrations/20220929022009_migrate_resources28.exs
Normal file
66
priv/repo/migrations/20220929022009_migrate_resources28.exs
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
defmodule AshHq.Repo.Migrations.MigrateResources28 do
|
||||||
|
@moduledoc """
|
||||||
|
Updates resources based on their most recent snapshots.
|
||||||
|
|
||||||
|
This file was autogenerated with `mix ash_postgres.generate_migrations`
|
||||||
|
"""
|
||||||
|
|
||||||
|
use Ecto.Migration
|
||||||
|
|
||||||
|
def up do
|
||||||
|
create table(:mix_tasks, primary_key: false) do
|
||||||
|
add(:sanitized_name, :text, null: false)
|
||||||
|
add(:id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true)
|
||||||
|
add(:name, :text, null: false)
|
||||||
|
add(:category, :text, null: false, default: "Misc")
|
||||||
|
add(:file, :text)
|
||||||
|
add(:doc, :text, null: false, default: "")
|
||||||
|
add(:doc_html, :text)
|
||||||
|
add(:order, :bigint, null: false)
|
||||||
|
|
||||||
|
add(
|
||||||
|
:library_version_id,
|
||||||
|
references(:library_versions,
|
||||||
|
column: :id,
|
||||||
|
name: "mix_tasks_library_version_id_fkey",
|
||||||
|
type: :uuid,
|
||||||
|
prefix: "public",
|
||||||
|
on_delete: :delete_all
|
||||||
|
)
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
execute("""
|
||||||
|
CREATE INDEX mix_tasks_name_lower_index ON mix_tasks(lower(name));
|
||||||
|
""")
|
||||||
|
|
||||||
|
execute("""
|
||||||
|
CREATE INDEX mix_tasks_name_trigram_index ON mix_tasks USING GIST (name gist_trgm_ops);
|
||||||
|
""")
|
||||||
|
|
||||||
|
execute("""
|
||||||
|
CREATE INDEX mix_tasks_search_index ON mix_tasks USING GIN((
|
||||||
|
setweight(to_tsvector('english', name), 'A') ||
|
||||||
|
setweight(to_tsvector('english', doc), 'D')
|
||||||
|
));
|
||||||
|
""")
|
||||||
|
end
|
||||||
|
|
||||||
|
def down do
|
||||||
|
execute("""
|
||||||
|
DROP INDEX mix_tasks_search_index;
|
||||||
|
""")
|
||||||
|
|
||||||
|
execute("""
|
||||||
|
DROP INDEX mix_tasks_name_trigram_index;
|
||||||
|
""")
|
||||||
|
|
||||||
|
execute("""
|
||||||
|
DROP INDEX mix_tasks_name_lower_index;
|
||||||
|
""")
|
||||||
|
|
||||||
|
drop(constraint(:mix_tasks, "mix_tasks_library_version_id_fkey"))
|
||||||
|
|
||||||
|
drop(table(:mix_tasks))
|
||||||
|
end
|
||||||
|
end
|
142
priv/resource_snapshots/repo/mix_tasks/20220929022009.json
Normal file
142
priv/resource_snapshots/repo/mix_tasks/20220929022009.json
Normal file
|
@ -0,0 +1,142 @@
|
||||||
|
{
|
||||||
|
"attributes": [
|
||||||
|
{
|
||||||
|
"allow_nil?": false,
|
||||||
|
"default": "nil",
|
||||||
|
"generated?": false,
|
||||||
|
"primary_key?": false,
|
||||||
|
"references": null,
|
||||||
|
"size": null,
|
||||||
|
"source": "sanitized_name",
|
||||||
|
"type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_nil?": false,
|
||||||
|
"default": "fragment(\"uuid_generate_v4()\")",
|
||||||
|
"generated?": false,
|
||||||
|
"primary_key?": true,
|
||||||
|
"references": null,
|
||||||
|
"size": null,
|
||||||
|
"source": "id",
|
||||||
|
"type": "uuid"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_nil?": false,
|
||||||
|
"default": "nil",
|
||||||
|
"generated?": false,
|
||||||
|
"primary_key?": false,
|
||||||
|
"references": null,
|
||||||
|
"size": null,
|
||||||
|
"source": "name",
|
||||||
|
"type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_nil?": false,
|
||||||
|
"default": "\"Misc\"",
|
||||||
|
"generated?": false,
|
||||||
|
"primary_key?": false,
|
||||||
|
"references": null,
|
||||||
|
"size": null,
|
||||||
|
"source": "category",
|
||||||
|
"type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_nil?": true,
|
||||||
|
"default": "nil",
|
||||||
|
"generated?": false,
|
||||||
|
"primary_key?": false,
|
||||||
|
"references": null,
|
||||||
|
"size": null,
|
||||||
|
"source": "file",
|
||||||
|
"type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_nil?": false,
|
||||||
|
"default": "\"\"",
|
||||||
|
"generated?": false,
|
||||||
|
"primary_key?": false,
|
||||||
|
"references": null,
|
||||||
|
"size": null,
|
||||||
|
"source": "doc",
|
||||||
|
"type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_nil?": true,
|
||||||
|
"default": "nil",
|
||||||
|
"generated?": false,
|
||||||
|
"primary_key?": false,
|
||||||
|
"references": null,
|
||||||
|
"size": null,
|
||||||
|
"source": "doc_html",
|
||||||
|
"type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_nil?": false,
|
||||||
|
"default": "nil",
|
||||||
|
"generated?": false,
|
||||||
|
"primary_key?": false,
|
||||||
|
"references": null,
|
||||||
|
"size": null,
|
||||||
|
"source": "order",
|
||||||
|
"type": "bigint"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_nil?": true,
|
||||||
|
"default": "nil",
|
||||||
|
"generated?": false,
|
||||||
|
"primary_key?": false,
|
||||||
|
"references": {
|
||||||
|
"destination_attribute": "id",
|
||||||
|
"destination_attribute_default": null,
|
||||||
|
"destination_attribute_generated": null,
|
||||||
|
"multitenancy": {
|
||||||
|
"attribute": null,
|
||||||
|
"global": null,
|
||||||
|
"strategy": null
|
||||||
|
},
|
||||||
|
"name": "mix_tasks_library_version_id_fkey",
|
||||||
|
"on_delete": "delete",
|
||||||
|
"on_update": null,
|
||||||
|
"schema": "public",
|
||||||
|
"table": "library_versions"
|
||||||
|
},
|
||||||
|
"size": null,
|
||||||
|
"source": "library_version_id",
|
||||||
|
"type": "uuid"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"base_filter": null,
|
||||||
|
"check_constraints": [],
|
||||||
|
"custom_indexes": [],
|
||||||
|
"custom_statements": [
|
||||||
|
{
|
||||||
|
"code?": false,
|
||||||
|
"down": "DROP INDEX mix_tasks_name_lower_index;",
|
||||||
|
"name": "name_index",
|
||||||
|
"up": "CREATE INDEX mix_tasks_name_lower_index ON mix_tasks(lower(name));\n"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"code?": false,
|
||||||
|
"down": "DROP INDEX mix_tasks_name_trigram_index;",
|
||||||
|
"name": "trigram_index",
|
||||||
|
"up": "CREATE INDEX mix_tasks_name_trigram_index ON mix_tasks USING GIST (name gist_trgm_ops);\n"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"code?": false,
|
||||||
|
"down": "DROP INDEX mix_tasks_search_index;",
|
||||||
|
"name": "search_index",
|
||||||
|
"up": "CREATE INDEX mix_tasks_search_index ON mix_tasks USING GIN((\n setweight(to_tsvector('english', name), 'A') ||\n setweight(to_tsvector('english', doc), 'D')\n));\n"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"has_create_action": true,
|
||||||
|
"hash": "F388F84B5CBCF451EC7BF4FFE450D0C3716BDA729376CF2566FF2B92911EC459",
|
||||||
|
"identities": [],
|
||||||
|
"multitenancy": {
|
||||||
|
"attribute": null,
|
||||||
|
"global": null,
|
||||||
|
"strategy": null
|
||||||
|
},
|
||||||
|
"repo": "Elixir.AshHq.Repo",
|
||||||
|
"schema": null,
|
||||||
|
"table": "mix_tasks"
|
||||||
|
}
|
|
@ -316,6 +316,37 @@ defmodule Utils do
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def build_mix_task(mix_task, category, order) do
|
||||||
|
{:docs_v1, _, :elixir, _, docs, _, _} = Code.fetch_docs(mix_task)
|
||||||
|
|
||||||
|
module_doc =
|
||||||
|
case docs do
|
||||||
|
%{"en" => en} ->
|
||||||
|
en
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
""
|
||||||
|
end
|
||||||
|
|
||||||
|
module_info =
|
||||||
|
try do
|
||||||
|
mix_task.module_info(:compile)
|
||||||
|
rescue
|
||||||
|
_ ->
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
|
||||||
|
file = file(module_info[:source])
|
||||||
|
|
||||||
|
%{
|
||||||
|
name: Mix.Task.task_name(mix_task),
|
||||||
|
doc: module_doc,
|
||||||
|
file: file,
|
||||||
|
order: order,
|
||||||
|
category: category
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
defp file(nil), do: nil
|
defp file(nil), do: nil
|
||||||
|
|
||||||
defp file(path) do
|
defp file(path) do
|
||||||
|
@ -395,7 +426,8 @@ case Enum.at(dsls, 0) do
|
||||||
acc = %{
|
acc = %{
|
||||||
doc: Utils.module_docs(dsl),
|
doc: Utils.module_docs(dsl),
|
||||||
guides: [],
|
guides: [],
|
||||||
modules: []
|
modules: [],
|
||||||
|
mix_tasks: []
|
||||||
}
|
}
|
||||||
|
|
||||||
acc =
|
acc =
|
||||||
|
@ -419,6 +451,19 @@ case Enum.at(dsls, 0) do
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
acc =
|
||||||
|
Utils.try_apply(fn -> dsl.mix_tasks() end, [])
|
||||||
|
|> List.wrap()
|
||||||
|
|> Enum.reduce(acc, fn {category, mix_tasks}, acc ->
|
||||||
|
mix_tasks
|
||||||
|
|> Enum.with_index()
|
||||||
|
|> Enum.reduce(acc, fn {mix_task, order}, acc ->
|
||||||
|
Map.update!(acc, :mix_tasks, fn mix_tasks ->
|
||||||
|
[Utils.build_mix_task(mix_task, category, order) | mix_tasks]
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
|
||||||
data =
|
data =
|
||||||
extensions
|
extensions
|
||||||
|> Enum.with_index()
|
|> Enum.with_index()
|
||||||
|
|
Loading…
Reference in a new issue