defmodule MyFirstElixirVibeCode.Release do @moduledoc """ Used for executing DB release tasks when run in production without Mix installed. """ @app :my_first_elixir_vibe_code def create_db do load_app() for repo <- repos() do case repo.__adapter__.storage_up(repo.config) do :ok -> IO.puts("Database created for #{inspect(repo)}") {:error, :already_up} -> IO.puts("Database already exists for #{inspect(repo)}") {:error, term} -> IO.puts("Error creating database: #{inspect(term)}") end end end def migrate do load_app() for repo <- repos() do {:ok, _, _} = Ecto.Migrator.with_repo(repo, &Ecto.Migrator.run(&1, :up, all: true)) end end def rollback(repo, version) do load_app() {:ok, _, _} = Ecto.Migrator.with_repo(repo, &Ecto.Migrator.run(&1, :down, to: version)) end def seed_admin do load_app() for repo <- repos() do {:ok, _, _} = Ecto.Migrator.with_repo(repo, fn _repo -> # Check if admin user already exists case MyFirstElixirVibeCode.Repo.get_by(MyFirstElixirVibeCode.Accounts.User, username: "admin") do nil -> # Create admin user MyFirstElixirVibeCode.Accounts.create_user(%{ username: "admin", password: "admin123", is_admin: true }) IO.puts("Admin user created (username: admin, password: admin123)") _user -> IO.puts("Admin user already exists") end end) end end defp repos do Application.fetch_env!(@app, :ecto_repos) end defp load_app do Application.load(@app) end end