Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
Rekkice committed Jan 15, 2025
1 parent 86d42fb commit ac1f400
Show file tree
Hide file tree
Showing 6 changed files with 457 additions and 3 deletions.
14 changes: 14 additions & 0 deletions tololo/lib/tololo/deliveries/comments.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
defmodule Tololo.Deliveries.Comments do
@moduledoc """
Helper functions related to the deliveries domain.
"""

@doc """
Generates a comment for a state change, based on the old and new state.
"""
def generate_comment(nil, "In_Preparation"), do: "La orden está siendo preparada."
def generate_comment("In_Preparation", "In_Delivery"), do: "La orden está en tránsito."
def generate_comment(_old_state, _new_state), do: "Comment"

# TODO add all possible states
end
20 changes: 18 additions & 2 deletions tololo/lib/tololo/deliveries/delivery.ex
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,23 @@ defmodule Tololo.Deliveries.Delivery do
end

actions do
defaults [:read]
defaults [:read, :create, :update, :destroy]

update :update_status do
accept [:state]

change fn changeset, _context ->
case Ash.Changeset.fetch_change(changeset, :state) do
{:ok, new_state} ->
comment = Helpers.generate_comment(changeset.state, new_state)
# create_state(changeset.state, new_state, comment)
changeset

:error ->
changeset
end
end
end
end

attributes do
Expand Down Expand Up @@ -45,7 +61,7 @@ defmodule Tololo.Deliveries.Delivery do
sensitive? true
end

attribute :from_name, :string
attribute :from_name, :string

attribute :to_latitude, :float do
sensitive? true
Expand Down
7 changes: 6 additions & 1 deletion tololo/lib/tololo/deliveries/delivery_state_changes.ex
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,13 @@ defmodule Tololo.Deliveries.DeliveryStateChanges do
repo Tololo.Repo
end

code_interface do
define :add_to_state_history, args: [:old_state, :new_state, :comment], action: :create
end

actions do
defaults [:read]
defaults [:read, :create, :destroy]
default_accept [:old_state, :new_state, :comment]
end

attributes do
Expand Down
102 changes: 102 additions & 0 deletions tololo/priv/repo/migrations/20250115145558_migrate_resources1.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
defmodule Tololo.Repo.Migrations.MigrateResources1 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(:delivery_state_changes, primary_key: false) do
add :id, :uuid, null: false, default: fragment("uuid_generate_v7()"), primary_key: true
add :old_state, :text
add :new_state, :text, null: false
add :comment, :text

add :inserted_at, :utc_datetime_usec,
null: false,
default: fragment("(now() AT TIME ZONE 'utc')")

add :updated_at, :utc_datetime_usec,
null: false,
default: fragment("(now() AT TIME ZONE 'utc')")

add :delivery_id, :uuid
end

create table(:deliveries, primary_key: false) do
add :id, :uuid, null: false, default: fragment("uuid_generate_v7()"), primary_key: true
end

alter table(:delivery_state_changes) do
modify :delivery_id,
references(:deliveries,
column: :id,
name: "delivery_state_changes_delivery_id_fkey",
type: :uuid,
prefix: "public"
)
end

alter table(:deliveries) do
add :state, :text, null: false
add :private_auth_key, :uuid, null: false
add :public_auth_key, :uuid, null: false
add :delivery_person, :map
add :delivery_order, :map
add :from_latitude, :float
add :from_longitude, :float
add :from_name, :text
add :to_latitude, :float
add :to_longitude, :float
add :to_name, :text
add :to_address, :text
add :to_phone, :text
add :to_notes, :text
add :delivery_started_at, :date
add :delivery_ended_at, :date

add :inserted_at, :utc_datetime_usec,
null: false,
default: fragment("(now() AT TIME ZONE 'utc')")

add :updated_at, :utc_datetime_usec,
null: false,
default: fragment("(now() AT TIME ZONE 'utc')")
end
end

def down do
alter table(:deliveries) do
remove :updated_at
remove :inserted_at
remove :delivery_ended_at
remove :delivery_started_at
remove :to_notes
remove :to_phone
remove :to_address
remove :to_name
remove :to_longitude
remove :to_latitude
remove :from_name
remove :from_longitude
remove :from_latitude
remove :delivery_order
remove :delivery_person
remove :public_auth_key
remove :private_auth_key
remove :state
end

drop constraint(:delivery_state_changes, "delivery_state_changes_delivery_id_fkey")

alter table(:delivery_state_changes) do
modify :delivery_id, :uuid
end

drop table(:deliveries)

drop table(:delivery_state_changes)
end
end
209 changes: 209 additions & 0 deletions tololo/priv/resource_snapshots/repo/deliveries/20250115145558.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,209 @@
{
"attributes": [
{
"allow_nil?": false,
"default": "fragment(\"uuid_generate_v7()\")",
"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": "state",
"type": "text"
},
{
"allow_nil?": false,
"default": "nil",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "private_auth_key",
"type": "uuid"
},
{
"allow_nil?": false,
"default": "nil",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "public_auth_key",
"type": "uuid"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "delivery_person",
"type": "map"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "delivery_order",
"type": "map"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "from_latitude",
"type": "float"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "from_longitude",
"type": "float"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "from_name",
"type": "text"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "to_latitude",
"type": "float"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "to_longitude",
"type": "float"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "to_name",
"type": "text"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "to_address",
"type": "text"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "to_phone",
"type": "text"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "to_notes",
"type": "text"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "delivery_started_at",
"type": "date"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "delivery_ended_at",
"type": "date"
},
{
"allow_nil?": false,
"default": "fragment(\"(now() AT TIME ZONE 'utc')\")",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "inserted_at",
"type": "utc_datetime_usec"
},
{
"allow_nil?": false,
"default": "fragment(\"(now() AT TIME ZONE 'utc')\")",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "updated_at",
"type": "utc_datetime_usec"
}
],
"base_filter": null,
"check_constraints": [],
"custom_indexes": [],
"custom_statements": [],
"has_create_action": true,
"hash": "07797B95D032B488017DBD554391227E4DBBC7C159C634855C71BAFEB0CD43DB",
"identities": [],
"multitenancy": {
"attribute": null,
"global": null,
"strategy": null
},
"repo": "Elixir.Tololo.Repo",
"schema": null,
"table": "deliveries"
}
Loading

0 comments on commit ac1f400

Please sign in to comment.