localspot/priv/repo/migrations/20251201042510_create_businesses.exs
Kevin Sivic e8fd635ddb Add Businesses context with A-Frame architecture
Phase 1 - Database foundation:
- Categories, businesses, hours, photos migrations
- Ecto schemas with changesets and validations

Phase 2 - Business logic:
- Logic module with pure functions (Haversine distance, slug generation, etc.)
- Queries module for database operations with filtering
- Businesses context coordinating Logic and Queries layers
- 43 tests covering logic and queries

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-30 23:55:29 -05:00

40 lines
1.2 KiB
Elixir

defmodule Localspot.Repo.Migrations.CreateBusinesses do
use Ecto.Migration
def change do
create table(:businesses) do
add :name, :string, null: false
add :slug, :string, null: false
add :description, :text
add :phone, :string
add :email, :string
add :website, :string
# Address fields
add :street_address, :string, null: false
add :city, :string, null: false
add :state, :string, null: false
add :zip_code, :string, null: false
# Location for radius search (Haversine)
add :latitude, :decimal, precision: 10, scale: 8
add :longitude, :decimal, precision: 11, scale: 8
# Local ownership
add :locally_owned, :boolean, default: true, null: false
# Status
add :active, :boolean, default: true, null: false
add :category_id, references(:categories, on_delete: :restrict), null: false
timestamps(type: :utc_datetime)
end
create unique_index(:businesses, [:slug])
create index(:businesses, [:category_id])
create index(:businesses, [:latitude, :longitude])
create index(:businesses, [:city, :state])
create index(:businesses, [:active])
end
end