Skip to content

Commit 15858b6

Browse files
committed
make planet ids serial
1 parent 70e215c commit 15858b6

17 files changed

+35
-33
lines changed

lib/galaxies/accounts.ex

+16-9
Original file line numberDiff line numberDiff line change
@@ -174,22 +174,29 @@ defmodule Galaxies.Accounts do
174174
"""
175175
def register_player(attrs) do
176176
now = DateTime.utc_now()
177-
home_planet_id = Ecto.UUID.generate()
178177

179178
attrs =
180179
Enum.reduce(attrs, %{}, fn
181180
{key, value}, acc when is_atom(key) -> Map.put(acc, key, value)
182181
{key, value}, acc when is_binary(key) -> Map.put(acc, String.to_existing_atom(key), value)
183182
end)
184183

185-
player_changeset =
186-
Player.registration_changeset(
187-
%Player{},
188-
Map.put(attrs, :current_planet_id, home_planet_id)
189-
)
190-
191184
Ecto.Multi.new()
192-
|> Ecto.Multi.insert(:player, player_changeset)
185+
|> Ecto.Multi.run(:home_planet_id, fn repo, _changes ->
186+
query = "select nextval('planets_id_seq')"
187+
%{rows: [[id]]} = Ecto.Adapters.SQL.query!(repo, query)
188+
189+
{:ok, id}
190+
end)
191+
|> Ecto.Multi.run(:player, fn repo, %{home_planet_id: home_planet_id} ->
192+
player_changeset =
193+
Player.registration_changeset(
194+
%Player{},
195+
Map.put(attrs, :current_planet_id, home_planet_id)
196+
)
197+
198+
repo.insert(player_changeset)
199+
end)
193200
|> Ecto.Multi.run(:player_researches, fn repo, %{player: player} ->
194201
player_researches =
195202
repo.all(from(r in Research))
@@ -211,7 +218,7 @@ defmodule Galaxies.Accounts do
211218

212219
{:ok, nil}
213220
end)
214-
|> Ecto.Multi.insert(:planet, fn %{player: player} ->
221+
|> Ecto.Multi.insert(:planet, fn %{home_planet_id: home_planet_id, player: player} ->
215222
{galaxy, system, slot} = get_available_planet_slot()
216223

217224
player

lib/galaxies/accounts/player.ex

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ defmodule Galaxies.Accounts.Player do
1111
field :current_password, :string, virtual: true, redact: true
1212
field :hashed_password, :string, redact: true
1313
field :confirmed_at, :naive_datetime
14-
field :current_planet_id, :binary_id
14+
field :current_planet_id, :integer
1515

1616
has_many :planets, Galaxies.Planet
1717

lib/galaxies/planet.ex

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
defmodule Galaxies.Planet do
2-
use Galaxies.Schema
2+
use Ecto.Schema
33

44
import Ecto.Changeset
55

@@ -27,7 +27,7 @@ defmodule Galaxies.Planet do
2727
# image_id is used to refer to multiple planet images for the same planet type.
2828
field :image_id, :integer
2929

30-
belongs_to :player, Galaxies.Accounts.Player
30+
belongs_to :player, Galaxies.Accounts.Player, type: :binary_id
3131

3232
has_many :buildings, Galaxies.PlanetBuilding
3333
has_many :units, Galaxies.PlanetUnit

lib/galaxies/planet_building.ex

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ defmodule Galaxies.PlanetBuilding do
77
schema "planet_buildings" do
88
field :current_level, :integer
99

10-
belongs_to :planet, Galaxies.Planet, primary_key: true
10+
belongs_to :planet, Galaxies.Planet, primary_key: true, type: :integer
1111
belongs_to :building, Galaxies.Building, primary_key: true, type: :integer
1212

1313
timestamps(type: :utc_datetime_usec)

lib/galaxies/planet_unit.ex

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ defmodule Galaxies.PlanetUnit do
55
schema "planet_units" do
66
field :amount, :integer
77

8-
belongs_to :planet, Galaxies.Planet, primary_key: true
8+
belongs_to :planet, Galaxies.Planet, primary_key: true, type: :integer
99
belongs_to :unit, Galaxies.Unit, primary_key: true, type: :integer
1010

1111
timestamps(type: :utc_datetime_usec)

lib/galaxies/planets/enqueued_building.ex

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ defmodule Galaxies.Planets.EnqueuedBuilding do
1818
field :completed_at, :utc_datetime
1919

2020
belongs_to :building, Galaxies.Building, type: :integer
21-
belongs_to :planet, Galaxies.Planet
21+
belongs_to :planet, Galaxies.Planet, type: :integer
2222

2323
timestamps(type: :utc_datetime_usec)
2424
end

lib/galaxies/planets/planet_event.ex

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ defmodule Galaxies.Planets.PlanetEvent do
1818

1919
field :completed_at, :utc_datetime
2020

21-
belongs_to :planet, Galaxies.Planet
21+
belongs_to :planet, Galaxies.Planet, type: :integer
2222

2323
timestamps(updated_at: false, type: :utc_datetime)
2424
end

lib/galaxies/player_research.ex

+3-2
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@ defmodule Galaxies.PlayerResearch do
33

44
import Ecto.Changeset
55

6+
@primary_key false
67
schema "player_researches" do
78
field :current_level, :integer
89
field :is_upgrading, :boolean
910
field :upgrade_finished_at, :utc_datetime_usec
1011

11-
belongs_to :player, Galaxies.Accounts.Player
12-
belongs_to :research, Galaxies.Research, type: :integer
12+
belongs_to :player, Galaxies.Accounts.Player, primary_key: true
13+
belongs_to :research, Galaxies.Research, type: :integer, primary_key: true
1314

1415
timestamps(type: :utc_datetime_usec)
1516
end

lib/galaxies_web/live/fleet_live.ex

+1-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ defmodule GalaxiesWeb.FleetLive do
99
{:ok, assign(socket, first_step: @first_step, last_step: @last_step)}
1010
end
1111

12-
def handle_params(unsigned_params, _uri, socket) do
13-
dbg(unsigned_params)
12+
def handle_params(_unsigned_params, _uri, socket) do
1413
{:noreply, socket |> GalaxiesWeb.Common.mount_live_context() |> assign(:current_step, 1)}
1514
end
1615

lib/galaxies_web/live/resources_live.ex

+1-2
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@ defmodule GalaxiesWeb.ResourcesLive do
1818
socket
1919
|> assign(:build_queue, build_queue)
2020
|> assign(:planet_buildings, planet_buildings)
21-
|> assign(:building_timers, building_timers)
22-
|> dbg()}
21+
|> assign(:building_timers, building_timers)}
2322
end
2423

2524
defp timers_from_build_queue([]), do: %{}

lib/galaxies_web/live/shipyard_live.ex

-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ defmodule GalaxiesWeb.ShipyardLive do
66
def mount(_params, _session, socket) do
77
socket = GalaxiesWeb.Common.mount_live_context(socket)
88
planet_ships = Accounts.get_planet_ship_units(socket.assigns.current_planet)
9-
dbg(Enum.map(planet_ships, &Galaxies.Prerequisites.get_unit_prerequisites(&1.id)))
10-
# dbg(planet_ships)
119

1210
{:ok, assign(socket, :planet_ships, planet_ships)}
1311
end

priv/repo/migrations/20240124123636_create_planets_table.exs

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ defmodule Galaxies.Repo.Migrations.CreatePlanetsTable do
33

44
def change do
55
create table(:planets, primary_key: false) do
6-
add :id, :binary_id, primary_key: true
6+
add :id, :serial, primary_key: true
77
add :name, :string, size: 24, null: false
88

99
add :galaxy, :smallint, null: false

priv/repo/migrations/20240125090830_add_current_planet_id_to_players_table.exs

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ defmodule Galaxies.Repo.Migrations.AddCurrentPlanetIdToPlayersTable do
1515
def change do
1616
execute """
1717
ALTER TABLE players
18-
ADD COLUMN current_planet_id uuid
18+
ADD COLUMN current_planet_id serial
1919
CONSTRAINT players_current_planet_id_fk
2020
REFERENCES planets (id)
2121
DEFERRABLE INITIALLY DEFERRED;

priv/repo/migrations/20240126093746_create_buildings_table.exs

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ defmodule Galaxies.Repo.Migrations.CreateBuildingsTable do
2626
create index(:buildings, [:name, :list_order])
2727

2828
create table(:planet_buildings, primary_key: false) do
29-
add :planet_id, references(:planets, type: :binary_id, on_delete: :delete_all),
29+
add :planet_id, references(:planets, type: :serial, on_delete: :delete_all),
3030
null: false,
3131
primary_key: true
3232

priv/repo/migrations/20240127172200_create_researches_table.exs

-2
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ defmodule Galaxies.Repo.Migrations.CreateResearchesTable do
2323
create index(:researches, [:list_order])
2424

2525
create table(:player_researches, primary_key: false) do
26-
add :id, :binary_id, primary_key: true
27-
2826
add :player_id, references(:players, type: :binary_id, on_delete: :delete_all),
2927
null: false,
3028
primary_key: true

priv/repo/migrations/20240129163345_create_units_table.exs

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ defmodule Galaxies.Repo.Migrations.CreateUnitsTable do
3232
create index(:units, [:name, :list_order])
3333

3434
create table(:planet_units, primary_key: false) do
35-
add :planet_id, references(:planets, type: :binary_id, on_delete: :delete_all),
35+
add :planet_id, references(:planets, type: :serial, on_delete: :delete_all),
3636
null: false,
3737
primary_key: true
3838

priv/repo/migrations/20240131135434_create_planet_events_table.exs

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ defmodule Galaxies.Repo.Migrations.CreateEventQueueTables do
22
@moduledoc """
33
Defines an event queue to serialize all events happening on any given planet.
44
When wanting to move time forward for a given planet, the game can read from
5-
the planet event queue and execute all events by order. Processing the events
5+
the planet event queue and execute all events in order. Processing the events
66
for one planet does not affect any other events.
77
Keep in mind that player actions may cause events in the queue to be
88
cancelled (e.g. cancelling an attack) or postponed (sending more ships to an
@@ -13,7 +13,7 @@ defmodule Galaxies.Repo.Migrations.CreateEventQueueTables do
1313
def change do
1414
create table(:planet_events, primary_key: false) do
1515
add :id, :binary_id, primary_key: true
16-
add :planet_id, references(:planets, type: :binary_id, on_delete: :delete_all), null: false
16+
add :planet_id, references(:planets, type: :serial, on_delete: :delete_all), null: false
1717
# specifies which table to fetch event from (e.g. planet_building_queue, fleet, etc).
1818
add :type, :integer, null: false
1919
# event data is polymorphic and depends on event type
@@ -31,7 +31,7 @@ defmodule Galaxies.Repo.Migrations.CreateEventQueueTables do
3131

3232
create table(:planet_build_queue, primary_key: false) do
3333
add :id, :binary_id, primary_key: true
34-
add :planet_id, references(:planets, type: :binary_id, on_delete: :delete_all), null: false
34+
add :planet_id, references(:planets, type: :serial, on_delete: :delete_all), null: false
3535

3636
add :building_id, references(:buildings, on_delete: :delete_all), null: false
3737

0 commit comments

Comments
 (0)