Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
defmodule Demo.Repo.Migrations.AddUserPreferencesExtensions1 do
@moduledoc """
Installs any extensions that are mentioned in the repo's `installed_extensions/0` callback

This file was autogenerated with `mix ash_postgres.generate_migrations`
"""

use Ecto.Migration

def up do
execute("""
CREATE OR REPLACE FUNCTION ash_required(value ANYCOMPATIBLE, payload jsonb)
RETURNS ANYCOMPATIBLE AS $$
BEGIN
IF value IS NULL THEN
RETURN ash_raise_error(payload, value);
END IF;

RETURN value;
END;
$$ LANGUAGE plpgsql
STABLE
SET search_path = '';
""")
end

def down do
# Uncomment this if you actually want to uninstall the extensions
# when this migration is rolled back:
execute("DROP FUNCTION IF EXISTS ash_required(ANYCOMPATIBLE, jsonb)")
end
end
21 changes: 21 additions & 0 deletions dev/repo/migrations/20260801054138_add-user-preferences.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
defmodule :"Elixir.Demo.Repo.Migrations.Add-user-preferences" 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
alter table(:users) do
add(:preferences, :map)
end
end

def down do
alter table(:users) do
remove(:preferences)
end
end
end
9 changes: 5 additions & 4 deletions dev/repo/seeds.exs
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,17 @@
# SPDX-License-Identifier: MIT

defmodule Demo.Seeder do
require Ash.Query
alias Ash.Seed
alias Demo.Accounts.User
alias Demo.Accounts.{User, Preferences}
alias Demo.Tickets.{Customer, Organization, Representative, Ticket}

@spec insert_admin!(String.t(), String.t()) :: User.t()
def insert_admin!(first_name, last_name) do
Seed.seed!(User, %{
first_name: first_name,
last_name: last_name,
admin: true
admin: true,
preferences: Preferences.new!([])
})
end

Expand All @@ -28,7 +28,8 @@ defmodule Demo.Seeder do
history: history,
},
api_key: api_key,
alternate_profiles: []
alternate_profiles: [],
preferences: Preferences.new!([])
})
end

Expand Down
2 changes: 1 addition & 1 deletion dev/resource_snapshots/repo/extensions.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"ash_functions_version": 5,
"ash_functions_version": 6,
"installed": [
"uuid-ossp",
"pg_trgm",
Expand Down
295 changes: 295 additions & 0 deletions dev/resource_snapshots/repo/users/20260801054139.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,295 @@
{
"attributes": [
{
"allow_nil?": false,
"default": "fragment(\"gen_random_uuid()\")",
"generated?": false,
"precision": null,
"primary_key?": true,
"references": null,
"scale": null,
"size": null,
"source": "id",
"type": "uuid"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"precision": null,
"primary_key?": false,
"references": null,
"scale": null,
"size": null,
"source": "first_name",
"type": "text"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"precision": null,
"primary_key?": false,
"references": null,
"scale": null,
"size": null,
"source": "last_name",
"type": "text"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"precision": null,
"primary_key?": false,
"references": null,
"scale": null,
"size": null,
"source": "metadata",
"type": "map"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"precision": null,
"primary_key?": false,
"references": null,
"scale": null,
"size": null,
"source": "preferences",
"type": "map"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"precision": null,
"primary_key?": false,
"references": null,
"scale": null,
"size": null,
"source": "representative",
"type": "boolean"
},
{
"allow_nil?": false,
"default": "false",
"generated?": false,
"precision": null,
"primary_key?": false,
"references": null,
"scale": null,
"size": null,
"source": "admin",
"type": "boolean"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"precision": null,
"primary_key?": false,
"references": null,
"scale": null,
"size": null,
"source": "api_key",
"type": "text"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"precision": null,
"primary_key?": false,
"references": null,
"scale": null,
"size": null,
"source": "date_of_birth",
"type": "date"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"precision": null,
"primary_key?": false,
"references": null,
"scale": null,
"size": null,
"source": "profile",
"type": "map"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"precision": null,
"primary_key?": false,
"references": null,
"scale": null,
"size": null,
"source": "alternate_profiles",
"type": [
"array",
"map"
]
},
{
"allow_nil?": true,
"default": "\"type1\"",
"generated?": false,
"precision": null,
"primary_key?": false,
"references": null,
"scale": null,
"size": null,
"source": "type",
"type": "text"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"precision": null,
"primary_key?": false,
"references": null,
"scale": null,
"size": null,
"source": "types",
"type": [
"array",
"text"
]
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"precision": null,
"primary_key?": false,
"references": null,
"scale": null,
"size": null,
"source": "tags",
"type": [
"array",
"text"
]
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"precision": null,
"primary_key?": false,
"references": null,
"scale": null,
"size": null,
"source": "org",
"type": "text"
},
{
"allow_nil?": false,
"default": "fragment(\"(now() AT TIME ZONE 'utc')\")",
"generated?": false,
"precision": null,
"primary_key?": false,
"references": null,
"scale": null,
"size": null,
"source": "inserted_at",
"type": "utc_datetime_usec"
},
{
"allow_nil?": false,
"default": "fragment(\"(now() AT TIME ZONE 'utc')\")",
"generated?": false,
"precision": null,
"primary_key?": false,
"references": null,
"scale": null,
"size": null,
"source": "updated_at",
"type": "utc_datetime_usec"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"precision": null,
"primary_key?": false,
"references": null,
"scale": null,
"size": null,
"source": "photo_path",
"type": "text"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"precision": null,
"primary_key?": false,
"references": {
"deferrable": false,
"destination_attribute": "id",
"destination_attribute_default": null,
"destination_attribute_generated": null,
"index?": false,
"match_type": null,
"match_with": null,
"multitenancy": {
"attribute": null,
"global": null,
"strategy": null
},
"name": "users_organization_id_fkey",
"on_delete": null,
"on_update": null,
"primary_key?": true,
"schema": "public",
"table": "organizations"
},
"scale": null,
"size": null,
"source": "organization_id",
"type": "uuid"
}
],
"base_filter": null,
"check_constraints": [],
"create_table_options": null,
"custom_indexes": [],
"custom_statements": [],
"has_create_action": true,
"hash": "9258676BFB9C513CCF21E94ACED00C8626386FD19113366F39D964A5D2ACAA9A",
"identities": [
{
"all_tenants?": false,
"base_filter": "representative = true",
"index_name": "users_representative_name_index",
"keys": [
{
"type": "atom",
"value": "first_name"
},
{
"type": "atom",
"value": "last_name"
}
],
"name": "representative_name",
"nils_distinct?": true,
"where": null
}
],
"multitenancy": {
"attribute": "org",
"global": true,
"strategy": "attribute"
},
"repo": "Elixir.Demo.Repo",
"schema": null,
"table": "users"
}
Loading
Loading