mirror of
https://github.com/ash-project/ash_hq.git
synced 2024-09-20 05:13:23 +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,
|
||||
use_path_for_name?: 1,
|
||||
add_name_to_path?: 1,
|
||||
item_type: 1,
|
||||
sanitized_name_attribute: 1,
|
||||
show_docs_on: 1,
|
||||
header_ids?: 1
|
||||
|
|
|
@ -88,6 +88,15 @@ defmodule AshHq.Docs.Search do
|
|||
}
|
||||
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
|
||||
input %{
|
||||
dsls: result(:dsls),
|
||||
|
@ -96,7 +105,8 @@ defmodule AshHq.Docs.Search do
|
|||
library_versions: result(:library_versions),
|
||||
extensions: result(:extensions),
|
||||
functions: result(:functions),
|
||||
modules: result(:modules)
|
||||
modules: result(:modules),
|
||||
mix_tasks: result(:mix_tasks)
|
||||
}
|
||||
end
|
||||
end
|
||||
|
|
|
@ -124,7 +124,8 @@ defmodule AshHq.Docs.Importer do
|
|||
extensions: result[:extensions],
|
||||
doc: result[:doc],
|
||||
guides: add_text(result[:guides], library.name, version),
|
||||
modules: result[:modules]
|
||||
modules: result[:modules],
|
||||
mix_tasks: result[:mix_tasks]
|
||||
}
|
||||
)
|
||||
end)
|
||||
|
|
|
@ -10,6 +10,7 @@ defmodule AshHq.Docs.Registry do
|
|||
entry AshHq.Docs.Guide
|
||||
entry AshHq.Docs.Library
|
||||
entry AshHq.Docs.LibraryVersion
|
||||
entry AshHq.Docs.MixTask
|
||||
entry AshHq.Docs.Module
|
||||
entry AshHq.Docs.Option
|
||||
end
|
||||
|
|
|
@ -64,6 +64,10 @@ defmodule AshHq.Docs.LibraryVersion do
|
|||
allow_nil? false
|
||||
end
|
||||
|
||||
argument :mix_tasks, {:array, :map} do
|
||||
allow_nil? false
|
||||
end
|
||||
|
||||
argument :extensions, {:array, :map} do
|
||||
allow_nil? false
|
||||
end
|
||||
|
@ -73,12 +77,16 @@ defmodule AshHq.Docs.LibraryVersion do
|
|||
change {AshHq.Docs.Changes.AddArgToRelationship,
|
||||
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,
|
||||
attr: :id, arg: :library_version, rel: :extensions, generate: &Ash.UUID.generate/0}
|
||||
|
||||
change manage_relationship(:guides, type: :create)
|
||||
change manage_relationship(:library, type: :append_and_remove)
|
||||
change manage_relationship(:modules, type: :create)
|
||||
change manage_relationship(:mix_tasks, type: :create)
|
||||
change manage_relationship(:extensions, type: :create)
|
||||
end
|
||||
|
||||
|
@ -126,5 +134,6 @@ defmodule AshHq.Docs.LibraryVersion do
|
|||
has_many :extensions, AshHq.Docs.Extension
|
||||
has_many :guides, AshHq.Docs.Guide
|
||||
has_many :modules, AshHq.Docs.Module
|
||||
has_many :mix_tasks, AshHq.Docs.MixTask
|
||||
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 Phoenix.LiveView.JS
|
||||
|
||||
prop(class, :css_class, default: "")
|
||||
prop(libraries, :list, required: true)
|
||||
prop(extension, :any, default: nil)
|
||||
prop(guide, :any, default: nil)
|
||||
prop(library, :any, default: nil)
|
||||
prop(library_version, :any, default: nil)
|
||||
prop(selected_versions, :map, default: %{})
|
||||
prop(id, :string, required: true)
|
||||
prop(dsl, :any, required: true)
|
||||
prop(module, :any, required: true)
|
||||
prop(add_version, :event, required: true)
|
||||
prop(remove_version, :event, required: true)
|
||||
prop(change_version, :event, required: true)
|
||||
prop class, :css_class, default: ""
|
||||
prop libraries, :list, required: true
|
||||
prop extension, :any, default: nil
|
||||
prop guide, :any, default: nil
|
||||
prop library, :any, default: nil
|
||||
prop library_version, :any, default: nil
|
||||
prop selected_versions, :map, default: %{}
|
||||
prop id, :string, required: true
|
||||
prop dsl, :any, required: true
|
||||
prop module, :any, required: true
|
||||
prop mix_task, :any, required: true
|
||||
prop add_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()
|
||||
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"""
|
||||
<aside
|
||||
id={@id}
|
||||
|
@ -44,7 +79,7 @@ defmodule AshHqWeb.Components.DocSidebar do
|
|||
<div>
|
||||
Guides
|
||||
</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">
|
||||
<button
|
||||
phx-click={collapse("#{@id}-#{String.replace(category, " ", "-")}")}
|
||||
|
@ -91,7 +126,7 @@ defmodule AshHqWeb.Components.DocSidebar do
|
|||
Reference
|
||||
</div>
|
||||
<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">
|
||||
<button phx-click={collapse("#{@id}-extension")} class="flex flex-row items-center">
|
||||
<div id={"#{@id}-extension-chevron-down"}>
|
||||
|
@ -105,7 +140,7 @@ defmodule AshHqWeb.Components.DocSidebar do
|
|||
</div>
|
||||
{/if}
|
||||
<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">
|
||||
{library}
|
||||
<ul>
|
||||
|
@ -128,6 +163,51 @@ defmodule AshHqWeb.Components.DocSidebar do
|
|||
{/for}
|
||||
</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">
|
||||
<button phx-click={collapse("#{@id}-modules")} class="flex flex-row items-center">
|
||||
<div id={"#{@id}-modules-chevron-down"}>
|
||||
|
@ -140,7 +220,37 @@ defmodule AshHqWeb.Components.DocSidebar do
|
|||
</button>
|
||||
</div>
|
||||
<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">
|
||||
<span class="text-sm text-base-light-900 dark:text-base-dark-100">{category}</span>
|
||||
</div>
|
||||
|
@ -236,9 +346,25 @@ defmodule AshHqWeb.Components.DocSidebar do
|
|||
"""
|
||||
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"]
|
||||
|
||||
defp guides_by_category_and_library(libraries, selected_versions) do
|
||||
defp guides_by_category_and_library(libraries, library_version, selected_versions) do
|
||||
libraries =
|
||||
Enum.filter(libraries, fn library ->
|
||||
selected_versions[library.id] && selected_versions[library.id] != ""
|
||||
|
@ -251,8 +377,8 @@ defmodule AshHqWeb.Components.DocSidebar do
|
|||
|
||||
libraries
|
||||
|> Enum.flat_map(fn library ->
|
||||
library.versions
|
||||
|> Enum.find(&Ash.Resource.loaded?(&1, :guides))
|
||||
library
|
||||
|> selected_version(library_version, selected_versions)
|
||||
|> case do
|
||||
nil ->
|
||||
[]
|
||||
|
@ -286,49 +412,32 @@ defmodule AshHqWeb.Components.DocSidebar do
|
|||
|> partially_alphabetically_sort(@start_guides, [])
|
||||
end
|
||||
|
||||
defp get_extensions(libraries, selected_versions) do
|
||||
defp get_extensions(libraries, library_version, selected_versions) do
|
||||
libraries
|
||||
|> Enum.filter(fn library ->
|
||||
selected_versions[library.id] && selected_versions[library.id] != ""
|
||||
end)
|
||||
|> Enum.sort_by(& &1.order)
|
||||
|> Enum.flat_map(fn library ->
|
||||
case Enum.find(library.versions, &Ash.Resource.loaded?(&1, :extensions)) do
|
||||
nil ->
|
||||
[]
|
||||
|
||||
version ->
|
||||
|> Enum.map(&{&1.display_name, selected_version(&1, library_version, selected_versions)})
|
||||
|> Enum.filter(&elem(&1, 1))
|
||||
|> Enum.flat_map(fn {name, version} ->
|
||||
case version.extensions do
|
||||
[] ->
|
||||
[]
|
||||
|
||||
%Ash.NotLoaded{} ->
|
||||
raise "extensions not selected for #{version.version} | #{version.id} of #{name}"
|
||||
|
||||
extensions ->
|
||||
[{library.display_name, extensions}]
|
||||
end
|
||||
[{name, extensions}]
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
@last_categories ["Errors"]
|
||||
|
||||
defp modules_by_category(libraries, selected_versions) do
|
||||
libraries =
|
||||
Enum.filter(libraries, fn library ->
|
||||
selected_versions[library.id] && selected_versions[library.id] != ""
|
||||
end)
|
||||
|
||||
defp modules_by_category(libraries, library_version, selected_versions) do
|
||||
libraries
|
||||
|> Enum.flat_map(fn library ->
|
||||
library.versions
|
||||
|> Enum.find(&Ash.Resource.loaded?(&1, :modules))
|
||||
|> case do
|
||||
nil ->
|
||||
[]
|
||||
|
||||
%{modules: modules} ->
|
||||
modules
|
||||
end
|
||||
end)
|
||||
|> Enum.map(&selected_version(&1, library_version, selected_versions))
|
||||
|> Enum.filter(& &1)
|
||||
|> Enum.flat_map(& &1.modules)
|
||||
|> Enum.group_by(fn module ->
|
||||
module.category
|
||||
end)
|
||||
|
@ -336,6 +445,21 @@ defmodule AshHqWeb.Components.DocSidebar do
|
|||
|> Enum.map(fn {category, modules} ->
|
||||
{category, Enum.sort_by(modules, & &1.name)}
|
||||
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)
|
||||
end
|
||||
|
||||
|
|
|
@ -161,6 +161,24 @@ defmodule AshHqWeb.Components.Search do
|
|||
|
||||
defp render_item_type(assigns, 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" ->
|
||||
case item.type do
|
||||
type when type in [:function, :macro] ->
|
||||
|
|
|
@ -10,6 +10,18 @@ defmodule AshHqWeb.DocRoutes do
|
|||
"/docs/dsl/#{name}"
|
||||
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(
|
||||
%AshHq.Docs.Module{
|
||||
sanitized_name: sanitized_name,
|
||||
|
|
|
@ -6,13 +6,18 @@ defmodule AshHqWeb.Helpers do
|
|||
alias AshHqWeb.DocRoutes
|
||||
|
||||
def latest_version(library) do
|
||||
Enum.at(library.versions, 0)
|
||||
library.versions
|
||||
|> Enum.min(&(Version.compare(&1.version, &2.version) != :lt))
|
||||
end
|
||||
|
||||
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}"
|
||||
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
|
||||
if line do
|
||||
"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>"
|
||||
rescue
|
||||
e ->
|
||||
IO.inspect(__STACKTRACE__)
|
||||
|
||||
Logger.error(
|
||||
"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)
|
||||
rescue
|
||||
e ->
|
||||
IO.inspect(__STACKTRACE__)
|
||||
|
||||
Logger.error(
|
||||
"Invalid link #{Exception.format(:error, e)}\n#{Exception.format_stacktrace(__STACKTRACE__)}"
|
||||
)
|
||||
|
|
|
@ -29,6 +29,7 @@ defmodule AshHqWeb.Pages.Docs do
|
|||
data dsl, :any
|
||||
data options, :list, default: []
|
||||
data module, :any
|
||||
data mix_task, :any
|
||||
data positional_options, :list
|
||||
|
||||
@spec render(any) :: Phoenix.LiveView.Rendered.t()
|
||||
|
@ -51,6 +52,7 @@ defmodule AshHqWeb.Pages.Docs do
|
|||
libraries={@libraries}
|
||||
extension={@extension}
|
||||
module={@module}
|
||||
mix_task={@mix_task}
|
||||
guide={@guide}
|
||||
library={@library}
|
||||
library_version={@library_version}
|
||||
|
@ -66,6 +68,7 @@ defmodule AshHqWeb.Pages.Docs do
|
|||
class="hidden xl:block w-80 overflow-x-hidden custom-scrollbar"
|
||||
remove_version={@remove_version}
|
||||
module={@module}
|
||||
mix_task={@mix_task}
|
||||
libraries={@libraries}
|
||||
extension={@extension}
|
||||
guide={@guide}
|
||||
|
@ -87,6 +90,13 @@ defmodule AshHqWeb.Pages.Docs do
|
|||
{#if @module}
|
||||
<h2>{@module.name} <SourceLink module_or_function={@module} library={@library} library_version={@library_version} /></h2>
|
||||
{/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}
|
||||
<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">
|
||||
|
@ -279,11 +289,19 @@ defmodule AshHqWeb.Pages.Docs do
|
|||
end
|
||||
|
||||
def update(assigns, socket) do
|
||||
if (assigns[:selected_versions] == socket.assigns[:selected_versions] &&
|
||||
Map.get(socket.assigns.library_version || %{}, :id) ==
|
||||
Map.get(assigns[:library_version] || %{}, :id)) || !socket.assigns[:loaded_once?] do
|
||||
{:ok,
|
||||
socket
|
||||
|> assign(assigns)
|
||||
|> assign(loaded_once: true)
|
||||
|> load_docs(assigns[:loaded_once] || false)}
|
||||
|> assign(:loaded_once?, false)
|
||||
|> load_docs()}
|
||||
else
|
||||
{:ok,
|
||||
socket
|
||||
|> assign(assigns)}
|
||||
end
|
||||
end
|
||||
|
||||
defp modules_in_scope(nil, _, _, _), do: []
|
||||
|
@ -373,20 +391,9 @@ defmodule AshHqWeb.Pages.Docs do
|
|||
)
|
||||
end
|
||||
|
||||
def load_docs(socket, _loaded_once?) do
|
||||
def load_docs(socket) do
|
||||
socket = assign_library(socket)
|
||||
|
||||
new_libraries =
|
||||
socket.assigns.libraries
|
||||
|> Enum.map(fn library ->
|
||||
Map.update!(library, :versions, fn versions ->
|
||||
latest_version = AshHqWeb.Helpers.latest_version(library)
|
||||
|
||||
Enum.map(versions, fn version ->
|
||||
if (latest_version && version.id == latest_version.id) ||
|
||||
version.id == socket.assigns[:selected_versions][library.id] ||
|
||||
(socket.assigns[:library_version] &&
|
||||
socket.assigns[:library_version].id == version.id) do
|
||||
dsls_query =
|
||||
AshHq.Docs.Dsl
|
||||
|> Ash.Query.sort(order: :asc)
|
||||
|
@ -397,11 +404,6 @@ defmodule AshHqWeb.Pages.Docs do
|
|||
|> Ash.Query.sort(order: :asc)
|
||||
|> load_for_search(socket.assigns[:params]["dsl_path"])
|
||||
|
||||
functions_query =
|
||||
AshHq.Docs.Function
|
||||
|> Ash.Query.sort(name: :asc, arity: :asc)
|
||||
|> load_for_search(socket.assigns[:params]["module"])
|
||||
|
||||
guides_query =
|
||||
AshHq.Docs.Guide
|
||||
|> Ash.Query.new()
|
||||
|
@ -410,25 +412,59 @@ defmodule AshHqWeb.Pages.Docs do
|
|||
modules_query =
|
||||
AshHq.Docs.Module
|
||||
|> Ash.Query.sort(order: :asc)
|
||||
|> Ash.Query.load(functions: functions_query)
|
||||
|> 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"])
|
||||
|
||||
AshHq.Docs.load!(
|
||||
version,
|
||||
[extensions: extensions_query, guides: guides_query, modules: modules_query],
|
||||
new_libraries =
|
||||
socket.assigns.libraries
|
||||
|> Enum.flat_map(fn library ->
|
||||
latest_version = AshHqWeb.Helpers.latest_version(library)
|
||||
|
||||
Enum.filter(library.versions, fn version ->
|
||||
(latest_version && version.id == latest_version.id) ||
|
||||
version.id == socket.assigns[:selected_versions][library.id] ||
|
||||
(socket.assigns[:library_version] &&
|
||||
socket.assigns[:library_version].id == version.id) ||
|
||||
(socket.assigns.params["version"] &&
|
||||
socket.assigns.params["version"] ==
|
||||
version.version)
|
||||
end)
|
||||
end)
|
||||
|> AshHq.Docs.load!(
|
||||
[
|
||||
extensions: extensions_query,
|
||||
guides: guides_query,
|
||||
modules: modules_query,
|
||||
mix_tasks: mix_tasks_query
|
||||
],
|
||||
lazy?: true
|
||||
)
|
||||
|> Enum.reduce(socket.assigns.libraries, fn library_version, libraries ->
|
||||
Enum.map(libraries, fn library ->
|
||||
if library.id == library_version.library_id do
|
||||
Map.update!(library, :versions, fn versions ->
|
||||
Enum.map(versions, fn current_version ->
|
||||
if current_version.id == library_version.id do
|
||||
library_version
|
||||
else
|
||||
version
|
||||
current_version
|
||||
end
|
||||
end)
|
||||
end)
|
||||
else
|
||||
library
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
socket
|
||||
|
@ -437,6 +473,7 @@ defmodule AshHqWeb.Pages.Docs do
|
|||
|> assign_extension()
|
||||
|> assign_guide()
|
||||
|> assign_module()
|
||||
|> assign_mix_task()
|
||||
|> assign_dsl()
|
||||
|> assign_docs()
|
||||
end
|
||||
|
@ -604,14 +641,36 @@ defmodule AshHqWeb.Pages.Docs do
|
|||
&(&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,
|
||||
module: module
|
||||
module: AshHq.Docs.load!(module, [functions: functions_query], lazy?: true)
|
||||
)
|
||||
else
|
||||
assign(socket, :module, nil)
|
||||
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
|
||||
cond do
|
||||
socket.assigns.module ->
|
||||
|
@ -621,6 +680,13 @@ defmodule AshHqWeb.Pages.Docs do
|
|||
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 ->
|
||||
assign(socket,
|
||||
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/*dsl_path", 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
|
||||
end
|
||||
|
|
|
@ -56,7 +56,6 @@ defmodule AshHqWeb.AppViewLive do
|
|||
/>
|
||||
<CatalogueModal
|
||||
id="catalogue-box"
|
||||
close={close_catalogue()}
|
||||
libraries={@libraries}
|
||||
selected_versions={@selected_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.
|
||||
defp deps do
|
||||
[
|
||||
{:ash, github: "ash-project/ash", override: true},
|
||||
# {:ash, github: "ash-project/ash", override: true},
|
||||
# {: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, github: "ash-project/ash_postgres"},
|
||||
|
@ -95,7 +95,8 @@ defmodule AshHq.MixProject do
|
|||
{:credo, ">= 0.0.0", only: :dev, runtime: false},
|
||||
{:dialyxir, ">= 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
|
||||
|
||||
|
|
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_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_graphql": {:git, "https://github.com/ash-project/ash_graphql.git", "d859026ddb11b2d359cab29641257aeed303743b", []},
|
||||
"ash": {:git, "https://github.com/ash-project/ash.git", "37a5fdc89b182e2842f90d5468a161f32da813e9", []},
|
||||
"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_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"},
|
||||
"bunt": {:hex, :bunt, "0.2.1", "e2d4792f7bc0ced7583ab54922808919518d0e57ee162901a16a1b6664ef3b14", [:mix], [], "hexpm", "a330bfb4245239787b15005e66ae6845c9cd524a288f0d141c148b02603777a5"},
|
||||
"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_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"},
|
||||
"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_sense": {:git, "https://github.com/elixir-lsp/elixir_sense.git", "12bdf7ac9971a9f1cb278b66364f912d63af4c0f", []},
|
||||
"erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
|
||||
|
|
|
@ -9,63 +9,67 @@ defmodule AshHq.Repo.Migrations.MigrateResources1 do
|
|||
|
||||
def up do
|
||||
create table(:options, primary_key: false) do
|
||||
add :id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true
|
||||
add :name, :text, null: false
|
||||
add :type, :text, null: false
|
||||
add :doc, :text, null: false, default: ""
|
||||
add :doc_html, :text
|
||||
add :required, :boolean, null: false, default: false
|
||||
add :default, :text
|
||||
add :path, {:array, :text}
|
||||
add :order, :bigint, null: false
|
||||
add :dsl_id, :uuid, null: false
|
||||
add :library_version_id, :uuid, null: false
|
||||
add :extension_id, :uuid, null: false
|
||||
add(:id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true)
|
||||
add(:name, :text, null: false)
|
||||
add(:type, :text, null: false)
|
||||
add(:doc, :text, null: false, default: "")
|
||||
add(:doc_html, :text)
|
||||
add(:required, :boolean, null: false, default: false)
|
||||
add(:default, :text)
|
||||
add(:path, {:array, :text})
|
||||
add(:order, :bigint, null: false)
|
||||
add(:dsl_id, :uuid, null: false)
|
||||
add(:library_version_id, :uuid, null: false)
|
||||
add(:extension_id, :uuid, null: false)
|
||||
end
|
||||
|
||||
create table(:modules, primary_key: false) do
|
||||
add :id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true
|
||||
add :name, :text, null: false
|
||||
add :doc, :text, null: false, default: ""
|
||||
add :doc_html, :text
|
||||
add :order, :bigint, null: false
|
||||
add :library_version_id, :uuid, null: false
|
||||
add :extension_id, :uuid, null: false
|
||||
add(:id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true)
|
||||
add(:name, :text, null: false)
|
||||
add(:doc, :text, null: false, default: "")
|
||||
add(:doc_html, :text)
|
||||
add(:order, :bigint, null: false)
|
||||
add(:library_version_id, :uuid, null: false)
|
||||
add(:extension_id, :uuid, null: false)
|
||||
end
|
||||
|
||||
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
|
||||
|
||||
alter table(:modules) do
|
||||
modify :library_version_id,
|
||||
modify(
|
||||
:library_version_id,
|
||||
references(:library_versions,
|
||||
column: :id,
|
||||
name: "modules_library_version_id_fkey",
|
||||
type: :uuid
|
||||
)
|
||||
)
|
||||
end
|
||||
|
||||
alter table(:library_versions) do
|
||||
add :version, :text, null: false
|
||||
add :data, :map
|
||||
add :doc, :text, null: false, default: ""
|
||||
add :doc_html, :text
|
||||
add :processed, :boolean, default: false
|
||||
add :library_id, :uuid, null: false
|
||||
add(:version, :text, null: false)
|
||||
add(:data, :map)
|
||||
add(:doc, :text, null: false, default: "")
|
||||
add(:doc_html, :text)
|
||||
add(:processed, :boolean, default: false)
|
||||
add(:library_id, :uuid, null: false)
|
||||
end
|
||||
|
||||
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
|
||||
|
||||
alter table(:library_versions) do
|
||||
modify :library_id,
|
||||
modify(
|
||||
:library_id,
|
||||
references(:libraries,
|
||||
column: :id,
|
||||
name: "library_versions_library_id_fkey",
|
||||
type: :uuid
|
||||
)
|
||||
)
|
||||
end
|
||||
|
||||
create unique_index(:library_versions, [:library_id, :version],
|
||||
|
@ -73,84 +77,96 @@ defmodule AshHq.Repo.Migrations.MigrateResources1 do
|
|||
)
|
||||
|
||||
alter table(:libraries) do
|
||||
add :name, :text, null: false
|
||||
add :display_name, :text, null: false
|
||||
add :track_branches, {:array, :text}, default: []
|
||||
add(:name, :text, null: false)
|
||||
add(:display_name, :text, null: false)
|
||||
add(:track_branches, {:array, :text}, default: [])
|
||||
end
|
||||
|
||||
create table(:guides, primary_key: false) do
|
||||
add :id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true
|
||||
add :order, :bigint, null: false
|
||||
add :name, :text, null: false
|
||||
add :text, :text, null: false, default: ""
|
||||
add :text_html, :text
|
||||
add(:id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true)
|
||||
add(:order, :bigint, null: false)
|
||||
add(:name, :text, null: false)
|
||||
add(:text, :text, null: false, default: "")
|
||||
add(:text_html, :text)
|
||||
|
||||
add :library_version_id,
|
||||
add(
|
||||
:library_version_id,
|
||||
references(:library_versions,
|
||||
column: :id,
|
||||
name: "guides_library_version_id_fkey",
|
||||
type: :uuid
|
||||
),
|
||||
null: false
|
||||
)
|
||||
end
|
||||
|
||||
create table(:functions, primary_key: false) do
|
||||
add :id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true
|
||||
add :name, :text, null: false
|
||||
add :arity, :bigint, null: false
|
||||
add :type, :text, null: false
|
||||
add :heads, {:array, :text}, default: []
|
||||
add :doc, :text, null: false, default: ""
|
||||
add :doc_html, :text
|
||||
add :order, :bigint, null: false
|
||||
add(:id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true)
|
||||
add(:name, :text, null: false)
|
||||
add(:arity, :bigint, null: false)
|
||||
add(:type, :text, null: false)
|
||||
add(:heads, {:array, :text}, default: [])
|
||||
add(:doc, :text, null: false, default: "")
|
||||
add(:doc_html, :text)
|
||||
add(:order, :bigint, null: false)
|
||||
|
||||
add :library_version_id,
|
||||
add(
|
||||
:library_version_id,
|
||||
references(:library_versions,
|
||||
column: :id,
|
||||
name: "functions_library_version_id_fkey",
|
||||
type: :uuid
|
||||
),
|
||||
null: false
|
||||
)
|
||||
|
||||
add :extension_id, :uuid, null: false
|
||||
add :module_id, :uuid, null: false
|
||||
add(:extension_id, :uuid, null: false)
|
||||
add(:module_id, :uuid, null: false)
|
||||
end
|
||||
|
||||
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
|
||||
|
||||
alter table(:modules) do
|
||||
modify :extension_id,
|
||||
modify(
|
||||
:extension_id,
|
||||
references(:extensions, column: :id, name: "modules_extension_id_fkey", type: :uuid)
|
||||
)
|
||||
end
|
||||
|
||||
alter table(:functions) do
|
||||
modify :extension_id,
|
||||
modify(
|
||||
:extension_id,
|
||||
references(:extensions, column: :id, name: "functions_extension_id_fkey", type: :uuid)
|
||||
)
|
||||
end
|
||||
|
||||
alter table(:functions) do
|
||||
modify :module_id,
|
||||
modify(
|
||||
:module_id,
|
||||
references(:modules, column: :id, name: "functions_module_id_fkey", type: :uuid)
|
||||
)
|
||||
end
|
||||
|
||||
alter table(:extensions) do
|
||||
add :name, :text, null: false
|
||||
add :target, :text
|
||||
add :default_for_target, :boolean, default: false
|
||||
add :doc, :text, null: false, default: ""
|
||||
add :doc_html, :text
|
||||
add :type, :text, null: false
|
||||
add :order, :bigint, null: false
|
||||
add(:name, :text, null: false)
|
||||
add(:target, :text)
|
||||
add(:default_for_target, :boolean, default: false)
|
||||
add(:doc, :text, null: false, default: "")
|
||||
add(:doc_html, :text)
|
||||
add(:type, :text, null: false)
|
||||
add(:order, :bigint, null: false)
|
||||
|
||||
add :library_version_id,
|
||||
add(
|
||||
:library_version_id,
|
||||
references(:library_versions,
|
||||
column: :id,
|
||||
name: "extensions_library_version_id_fkey",
|
||||
type: :uuid
|
||||
),
|
||||
null: false
|
||||
)
|
||||
end
|
||||
|
||||
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
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
alter table(:options) do
|
||||
modify :library_version_id,
|
||||
modify(
|
||||
:library_version_id,
|
||||
references(:library_versions,
|
||||
column: :id,
|
||||
name: "options_library_version_id_fkey",
|
||||
type: :uuid
|
||||
)
|
||||
)
|
||||
end
|
||||
|
||||
alter table(:options) do
|
||||
modify :extension_id,
|
||||
modify(
|
||||
:extension_id,
|
||||
references(:extensions, column: :id, name: "options_extension_id_fkey", type: :uuid)
|
||||
)
|
||||
end
|
||||
|
||||
alter table(:dsls) do
|
||||
add :name, :text, null: false
|
||||
add :doc, :text, null: false, default: ""
|
||||
add :doc_html, :text
|
||||
add :examples, {:array, :text}
|
||||
add :args, {:array, :text}
|
||||
add :path, {:array, :text}
|
||||
add :recursive_as, :text
|
||||
add :order, :bigint, null: false
|
||||
add :type, :text, null: false
|
||||
add(:name, :text, null: false)
|
||||
add(:doc, :text, null: false, default: "")
|
||||
add(:doc_html, :text)
|
||||
add(:examples, {:array, :text})
|
||||
add(:args, {:array, :text})
|
||||
add(:path, {:array, :text})
|
||||
add(:recursive_as, :text)
|
||||
add(:order, :bigint, null: false)
|
||||
add(:type, :text, null: false)
|
||||
|
||||
add :library_version_id,
|
||||
add(
|
||||
:library_version_id,
|
||||
references(:library_versions,
|
||||
column: :id,
|
||||
name: "dsls_library_version_id_fkey",
|
||||
type: :uuid
|
||||
),
|
||||
null: false
|
||||
)
|
||||
|
||||
add :extension_id,
|
||||
add(
|
||||
:extension_id,
|
||||
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
|
||||
|
||||
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
|
||||
remove :dsl_id
|
||||
remove :extension_id
|
||||
remove :library_version_id
|
||||
remove :type
|
||||
remove :order
|
||||
remove :recursive_as
|
||||
remove :path
|
||||
remove :args
|
||||
remove :examples
|
||||
remove :doc_html
|
||||
remove :doc
|
||||
remove :name
|
||||
remove(:dsl_id)
|
||||
remove(:extension_id)
|
||||
remove(:library_version_id)
|
||||
remove(:type)
|
||||
remove(:order)
|
||||
remove(:recursive_as)
|
||||
remove(:path)
|
||||
remove(:args)
|
||||
remove(:examples)
|
||||
remove(:doc_html)
|
||||
remove(:doc)
|
||||
remove(:name)
|
||||
end
|
||||
|
||||
drop constraint(:options, "options_extension_id_fkey")
|
||||
drop(constraint(:options, "options_extension_id_fkey"))
|
||||
|
||||
alter table(:options) do
|
||||
modify :extension_id, :uuid
|
||||
modify(:extension_id, :uuid)
|
||||
end
|
||||
|
||||
drop constraint(:options, "options_library_version_id_fkey")
|
||||
drop(constraint(:options, "options_library_version_id_fkey"))
|
||||
|
||||
alter table(:options) do
|
||||
modify :library_version_id, :uuid
|
||||
modify(:library_version_id, :uuid)
|
||||
end
|
||||
|
||||
drop constraint(:options, "options_dsl_id_fkey")
|
||||
drop(constraint(:options, "options_dsl_id_fkey"))
|
||||
|
||||
alter table(:options) do
|
||||
modify :dsl_id, :uuid
|
||||
modify(:dsl_id, :uuid)
|
||||
end
|
||||
|
||||
drop table(:dsls)
|
||||
drop(table(:dsls))
|
||||
|
||||
drop_if_exists unique_index(:extensions, [:library_version_id, :name],
|
||||
drop_if_exists(
|
||||
unique_index(:extensions, [:library_version_id, :name],
|
||||
name: "extensions_unique_name_by_library_version_index"
|
||||
)
|
||||
|
||||
drop constraint(:extensions, "extensions_library_version_id_fkey")
|
||||
|
||||
alter table(:extensions) do
|
||||
remove :library_version_id
|
||||
remove :order
|
||||
remove :type
|
||||
remove :doc_html
|
||||
remove :doc
|
||||
remove :default_for_target
|
||||
remove :target
|
||||
remove :name
|
||||
end
|
||||
|
||||
drop constraint(:functions, "functions_module_id_fkey")
|
||||
|
||||
alter table(:functions) do
|
||||
modify :module_id, :uuid
|
||||
end
|
||||
|
||||
drop constraint(:functions, "functions_extension_id_fkey")
|
||||
|
||||
alter table(:functions) do
|
||||
modify :extension_id, :uuid
|
||||
end
|
||||
|
||||
drop constraint(:modules, "modules_extension_id_fkey")
|
||||
|
||||
alter table(:modules) do
|
||||
modify :extension_id, :uuid
|
||||
end
|
||||
|
||||
drop table(:extensions)
|
||||
|
||||
drop constraint(:functions, "functions_library_version_id_fkey")
|
||||
|
||||
drop table(:functions)
|
||||
|
||||
drop constraint(:guides, "guides_library_version_id_fkey")
|
||||
|
||||
drop table(:guides)
|
||||
|
||||
alter table(:libraries) do
|
||||
remove :track_branches
|
||||
remove :display_name
|
||||
remove :name
|
||||
end
|
||||
|
||||
drop_if_exists 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(:extensions, "extensions_library_version_id_fkey"))
|
||||
|
||||
alter table(:library_versions) do
|
||||
modify :library_id, :uuid
|
||||
alter table(:extensions) do
|
||||
remove(:library_version_id)
|
||||
remove(:order)
|
||||
remove(:type)
|
||||
remove(:doc_html)
|
||||
remove(:doc)
|
||||
remove(:default_for_target)
|
||||
remove(:target)
|
||||
remove(:name)
|
||||
end
|
||||
|
||||
drop table(:libraries)
|
||||
drop(constraint(:functions, "functions_module_id_fkey"))
|
||||
|
||||
alter table(:library_versions) do
|
||||
remove :library_id
|
||||
remove :processed
|
||||
remove :doc_html
|
||||
remove :doc
|
||||
remove :data
|
||||
remove :version
|
||||
alter table(:functions) do
|
||||
modify(:module_id, :uuid)
|
||||
end
|
||||
|
||||
drop constraint(:modules, "modules_library_version_id_fkey")
|
||||
drop(constraint(:functions, "functions_extension_id_fkey"))
|
||||
|
||||
alter table(:functions) do
|
||||
modify(:extension_id, :uuid)
|
||||
end
|
||||
|
||||
drop(constraint(:modules, "modules_extension_id_fkey"))
|
||||
|
||||
alter table(:modules) do
|
||||
modify :library_version_id, :uuid
|
||||
modify(:extension_id, :uuid)
|
||||
end
|
||||
|
||||
drop table(:library_versions)
|
||||
drop(table(:extensions))
|
||||
|
||||
drop table(:modules)
|
||||
drop(constraint(:functions, "functions_library_version_id_fkey"))
|
||||
|
||||
drop table(:options)
|
||||
drop(table(:functions))
|
||||
|
||||
drop(constraint(:guides, "guides_library_version_id_fkey"))
|
||||
|
||||
drop(table(:guides))
|
||||
|
||||
alter table(:libraries) do
|
||||
remove(:track_branches)
|
||||
remove(:display_name)
|
||||
remove(:name)
|
||||
end
|
||||
|
||||
drop_if_exists(
|
||||
unique_index(:library_versions, [:library_id, :version],
|
||||
name: "library_versions_unique_version_for_library_index"
|
||||
)
|
||||
)
|
||||
|
||||
drop(constraint(:library_versions, "library_versions_library_id_fkey"))
|
||||
|
||||
alter table(:library_versions) do
|
||||
modify(:library_id, :uuid)
|
||||
end
|
||||
|
||||
drop(table(:libraries))
|
||||
|
||||
alter table(:library_versions) do
|
||||
remove(:library_id)
|
||||
remove(:processed)
|
||||
remove(:doc_html)
|
||||
remove(:doc)
|
||||
remove(:data)
|
||||
remove(:version)
|
||||
end
|
||||
|
||||
drop(constraint(:modules, "modules_library_version_id_fkey"))
|
||||
|
||||
alter table(:modules) do
|
||||
modify(:library_version_id, :uuid)
|
||||
end
|
||||
|
||||
drop(table(:library_versions))
|
||||
|
||||
drop(table(:modules))
|
||||
|
||||
drop(table(:options))
|
||||
end
|
||||
end
|
|
@ -13,7 +13,8 @@ defmodule AshHq.Repo.Migrations.AddTsvectorIndices do
|
|||
|
||||
def change do
|
||||
for {table, {header, text}} <- @config do
|
||||
execute """
|
||||
execute(
|
||||
"""
|
||||
CREATE INDEX #{table}_search_index ON #{table} USING GIN((
|
||||
setweight(to_tsvector('english', #{header}), 'A') ||
|
||||
setweight(to_tsvector('english', #{text}), 'D')
|
||||
|
@ -22,6 +23,7 @@ defmodule AshHq.Repo.Migrations.AddTsvectorIndices do
|
|||
"""
|
||||
DROP INDEX #{table}_search_index
|
||||
"""
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -9,20 +9,29 @@ defmodule AshHq.Repo.Migrations.MigrateResources2 do
|
|||
|
||||
def up do
|
||||
alter table(:modules) do
|
||||
remove :extension_id
|
||||
remove(:extension_id)
|
||||
end
|
||||
|
||||
alter table(:functions) do
|
||||
remove :extension_id
|
||||
remove(:extension_id)
|
||||
end
|
||||
end
|
||||
|
||||
def down 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
|
||||
|
||||
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
|
||||
|
|
|
@ -8,144 +8,168 @@ defmodule AshHq.Repo.Migrations.MigrateResources3 do
|
|||
use Ecto.Migration
|
||||
|
||||
def up do
|
||||
drop constraint(:options, "options_library_version_id_fkey")
|
||||
drop(constraint(:options, "options_library_version_id_fkey"))
|
||||
|
||||
alter table(:options) do
|
||||
modify :library_version_id,
|
||||
modify(
|
||||
:library_version_id,
|
||||
references(:library_versions,
|
||||
column: :id,
|
||||
name: "options_library_version_id_fkey",
|
||||
type: :uuid,
|
||||
on_delete: :delete_all
|
||||
)
|
||||
)
|
||||
end
|
||||
|
||||
drop constraint(:modules, "modules_library_version_id_fkey")
|
||||
drop(constraint(:modules, "modules_library_version_id_fkey"))
|
||||
|
||||
alter table(:modules) do
|
||||
modify :library_version_id,
|
||||
modify(
|
||||
:library_version_id,
|
||||
references(:library_versions,
|
||||
column: :id,
|
||||
name: "modules_library_version_id_fkey",
|
||||
type: :uuid,
|
||||
on_delete: :delete_all
|
||||
)
|
||||
)
|
||||
end
|
||||
|
||||
drop constraint(:guides, "guides_library_version_id_fkey")
|
||||
drop(constraint(:guides, "guides_library_version_id_fkey"))
|
||||
|
||||
alter table(:guides) do
|
||||
modify :library_version_id,
|
||||
modify(
|
||||
:library_version_id,
|
||||
references(:library_versions,
|
||||
column: :id,
|
||||
name: "guides_library_version_id_fkey",
|
||||
type: :uuid,
|
||||
on_delete: :delete_all
|
||||
)
|
||||
)
|
||||
end
|
||||
|
||||
drop constraint(:functions, "functions_library_version_id_fkey")
|
||||
drop(constraint(:functions, "functions_library_version_id_fkey"))
|
||||
|
||||
alter table(:functions) do
|
||||
modify :library_version_id,
|
||||
modify(
|
||||
:library_version_id,
|
||||
references(:library_versions,
|
||||
column: :id,
|
||||
name: "functions_library_version_id_fkey",
|
||||
type: :uuid,
|
||||
on_delete: :delete_all
|
||||
)
|
||||
)
|
||||
end
|
||||
|
||||
drop constraint(:extensions, "extensions_library_version_id_fkey")
|
||||
drop(constraint(:extensions, "extensions_library_version_id_fkey"))
|
||||
|
||||
alter table(:extensions) do
|
||||
modify :library_version_id,
|
||||
modify(
|
||||
:library_version_id,
|
||||
references(:library_versions,
|
||||
column: :id,
|
||||
name: "extensions_library_version_id_fkey",
|
||||
type: :uuid,
|
||||
on_delete: :delete_all
|
||||
)
|
||||
)
|
||||
end
|
||||
|
||||
drop constraint(:dsls, "dsls_library_version_id_fkey")
|
||||
drop(constraint(:dsls, "dsls_library_version_id_fkey"))
|
||||
|
||||
alter table(:dsls) do
|
||||
modify :library_version_id,
|
||||
modify(
|
||||
:library_version_id,
|
||||
references(:library_versions,
|
||||
column: :id,
|
||||
name: "dsls_library_version_id_fkey",
|
||||
type: :uuid,
|
||||
on_delete: :delete_all
|
||||
)
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
def down do
|
||||
drop constraint(:dsls, "dsls_library_version_id_fkey")
|
||||
drop(constraint(:dsls, "dsls_library_version_id_fkey"))
|
||||
|
||||
alter table(:dsls) do
|
||||
modify :library_version_id,
|
||||
modify(
|
||||
:library_version_id,
|
||||
references(:library_versions,
|
||||
column: :id,
|
||||
name: "dsls_library_version_id_fkey",
|
||||
type: :uuid
|
||||
)
|
||||
)
|
||||
end
|
||||
|
||||
drop constraint(:extensions, "extensions_library_version_id_fkey")
|
||||
drop(constraint(:extensions, "extensions_library_version_id_fkey"))
|
||||
|
||||
alter table(:extensions) do
|
||||
modify :library_version_id,
|
||||
modify(
|
||||
:library_version_id,
|
||||
references(:library_versions,
|
||||
column: :id,
|
||||
name: "extensions_library_version_id_fkey",
|
||||
type: :uuid
|
||||
)
|
||||
)
|
||||
end
|
||||
|
||||
drop constraint(:functions, "functions_library_version_id_fkey")
|
||||
drop(constraint(:functions, "functions_library_version_id_fkey"))
|
||||
|
||||
alter table(:functions) do
|
||||
modify :library_version_id,
|
||||
modify(
|
||||
:library_version_id,
|
||||
references(:library_versions,
|
||||
column: :id,
|
||||
name: "functions_library_version_id_fkey",
|
||||
type: :uuid
|
||||
)
|
||||
)
|
||||
end
|
||||
|
||||
drop constraint(:guides, "guides_library_version_id_fkey")
|
||||
drop(constraint(:guides, "guides_library_version_id_fkey"))
|
||||
|
||||
alter table(:guides) do
|
||||
modify :library_version_id,
|
||||
modify(
|
||||
:library_version_id,
|
||||
references(:library_versions,
|
||||
column: :id,
|
||||
name: "guides_library_version_id_fkey",
|
||||
type: :uuid
|
||||
)
|
||||
)
|
||||
end
|
||||
|
||||
drop constraint(:modules, "modules_library_version_id_fkey")
|
||||
drop(constraint(:modules, "modules_library_version_id_fkey"))
|
||||
|
||||
alter table(:modules) do
|
||||
modify :library_version_id,
|
||||
modify(
|
||||
:library_version_id,
|
||||
references(:library_versions,
|
||||
column: :id,
|
||||
name: "modules_library_version_id_fkey",
|
||||
type: :uuid
|
||||
)
|
||||
)
|
||||
end
|
||||
|
||||
drop constraint(:options, "options_library_version_id_fkey")
|
||||
drop(constraint(:options, "options_library_version_id_fkey"))
|
||||
|
||||
alter table(:options) do
|
||||
modify :library_version_id,
|
||||
modify(
|
||||
:library_version_id,
|
||||
references(:library_versions,
|
||||
column: :id,
|
||||
name: "options_library_version_id_fkey",
|
||||
type: :uuid
|
||||
)
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -9,15 +9,15 @@ defmodule AshHq.Repo.Migrations.MigrateResources4 do
|
|||
|
||||
def up do
|
||||
alter table(:guides) do
|
||||
add :category, :text, default: "Guides"
|
||||
add :route, :text, null: false
|
||||
add(:category, :text, default: "Guides")
|
||||
add(:route, :text, null: false)
|
||||
end
|
||||
end
|
||||
|
||||
def down do
|
||||
alter table(:guides) do
|
||||
remove :route
|
||||
remove :category
|
||||
remove(:route)
|
||||
remove(:category)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -9,21 +9,21 @@ defmodule AshHq.Repo.Migrations.MigrateResources5 do
|
|||
|
||||
def up do
|
||||
alter table(:libraries) do
|
||||
add :description, :text
|
||||
add(:description, :text)
|
||||
end
|
||||
|
||||
alter table(:guides) do
|
||||
modify :category, :text, null: false
|
||||
modify(:category, :text, null: false)
|
||||
end
|
||||
end
|
||||
|
||||
def down do
|
||||
alter table(:guides) do
|
||||
modify :category, :text, null: true
|
||||
modify(:category, :text, null: true)
|
||||
end
|
||||
|
||||
alter table(:libraries) do
|
||||
remove :description
|
||||
remove(:description)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -9,34 +9,34 @@ defmodule AshHq.Repo.Migrations.MigrateResources6 do
|
|||
|
||||
def up do
|
||||
alter table(:library_versions) do
|
||||
remove :processed
|
||||
remove :data
|
||||
remove(:processed)
|
||||
remove(:data)
|
||||
end
|
||||
|
||||
alter table(:libraries) do
|
||||
remove :description
|
||||
remove(:description)
|
||||
|
||||
modify :track_branches, {:array, :text}, default: nil
|
||||
modify(:track_branches, {:array, :text}, default: nil)
|
||||
end
|
||||
|
||||
alter table(:functions) do
|
||||
modify :heads, {:array, :text}, default: nil
|
||||
modify(:heads, {:array, :text}, default: nil)
|
||||
end
|
||||
end
|
||||
|
||||
def down do
|
||||
alter table(:functions) do
|
||||
modify :heads, {:array, :text}, default: []
|
||||
modify(:heads, {:array, :text}, default: [])
|
||||
end
|
||||
|
||||
alter table(:libraries) do
|
||||
modify :track_branches, {:array, :text}, default: []
|
||||
add :description, :text
|
||||
modify(:track_branches, {:array, :text}, default: [])
|
||||
add(:description, :text)
|
||||
end
|
||||
|
||||
alter table(:library_versions) do
|
||||
add :data, :map
|
||||
add :processed, :boolean, default: false
|
||||
add(:data, :map)
|
||||
add(:processed, :boolean, default: false)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -9,13 +9,13 @@ defmodule AshHq.Repo.Migrations.MigrateResources7 do
|
|||
|
||||
def up do
|
||||
alter table(:modules) do
|
||||
add :category, :text, null: false, default: "Misc"
|
||||
add(:category, :text, null: false, default: "Misc")
|
||||
end
|
||||
end
|
||||
|
||||
def down do
|
||||
alter table(:modules) do
|
||||
remove :category
|
||||
remove(:category)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -9,13 +9,13 @@ defmodule AshHq.Repo.Migrations.MigrateResources8 do
|
|||
|
||||
def up do
|
||||
alter table(:modules) do
|
||||
add :category_index, :bigint, null: false, default: 0
|
||||
add(:category_index, :bigint, null: false, default: 0)
|
||||
end
|
||||
end
|
||||
|
||||
def down do
|
||||
alter table(:modules) do
|
||||
remove :category_index
|
||||
remove(:category_index)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -9,49 +9,49 @@ defmodule AshHq.Repo.Migrations.MigrateResources9 do
|
|||
|
||||
def up do
|
||||
alter table(:options) do
|
||||
add :argument_index, :bigint
|
||||
add(:argument_index, :bigint)
|
||||
end
|
||||
|
||||
alter table(:modules) do
|
||||
add :file, :text
|
||||
add(:file, :text)
|
||||
end
|
||||
|
||||
alter table(:guides) do
|
||||
modify :category, :text, default: "Topics"
|
||||
modify(:category, :text, default: "Topics")
|
||||
end
|
||||
|
||||
alter table(:functions) do
|
||||
add :file, :text
|
||||
add :line, :bigint
|
||||
add(:file, :text)
|
||||
add(:line, :bigint)
|
||||
end
|
||||
|
||||
alter table(:dsls) do
|
||||
add :imports, {:array, :text}
|
||||
add :links, :map
|
||||
add(:imports, {:array, :text})
|
||||
add(:links, :map)
|
||||
end
|
||||
end
|
||||
|
||||
def down do
|
||||
alter table(:dsls) do
|
||||
remove :links
|
||||
remove :imports
|
||||
remove(:links)
|
||||
remove(:imports)
|
||||
end
|
||||
|
||||
alter table(:functions) do
|
||||
remove :line
|
||||
remove :file
|
||||
remove(:line)
|
||||
remove(:file)
|
||||
end
|
||||
|
||||
alter table(:guides) do
|
||||
modify :category, :text, default: "Guides"
|
||||
modify(:category, :text, default: "Guides")
|
||||
end
|
||||
|
||||
alter table(:modules) do
|
||||
remove :file
|
||||
remove(:file)
|
||||
end
|
||||
|
||||
alter table(:options) do
|
||||
remove :argument_index
|
||||
remove(:argument_index)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -9,15 +9,15 @@ defmodule AshHq.Repo.Migrations.MigrateResources10 do
|
|||
|
||||
def up do
|
||||
alter table(:library_versions) do
|
||||
remove :doc_html
|
||||
remove :doc
|
||||
remove(:doc_html)
|
||||
remove(:doc)
|
||||
end
|
||||
end
|
||||
|
||||
def down do
|
||||
alter table(:library_versions) do
|
||||
add :doc, :text, null: false, default: ""
|
||||
add :doc_html, :text
|
||||
add(:doc, :text, null: false, default: "")
|
||||
add(:doc_html, :text)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -9,13 +9,13 @@ defmodule AshHq.Repo.Migrations.MigrateResources11 do
|
|||
|
||||
def up do
|
||||
alter table(:library_versions) do
|
||||
add :default_guide, :text, null: false
|
||||
add(:default_guide, :text, null: false)
|
||||
end
|
||||
end
|
||||
|
||||
def down do
|
||||
alter table(:library_versions) do
|
||||
remove :default_guide
|
||||
remove(:default_guide)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -9,13 +9,13 @@ defmodule AshHq.Repo.Migrations.MigrateResources12 do
|
|||
|
||||
def up do
|
||||
alter table(:library_versions) do
|
||||
modify :default_guide, :text, null: true
|
||||
modify(:default_guide, :text, null: true)
|
||||
end
|
||||
end
|
||||
|
||||
def down do
|
||||
alter table(:library_versions) do
|
||||
modify :default_guide, :text, null: false
|
||||
modify(:default_guide, :text, null: false)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -9,7 +9,7 @@ defmodule AshHq.Repo.Migrations.MigrateResources13 do
|
|||
|
||||
def up do
|
||||
alter table(:options) do
|
||||
add :links, :map
|
||||
add(:links, :map)
|
||||
end
|
||||
|
||||
execute("""
|
||||
|
@ -203,7 +203,7 @@ defmodule AshHq.Repo.Migrations.MigrateResources13 do
|
|||
""")
|
||||
|
||||
alter table(:options) do
|
||||
remove :links
|
||||
remove(:links)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -9,61 +9,61 @@ defmodule AshHq.Repo.Migrations.MigrateResources14 do
|
|||
|
||||
def up do
|
||||
alter table(:options) do
|
||||
add :sanitized_name, :text
|
||||
add(:sanitized_name, :text)
|
||||
end
|
||||
|
||||
alter table(:modules) do
|
||||
add :sanitized_name, :text
|
||||
add(:sanitized_name, :text)
|
||||
end
|
||||
|
||||
alter table(:library_versions) do
|
||||
add :sanitized_version, :text
|
||||
add(:sanitized_version, :text)
|
||||
end
|
||||
|
||||
alter table(:guides) do
|
||||
add :sanitized_name, :text
|
||||
add(:sanitized_name, :text)
|
||||
end
|
||||
|
||||
alter table(:functions) do
|
||||
add :sanitized_name, :text
|
||||
add(:sanitized_name, :text)
|
||||
end
|
||||
|
||||
alter table(:extensions) do
|
||||
add :sanitized_name, :text
|
||||
add(:sanitized_name, :text)
|
||||
end
|
||||
|
||||
alter table(:dsls) do
|
||||
add :sanitized_name, :text
|
||||
add(:sanitized_name, :text)
|
||||
end
|
||||
end
|
||||
|
||||
def down do
|
||||
alter table(:dsls) do
|
||||
remove :sanitized_name
|
||||
remove(:sanitized_name)
|
||||
end
|
||||
|
||||
alter table(:extensions) do
|
||||
remove :sanitized_name
|
||||
remove(:sanitized_name)
|
||||
end
|
||||
|
||||
alter table(:functions) do
|
||||
remove :sanitized_name
|
||||
remove(:sanitized_name)
|
||||
end
|
||||
|
||||
alter table(:guides) do
|
||||
remove :sanitized_name
|
||||
remove(:sanitized_name)
|
||||
end
|
||||
|
||||
alter table(:library_versions) do
|
||||
remove :sanitized_version
|
||||
remove(:sanitized_version)
|
||||
end
|
||||
|
||||
alter table(:modules) do
|
||||
remove :sanitized_name
|
||||
remove(:sanitized_name)
|
||||
end
|
||||
|
||||
alter table(:options) do
|
||||
remove :sanitized_name
|
||||
remove(:sanitized_name)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -9,61 +9,61 @@ defmodule AshHq.Repo.Migrations.MigrateResources15 do
|
|||
|
||||
def up do
|
||||
alter table(:options) do
|
||||
modify :sanitized_name, :text, null: false
|
||||
modify(:sanitized_name, :text, null: false)
|
||||
end
|
||||
|
||||
alter table(:modules) do
|
||||
modify :sanitized_name, :text, null: false
|
||||
modify(:sanitized_name, :text, null: false)
|
||||
end
|
||||
|
||||
alter table(:library_versions) do
|
||||
modify :sanitized_version, :text, null: false
|
||||
modify(:sanitized_version, :text, null: false)
|
||||
end
|
||||
|
||||
alter table(:guides) do
|
||||
modify :sanitized_name, :text, null: false
|
||||
modify(:sanitized_name, :text, null: false)
|
||||
end
|
||||
|
||||
alter table(:functions) do
|
||||
modify :sanitized_name, :text, null: false
|
||||
modify(:sanitized_name, :text, null: false)
|
||||
end
|
||||
|
||||
alter table(:extensions) do
|
||||
modify :sanitized_name, :text, null: false
|
||||
modify(:sanitized_name, :text, null: false)
|
||||
end
|
||||
|
||||
alter table(:dsls) do
|
||||
modify :sanitized_name, :text, null: false
|
||||
modify(:sanitized_name, :text, null: false)
|
||||
end
|
||||
end
|
||||
|
||||
def down do
|
||||
alter table(:dsls) do
|
||||
modify :sanitized_name, :text, null: true
|
||||
modify(:sanitized_name, :text, null: true)
|
||||
end
|
||||
|
||||
alter table(:extensions) do
|
||||
modify :sanitized_name, :text, null: true
|
||||
modify(:sanitized_name, :text, null: true)
|
||||
end
|
||||
|
||||
alter table(:functions) do
|
||||
modify :sanitized_name, :text, null: true
|
||||
modify(:sanitized_name, :text, null: true)
|
||||
end
|
||||
|
||||
alter table(:guides) do
|
||||
modify :sanitized_name, :text, null: true
|
||||
modify(:sanitized_name, :text, null: true)
|
||||
end
|
||||
|
||||
alter table(:library_versions) do
|
||||
modify :sanitized_version, :text, null: true
|
||||
modify(:sanitized_version, :text, null: true)
|
||||
end
|
||||
|
||||
alter table(:modules) do
|
||||
modify :sanitized_name, :text, null: true
|
||||
modify(:sanitized_name, :text, null: true)
|
||||
end
|
||||
|
||||
alter table(:options) do
|
||||
modify :sanitized_name, :text, null: true
|
||||
modify(:sanitized_name, :text, null: true)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -9,27 +9,27 @@ defmodule AshHq.Repo.Migrations.MigrateResources16 do
|
|||
|
||||
def up do
|
||||
alter table(:options) do
|
||||
remove :sanitized_name
|
||||
remove(:sanitized_name)
|
||||
|
||||
add :sanitized_path, :text, null: false
|
||||
add(:sanitized_path, :text, null: false)
|
||||
end
|
||||
|
||||
alter table(:dsls) do
|
||||
remove :sanitized_name
|
||||
remove(:sanitized_name)
|
||||
|
||||
add :sanitized_path, :text, null: false
|
||||
add(:sanitized_path, :text, null: false)
|
||||
end
|
||||
end
|
||||
|
||||
def down do
|
||||
alter table(:dsls) do
|
||||
remove :sanitized_path
|
||||
add :sanitized_name, :text, null: false
|
||||
remove(:sanitized_path)
|
||||
add(:sanitized_name, :text, null: false)
|
||||
end
|
||||
|
||||
alter table(:options) do
|
||||
remove :sanitized_path
|
||||
add :sanitized_name, :text, null: false
|
||||
remove(:sanitized_path)
|
||||
add(:sanitized_name, :text, null: false)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -9,46 +9,48 @@ defmodule AshHq.Repo.Migrations.MigrateResources17 do
|
|||
|
||||
def up do
|
||||
create table(:users, primary_key: false) do
|
||||
add :id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true
|
||||
add :email, :citext, null: false
|
||||
add :confirmed_at, :utc_datetime_usec
|
||||
add :hashed_password, :text
|
||||
add :created_at, :utc_datetime_usec, null: false, default: fragment("now()")
|
||||
add :updated_at, :utc_datetime_usec, null: false, default: fragment("now()")
|
||||
add(:id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true)
|
||||
add(:email, :citext, null: false)
|
||||
add(:confirmed_at, :utc_datetime_usec)
|
||||
add(:hashed_password, :text)
|
||||
add(:created_at, :utc_datetime_usec, null: false, default: fragment("now()"))
|
||||
add(:updated_at, :utc_datetime_usec, null: false, default: fragment("now()"))
|
||||
end
|
||||
|
||||
create unique_index(:users, [:email], name: "users_unique_email_index")
|
||||
|
||||
create table(:user_tokens, primary_key: false) do
|
||||
add :id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true
|
||||
add :token, :binary
|
||||
add :context, :text
|
||||
add :sent_to, :text
|
||||
add :created_at, :utc_datetime_usec, null: false, default: fragment("now()")
|
||||
add(:id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true)
|
||||
add(:token, :binary)
|
||||
add(:context, :text)
|
||||
add(:sent_to, :text)
|
||||
add(:created_at, :utc_datetime_usec, null: false, default: fragment("now()"))
|
||||
|
||||
add :user_id,
|
||||
add(
|
||||
:user_id,
|
||||
references(:users,
|
||||
column: :id,
|
||||
name: "user_tokens_user_id_fkey",
|
||||
type: :uuid,
|
||||
prefix: "public"
|
||||
)
|
||||
)
|
||||
end
|
||||
|
||||
create unique_index(:user_tokens, [:context, :token], name: "user_tokens_token_context_index")
|
||||
end
|
||||
|
||||
def down do
|
||||
drop_if_exists unique_index(:user_tokens, [:context, :token],
|
||||
name: "user_tokens_token_context_index"
|
||||
drop_if_exists(
|
||||
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
|
|
@ -8,10 +8,11 @@ defmodule AshHq.Repo.Migrations.MigrateResources18 do
|
|||
use Ecto.Migration
|
||||
|
||||
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
|
||||
modify :user_id,
|
||||
modify(
|
||||
:user_id,
|
||||
references(:users,
|
||||
column: :id,
|
||||
prefix: "public",
|
||||
|
@ -20,20 +21,23 @@ defmodule AshHq.Repo.Migrations.MigrateResources18 do
|
|||
on_delete: :delete_all,
|
||||
on_update: :update_all
|
||||
)
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
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
|
||||
modify :user_id,
|
||||
modify(
|
||||
:user_id,
|
||||
references(:users,
|
||||
column: :id,
|
||||
prefix: "public",
|
||||
name: "user_tokens_user_id_fkey",
|
||||
type: :uuid
|
||||
)
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -9,13 +9,13 @@ defmodule AshHq.Repo.Migrations.MigrateResources19 do
|
|||
|
||||
def up do
|
||||
alter table(:guides) do
|
||||
remove :sanitized_name
|
||||
remove(:sanitized_name)
|
||||
end
|
||||
end
|
||||
|
||||
def down do
|
||||
alter table(:guides) do
|
||||
add :sanitized_name, :text, null: false
|
||||
add(:sanitized_name, :text, null: false)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -9,13 +9,13 @@ defmodule AshHq.Repo.Migrations.MigrateResources20 do
|
|||
|
||||
def up do
|
||||
alter table(:library_versions) do
|
||||
add :branch, :boolean, null: false, default: false
|
||||
add(:branch, :boolean, null: false, default: false)
|
||||
end
|
||||
end
|
||||
|
||||
def down do
|
||||
alter table(:library_versions) do
|
||||
remove :branch
|
||||
remove(:branch)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -9,23 +9,23 @@ defmodule AshHq.Repo.Migrations.MigrateResources21 do
|
|||
|
||||
def up do
|
||||
alter table(:library_versions) do
|
||||
remove :default_guide
|
||||
remove :branch
|
||||
remove(:default_guide)
|
||||
remove(:branch)
|
||||
end
|
||||
|
||||
alter table(:libraries) do
|
||||
remove :track_branches
|
||||
remove(:track_branches)
|
||||
end
|
||||
end
|
||||
|
||||
def down do
|
||||
alter table(:libraries) do
|
||||
add :track_branches, {:array, :text}
|
||||
add(:track_branches, {:array, :text})
|
||||
end
|
||||
|
||||
alter table(:library_versions) do
|
||||
add :branch, :boolean, null: false, default: false
|
||||
add :default_guide, :text
|
||||
add(:branch, :boolean, null: false, default: false)
|
||||
add(:default_guide, :text)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -9,7 +9,7 @@ defmodule AshHq.Repo.Migrations.AddLibraryOrder do
|
|||
|
||||
def up do
|
||||
alter table(:libraries) do
|
||||
add :order, :bigint, null: true
|
||||
add(:order, :bigint, null: true)
|
||||
end
|
||||
|
||||
execute("""
|
||||
|
@ -18,13 +18,13 @@ defmodule AshHq.Repo.Migrations.AddLibraryOrder do
|
|||
""")
|
||||
|
||||
alter table(:libraries) do
|
||||
modify :order, :bigint, null: false
|
||||
modify(:order, :bigint, null: false)
|
||||
end
|
||||
end
|
||||
|
||||
def down do
|
||||
alter table(:libraries) do
|
||||
remove :order
|
||||
remove(:order)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -12,6 +12,6 @@ defmodule AshHq.Repo.Migrations.MigrateResources22 do
|
|||
end
|
||||
|
||||
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
|
|
@ -9,13 +9,13 @@ defmodule AshHq.Repo.Migrations.MigrateResources23 do
|
|||
|
||||
def up do
|
||||
alter table(:modules) do
|
||||
remove :category_index
|
||||
remove(:category_index)
|
||||
end
|
||||
end
|
||||
|
||||
def down do
|
||||
alter table(:modules) do
|
||||
add :category_index, :bigint, null: false, default: 0
|
||||
add(:category_index, :bigint, null: false, default: 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -9,18 +9,18 @@ defmodule AshHq.Repo.Migrations.MigrateResources24 do
|
|||
|
||||
def up do
|
||||
create table(:emails, primary_key: false) do
|
||||
add :updated_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 :email, :citext, null: false
|
||||
add(:updated_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(:email, :citext, null: false)
|
||||
end
|
||||
|
||||
create unique_index(:emails, [:email], name: "emails_unique_email_index")
|
||||
end
|
||||
|
||||
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
|
|
@ -9,71 +9,71 @@ defmodule AshHq.Repo.Migrations.MigrateResources25 do
|
|||
|
||||
def up do
|
||||
alter table(:options) do
|
||||
modify :extension_id, :uuid, null: true
|
||||
modify :library_version_id, :uuid, null: true
|
||||
modify :dsl_id, :uuid, null: true
|
||||
modify(:extension_id, :uuid, null: true)
|
||||
modify(:library_version_id, :uuid, null: true)
|
||||
modify(:dsl_id, :uuid, null: true)
|
||||
end
|
||||
|
||||
alter table(:modules) do
|
||||
modify :library_version_id, :uuid, null: true
|
||||
modify(:library_version_id, :uuid, null: true)
|
||||
end
|
||||
|
||||
alter table(:library_versions) do
|
||||
modify :library_id, :uuid, null: true
|
||||
modify(:library_id, :uuid, null: true)
|
||||
end
|
||||
|
||||
alter table(:guides) do
|
||||
modify :library_version_id, :uuid, null: true
|
||||
modify(:library_version_id, :uuid, null: true)
|
||||
end
|
||||
|
||||
alter table(:functions) do
|
||||
modify :module_id, :uuid, null: true
|
||||
modify :library_version_id, :uuid, null: true
|
||||
add :heads_html, {:array, :text}
|
||||
modify(:module_id, :uuid, null: true)
|
||||
modify(:library_version_id, :uuid, null: true)
|
||||
add(:heads_html, {:array, :text})
|
||||
end
|
||||
|
||||
alter table(:extensions) do
|
||||
modify :library_version_id, :uuid, null: true
|
||||
modify(:library_version_id, :uuid, null: true)
|
||||
end
|
||||
|
||||
alter table(:dsls) do
|
||||
modify :extension_id, :uuid, null: true
|
||||
modify :library_version_id, :uuid, null: true
|
||||
modify(:extension_id, :uuid, null: true)
|
||||
modify(:library_version_id, :uuid, null: true)
|
||||
end
|
||||
end
|
||||
|
||||
def down do
|
||||
alter table(:dsls) do
|
||||
modify :library_version_id, :uuid, null: false
|
||||
modify :extension_id, :uuid, null: false
|
||||
modify(:library_version_id, :uuid, null: false)
|
||||
modify(:extension_id, :uuid, null: false)
|
||||
end
|
||||
|
||||
alter table(:extensions) do
|
||||
modify :library_version_id, :uuid, null: false
|
||||
modify(:library_version_id, :uuid, null: false)
|
||||
end
|
||||
|
||||
alter table(:functions) do
|
||||
remove :heads_html
|
||||
modify :library_version_id, :uuid, null: false
|
||||
modify :module_id, :uuid, null: false
|
||||
remove(:heads_html)
|
||||
modify(:library_version_id, :uuid, null: false)
|
||||
modify(:module_id, :uuid, null: false)
|
||||
end
|
||||
|
||||
alter table(:guides) do
|
||||
modify :library_version_id, :uuid, null: false
|
||||
modify(:library_version_id, :uuid, null: false)
|
||||
end
|
||||
|
||||
alter table(:library_versions) do
|
||||
modify :library_id, :uuid, null: false
|
||||
modify(:library_id, :uuid, null: false)
|
||||
end
|
||||
|
||||
alter table(:modules) do
|
||||
modify :library_version_id, :uuid, null: false
|
||||
modify(:library_version_id, :uuid, null: false)
|
||||
end
|
||||
|
||||
alter table(:options) do
|
||||
modify :dsl_id, :uuid, null: false
|
||||
modify :library_version_id, :uuid, null: false
|
||||
modify :extension_id, :uuid, null: false
|
||||
modify(:dsl_id, :uuid, null: false)
|
||||
modify(:library_version_id, :uuid, null: false)
|
||||
modify(:extension_id, :uuid, null: false)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -12,6 +12,6 @@ defmodule AshHq.Repo.Migrations.MigrateResources27 do
|
|||
end
|
||||
|
||||
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
|
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
|
||||
|
||||
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(path) do
|
||||
|
@ -395,7 +426,8 @@ case Enum.at(dsls, 0) do
|
|||
acc = %{
|
||||
doc: Utils.module_docs(dsl),
|
||||
guides: [],
|
||||
modules: []
|
||||
modules: [],
|
||||
mix_tasks: []
|
||||
}
|
||||
|
||||
acc =
|
||||
|
@ -419,6 +451,19 @@ case Enum.at(dsls, 0) do
|
|||
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 =
|
||||
extensions
|
||||
|> Enum.with_index()
|
||||
|
|
Loading…
Reference in a new issue